Components · Status and navigation

Pagination

Pagination here is a “load more” pattern: a counter, a thin progress bar and a button that adds more items to a list without a page load.

The tokens, the spacing per breakpoint, the measurements and the requirements. Values come from the live token package and from Figma: Pagination.

Design Tokens

Resolved from the live token package.

PartUseTokenValue

Open points

pagination.css writes the gaps (24px, 16px), the 190px width and the counter text (16/22, 17/24 from 769px) as pixels. The values match the spacing scale and the body-md pair, but are not yet written as tokens.


Sizes

PropertyValue
Width190px, max-width: 100%, centered, never stretched
Gap: info block to button24px
Gap: counter to bar16px
Progress bar height2px
ButtonButton Secondary, Medium: 40px high below 769px, 48px from 769px, full width

The component is one size. Only the space above it steps with the breakpoint, see Measurements.


Measurements

Dimensions

AttributeValue
Counter textBody-md: 16/22 below 769px, 17/24 from 769px, letter spacing 0.32px
Progress bar2px
Button labelLabel-lg: 16/16 below 769px, 18/18 from 769px

The component has no padding of its own, so there is no measurement figure. The space above it is a margin and is listed below.

Spacing

BreakpointSpace aboveTokenSpace below (the section)
xs, 0–639px24pxspace-2440px
sm, 640–768px32pxspace-3248px
md, 769–1023px40pxspace-4064px
lg, 1024–1280px40pxspace-4080px
xl, 1281px and up40pxspace-4080px

The space above is page spacing, so it steps at 640px, not at space-md. The space below is the bottom padding of the section the component sits in (eco-section), never padding on the component.


States

The component has no states of its own. The button has the states of the Secondary button. When all items are shown, the button is disabled (Figma Secondary disabled) and the counter and the bar show the full count.


Typography

ElementStyleMobileDesktop (769px)
Counter textbody-md, regular, 0.32px16/2217/24
Button labellabel-lg, bold, uppercase16/16, 0.32px18/18, 0.18px

Structure

Elements

ElementClassNotes
Componentpagination (+ id="pagination-{key}")Flex column, 190px, centered. The button is disabled when all items are shown.
Info blockpagination__infoCounter and bar.
Counterpagination__countHolds <span id="{key}-pagination-count">.
Progresspagination__progressThe 2px track.
Fillpagination__progress-bar (+ id="{key}-pagination-bar")Width set by script.
Buttonbtn btn--secondary btn--mdThe eco-button, full width of the component.

Width

190px, or the width of the parent when that is narrower.


Motion

PropertyTokenValue
Fill widthease-standardChanges over duration-medium-2

The width change is a state change in place, so it uses the standard easing. Reduced motion is not handled in the component CSS (open point).


Behavior

TopicRule
Fill widthAlways (visible / total) × 100%, set by updatePagination(key, visible, total). The first value may be rendered by the server.
All shownThe disabled attribute goes on the button. The component is never hidden and the button never removed.
IdsThe script reads {key}-pagination-count, {key}-pagination-bar and pagination-{key}.
BreakpointText and button change at 769px. The space above changes at 640px and 769px.

Accessibility Requirements

TopicRequirement
ButtonA native <button> with a specific label (“Show more reviews”). Keyboard: Tab, Enter, Space. Visible focus ring from eco-button.
Status messagePut aria-live="polite" on the counter so the new count is announced without moving focus (WCAG 4.1.3).
Progress barIt repeats the counter, so give it aria-hidden="true". Never rely on the bar alone (WCAG 1.4.1).
FocusA button that becomes disabled loses focus: move focus to the first item that was just loaded (WCAG 2.4.3).
ContrastCounter text is Surface 60 on white. The track (Surface 10) is decoration, the count carries the meaning.