name: rezi-data-table description: Add a data table with sorting, selection, and keyboard navigation. Use when displaying tabular data. user-invocable: true allowed-tools: Read, Glob, Grep, Edit, Write argument-hint: "[data-source]" metadata: short-description: Add data table
When to use
Use this skill when:
- Displaying tabular data with rows and columns
- Need sorting, selection, or keyboard navigation on data
- Building dashboards or data-heavy screens
Source of truth
packages/core/src/widgets/useTable.ts—useTable()hookpackages/core/src/widgets/types.ts—TablePropspackages/core/src/widgets/ui.ts—ui.table()packages/core/src/ui/recipes.ts—recipe.table()for design-system-consistent table styling
Steps
Use the
useTable()hook inside adefineWidget:import { defineWidget, ui, useTable } from "@rezi-ui/core"; const DataTable = defineWidget<{ items: Item[] }>((props, ctx) => { const table = useTable(ctx, { rows: props.items, columns: [ { key: "name", header: "Name", flex: 1 }, { key: "size", header: "Size", width: 10, align: "right" }, ], getRowKey: (row) => row.id, selectable: "multi", }); return ui.table({ ...table.props, dsSize: "md", dsTone: "default", }); }, { name: "DataTable" });Handle selection via
table.selection(array of selected row keys)Handle sorting via
table.sortColumnandtable.sortDirectionFor large datasets, consider
ui.virtualList()instead
Design system note
Tables are recipe-styled by default when a ThemeDefinition preset is active.
Use dsSize / dsTone for explicit DS tuning when needed.
Verification
- Correct columns render with headers
- Selection updates on keyboard/mouse interaction
- Sorting works in both directions