Engram

Paged grid

component

A paginated grid (the in-game Triumphs / Collections / vault pager): the page of cells flanked by full-height previous/next arrow bars, with page-indicator segments below and a fade+slide in the travel direction on change.

Install

npx shadcn@latest add @engram/paged-grid

Registry item: /r/paged-grid.json — the machine-readable definition agents install from.

Example

Festival Flight
510
Aberrant Action
500
The Slammer
495
Mask of Fealty
501
Seventh Seraph Grips
500
Seventh Seraph Vest
503
Seventh Seraph Strides
502
Seventh Seraph Cloak
506

Props

PropTypeDefaultDescription
items*T[]
renderItem*(item: T, index: number) => ReactNode
itemKey*(item: T, index: number) => stringStable key per item.
columnsnumber2Columns on `sm`+ (mobile is always a single column). Default 2.
rowsnumber5Rows per page — page size is `columns × rows`. Default 5.
gapnumber8Gap between cells (px). Default 8.
cellWidthnumberFixed cell width (px). When set, columns are sized to the cell instead of stretching to fill the row, and the packed grid is centered — keeping fixed-size content (e.g. item tiles) tight at every breakpoint. Omit for the default fluid columns.
minRowHeightnumberReserve `rows × minRowHeight` so partial last pages keep the page height.
labelstring"Paged grid"Accessible label for the paged region.
classNamestring

Own the code: shadcn add copies this component's source into your repo to read and edit directly. Extend without forking — edit the source, use asChild to swap the element, or pass the typed annotations prop for curated data.