Aliases
grid, cell navigation table
DataGridLiteData grid with cell focus, pinned columns, sorting, and selection.
| Lumen | $860k | Watch | Rafi | |
| Quartz | $640k | At risk | Mara | |
| Atlas | $1.2M | On track | Nina |
DataGridLite for cell-level keyboard navigation. Use Table when row-level reading and selection are enough.Aliases
grid, cell navigation table
Foundations
Layout and composition,Contrast and distinctness,Proof system
DataGridLite when users need to move cell by cell with the keyboard but do not need full spreadsheet editing.DataGridLite when a regular data table is enough.grid scroll region
shell Overflow shell for the grid surface.
column header row
header Column names and sort controls.
grid cell
cell Focusable cell surface within the grid.
| Name | Type | Default | Description |
|---|---|---|---|
columns | TableColumn[] | — | Column definitions shared with the broader table model. |
rows | TableRow[] | — | Grid rows, each with a stable id. |
caption | string | — | Visible grid caption. |
description | string | — | Supporting context for the grid. |
size | 'sm' | 'md' | 'md' | Chooses grid density. |
sortable | boolean | false | Enables sortable headers. |
selectable | boolean | false | Shows row selection checkboxes. |
pinnedColumns | number | 0 | Number of leading columns pinned during horizontal scroll. |
activeCell | { row: number; col: number } | — | Controlled active cell coordinates. |
emptyTitle | string | 'No rows' | Title shown when the grid has no rows. |
emptyDescription | string | '' | Optional empty-state guidance. |
sortBy | string | — | Controlled active sort key. |
sortDirection | 'asc' | 'desc' | 'asc' | Controlled sort direction. |
selectedRowIds | string[] | — | Controlled selected row IDs. |
onActiveCellChange | (detail: { activeCell: { row: number; col: number } }) => void | — | Runs when the focused cell changes. |
onSortChange | (detail: { sortBy: string; sortDirection: "asc" | "desc" }) => void | — | Runs when sorting changes. |
onSelectionChange | (detail: { ids: string[] }) => void | — | Runs when row selection changes. |
theme | ThemeContract | — | Sets the theme used to resolve component styles. |
| Name | Payload | Description |
|---|---|---|
activecellchange | { activeCell: { row: number; col: number } } | Fires when the active cell changes. |
sortchange | { sortBy: string; sortDirection: "asc" | "desc" } | Fires when sorting changes. |
selectionchange | { ids: string[] } | Fires when row selection changes. |
| Name | Description |
|---|---|
default | DataGridLite is data-driven and does not expose custom cell slots. |
Variants
sortable: Headers expose sort behaviorselectable: Rows expose selection controlspinned: Leading columns stay visibleSizes
sm: Dense gridmd: Default grid densityStates
active: Focused cellselected: Selected rowsorted: Column sort activeSemantics
Keyboard
Screen readers
Checklist
Implementation notes
DataGridLite does not provide cell editing, column resizing, or virtualization.A keyboard-friendly grid for structured review work.
<DataGridLite columns={columns} rows={rows} caption="Release grid" sortable={true} /> Keep the identity column visible while moving through wider data.
<DataGridLite columns={columns} rows={rows} pinnedColumns={1} selectable={true} /> Control the active cell when the broader app coordinates keyboard focus or companion panels.
<DataGridLite columns={columns} rows={rows} activeCell={activeCell} onActiveCellChange={(detail) => activeCell = detail.activeCell} /> Calculated fixtures; browser evidence is not collected. Layout estimates use declared text behavior and maximum token values.
size=md
size=sm
size=md