Skip to main content

Component · Data

Table

A stable-ID columnar data view with deterministic widths, sorting requests, and visible-window rendering.

Kind
widget
Input
interactive
Canvas
120×40

Live preview

Loading terminal preview.

Static terminal poster. Choose Run live to start the Rust demo.

Ghosttytable/basic
Loading terminal poster…
○ loading posterNo input — rendered state only
Table · exact mounted Rust story

01 · Purpose

What it is for

A stable-ID columnar data view with deterministic widths, sorting requests, and visible-window rendering.

Best fit: Data · data · widget

02 · Behavior

What the mounted story proves

  1. 01

    Table

    Representative 120×40 terminal state.

  2. 02

    Passive paint

    No keyboard or pointer action is claimed by this representative story.

  3. 03

    Evidence stays explicit

    0 covered · 9 partial · 5 missing axes.

03 · Implement

Install, then start from exact code

Install

cargo add termrock --git https://github.com/tailrocks/termrock.git --rev 5283c2acf9154d0cfcd37b1ffe821c00faf90ea2

Add TermRock once. Keep domain effects in the host application.

Minimal implementation

Exact Rust setup used by table/basic.

Open to load code.

04 · Adapt

Variants and composition

Variants

Use the preview Variant menu when alternate registered stories exist. Each selection mounts a fresh configuration.

Composition

Data · data · widget

05 · Reference

API, tokens, accessibility

Tokens

DesignSystemInspect exact story code for roles and capability projection.

Accessibility

Input contract mountedNo input claim in the representative story.

Contract

Evidence in progress0/23 axes covered

06 · Go deeper

Advanced guidance

Authored implementation guidance

Purpose. Present moderate-size relational data as a readable grid: headers, alignment, widths, truncation, row selection, optional cell focus, and empty / loading / error body states. TermRock owns layout, chrome, and interaction geometry; the host owns rows, sort execution, wording, and effects.

For interactive 1M-row kits (cursor, filter execution, virtual windows), use DataTable.

When to use / when not

Use TablePrefer
Process lists, settings matrices, modest query results—
Static or host-sorted projections—
Huge virtual grids / filter kitsDataTable
Single-column navigationList
HierarchiesTree

Recipes

RecipeChrome
Quiet (default)Gutter selection, no grid lines
Bordered│ between columns + rule under header
StripedAlternate-row muted text
CompactGap 1

Body states

TableBodyState::Ready (default), Loading, Error — sticky header remains; body shows host loading_message / error_message / empty_message.

Responsive columns

Set Column::priority (higher kept longer). Under width pressure, lowest priority columns drop first; equal priority still collapses rightmost.

Horizontal overflow after layout uses TableState::h_offset / scroll_horizontal. Left/Right keys move cell focus when a row is selected, else scroll horizontally.

Anatomy

gutter · sticky header · body rows · each cell: alignment + overflow
Selection: design-system SelectionChrome (gutter glyph / tint / fill)

Ownership boundary

TermRock owns reusable terminal rendering and interaction state. The host owns domain data, policy, persistence, authorization, and side effects.

Evidence status

0 covered, 9 partial, and 5 missing contract axes. Missing evidence is not a behavior claim.