Figma UI kit
Data display

Data grids and ledgers

v1.2.1

Scan, sort and act on many records at shop-floor density.

A data grid on a 6px shell: a 36px header of 10px column heads, 32px rows with status chips, a sticky actions column and a floating bulk action bar.

Quick usage

Import the shared component; never copy its markup into a feature. The Web TSX tab beside the live stage has a complete, working example.

import DataGrid from '@/shared/components/DataGrid';

Live stage and code

The live component and its controls on the left, the code on the right; change a control and the code follows: Web TSX (the component in a working example), Tailwind and HTML (the markup it renders, with its data attributes), React Native, SwiftUI and Jetpack Compose. The header theme switch drives every stage.

Props

Read from the component's source when the docs build: names and defaults from its signature, types and descriptions from its JSDoc. A blank type means the prop has no JSDoc yet.

PropTypeDefaultDescription
columnsColumn[]-`data` sets the cell in the data face.
rowsobject[]--
getRowId(row) => string--
rowActions(row) => React.ReactNode--
labelstring-Accessible name (caption) of the table.

Source: frontend/src/shared/components/DataGrid/DataGrid.js

DOM contract

What the rendered element carries: the data attributes its styles key on, its roles and ARIA, its focus style, and whether its stylesheet draws the 44px hit boundary. Also read from the source.

Data attributesdata-aligndata-dsdata-figure
RolesNative element semantics only
ARIANone set by the component
FocusNo :focus-visible rule of its own
44px hit boundaryNot a pressable root

Accessibility and touch

Rows are 44px; row actions are 28px with the 44px target.

Data

Visible height 28px. The ::after boundary adds 8px above and below, so a gloved finger lands on a 44px target while the row keeps its density.

Do and avoid

Do
Part · Qty · DueFlange, slip-on, 150# RF
Do: set column heads at the 10px tracked tier and cells at 12px, with subtle row dividers.
Avoid
Part · Qty · DueFlange, slip-on, 150# RF
Avoid: shrinking the cells to the 10px head tier to fit more rows. The grid becomes unreadable on a terminal.

Rules and constraints

Use it for

  • Lists of jobs, parts, POs: anything read down a column.

Avoid

  • Never row actions that cover a cell at rest; reveal them on hover in a rail.

Constraints

  • Shell --radius-surface, cells square, row dividers --border-subtle.
  • Column heads are the only 10px text in the app (uppercase, --tracking-dense).
  • Cell text 12px; figures in the tabular data face.

More in Data display