Pagination

Page navigation. Built from three Figma components in sequence: the Pagination number (Hover, Active, Default), the Pagination arrow (Default, Hover), and the Pagination container that groups them. All values pulled directly from the LUSTER Figma variables.

Figma Properties
Default: bg #F8F7FB · text #24242C
Active: bg #F2EDFF · text #794DFF
Hover: bg #F2EDFF · text #24242C
Padding: 12px 16px
Gap: 4px · Font: Inter 400 / 16px

Tip: click a number to make it active.

Component · Pagination number (Variants)

A single page cell with three states: Hover, Active, Default.

1
Hover
1
Active
1
Default

Component · Pagination arrow (Variants)

Previous / next chevron controls. Two states: Default and Hover.

Default
Hover

Component · Pagination

The full control: previous arrow, page numbers (one Active), and next arrow, with a 4px gap.

Design Tokens

Token names mirror the LUSTER Figma variable paths one-to-one. Values shown are the Diamond brand, Light mode defaults (the Figma file's default mode). Other brands (Amber, Opal) and Dark mode resolve to different values via the Color Theme & Component Brand collections.

Token NameFigma VariableDefault Value
--paginationItemDefaultFontColorpagination/item/default/font/color#24242C
--paginationItemDefaultBgColorpagination/item/default/bg/color#F8F7FB
--paginationItemHoverFontColorpagination/item/hover/font/color#794DFF
--paginationItemHoverBgColorpagination/item/hover/bg/color#F2EDFF
--paginationItemActiveFontColorpagination/item/active/font/color#794DFF
--paginationItemActiveBgColorpagination/item/active/bg/color#F2EDFF
--paginationItemPaddingXpagination/item/padding/x16px
--paginationItemPaddingYpagination/item/padding/y12px
--paginationItemBorderRadiuspagination/item/border/radius0px
--paginationGappagination/gap4px
--bodyFontSizetypography/body/font/size16px
--bodyFontLineHeighttypography/body/font/lineHeight19px
--bodyFontWeighttypography/body/font/weight400
--bodyFontFamilybody/font/familyInter

Usage Guidelines

✓ DO

Clearly mark the current page with the Active state.

✓ DO

Disable the prev/next arrows at the first and last page.

✗ DON'T

Don't show every page for large sets — truncate with an ellipsis.

✗ DON'T

Don't allow more than one Active page at a time.

Implementation

Values shown are the Diamond brand, Light mode defaults (the Figma file's default mode). Other brands (Amber, Opal) and Dark mode resolve to different values via the Color Theme & Component Brand collections.

import './Pagination.css';

export const Pagination = ({ page, pageCount, onChange }) => (
  <nav className="pagination" aria-label="Pagination">
    <button className="pag-cell" disabled={page === 1} onClick={() => onChange(page - 1)}><ChevronsLeft/></button>
    {Array.from({ length: pageCount }, (_, i) => i + 1).map(n => (
      <button
        key={n}
        className={`pag-cell ${n === page ? 'active' : ''}`}
        aria-current={n === page ? 'page' : undefined}
        onClick={() => onChange(n)}
      >{n}</button>
    ))}
    <button className="pag-cell" disabled={page === pageCount} onClick={() => onChange(page + 1)}><ChevronsRight/></button>
  </nav>
);