Blocks
Nine blocks that make a whole surface rather than a control. Each one takes its data through a seam — a declared source, an API context, nav props, a rendered card — so the kit never reaches for an app.
- DataViewTable, board, gallery, calendar, timeline and chart over one row set, with filters, groups, sorts and inline editing. Composed, not configured: the root takes a declared source and writes, and the parts — SavedViews, Toolbar with its Search / Settings / Actions slots, and the required Body — draw it. The records API arrives through DataViewApiProvider; this specimen mounts an in-memory one.
- DataView — locked, custom card`source.locked` reads rows without writing them: no inline edits, New, delete or lane drags, and no property editing or visibility controls — while layouts, saved views, filter, sort, group, search and opening a record stay. `source.renderCard` swaps each gallery and board card's body for the page's own, inside the same clickable, draggable, selectable shell; `selection.getRowHref` makes the card a link for Cmd-click, middle-click and Copy link.
- DataViewSource / DataViewWritesThe two objects a DataView is built from. `source` is where the rows come from and how a row names itself; `writes` is everything the view may send back. Declare them as typed constants and the compound parts read them through the context — nothing else reaches the data.
- DataViewSettingsPanelWhat <DataView.Toolbar.Settings /> draws: a stacked popover of typed panes — layout, properties, filter, sort, group, sub-group, conditional colour and the chart panes — each one a PaneProps<T> component over the same ViewConfig. Open it and change the layout; the caption follows the config.
- DataViewEmptyOne empty state for every DataView layout, on the kit Empty primitive inside an edgeless glass slab. The copy is deterministic, not per-page: a filter miss says so and offers the way back, an empty set says the records are not there yet, and a layout that shows a window (timeline, calendar) passes a `scope` so it says which window. The noun comes from `source.label`; `DataView.Body`'s `emptyMessage` still overrides the sentence but is deprecated.
- GroupSlabOne grouping surface for every DataView layout: the kit glass slab tinted by the group's tone, with the group label and its rollup in the header. The list's sections, the gallery's sections, the table's groups and the board's columns are all this. `stickyLabel` pins the label strip to the left edge while the slab scrolls sideways — for the table, whose slab is wider than its scrollport.
- AppChromeThe app shell: sidebar nav, header, mobile tab bar, More sheet. Nav data, pathname and link component come from the app. Pinned to the viewport, so it runs in its own frame here.
- BreadcrumbBarThe 60px row above every chromed page: where you are on the left, page actions on the right. The trail comes from a page's `useBreadcrumbs`, or is derived from the nav model and the pathname when no page has set one. The root crumb wears mono uppercase muted; the leaf is the page.
- SecondarySidebarThe page's own column, between the app sidebar and the content: 240px, one hairline against the page, sections labelled in mono uppercase micro. A page publishes one with `useSecondarySidebar(node)` and the shell renders it; the DAM's boards and the inbox's queue are both this.
- ChatThe agent transcript — bubbles, tool chips, streaming markdown, system turn cards — over a PromptInput composer. Local state stands in for the loop.
- ReviewQueueOne decision on screen at a time. A declared ReviewSource gives the rail its rows; the app composes the middle and the right column out of ReviewQueue.Body (required — it throws without one), .Edit for labelled sections, and .Resolve for the pinned decision buttons. The app owns every write.
- PageHeaderResponsive title + leading/after-title slots left, actions right. Promoted from the console.
- DetailColumnsThe main/aside split every detail page uses: one column under lg, a ratioed two-column grid above it. Promoted from the console.
- KeyValueListDivided label/value rows with one shared control column width, so a stack of editable properties does not read as a ragged edge. Promoted from the console page panel.
- SidebarCollapsible app rail with groups, menus, and an inset content region.