GitHub

/ chips

Chips

@kumiki/headless/chips

Planned Svelte 5 attachments for Chips — three variants (static / dismissible / selectable) with keyboard activation + dismiss wiring.

This component, layer by layer

Styled, copy-paste presets (preview). Run pnpm kumiki add to drop the source into your project, then edit freely.

Live preview

Live preview…

Install
pnpm add @kumiki/atelier
Dismissible filter chips
<script lang="ts">
  import { Tailwind as Chips } from '@kumiki/atelier/chips';
  let tags = $state(['svelte', 'a11y', 'i18n']);
</script>

{#each tags as tag (tag)}
  <Chips.Root
    variant="dismissible"
    label={tag}
    onDismiss={() => (tags = tags.filter((t) => t !== tag))}
  >
    <Chips.Label>{tag}</Chips.Label>
    <Chips.Close />
  </Chips.Root>
{/each}

/ accessibility

Accessibility

axe-core — run on every PR (LTR + RTL × every documented state).

Keyboard

No component-specific keymap. Inherits standard browser focus / activation behaviour.

Test discipline

  • axe-core — run on every PR (LTR + RTL × every documented state).
  • APG keyboard tests — Playwright, hand-written per pattern.
  • VoiceOver / NVDA — Guidepup nightly schedule.
  • Type-level required names — title / aria-label / aria-labelledby.
Read the W3C ARIA APG pattern ↗