Page controls for lists and tables with numbered pages or simple prev/next.
Introduction
Pagination provides previous/next controls and page numbers for lists and tables. Use numbered mode when you know the total page count, or mode="simple" for cursor-style APIs that only expose next/previous.
When to use: Paged tables, search results, and any list that splits into discrete pages. Prefer Link for a single destination and Tabs for switching peer views on the same level.
Use the framework selector in the site header to switch between React and Vue.
Import
import { Pagination } from "@bridge-ui/vue/Components/Pagination";import { Pagination } from "@bridge-ui/react/Components/Pagination";Basic usage
Pass count for the total number of pages. Control the page with page / onChange (React) or v-model (Vue). Pages are 1-based.
Variants
Choose the control style with variant: text (default), ghost, or outlined.
Rounded
rounded shapes ghost item corners and the outlined group / edge controls.
Siblings and boundaries
Tune the visible window with siblingCount (pages beside the current page) and boundaryCount (pages always shown at each end). Long ranges insert ellipsis placeholders.
Simple mode
For APIs that do not expose a total page count, set mode="simple" and drive availability with hasNext / hasPrevious plus onNext / onPrevious (React) or @next / @previous (Vue).
Sizes
Change density with size: sm, md (default), and lg.
Accessibility
- The root renders a nav with aria-label="Pagination" by default. Override with your own aria-label when the page has more than one pagination control.
- Page buttons use aria-label="Page N"; the current page also gets aria-current="page".
- Previous and next controls are named Previous and Next.
- Ellipsis placeholders are aria-hidden.
Anatomy
<nav aria-label="Pagination"> <!-- root -->
<ul> <!-- list -->
<li> <!-- previous -->
<button> <!-- prev control / slots.prev -->
<li> <!-- page or ellipsis -->
<button|li> <!-- page item / ellipsis -->
<li> <!-- next -->
<button> <!-- next control / slots.next -->
</ul>
</nav>Target parts with classes: root, list, item, prev, next, and ellipsis.
Related components
API
Pagination
| Prop | Type | Default | Description |
|---|---|---|---|
| mode | "numbered" \| "simple" | "numbered" | Numbered pages vs prev/next only. |
| count | number | — | Total pages (numbered mode). |
| page | number | — | Controlled page, 1-based (React numbered mode). |
| defaultPage | number | 1 | Uncontrolled initial page (React numbered mode). |
| modelValue | number | 1 | Bound page with v-model (Vue numbered mode). |
| onChange | (page: number) => void | — | Called when the page changes (React numbered mode). Vue emits change / update:modelValue. |
| siblingCount | number | 1 | Pages shown on each side of the current page. |
| boundaryCount | number | 1 | Pages always shown at the start and end. |
| hasNext | boolean | — | Whether next is available (mode="simple"). |
| hasPrevious | boolean | — | Whether previous is available (mode="simple"). |
| onNext | () => void | — | Called when next is activated in simple mode (React). Vue: @next. |
| onPrevious | () => void | — | Called when previous is activated in simple mode (React). Vue: @previous. |
| hidePrevButton | boolean | false | Hide the previous control. |
| hideNextButton | boolean | false | Hide the next control. |
| disabled | boolean | false | Disable all controls. |
| variant | PaginationVariant | "text" | Visual style: text, ghost, outlined. |
| color | PaginationColor | "primary" | Selected page accent color. |
| size | PaginationSize | "md" | Control size: sm, md, lg. |
| rounded | PaginationRounded | "md" | Corner radius for ghost items / outlined group edges. |
| classes | PaginationClasses | — | Classes for root, list, item, prev, next, ellipsis. |
| customProps | PaginationCustomProps | — | Extra props for root, list, item, prev, next, icons, and ellipsis. |
| slots | PaginationSlots | — | prev, next, ellipsis. |