Pagination

Numbered page navigation for splitting a long result list into discrete pages. Reach for it when the full set is too large to scroll and users need to jump to a specific page — for infinite feeds or "load more" lists, skip it. Each page link is a button: the current page renders as outline (sets aria-current="page"), the rest as quiet ghost; collapse long ranges with PaginationEllipsis. PaginationLink takes a size (sm 28px for dense table footers, md 32px default, lg 36px for roomy/standalone bars).

Default

<Pagination>
  <PaginationContent>
    <PaginationItem>
      <PaginationPrevious href="#" />
    </PaginationItem>
    <PaginationItem>
      <PaginationLink href="#">1</PaginationLink>
    </PaginationItem>
    <PaginationItem>
      <PaginationLink href="#" isActive>2</PaginationLink>
    </PaginationItem>
    <PaginationItem>
      <PaginationLink href="#">3</PaginationLink>
    </PaginationItem>
    <PaginationItem>
      <PaginationNext href="#" />
    </PaginationItem>
  </PaginationContent>
</Pagination>

With ellipsis (many pages)

<Pagination>
  <PaginationContent>
    <PaginationItem><PaginationPrevious href="#" /></PaginationItem>
    <PaginationItem><PaginationLink href="#">1</PaginationLink></PaginationItem>
    <PaginationItem><PaginationEllipsis /></PaginationItem>
    <PaginationItem><PaginationLink href="#">4</PaginationLink></PaginationItem>
    <PaginationItem><PaginationLink href="#" isActive>5</PaginationLink></PaginationItem>
    <PaginationItem><PaginationLink href="#">6</PaginationLink></PaginationItem>
    <PaginationItem><PaginationEllipsis /></PaginationItem>
    <PaginationItem><PaginationLink href="#">12</PaginationLink></PaginationItem>
    <PaginationItem><PaginationNext href="#" /></PaginationItem>
  </PaginationContent>
</Pagination>

Props

ComponentNotes
Pagination<nav aria-label="pagination">, centered flex wrapper
PaginationContent<ul> with flex + gap-1
PaginationItem<li> wrapping a link or ellipsis
PaginationLink<a> styled via buttonVariants({ variant: isActive ? "outline" : "ghost", size }). size defaults to "md" (sm | md | lg). isActive sets aria-current="page".
PaginationPreviousLink with chevron-left + "Previous". Label hidden below sm.
PaginationNextLink with "Next" + chevron-right. Label hidden below sm.
PaginationEllipsissize-8 centered horizontal dots, text-muted-foreground. Decorative; aria-hidden.

Source

packages/react/src/components/pagination.tsx · Figma node 2819:28904