# Pagination
Navigate between multiple pages of content.
```tsx
import { faker } from '@faker-js/faker';
import { Pagination } from '@skeletonlabs/skeleton-react';
import { ArrowRightIcon, ArrowLeftIcon } from 'lucide-react';
import { useState } from 'react';
const users = Array.from({ length: 500 }, (_, i) => ({
	id: i + 1,
	name: faker.person.fullName(),
	email: faker.internet.email(),
	country: faker.location.country(),
}));
const PAGE_SIZE = 5;
export default function Default() {
	const [page, setPage] = useState(1);
	const start = (page - 1) * PAGE_SIZE;
	const end = start + PAGE_SIZE;
	const data = users.slice(start, end);
	return (
		
			
				
					
						| ID | 
						Name | 
						Email | 
						Country | 
					
				
				
					{data.map((user) => (
						
							| {user.id} | 
							{user.name} | 
							{user.email} | 
							{user.country} | 
						
					))}
				
			
			 setPage(event.page)}>
				
					
				
				
					{(pagination) =>
						pagination.pages.map((page, index) =>
							page.type === 'page' ? (
								
									{page.value}
								
							) : (
								
									…
								
							),
						)
					}
				
				
					
				
			
		 
	);
}
```
## Page Size
```tsx
import { faker } from '@faker-js/faker';
import { Pagination } from '@skeletonlabs/skeleton-react';
import { ArrowRightIcon, ArrowLeftIcon } from 'lucide-react';
import { useState } from 'react';
const users = Array.from({ length: 500 }, (_, i) => ({
	id: i + 1,
	name: faker.person.fullName(),
	email: faker.internet.email(),
	country: faker.location.country(),
}));
export default function Default() {
	const [page, setPage] = useState(1);
	const [pageSize, setPageSize] = useState(5);
	const start = (page - 1) * pageSize;
	const end = start + pageSize;
	const data = users.slice(start, end);
	return (
		
			
				
					
						| ID | 
						Name | 
						Email | 
						Country | 
					
				
				
					{data.map((user) => (
						
							| {user.id} | 
							{user.name} | 
							{user.email} | 
							{user.country} | 
						
					))}
				
			
			
				
				 setPage(event.page)}>
					
						
					
					
						{(pagination) =>
							pagination.pages.map((page, index) =>
								page.type === 'page' ? (
									
										{page.value}
									
								) : (
									
										…
									
								),
							)
						}
					
					
						
					
				
			 
		 
	);
}
```
## Direction
```tsx
import { faker } from '@faker-js/faker';
import { Pagination } from '@skeletonlabs/skeleton-react';
import { ArrowRightIcon, ArrowLeftIcon } from 'lucide-react';
import { useState } from 'react';
const users = Array.from({ length: 500 }, (_, i) => ({
	id: i + 1,
	name: faker.person.fullName(),
	email: faker.internet.email(),
	country: faker.location.country(),
}));
const PAGE_SIZE = 5;
export default function Dir() {
	const [page, setPage] = useState(1);
	const start = (page - 1) * PAGE_SIZE;
	const end = start + PAGE_SIZE;
	const data = users.slice(start, end);
	return (
		
			
				
					
						| ID | 
						Name | 
						Email | 
						Country | 
					
				
				
					{data.map((user) => (
						
							| {user.id} | 
							{user.name} | 
							{user.email} | 
							{user.country} | 
						
					))}
				
			
			 setPage(event.page)} dir="rtl">
				
					
				
				
					{(pagination) =>
						pagination.pages.map((page, index) =>
							page.type === 'page' ? (
								
									{page.value}
								
							) : (
								
									…
								
							),
						)
					}
				
				
					
				
			
		 
	);
}
```
## Total Count
For server-side pagination, your data source may be truncated. Make sure to specify the total records using `count`.
```json
{
	"data": [...],
	"pagination": {
		"page": 1,
		"limit": 10,
		"count": 500,
	}
}
```
{/* prettier-ignore */}
```tsx
	...
```
## API Reference
### PaginationRootProps
| Property          | Default  | Type                                                                                                                                                     | Description                                                                                                                      |
| ----------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| ids?              | -        | Partial\<\{ root: string; ellipsis: (index: number) => string; prevTrigger: string; nextTrigger: string; item: (page: number) => string; }> \| undefined | The ids of the elements in the accordion. Useful for composition.                                                                |
| translations?     | -        | IntlTranslations \| undefined                                                                                                                            | Specifies the localized strings that identifies the accessibility elements and their states                                      |
| count?            | -        | number \| undefined                                                                                                                                      | Total number of data items                                                                                                       |
| pageSize?         | -        | number \| undefined                                                                                                                                      | The controlled number of data items per page                                                                                     |
| defaultPageSize?  | 10       | number \| undefined                                                                                                                                      | The initial number of data items per page when rendered.
Use when you don't need to control the page size of the pagination. |
| siblingCount?     | 1        | number \| undefined                                                                                                                                      | Number of pages to show beside active page                                                                                       |
| page?             | -        | number \| undefined                                                                                                                                      | The controlled active page                                                                                                       |
| defaultPage?      | 1        | number \| undefined                                                                                                                                      | The initial active page when rendered.
Use when you don't need to control the active page of the pagination.                 |
| onPageChange?     | -        | ((details: PageChangeDetails) => void) \| undefined                                                                                                      | Called when the page number is changed                                                                                           |
| onPageSizeChange? | -        | ((details: PageSizeChangeDetails) => void) \| undefined                                                                                                  | Called when the page size is changed                                                                                             |
| type?             | "button" | "button" \| "link" \| undefined                                                                                                                          | The type of the trigger element                                                                                                  |
| getPageUrl?       | -        | ((details: PageUrlDetails) => string) \| undefined                                                                                                       | Function to generate href attributes for pagination links.
Only used when \`type\` is set to "link".                         |
| dir?              | "ltr"    | "ltr" \| "rtl" \| undefined                                                                                                                              | The document's text/writing direction.                                                                                           |
| getRootNode?      | -        | (() => ShadowRoot \| Node \| Document) \| undefined                                                                                                      | A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron.                                       |
| element?          | -        | ((attributes: HTMLAttributes\<"nav">) => Element) \| undefined                                                                                           | Render the element yourself                                                                                                      |
### PaginationRootProviderProps
| Property | Default | Type                                                           | Description                 |
| -------- | ------- | -------------------------------------------------------------- | --------------------------- |
| value    | -       | PaginationApi\                                      | -                           |
| element? | -       | ((attributes: HTMLAttributes\<"nav">) => Element) \| undefined | Render the element yourself |
### PaginationRootContextProps
| Property | Default | Type                                                 | Description |
| -------- | ------- | ---------------------------------------------------- | ----------- |
| children | -       | (pagination: PaginationApi\) => ReactNode | -           |
### PaginationPrevTriggerProps
| Property | Default | Type                                                              | Description                 |
| -------- | ------- | ----------------------------------------------------------------- | --------------------------- |
| element? | -       | ((attributes: HTMLAttributes\<"button">) => Element) \| undefined | Render the element yourself |
### PaginationItemProps
| Property | Default | Type                                                         | Description                 |
| -------- | ------- | ------------------------------------------------------------ | --------------------------- |
| type     | -       | "page"                                                       | -                           |
| value    | -       | number                                                       | -                           |
| element? | -       | ((attributes: HTMLAttributes\<"a">) => Element) \| undefined | Render the element yourself |
### PaginationEllipsisProps
| Property | Default | Type                                                            | Description                 |
| -------- | ------- | --------------------------------------------------------------- | --------------------------- |
| index    | -       | number                                                          | -                           |
| element? | -       | ((attributes: HTMLAttributes\<"span">) => Element) \| undefined | Render the element yourself |
### PaginationNextTriggerProps
| Property | Default | Type                                                              | Description                 |
| -------- | ------- | ----------------------------------------------------------------- | --------------------------- |
| element? | -       | ((attributes: HTMLAttributes\<"button">) => Element) \| undefined | Render the element yourself |