Keyboard
No component-specific keymap. Inherits standard browser focus / activation behaviour.
Svelte 5 {@attach} factories. Glue ARIA / keyboard / focus onto any DOM node you choose. **Best when you want full control over markup and styling.**
<script lang="ts">
import { createAvatar } from '@kumiki/headless/avatar';
const ctl = createAvatar({});
</script>
<div {@attach ctl.root}>
<!-- your markup -->
</div>Compound components (<Root> / <Trigger> / …). Markup is fixed; styling is not. Same trade-off as a typical headless UI library.
pnpm add @kumiki/components<Avatar.Root name="Aiko Tanaka">
<Avatar.Image src={user.photo} />
<Avatar.Fallback />
</Avatar.Root><Avatar.Root decorative>
<Avatar.Image src={user.photo} />
<Avatar.Fallback>{initials(user.name)}</Avatar.Fallback>
</Avatar.Root>Styled, copy-paste presets (preview). Run pnpm kumiki add to drop the source into your project, then edit freely.
Live preview…
pnpm add @kumiki/atelier<script lang="ts">
import { Tailwind as Avatar } from '@kumiki/atelier/avatar';
</script>
<Avatar.Root size="md">
<Avatar.Image src="/u/123.jpg" alt="Akari Suzuki" />
<Avatar.Fallback>AS</Avatar.Fallback>
</Avatar.Root>/ accessibility
axe-core — run on every PR (LTR + RTL × every documented state).
No component-specific keymap. Inherits standard browser focus / activation behaviour.