Pagination
Allows the user to select a specific page from a range of pages.
Import
ts
import { Pagination } from "@kobalte/core/pagination";// orimport { Root, Item, ... } from "@kobalte/core/pagination";// or (deprecated)import { Pagination } from "@kobalte/core";
ts
import { Pagination } from "@kobalte/core/pagination";// orimport { Root, Item, ... } from "@kobalte/core/pagination";// or (deprecated)import { Pagination } from "@kobalte/core";
Features
- Labeling support for accessibility.
- Tab focus management.
- Can be controlled or uncontrolled.
- Customizable appearance.
Anatomy
The pagination consists of:
- Pagination: The root container for the pagination component.
- Pagination.Item: An item of the pagination.
- Pagination.Ellipsis: Ellipsis item of the pagination.
- Pagination.Previous: Previous button of the pagination.
- Pagination.Next: Next button of the pagination.
- Pagination.Items: Contains the list of items and allows a user to select one of them.
tsx
<Pagination><Pagination.Previous/><Pagination.Items/><Pagination.Next/></Select>
tsx
<Pagination><Pagination.Previous/><Pagination.Items/><Pagination.Next/></Select>
Example
Usage
Default value
An initial, uncontrolled page can be provided using the defaultPage
prop, which accepts a number smaller or equal to the count
and starts at 1.
tsx
<Paginationcount={10}defaultPage={4}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
tsx
<Paginationcount={10}defaultPage={4}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
Controlled value
The page
prop, which accepts a page number, can be used to make the value controlled. The onPageChange
event is fired when the user selects an item, and receives the new page number.
tsx
import { createSignal } from "solid-js";export function ControlledExample() {const [page, setPage] = createSignal(4);return (<Paginationpage={page()}onPageChange={setPage}count={10}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>);}
tsx
import { createSignal } from "solid-js";export function ControlledExample() {const [page, setPage] = createSignal(4);return (<Paginationpage={page()}onPageChange={setPage}count={10}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>);}
Next / Previous buttons example
The appearance can be customized by omitting the Next and Previous Button.
tsx
<Paginationcount={10}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Items /></Pagination>
tsx
<Paginationcount={10}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Items /></Pagination>
First / Last item example
The First and Last item can be hidden instead of displaying at all times.
tsx
<Paginationcount={10}showFirst={false}showLast={false}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
tsx
<Paginationcount={10}showFirst={false}showLast={false}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
Siblings example
The number of items around the current page item can be customized.
tsx
<Paginationcount={10}siblingCount={2}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
tsx
<Paginationcount={10}siblingCount={2}itemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
Fixed Items example
The total number of items can be fixed to avoid content shift. If ellipsis are disabled (by returning an empty component) use fixedItems="no-ellipsis"
instead.
tsx
<Paginationcount={10}fixedItemsitemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
tsx
<Paginationcount={10}fixedItemsitemComponent={props => <Pagination.Item page={props.page}>{props.page}</Pagination.Item>}ellipsisComponent={() => <Pagination.Ellipsis>...</Pagination.Ellipsis>}><Pagination.Previous>Previous</Pagination.Previous><Pagination.Items /><Pagination.Next>Next</Pagination.Next></Pagination>
API Reference
Pagination
Pagination
is equivalent to the Root
import from @kobalte/core/pagination
(and deprecated Pagination.Root
).
Prop | Description |
---|---|
page | number The controlled page number of the pagination. (1-indexed) |
defaultPage | string The default page number when initially rendered. (1-indexed) |
onPageChange | (page: number) => void Event handler called when the page number changes. |
count | number The number of pages for the pagination. |
siblingCount | number The number of siblings to show around the current page item. |
showFirst | boolean Whether to always show the first page item. |
showLast | boolean Whether to always show the last page item. |
fixedItems | boolean | "no-ellipsis" Whether to always show the same number of items (to avoid content shift). Special value: "no-ellipsis" does not count the ellipsis as an item (used when ellipsis are disabled). |
itemComponent | Component<{page: number}> The component to render as an item in the Pagination.Items . |
ellipsisComponent | Component The component to render as an ellipsis item in the Pagination.Items . |
disabled | boolean Whether the pagination is disabled. |
Data attribute | Description |
---|---|
data-disabled | Present when the pagination is disabled. |
Pagination.Item
Prop | Description |
---|---|
page | number The page number to render. |
Data attribute | Description |
---|---|
data-current | Present when the item is the current page. |
Rendered elements
Component | Default rendered element |
---|---|
Pagination | div |
Pagination.Item | button |
Pagination.Ellipsis | div |
Pagination.Previous | button |
Pagination.Next | button |
Pagination.Items | none |