Tables and data tables

Semantic table anatomy and production-ready data collections with sorting, selection, pagination, responsive rows, and deliberate empty states.

Interactive data table

Use DataTable for application-owned collections that need selection, sorting, pagination, row actions, and a compact mobile representation.

Healthy
Healthy
Healthy
Attention
Paused
8 connections
Rows

Semantic table primitive

Use the primitive anatomy for small, bounded datasets where applications own all behavior.

Current gateway environments.
EnvironmentRegionRoutes
Productioneu-west-1128
Stagingeu-central-144
Legacyus-east-17
Total routes179

Inventory responsive helpers

InventorySurface, InventoryDesktop, and InventoryMobile let a product intentionally change representation at its breakpoint.

Mobile list region

Loading guidance

Keep the table frame and column geometry stable. Mark the region busy and replace rows with application-owned skeletons.

Loading connections

Toolbar inset

PageToolbar shares the frame edge on the page canvas. Inside a Card or InventorySurface it takes the surface inset and a bottom border on the card surface, with no consumer padding classes.

ModelProviderRequests
Claude Sonnet 4Amazon Bedrock12,480
Nova ProAmazon Bedrock3,912

EntityTable convenience wrapper

EntityTable keeps simple entity collections concise while preserving selection and row actions.

A concise entity table without sorting or pagination.
ConnectionProviderStatus
Production BedrockAmazon BedrockHealthy
OpenAI EuropeOpenAIHealthy
Vertex AIGoogle CloudAttention

Package import

Start with DataTable for interactive resource collections and the table primitives for fully application-owned markup.

import { DataTable, type DataTableColumn } from "@conscia-labs/design-system";

const columns: DataTableColumn<Connection>[] = [
  { id: "name", header: "Connection", accessor: (row) => row.name, sortable: true, cell: (row) => row.name },
  { id: "status", header: "Status", accessor: (row) => row.status, sortable: true, cell: (row) => <Badge>{row.status}</Badge> },
];

<DataTable
  data={connections}
  columns={columns}
  getRowId={(row) => row.id}
  selectedIds={selectedIds}
  onSelectionChange={setSelectedIds}
  sorting={sorting}
  onSortingChange={setSorting}
/>