Pagination
Links or buttons for moving between pages of results.
- Browsers
- Chrome 123+Firefox 121+Safari 17.5+
- Tier
- 0
- Bundle compressed
- 2.59 kB
- Forced layout budget
- 0 ms
- Axe budget
- 0
- SSR compatible
- Yes
- Published contract
- Test harness
Playground
Pagination
API
Pagination.Root
| Prop | Type | Default | Description |
|---|---|---|---|
aria-label | string | "Pagination" | Accessible name of the navigation landmark. |
boundaryCount | number | 1 | Number of pages always shown at each end of the range. |
count* | number | — | Total number of pages. |
defaultPage | number | 1 | Page selected initially when the component is left uncontrolled. |
disabled | boolean | false | Disables every page and navigation control. |
onPageChange | (page: number) => void | — | Called with the new page number whenever the page changes. |
page | number | — | Current page, making the component controlled. |
showFirstLast | boolean | false | Adds first and last page controls to the generated items. |
siblingCount | number | 1 | Number of pages shown on each side of the current page. |
children | ReactNode | — | Custom item markup; when omitted the generated list of pages is rendered instead. |
getPageHref | (page: number) => string | — | Builds the href for each page so the server shell renders real links that work without JavaScript. |
render | ReactElement | ((props, state) => ReactElement) | — | Replace the rendered element while keeping behavior and accessibility wiring. |
Pagination.List
| Prop | Type | Default | Description |
|---|---|---|---|
children | ReactNode | — | Pagination items rendered inside the list. |
render | ReactElement | ((props, state) => ReactElement) | — | Replace the rendered element while keeping behavior and accessibility wiring. |
Pagination.Item
| Prop | Type | Default | Description |
|---|---|---|---|
children | ReactNode | — | Content of one pagination list item. |
render | ReactElement | ((props, state) => ReactElement) | — | Replace the rendered element while keeping behavior and accessibility wiring. |
Pagination.Link
| Prop | Type | Default | Description |
|---|---|---|---|
disabled | boolean | false | Disables the control and drops its href. |
getPageHref | (page: number) => string | — | Builds the href for this page, turning the control into a real link. |
page* | number | — | Page number this control selects. |
selected | boolean | false | Marks this page as the current one and sets aria-current on it. |
render | ReactElement | ((props, state) => ReactElement) | — | Replace the rendered element while keeping behavior and accessibility wiring. |
Pagination.Ellipsis
| Prop | Type | Default | Description |
|---|---|---|---|
children | ReactNode | — | Ellipsis content, hidden from assistive technology. |
render | ReactElement | ((props, state) => ReactElement) | — | Replace the rendered element while keeping behavior and accessibility wiring. |
Keyboard
| Key | Action |
|---|---|
| Tab | Move focus to/from the control |
| Enter / Space | Activate when focused (button-like controls) |
Accessibility
Uses semantic HTML where possible. Inspect rendered markup in the playground — ARIA is added only when native elements are insufficient.
Styling hooks
data-disabled