Pagination 
New
 Displays data in paged format and provides navigation between pages. 
vue
<script setup lang="ts">
import { Icon } from '@iconify/vue'
import { PaginationEllipsis, PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationNext, PaginationPrev, PaginationRoot } from 'radix-vue'
</script>
<template>
  <PaginationRoot :total="100" :sibling-count="1" show-edges :default-page="2">
    <PaginationList v-slot="{ items }" class="flex items-center gap-1 text-white">
      <PaginationFirst class="w-9 h-9  flex items-center justify-center  disabled:opacity-50  focus-within:outline focus-within:outline-1 focus-within:outline-offset-1 rounded">
        <Icon icon="radix-icons:double-arrow-left" />
      </PaginationFirst>
      <PaginationPrev class="w-9 h-9  flex items-center justify-center mr-4  disabled:opacity-50  focus-within:outline focus-within:outline-1 focus-within:outline-offset-1 rounded">
        <Icon icon="radix-icons:chevron-left" />
      </PaginationPrev>
      <template v-for="(page, index) in items">
        <PaginationListItem v-if="page.type === 'page'" :key="index" class="w-9 h-9 border rounded  data-[selected]:bg-white data-[selected]:text-blackA11 hover:bg-white/10 transition focus-within:outline focus-within:outline-1 focus-within:outline-offset-1" :value="page.value">
          {{ page.value }}
        </PaginationListItem>
        <PaginationEllipsis v-else :key="page.type" :index="index" class="w-9 h-9 flex items-center justify-center">
          …
        </PaginationEllipsis>
      </template>
      <PaginationNext class="w-9 h-9  flex items-center justify-center  ml-4 disabled:opacity-50  focus-within:outline focus-within:outline-1 focus-within:outline-offset-1 rounded">
        <Icon icon="radix-icons:chevron-right" />
      </PaginationNext>
      <PaginationLast class="w-9 h-9  flex items-center justify-center disabled:opacity-50  focus-within:outline focus-within:outline-1 focus-within:outline-offset-1 rounded">
        <Icon icon="radix-icons:double-arrow-right" />
      </PaginationLast>
    </PaginationList>
  </PaginationRoot>
</template>Features 
- Enable quick access to first, or last page
 - Enable to show edges constantly, or not
 
Installation 
Install the component from your command line.
bash
npm install radix-vueAnatomy 
Import all parts and piece them together.
vue
<script setup>
import { PaginationEllipsis, PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationNext, PaginationPrev, PaginationRoot } from 'radix-vue'
</script>
<template>
  <PaginationRoot>
    <PaginationList v-slot="{ items }">
      <PaginationFirst />
      <PaginationPrev />
      <template v-for="(page, index) in items">
        <PaginationListItem v-if="page.type === 'page'" :key="index" />
        <PaginationEllipsis v-else :key="page.type" :index="index">
          …
        </PaginationEllipsis>
      </template>
      <PaginationNext />
      <PaginationLast />
    </PaginationList>
  </PaginationRoot>
</template>API Reference 
Root 
Contains all of the paginations parts.
| Prop | Type | Default | 
|---|---|---|
page | number | |
defaultPage | number | 1 | 
total | number | 10 | 
itemsPerPage | number | 10 | 
siblingCount | number | 3 | 
showEdges | boolean | 
| Emit | Type | 
|---|---|
@update:page | (value: number) => void | 
List 
Used to show the list of pages. It also makes pagination accessible to assistive technologies.
| Prop | Type | Default | 
|---|---|---|
asChild | boolean | false | 
Item 
Used to render the button that changes the current page.
| Prop | Type | Default | 
|---|---|---|
value | number | |
asChild | boolean | false | 
| Data Attribute | Value | 
|---|---|
[data-selected] | "true" | "" | 
[data-type] | "page" | 
Ellipsis 
Placeholder element when the list is long, and only a small amount of siblingCount was set and showEdges was set to true.
| Prop | Type | Default | 
|---|---|---|
asChild | boolean | false | 
| Data Attribute | Value | 
|---|---|
[data-type] | "ellipsis" | 
First 
Triggers that set the page value to 1
| Prop | Type | Default | 
|---|---|---|
asChild | boolean | false | 
Prev 
Triggers that set the page value to the previous page
| Prop | Type | Default | 
|---|---|---|
asChild | boolean | false | 
Next 
Triggers that set the page value to the next page
| Prop | Type | Default | 
|---|---|---|
asChild | boolean | false | 
Last 
Triggers that set the page value to the last page
| Prop | Type | Default | 
|---|---|---|
asChild | boolean | false | 
Keyboard Interactions 
| Key | Description | 
|---|---|
Tab  | Moves focus to the next focusable element.  | 
Space  | 
        
          When focus is on a any trigger, trigger selected page or arrow navigation
          | 
Enter  | 
        
          When focus is on a any trigger, trigger selected page or arrow navigation
          |