# Pagination URL: https://ark-ui.com/docs/components/pagination Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/components/pagination.mdx A navigation component that allows users to browse through pages. --- ## Anatomy To set up the pagination correctly, you'll need to understand its anatomy and how we name its parts. > Each part includes a `data-part` attribute to help identify them in the DOM. ## Examples Learn how to use the `Pagination` component in your project. Let's take a look at the most basic example: **Example: basic** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { Pagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const Basic = () => (
{(pagination) => pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), ) }
) ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination } from '@ark-ui/solid/pagination' import { For } from 'solid-js' import styles from 'styles/pagination.module.css' export const Basic = () => (
{(pagination) => ( {(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) } )}
) ``` #### Vue ```vue ``` #### Svelte ```svelte
{#snippet render(pagination)} {#each pagination().pages as page, index (index)} {#if page.type === 'page'} {page.value} {:else} {/if} {/each} {/snippet}
``` ### Controlled Pagination To create a controlled Pagination component, manage the state of the current page using the `page` prop and update it when the `onPageChange` event handler is called: **Example: controlled** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { useState } from 'react' import { Pagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const Controlled = () => { const [currentPage, setCurrentPage] = useState(1) return ( setCurrentPage(details.page)} className={styles.Root} >
{(pagination) => pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), ) }
) } ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination } from '@ark-ui/solid/pagination' import { For, createSignal } from 'solid-js' import styles from 'styles/pagination.module.css' export const Controlled = () => { const [currentPage, setCurrentPage] = createSignal(1) return ( setCurrentPage(details.page)} class={styles.Root} >
{(pagination) => ( {(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) } )}
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
{#snippet render(pagination)} {#each pagination().pages as page, index (index)} {#if page.type === 'page'} {page.value} {:else} {/if} {/each} {/snippet}
``` ### Customizing Pagination You can customize the Pagination component by setting various props such as `dir`, `pageSize`, `siblingCount`, and `translations`. Here's an example of a customized Pagination: **Example: customized** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { Pagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const Customized = () => ( `Page ${details.page}`, }} className={styles.Root} >
{(pagination) => pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), ) }
) ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination } from '@ark-ui/solid/pagination' import { For } from 'solid-js' import styles from 'styles/pagination.module.css' export const Customized = () => { return ( `Page ${details.page}`, }} class={styles.Root} >
{(pagination) => ( {(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) } )}
) } ``` #### Vue ```vue ``` #### Svelte ```svelte `Page ${details.page}`, }} class={styles.Root} >
{#snippet render(pagination)} {#each pagination().pages as page, index (index)} {#if page.type === 'page'} {page.value} {:else} {/if} {/each} {/snippet}
``` ### Using Context The `Context` component provides access to the pagination state and methods through a render prop pattern. This allows you to access methods like `setPage`, `setPageSize`, `goToNextPage`, `goToPrevPage`, `goToFirstPage`, `goToLastPage`, as well as properties like `totalPages` and `pageRange`. **Example: context** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon } from 'lucide-react' import { Pagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const Context = () => { return ( {(pagination) => (

Page {pagination.page} of {pagination.totalPages}

)}
) } ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon } from 'lucide-solid' import { Pagination } from '@ark-ui/solid/pagination' import styles from 'styles/pagination.module.css' export const Context = () => { return ( {(pagination) => (

Page {pagination().page} of {pagination().totalPages}

)}
) } ``` #### Vue ```vue ``` #### Svelte ```svelte {#snippet render(pagination)}

Page {pagination().page} of {pagination().totalPages}

{/snippet}
``` ### Data Slicing Use the `slice()` method to paginate actual data arrays. This method automatically slices your data based on the current page and page size. **Example: data-slicing** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { Pagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' const users = [ { id: 1, name: 'Emma Wilson', email: 'emma@example.com' }, { id: 2, name: 'Liam Johnson', email: 'liam@example.com' }, { id: 3, name: 'Olivia Brown', email: 'olivia@example.com' }, { id: 4, name: 'Noah Davis', email: 'noah@example.com' }, { id: 5, name: 'Ava Martinez', email: 'ava@example.com' }, { id: 6, name: 'Ethan Garcia', email: 'ethan@example.com' }, { id: 7, name: 'Sophia Rodriguez', email: 'sophia@example.com' }, { id: 8, name: 'Mason Lee', email: 'mason@example.com' }, { id: 9, name: 'Isabella Walker', email: 'isabella@example.com' }, { id: 10, name: 'James Hall', email: 'james@example.com' }, { id: 11, name: 'Mia Allen', email: 'mia@example.com' }, { id: 12, name: 'Benjamin Young', email: 'benjamin@example.com' }, { id: 13, name: 'Charlotte King', email: 'charlotte@example.com' }, { id: 14, name: 'William Wright', email: 'william@example.com' }, { id: 15, name: 'Amelia Scott', email: 'amelia@example.com' }, { id: 16, name: 'Henry Green', email: 'henry@example.com' }, { id: 17, name: 'Harper Adams', email: 'harper@example.com' }, { id: 18, name: 'Sebastian Baker', email: 'sebastian@example.com' }, { id: 19, name: 'Evelyn Nelson', email: 'evelyn@example.com' }, { id: 20, name: 'Jack Carter', email: 'jack@example.com' }, ] export const DataSlicing = () => { return ( {(pagination) => ( <>
{pagination.slice(users).map((user) => (
{user.name} {user.email}
))}
{pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), )}
)}
) } ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination } from '@ark-ui/solid/pagination' import { For } from 'solid-js' import styles from 'styles/pagination.module.css' const users = [ { id: 1, name: 'Emma Wilson', email: 'emma@example.com' }, { id: 2, name: 'Liam Johnson', email: 'liam@example.com' }, { id: 3, name: 'Olivia Brown', email: 'olivia@example.com' }, { id: 4, name: 'Noah Davis', email: 'noah@example.com' }, { id: 5, name: 'Ava Martinez', email: 'ava@example.com' }, { id: 6, name: 'Ethan Garcia', email: 'ethan@example.com' }, { id: 7, name: 'Sophia Rodriguez', email: 'sophia@example.com' }, { id: 8, name: 'Mason Lee', email: 'mason@example.com' }, { id: 9, name: 'Isabella Walker', email: 'isabella@example.com' }, { id: 10, name: 'James Hall', email: 'james@example.com' }, { id: 11, name: 'Mia Allen', email: 'mia@example.com' }, { id: 12, name: 'Benjamin Young', email: 'benjamin@example.com' }, { id: 13, name: 'Charlotte King', email: 'charlotte@example.com' }, { id: 14, name: 'William Wright', email: 'william@example.com' }, { id: 15, name: 'Amelia Scott', email: 'amelia@example.com' }, { id: 16, name: 'Henry Green', email: 'henry@example.com' }, { id: 17, name: 'Harper Adams', email: 'harper@example.com' }, { id: 18, name: 'Sebastian Baker', email: 'sebastian@example.com' }, { id: 19, name: 'Evelyn Nelson', email: 'evelyn@example.com' }, { id: 20, name: 'Jack Carter', email: 'jack@example.com' }, ] export const DataSlicing = () => { return ( {(pagination) => ( <>
{(user) => (
{user.name} {user.email}
)}
{(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) }
)}
) } ``` #### Vue ```vue ``` #### Svelte ```svelte {#snippet render(pagination)}
{#each pagination().slice(users) as user (user.id)}
{user.name} {user.email}
{/each}
{#each pagination().pages as page, index} {#if page.type === 'page'} {page.value} {:else} {/if} {/each}
{/snippet}
``` ### Page Range Display Display the current page range information using the `pageRange` property. This shows which items are currently visible (e.g., "Showing 1-10 of 100 results"). **Example: page-range** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { Pagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const PageRange = () => { return ( {(pagination) => ( <>
{pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), )}

Showing {pagination.pageRange.start + 1}-{pagination.pageRange.end} of {pagination.count} results

Page {pagination.page} of {pagination.totalPages}

)}
) } ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination } from '@ark-ui/solid/pagination' import { For } from 'solid-js' import styles from 'styles/pagination.module.css' export const PageRange = () => { return ( {(pagination) => ( <>
{(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) }

Showing {pagination().pageRange.start + 1}-{pagination().pageRange.end} of {pagination().count} results

Page {pagination().page} of {pagination().totalPages}

)}
) } ``` #### Vue ```vue ``` #### Svelte ```svelte {#snippet render(pagination)}
{#each pagination().pages as page, index} {#if page.type === 'page'} {page.value} {:else} {/if} {/each}

Showing {pagination().pageRange.start + 1}-{pagination().pageRange.end} of {pagination() .count} results

Page {pagination().page} of {pagination().totalPages}

{/snippet}
``` ### Page Size Control Control the number of items per page dynamically using `setPageSize()`. This example shows how to integrate a native select element to change the page size. > **Note:** For uncontrolled behavior, use `defaultPageSize` to set the initial value. For controlled behavior, use > `pageSize` and `onPageSizeChange` to programmatically manage the page size. **Example: page-size-control** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { Pagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const PageSizeControl = () => { return ( {(pagination) => ( <>
{pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), )}

Page {pagination.page} of {pagination.totalPages}

)}
) } ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination } from '@ark-ui/solid/pagination' import { For } from 'solid-js' import styles from 'styles/pagination.module.css' export const PageSizeControl = () => { return ( {(pagination) => ( <>
{(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) }

Page {pagination().page} of {pagination().totalPages}

)}
) } ``` #### Vue ```vue ``` #### Svelte ```svelte {#snippet render(pagination)}
{#each pagination().pages as page, index} {#if page.type === 'page'} {page.value} {:else} {/if} {/each}

Page {pagination().page} of {pagination().totalPages}

{/snippet}
``` ### Link Pagination Create pagination with link navigation for better SEO and accessibility. This example shows how to use the pagination component with anchor links instead of buttons. **Example: link** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { Pagination, usePagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const Link = () => { const pagination = usePagination({ type: 'link', count: 100, pageSize: 10, siblingCount: 2, getPageUrl: ({ page }) => `/page=${page}`, }) return (
{pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), )}
) } ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination, usePagination } from '@ark-ui/solid/pagination' import { For } from 'solid-js' import styles from 'styles/pagination.module.css' export const Link = () => { const pagination = usePagination({ type: 'link', count: 100, pageSize: 10, siblingCount: 2, getPageUrl: ({ page }) => `/page=${page}`, }) return (
{(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) }
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
{#each pagination().pages as page, index (index)} {#if page.type === 'page'} {page.value} {:else} {/if} {/each}
``` ### Root Provider The `RootProvider` component provides a context for the pagination. It accepts the value of the `usePagination` hook. You can leverage it to access the component state and methods from outside the pagination. **Example: root-provider** #### React ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' import { Pagination, usePagination } from '@ark-ui/react/pagination' import styles from 'styles/pagination.module.css' export const RootProvider = () => { const pagination = usePagination({ count: 5000, pageSize: 10, siblingCount: 2 }) return (
{(pagination) => pagination.pages.map((page, index) => page.type === 'page' ? ( {page.value} ) : ( ), ) }
) } ``` #### Solid ```tsx import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-solid' import { Pagination, usePagination } from '@ark-ui/solid/pagination' import { For } from 'solid-js' import styles from 'styles/pagination.module.css' export const RootProvider = () => { const pagination = usePagination({ count: 5000, pageSize: 10, siblingCount: 2 }) return (
{(pagination) => ( {(page, index) => page.type === 'page' ? ( {page.value} ) : ( ) } )}
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
{#each pagination().pages as page, index (index)} {#if page.type === 'page'} {page.value} {:else} {/if} {/each}
``` > If you're using the `RootProvider` component, you don't need to use the `Root` component. ## API Reference ### Props **Component API Reference** #### React **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `count` | `number` | No | Total number of data items | | `defaultPage` | `number` | No | The initial active page when rendered. Use when you don't need to control the active page of the pagination. | | `defaultPageSize` | `number` | No | The initial number of data items per page when rendered. Use when you don't need to control the page size of the pagination. | | `getPageUrl` | `(details: PageUrlDetails) => string` | No | Function to generate href attributes for pagination links. Only used when `type` is set to "link". | | `ids` | `Partial<{ root: string ellipsis: (index: number) => string prevTrigger: string nextTrigger: string item: (page: number) => string }>` | No | The ids of the elements in the accordion. Useful for composition. | | `onPageChange` | `(details: PageChangeDetails) => void` | No | Called when the page number is changed | | `onPageSizeChange` | `(details: PageSizeChangeDetails) => void` | No | Called when the page size is changed | | `page` | `number` | No | The controlled active page | | `pageSize` | `number` | No | The controlled number of data items per page | | `siblingCount` | `number` | No | Number of pages to show beside active page | | `translations` | `IntlTranslations` | No | Specifies the localized strings that identifies the accessibility elements and their states | | `type` | `'button' | 'link'` | No | The type of the trigger element | **Ellipsis Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `index` | `number` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Item Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `type` | `'page'` | Yes | | | `value` | `number` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Item Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | item | | `[data-index]` | The index of the item | | `[data-selected]` | Present when selected | **NextTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **NextTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | next-trigger | | `[data-disabled]` | Present when disabled | **PrevTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **PrevTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | prev-trigger | | `[data-disabled]` | Present when disabled | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `UsePaginationReturn` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Solid **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'nav'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `count` | `number` | No | Total number of data items | | `defaultPage` | `number` | No | The initial active page when rendered. Use when you don't need to control the active page of the pagination. | | `defaultPageSize` | `number` | No | The initial number of data items per page when rendered. Use when you don't need to control the page size of the pagination. | | `getPageUrl` | `(details: PageUrlDetails) => string` | No | Function to generate href attributes for pagination links. Only used when `type` is set to "link". | | `ids` | `Partial<{ root: string ellipsis: (index: number) => string prevTrigger: string nextTrigger: string item: (page: number) => string }>` | No | The ids of the elements in the accordion. Useful for composition. | | `onPageChange` | `(details: PageChangeDetails) => void` | No | Called when the page number is changed | | `onPageSizeChange` | `(details: PageSizeChangeDetails) => void` | No | Called when the page size is changed | | `page` | `number` | No | The controlled active page | | `pageSize` | `number` | No | The controlled number of data items per page | | `siblingCount` | `number` | No | Number of pages to show beside active page | | `translations` | `IntlTranslations` | No | Specifies the localized strings that identifies the accessibility elements and their states | | `type` | `'link' | 'button'` | No | The type of the trigger element | **Ellipsis Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `index` | `number` | Yes | | | `asChild` | `(props: ParentProps<'div'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Item Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `type` | `'page'` | Yes | | | `value` | `number` | Yes | | | `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Item Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | item | | `[data-index]` | The index of the item | | `[data-selected]` | Present when selected | **NextTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **NextTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | next-trigger | | `[data-disabled]` | Present when disabled | **PrevTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **PrevTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | prev-trigger | | `[data-disabled]` | Present when disabled | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `UsePaginationReturn` | Yes | | | `asChild` | `(props: ParentProps<'nav'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Vue **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `count` | `number` | No | Total number of data items | | `defaultPage` | `number` | No | The initial active page when rendered. Use when you don't need to control the active page of the pagination. | | `defaultPageSize` | `number` | No | The initial number of data items per page when rendered. Use when you don't need to control the page size of the pagination. | | `getPageUrl` | `(details: PageUrlDetails) => string` | No | Function to generate href attributes for pagination links. Only used when `type` is set to "link". | | `id` | `string` | No | The unique identifier of the machine. | | `ids` | `Partial<{ root: string ellipsis(index: number): string prevTrigger: string nextTrigger: string item(page: number): string }>` | No | The ids of the elements in the accordion. Useful for composition. | | `page` | `number` | No | The controlled active page | | `pageSize` | `number` | No | The controlled number of data items per page | | `siblingCount` | `number` | No | Number of pages to show beside active page | | `translations` | `IntlTranslations` | No | Specifies the localized strings that identifies the accessibility elements and their states | | `type` | `'button' | 'link'` | No | The type of the trigger element | **Ellipsis Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `index` | `number` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Item Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `type` | `'page'` | Yes | | | `value` | `number` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **Item Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | item | | `[data-index]` | The index of the item | | `[data-selected]` | Present when selected | **NextTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **NextTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | next-trigger | | `[data-disabled]` | Present when disabled | **PrevTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | **PrevTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | prev-trigger | | `[data-disabled]` | Present when disabled | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `PaginationApi` | Yes | | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Svelte **Root Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'nav'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `count` | `number` | No | Total number of data items | | `defaultPage` | `number` | No | The initial active page when rendered. Use when you don't need to control the active page of the pagination. | | `defaultPageSize` | `number` | No | The initial number of data items per page when rendered. Use when you don't need to control the page size of the pagination. | | `getPageUrl` | `(details: PageUrlDetails) => string` | No | Function to generate href attributes for pagination links. Only used when `type` is set to "link". | | `id` | `string` | No | The unique identifier of the machine. | | `ids` | `Partial<{ root: string ellipsis: (index: number) => string prevTrigger: string nextTrigger: string item: (page: number) => string }>` | No | The ids of the elements in the accordion. Useful for composition. | | `onPageChange` | `(details: PageChangeDetails) => void` | No | Called when the page number is changed | | `onPageSizeChange` | `(details: PageSizeChangeDetails) => void` | No | Called when the page size is changed | | `page` | `number` | No | The controlled active page | | `pageSize` | `number` | No | The controlled number of data items per page | | `ref` | `Element` | No | | | `siblingCount` | `number` | No | Number of pages to show beside active page | | `translations` | `IntlTranslations` | No | Specifies the localized strings that identifies the accessibility elements and their states | | `type` | `'button' | 'link'` | No | The type of the trigger element | **Context Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `render` | `Snippet<[UsePaginationContext]>` | Yes | | **Ellipsis Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `index` | `number` | Yes | | | `asChild` | `Snippet<[PropsFn<'div'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Item Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `type` | `'page'` | Yes | | | `value` | `number` | Yes | | | `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **Item Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | item | | `[data-index]` | The index of the item | | `[data-selected]` | Present when selected | **NextTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **NextTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | next-trigger | | `[data-disabled]` | Present when disabled | **PrevTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | **PrevTrigger Data Attributes:** | Attribute | Value | |-----------|-------| | `[data-scope]` | pagination | | `[data-part]` | prev-trigger | | `[data-disabled]` | Present when disabled | **RootProvider Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `value` | `UsePaginationReturn` | Yes | | | `asChild` | `Snippet<[PropsFn<'nav'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | | ### Context These are the properties available when using `Pagination.Context`, `usePaginationContext` hook or `usePagination` hook. **API:** | Property | Type | Description | |----------|------|-------------| | `page` | `number` | The current page. | | `count` | `number` | The total number of data items. | | `pageSize` | `number` | The number of data items per page. | | `totalPages` | `number` | The total number of pages. | | `pages` | `Pages` | The page range. Represented as an array of page numbers (including ellipsis) | | `previousPage` | `number` | The previous page. | | `nextPage` | `number` | The next page. | | `pageRange` | `PageRange` | The page range. Represented as an object with `start` and `end` properties. | | `slice` | `(data: V[]) => V[]` | Function to slice an array of data based on the current page. | | `setPageSize` | `(size: number) => void` | Function to set the page size. | | `setPage` | `(page: number) => void` | Function to set the current page. | | `goToNextPage` | `VoidFunction` | Function to go to the next page. | | `goToPrevPage` | `VoidFunction` | Function to go to the previous page. | | `goToFirstPage` | `VoidFunction` | Function to go to the first page. | | `goToLastPage` | `VoidFunction` | Function to go to the last page. |