Back to Tooljet

Pagination — Rocket Design Spec

frontend/src/components/ui/Rocket/Pagination/Pagination.spec.md

3.20.154-lts4.9 KB
Original Source

Pagination — Rocket Design Spec

<!-- figma: https://www.figma.com/design/XQdM9x8x9YHcj1lUK8abUG/Rocket-components?node-id=9877-52 --> <!-- figma: https://www.figma.com/design/XQdM9x8x9YHcj1lUK8abUG/Rocket-components?node-id=9877-59 --> <!-- synced: 2026-03-18 -->

Overview

Compound component for page navigation. Composed of nav wrapper, content list, page links, previous/next buttons, and ellipsis indicator.

Sub-components

ComponentElementPurpose
Pagination<nav>Root wrapper with aria-label="pagination"
PaginationContent<ul>Flex container for items
PaginationItem<li>List item wrapper
PaginationLink<a> / <button>Individual page number link
PaginationPreviousPaginationLink"Previous" button with chevron-left
PaginationNextPaginationLink"Next" button with chevron-right
PaginationEllipsis<span>MoreHorizontal icon for truncated ranges

Props

PropTypeValuesDefault
isActivebooleanfalse
disabledbooleanfalse
classNamestring

PaginationPrevious / PaginationNext

PropTypeValuesDefault
disabledbooleanfalse
classNamestring

Pagination (root)

PropTypeValuesDefault
sizestringlarge | default | smalldefault
classNamestring

Size is set on Pagination root and flows to all sub-components via React context.

PaginationContent, PaginationItem, PaginationEllipsis

Only className prop — no variants.

Sizes

ValueSizeTailwind
large32pxtw-size-8
default28pxtw-size-7
small24pxtw-size-6

PaginationPrevious / PaginationNext

ValueHeightPaddingTailwind
large32pxpx-3 py-1tw-h-8 tw-px-3 tw-py-1
default28pxpx-2.5 py-1tw-h-7 tw-px-2.5 tw-py-1
small24pxpx-2 py-0.5tw-h-6 tw-px-2 tw-py-0.5

PaginationEllipsis

ValueSizeTailwind
large32pxtw-size-8
default28pxtw-size-7
small24pxtw-size-6

Layout

┌─ nav (pagination) ──────────────────────────────────────────────┐
│ [← Previous]  [1] [2] [3] [...] [8] [9] [10]  [Next →]         │
└─────────────────────────────────────────────────────────────────┘
  • Container: inline-flex, gap 4px (tw-gap-1), items centered
  • Page items: size-dependent (default 28×28px tw-size-7), rounded-md
  • Previous/Next: rounded-md, px-2.5, py-1, gap-1.5
  • Icon size: 14px for chevrons, 16px for ellipsis dots

Token Mapping

ElementFigma tokenToolJet class
backgroundtw-bg-transparent
texttext/defaulttw-text-text-default
font weightweight/regular (400)tw-font-normal
ElementFigma tokenToolJet class
backgroundinteractive/hoverhover:tw-bg-interactive-hover
ElementFigma tokenToolJet class
background--bg-surface-layer-01tw-bg-background-surface-layer-01
borderborder/weaktw-border tw-border-border-weak
font weightweight/medium (500)tw-font-medium
texttext/defaulttw-text-text-default

PaginationPrevious / PaginationNext

ElementFigma tokenToolJet class
textcc-text/primarytw-text-text-default
fontIBM Plex Sans Medium 12pxtw-text-sm tw-font-medium
icon colorIcons/weaktw-text-icon-weak

PaginationEllipsis

ElementFigma tokenToolJet class
icon coloricon/defaulttw-text-icon-default

CVA Shape

Shape C — sizes only. CVA on PaginationLink with size variants. isActive handled via conditional cn() merge. Size flows from Pagination root via React context.

Notes

  • Size set on Pagination root, flows via context. Figma shows 28px (default) only — large/small extrapolated.
  • Previous/Next buttons reuse the text Button pattern from Figma (Button/text variant) but are self-contained here.
  • Font: 12px / 18px line-height for page numbers, 12px / 20px for prev/next labels.
  • Ellipsis uses MoreHorizontal icon from lucide-react.
  • Chevrons: ChevronLeft / ChevronRight from lucide-react, 14px.
  • "state5" in Figma maps to the PaginationEllipsis sub-component (not a state of PaginationLink).
  • "active" in Figma is the CSS hover state, not a prop.
  • "selected" in Figma maps to isActive={true} prop on PaginationLink.