
Command Component
Components
An animated data table with staggered row entrances, sliding highlights, interactive selection, drag reordering, and smooth transitions between changing datasets.
Table animates rows into place when filters, pages, or data change, with optional cell staggers and rolling or counting numbers. It pairs that motion with status filters, pagination, row and bulk selection, drag reordering, expandable details, interactive status badges, sticky headers, a pinned total, and loading skeletons.
Use it when users inspect and act on structured records that change during a session, such as invoices, orders, subscriptions, and projects. Accurate data and predictable controls always matter more than the movement.
Set column alignment, borders, roundness, separators, header weight, primary or muted row highlights, check or circle selection marks, status badges, and a fixed or full-height layout. Motion settings include row and cell stagger, rolling or count-up numbers, sliding pagination, hover text rolls, selection, drag reordering, and expandable previews.
A finance dashboard can filter invoices by Paid, Pending, or Unpaid, with matching rows sliding into place. The team Shift-clicks a run of pending invoices and exports them from the action bar that appears.
An order management tool can use status badges that advance from Processing to Shipped, with an expandable row showing items and tracking details.
A SaaS admin panel can paginate accounts, keep headers sticky, and pin a total MRR footer while staff scroll through subscriptions.
Content without a real row-and-column structure, like portfolios or narrative lists, reads better as cards or lists.
Large analytical datasets and continuously updating monitors need stable layouts, virtualisation, and spreadsheet-style tools rather than animated rows.
It doesn’t replace a full data platform with complex permissions, bulk editing, or server-side grouping.
Keep staggers short, use cell stagger sparingly, and never delay real values behind count-up effects. Use stable records, memoise derived data, avoid layout measurement during drag, and paginate or virtualise large sets without animating offscreen rows.
Use semantic table markup with associated headers, and label checkboxes, badges, drag handles, and row actions. Keep hover, selection, and focus distinct, give status badges readable text, and announce bulk changes briefly. On mobile, prefer horizontal scroll over cramped columns and keep touch targets usable, and with reduced motion remove row movement and numeric transitions.
| Prop | Type | Default | Description |
|---|---|---|---|
theme | string | ghibli | Colour palette for the table, its menus and the action bar. Selected rows and primary buttons take its primary colour. |
mode | string | dark | Light or dark version of the palette. Starts dark. |
staggerRows | boolean | true | Rows appear one after another when the table loads or changes. |
staggerCells | boolean | false | Cells inside each row also appear one after another. |
numberAnimation | string | roll | How numbers change: roll digit by digit, count up, or switch instantly. |
duration | number | 0.4 | How long each animation takes, in seconds. |
stagger | number | 0.04 | Delay between each row or cell appearing, in seconds. |
rowHighlight | string | slide | How the hover highlight moves between rows: slides, fills from the top, or none. |
rowHighlightColor | string | primary | Colour of the row highlight: soft grey or the theme's primary colour. |
rollingText | boolean | false | Header and button labels roll to a second copy on hover. |
showStatusFilter | boolean | true | Shows the status filter above the table. |
highlightTotal | boolean | false | Highlights the total figure in the footer. |
showPagination | boolean | false | Splits the rows into pages with next and previous buttons. |
selectable | boolean | false | Adds a checkbox to every row. |
showSelectAll | boolean | true | Shows the select-all checkbox in the header. Needs Row checkboxes on. |
selectMark | string | check | Mark shown in a selected row's checkbox: checkmark or filled circle. Needs Row checkboxes on. |
showActionBar | boolean | true | Shows a floating action bar when rows are selected. Needs Row checkboxes on. |
dragMode | boolean | false | Lets you drag rows up and down to reorder them. |
showStatusBadges | boolean | true | Shows status as coloured badges instead of plain text. |
expandable | boolean | false | Rows open to reveal a preview underneath. |
removable | boolean | false | Adds a button to delete a column. |
addable | boolean | true | Adds a button to add new rows. |
textAlign | string | left | Alignment of the text in the cells. |
bordered | boolean | true | Draws a border around the table. |
showHorizontalLines | boolean | true | Draws a line between rows. |
showVerticalLines | boolean | true | Draws a line between columns. |
showHeaderBorder | boolean | true | Draws a line under the header row. |
boldHeader | boolean | true | Makes the header text bold. |
stickyHeader | boolean | true | Keeps the header in view while the rows scroll. |
expandFullTable | boolean | false | Grows the table to show every row instead of scrolling inside it. |
height | number | 40 | Height of the table, as a percentage of the viewport. Ignored when Expand full table is on. |
stickyFooter | boolean | true | Keeps the last row pinned at the bottom while the rows scroll. |
loadingSkeleton | boolean | true | Shows shimmering placeholders for a moment before the rows appear. |
Table is an animated React data table for presenting and managing structured records, with status filtering, row transitions, selection, pagination, drag reordering, expandable details, and configurable interactions.
Yes. Show status filter adds chips that narrow visible rows by status. It requires a statusKey and a non-empty list of statuses.
No. It selects only the currently visible rows. Selecting across pages needs separate selection logic.
Yes. Show action bar displays a contextual toolbar when rows are selected. The actions themselves come from the integrating product.
Column sorting isn’t documented in the published API, so don’t present it as built in without checking the shipped implementation.
Yes, but fetching, persistence, server-side filtering, and updates are integrated separately. Add, Delete, and status changes don’t write to a database by themselves.
Need a custom effect? Tell us what to create.