omverse-ui

Menu

ComponentsExamplesGitHub

Getting started

IntroductionInstallationThemingDesign tokensDark mode

Form

ButtonInputSelectCheckboxRadioSwitchSlidernewDatePickernew

Display

AvatarBadgeCardChipAccordionProgressDivider

Navigation

NavbarBreadcrumbTabsPaginationStepper

Overlay

DialogTooltipToast

Other

IconIconButtonSpinner
ComponentsNavigationPagination

Pagination

Page navigation component with 17 variants covering every real-world use case.

17 variantsEllipsisJump to pageTableDotsLoading

Default

Live preview

Solid filled active page button with ellipsis for large page counts

App.tsx
tsx
1import { Pagination } from 'omverse-ui'
2 
3const [page, setPage] = useState(3);
4 
5<Pagination
6 page={page}
7 totalPages={10}
8 onPageChange={setPage}
9/>

All 17 variants

Live preview

Every variant shown with page 3 of 10 — click to navigate

defaultSolid filled active page button

outlinedBorder on every page button

pillRounded pill buttons

simpleMinimal prev / next with page indicator

compactTight layout for dense UIs

underlineUnderline indicator on active page

floatingElevated pill with drop shadow

darkDark background for dark-mode dashboards

glass-cardFrosted glass panel

vercelVercel-style minimal with arrow buttons

notionNotion-style page selector

linearLinear-style dense row

githubGitHub-style outlined group

stripeStripe dashboard pagination

dotsDot indicators — carousel / gallery style

segmentedSegmented control style

App.tsx
tsx
1// 17 visual variants
2<Pagination page={page} totalPages={10} onPageChange={setPage} variant="default" />
3<Pagination page={page} totalPages={10} onPageChange={setPage} variant="outlined" />
4<Pagination page={page} totalPages={10} onPageChange={setPage} variant="pill" />
5<Pagination page={page} totalPages={10} onPageChange={setPage} variant="simple" />
6<Pagination page={page} totalPages={10} onPageChange={setPage} variant="compact" />
7<Pagination page={page} totalPages={10} onPageChange={setPage} variant="underline" />
8<Pagination page={page} totalPages={10} onPageChange={setPage} variant="floating" />
9<Pagination page={page} totalPages={10} onPageChange={setPage} variant="dark" />
10<Pagination page={page} totalPages={10} onPageChange={setPage} variant="glass-card" />
11<Pagination page={page} totalPages={10} onPageChange={setPage} variant="vercel" />
12<Pagination page={page} totalPages={10} onPageChange={setPage} variant="notion" />
13<Pagination page={page} totalPages={10} onPageChange={setPage} variant="linear" />
14<Pagination page={page} totalPages={10} onPageChange={setPage} variant="github" />
15<Pagination page={page} totalPages={10} onPageChange={setPage} variant="stripe" />
16<Pagination page={page} totalPages={10} onPageChange={setPage} variant="dots" />
17<Pagination page={page} totalPages={10} onPageChange={setPage} variant="segmented" />

Jump to page

Live preview

showJump adds a numeric input — type a page number and press Enter

App.tsx
tsx
1// showJump adds a "Go to page" input
2<Pagination
3 page={page}
4 totalPages={10}
5 onPageChange={setPage}
6 showJump
7/>

First and last buttons

Live preview

showFirstLast adds ⏮ and ⏭ jump-to-edge buttons

App.tsx
tsx
1// showFirstLast adds ⏮ and ⏭ buttons
2<Pagination
3 page={page}
4 totalPages={10}
5 onPageChange={setPage}
6 showFirstLast
7/>

Table variant

Live preview

Rows-per-page selector with item range label — built for data tables

App.tsx
tsx
1<Pagination
2 page={page}
3 totalPages={10}
4 onPageChange={setPage}
5 variant="table"
6 totalItems={243}
7 rowsPerPage={rowsPerPage}
8 rowsPerPageOptions={[10, 25, 50, 100]}
9 onRowsPerPageChange={setRowsPerPage}
10/>

Loading state

Live preview

loading prop shows a skeleton placeholder while data is fetching

App.tsx
tsx
1// loading shows a skeleton placeholder
2<Pagination
3 page={page}
4 totalPages={10}
5 onPageChange={setPage}
6 loading
7/>

Props

PropTypeDefaultDescription
pagenumberCurrent page (1-indexed) — required
totalPagesnumberTotal number of pages — required
onPageChange(page: number) => voidCallback fired when the page changes — required
variant'default' | 'outlined' | 'pill' | 'simple' | 'compact' | 'underline' | 'floating' | 'dark' | 'glass-card' | 'vercel' | 'notion' | 'linear' | 'github' | 'stripe' | 'dots' | 'table' | 'segmented''default'Visual style
siblingsnumber1Number of sibling pages shown around the current page
showFirstLastbooleanfalseShow first and last page buttons
showPrevNextbooleantrueShow previous and next buttons
showJumpbooleanfalseShow a page jump input field
size'sm' | 'md' | 'lg''md'Button size
loadingbooleanfalseShows a skeleton loading state
rowsPerPagenumberundefinedCurrent rows per page (table variant)
rowsPerPageOptionsnumber[]undefinedOptions for rows-per-page selector (table variant)
totalItemsnumberundefinedTotal item count shown as range label (table variant)
onRowsPerPageChange(rows: number) => voidundefinedCallback when rows-per-page changes (table variant)