SakaniUI

Table

A generic, selectable data table: column definitions drive fully custom cell rendering.

CustomerPlanStatus
Amara Kalu
Proactive
Ravi Menon
Teamtrial
Chidi Duru
Prochurned

A column that is not data

Table<T> is generic: every column's key must be a field of your row type (keyof T & string). A delete button or a menu is not data, so give the row type an optional never field for it and render the control. A key that is not on the row type does not compile.

Customer
Olivia Carter
Noah Kim

Props

PropTypeDefaultDescription
columnsTableColumn<T>[]Column definitions: key, header, optional render().
rowsT[]The row data.
selectablebooleanfalseAdds a checkbox column for row selection.
reorderablebooleanfalseEnables drag-to-reorder on rows.
borderedbooleantrueDraws the table's own container border/radius.
responsive'auto' | 'default' | 'stacked''auto''auto' switches to a stacked card layout below 640px.

Why it works this way

Why

  • Rows are 44px with subtle dividers for dense, comparable data. Selection uses a lightly shadowed checkbox rather than a heavy outline, so a table of many rows stays calm.

Don't

  • Don't use a table for layout, or for a handful of items. Use List items or Cards.