GitHub

/ pagination

Pagination

@kumiki/headless/pagination

Svelte 5 attachments for Pagination — page-list math + <button> / <a href> factories.

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
Page-list controls
<script lang="ts">
  import { Tailwind as Pagination } from '@kumiki/atelier/pagination';
  let page = $state(1);
</script>

<Pagination.Root {page} pageCount={20} onPageChange={(p) => (page = p)}>
  <Pagination.Prev></Pagination.Prev>
  <Pagination.PageList>
    {#snippet item({ page: n, isCurrent, isEllipsis })}
      {#if isEllipsis}
        <Pagination.Ellipsis />
      {:else}
        <Pagination.PageItem page={n} data-current={isCurrent ? '' : undefined}>
          {n}
        </Pagination.PageItem>
      {/if}
    {/snippet}
  </Pagination.PageList>
  <Pagination.Next></Pagination.Next>
</Pagination.Root>

/ 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 ↗