Manual UI Templates Pagination

Pagination

elements man ui/templates/pagination

Page numbers with previous and next, from a page count or composed from parts.

Example
import { Pagination } from "@elements/ui/pagination"; <Pagination page={state.page} total={20} /> <Pagination page={current} total={20} href={(p) => `/orders?page=${p}`} />

Parts

Part What it is
Pagination The nav landmark. With total it renders the whole control; without, its slot.
PaginationContent The list of items.
PaginationItem One list item.
PaginationLink A page link. active marks the current page.
PaginationPrevious Link to the previous page: a chevron and text.
PaginationNext Link to the next page: text and a chevron.
PaginationEllipsis Marks skipped pages; reads as "More pages".

Attributes

Pagination

Attribute Type Default Description
page number (two-way) 1 The current page, from startValue (1). Shown within startValue..total when it falls outside, as after total shrinks.
total number | undefined undefined The page count. 0 (no results) keeps Previous and Next, disabled, so the pager holds its place. Omitted renders the slot for a composed pagination.
siblings number 1 Pages shown either side of the current one.
boundaries number 1 Pages kept at each end.
href (page: number) => string undefined Renders links with these targets. Without it the pages are buttons.
controls boolean true Show Previous and Next.
numbers boolean true Show page numbers. false shows "Page N of M" between the controls.
edges boolean false Show First and Last.
startValue number 1 The first page number: pages run from startValue to total.
size "sm" | "md" | "lg" "md" Control size.
variant "text" | "outlined" "text" outlined: a border on every page and control; the current page takes the accent border.
color "standard" | "primary" | "secondary" "standard" primary or secondary fills the current page with that button color.
shape "rounded" | "circular" "rounded" circular: round pages and controls.
layout "default" | "responsive" "default" responsive: in a narrow container, Page X of Y (statusText) replaces the page numbers.
label string "Pagination" aria-label of the nav.
previousText string "Previous" Previous control text.
nextText string "Next" Next control text.
getItemLabel (kind: "first" | "previous" | "next" | "last" | "page", page: number) => string undefined The aria-label of each control and page, for translation. page is the page the item goes to. Without it, English labels; translated control text with no label is the control's name.
statusText (page: number, total: number) => string Page N of M The status between the controls when numbers is false, for translation.
disabled boolean false Turns off every page and control: aria-disabled, no href, presses ignored.
hideWithOnePage boolean false Renders nothing when total is 1, so a one-page list shows no pager.
onPageChange (page: number) => void () => {} Called when the user changes the page. Not called for changes the caller makes.
class string "" Extra classes. Every part takes class.

PaginationLink

Attribute Type Default Description
href string "" The page's URL. Also on PaginationPrevious and PaginationNext.
active boolean false The current page: outline look, aria-current="page".
size "sm" | "md" | "icon" "icon" icon is a square for a number; md and sm fit text.
disabled boolean false No href, aria-disabled, clicks ignored. Also on PaginationPrevious and PaginationNext.
attrs Record<string, string | number | boolean | undefined> {} Other attributes for the anchor. Also on PaginationPrevious and PaginationNext.
onclick (e: MouseEvent) => void () => {} Click handler. Also on PaginationPrevious and PaginationNext.

PaginationPrevious

Attribute Type Default Description
text string "Previous" / "Next" The control text, for translation. Also on PaginationNext.
label string "" The aria-label. Empty: "Go to previous page" for the English text, or the text itself once it is translated. Also on PaginationNext.

Slots

Slot Part Content
default Pagination A PaginationContent, when total is 0.
first-icon Pagination An Icon that replaces First's chevrons. Also previous-icon, next-icon and last-icon.
dots-icon Pagination An Icon that replaces the ellipsis in every gap.
default PaginationContent PaginationItems.
default PaginationLink The page number.

Keyboard

Keys Action
Tab Moves through the controls and pages.
Enter Follows a link or presses a button.
Space Presses a button.

Data attributes

Attribute Values On
data-active present on the current page page link
data-disabled present at the ends, or on everything when disabled controls
data-disabled present when disabled Pagination

Accessibility

  • A nav landmark labelled Pagination around a list.
  • The current page has aria-current="page"; each page button is labelled "Page N".
  • Previous, Next, First and Last are labelled ("Go to next page"); at the ends they are aria-disabled and keep focus instead of dropping it.
  • Translated control text with no label becomes the control's name, so what is read matches what is shown; getItemLabel translates every label.
  • Ellipses are hidden from assistive tech; the composed part says "More pages".

See also