ditdash U-UI1/U-UI2: the shell (rail, drawer, pane grid, the MSP selector) + the components (status-first tables, pills, the evidence pane) #13

Merged
jsutter merged 2 commits from ui-shell-components into main 2026-10-13 06:54:43 +00:00
Owner

The shell: the header with the MSP selector slot, the right menu rail (lg+) / popover drawer below, the container-query pane grid, the entity header strip (the doubled-provenance defect fixed). The components: the 7-state status pill + stale, the status-first table column (sticky, severity sort, data-priority hiding), KPI tiles, the gap trio, the evidence pane. The v4 sheet pins over the house sheet via @layer legacy (un-migrated families stay styled). The lint ceiling 748 -> 720.

The shell: the header with the MSP selector slot, the right menu rail (lg+) / popover drawer below, the container-query pane grid, the entity header strip (the doubled-provenance defect fixed). The components: the 7-state status pill + stale, the status-first table column (sticky, severity sort, data-priority hiding), KPI tiles, the gap trio, the evidence pane. The v4 sheet pins over the house sheet via @layer legacy (un-migrated families stay styled). The lint ceiling 748 -> 720.
The shell migration (arc plan U-UI1), the kit classes moved out of the
page frame:
- theme/ditdash.css: the layer statement pinning `legacy` between base
  and components (the served v3 house sheet joins that slot); the menu
  rail's display:block over the UA popover rule; the nav list/item
  styles; the footer grid area; the entity-header strip; the
  unavailable/gap-note frames; the pane padding (p-4 lg:p-6) and the
  pane scroll chain (main:has(.dn-panes) column, per-layout row
  minimums) so each pane body scrolls under the lg h-dvh shell.
- src/ui.rs: page_header/shell gain the brand logo mark; new nav() +
  NavItem, footer() + FooterBits, twin_footer(), action_link(),
  confidence_status(), entity_header() (the provenance line exactly
  once — the doubled-line defect fix), unavailable_state(), gap_note().
- src/views.rs: page() renders the kit shell (header, MSP selector,
  right menu rail/drawer, main, footer); nav_items() replaces
  chrome_nav(); the data-page header strip becomes ui::entity_header;
  the pages link /assets/ditdash.css and the house sheet serves wrapped
  in @layer legacy.
- src/server.rs: msp_sessions() reads the current session once (the
  same source GET /api/v1/msps serves) and threads it to every render;
  the /assets/ditdash.css route.
- tests: the gate walk covers the new components; a serve test pins the
  layer arrangement; the class=-lint's dated views ceiling shrinks
  748 -> 720; byte + semantic digests regenerated.

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
The kit's component completion (arc plan U-UI2); everything else in the
vocabulary (pill, KPI tile, absence trio, timeline, meter) shipped with
U-UI0 and now carries pinning tests:
- src/ui.rs: Column gains its role enum (Status / Name / Value) with
  Column::status()/name() and with_priority(); the object table renders
  the status-first column (sticky start, w-36) and the name column
  (sticky at start-36), value columns carry data-priority; the cell
  helpers status_cell()/name_cell()/cell()/cell_numeric() build the rows
  (the pill is a why-button or a plain span); the evidence pane
  (UnavailableRow + evidence()) lists every sources_unavailable row as
  an item with the reason word-for-word behind its gap pill's why
  popover, ids derived from surface + scope (reorder-stable);
  severity_key() exports the status-first sort key per surface.
- theme/ditdash.css: the sticky status/name column rules, the
  data-priority hiding at the pane container breakpoints (@2xl 96rem,
  @lg 64rem — status/name never hide), the evidence list, the numeric
  cell alignment.
- tests: kit unit tests pin the table's sticky columns + priorities +
  pill variants, the evidence rows' verbatim reasons, the absence
  trio's exact strings, and the severity order; the gate walk renders
  the status-first table and the evidence pane; assets/ditdash.css
  regenerated with the pinned CLI.

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
deepnet/ditdash!13
No description provided.