Overview
Page navigation component with 16 variants covering every real-world use case.
Default pagination
The active page is visually distinct while previous and next controls preserve browsing context.
Use pagination when a large result set must be split into stable, addressable pages. Keep filters and sort order unchanged while pages change.
Anatomy
- Input container and button group boundary.
- Visible page numbers, edge actions, and optional jump input.
- Optional table row-count selector and range display.
- Optional previous/next controls and compact states.
When to use
- For paginating long item lists, search results, or data tables.
- When users need quick access to nearby pages and clear positioning.
- Where table totals must remain visible and editable.
When not to use
- Avoid using for short lists that never overflow one screen.
- Prefer infinite scroll when users rarely need direct page jumps.
- Do not hide pagination when state changes dramatically on each interaction.
Variants
Choose a variant by style and surface density.
States
Common states include idle, hover, disabled, loading, and compact table states.
Behavior
Keep page controls predictable and focusable; validate jump input boundaries.
Accessibility
- Preserve keyboard flow and visible focus states.
- Use clear labels and accessible text for control actions.
- Keep active page changes announced for assistive users.
Content guidelines
- Keep button text concise and readable.
- Use meaningful page-size values in table modes.
- Keep total item labels stable and obvious.
Examples
Default
Solid filled active page button with ellipsis for large page counts
All variants
Every variant shown with page 3 of 10 — click to navigate
default — Solid filled active page button
outlined — Border on every page button
pill — Rounded pill buttons
simple — Minimal prev / next with page indicator
compact — Tight layout for dense UIs
underline — Underline indicator on active page
floating — Elevated panel with drop shadow
dark — Dark background for dark-mode dashboards
glass-card — Frosted glass panel
vercel — Vercel-style minimal with arrow buttons
notion — Notion-style page selector
linear — Linear-style dense row
github — GitHub-style outlined group
stripe — Stripe dashboard pagination
dots — Dot indicators for carousel or gallery style
segmented — Segmented control style
Jump to page
showJump adds a numeric input — type a page number and press Enter
First and last buttons
showFirstLast adds ⏮ and ⏭ jump-to-edge buttons
Table variant
Rows-per-page selector with item range label — built for data tables
Loading state
loading prop shows a skeleton placeholder while data is fetching
Props / API
Api Props
Props