Kanban-style work surface for board element types. Columns are configurable per board variant (planning lanes, recruitment funnel, sales pipeline stages, generic board). Cards drag between columns; selection opens a centered CardDetail modal.
The real panel component, mounted here over fixture data — the same shipped chrome the workspace renders, not a sketch.
board
Boards
view_kanban
No boards yet
Create a board to start organizing work.
help_outline
Formatom
Sketch
Structural preview of the panel chrome. The browser panel renders the real BrowserChrome primitive at miniature scale; the other variants are CSS shape silhouettes. Either way the composition tree below is the authoritative description of what's inside.
Click any component name to jump to its component-page entry.
WorkspaceShellouterShared workbench shell boundary. Board, Browser, and Terminal all enter through generated multi-session shell metadata; Board delegates its focused kanban body to BoardPanel.
BoardWorkbenchPanelshellGenerated-shell entry point (`portal::canvas::multi_session_panel::BoardWorkbenchPanel`) that consumes BOARD_MULTI_SESSION_CONFIG before mounting the board runtime.
BoardToolbarchromeTop-of-board chrome — back-to-selector, board name + variant badge, sub-view tabs (Kanban / Forecast for sales boards), and the close-to-canvas affordance. Hidden in embed_mode.
FilterBarchromeSticky filter strip — filter mode chip (All / MyCards / Ready), card count, and search input. Filters never leave the toolbar so the column scroll never carries them off-screen.
BoardEmptyStatestateEmpty body when no boards exist for the circle. CTA to create the first board flows through the agent (chemistry op), not a hand-rolled form here.
KanbanViewcontentMain column-grid view — owns the column layout, drag overlay, and per-column cardlist. variant=Kanban is the default; sales boards switch to Forecast via toolbar.
KanbanColumncontentOne column per pipeline state. Headers carry per-column counters and a column-level actions menu (rename, archive, settings). Drop targets render a highlighted ring during a drag.
KanbanCardcontentOne card per row (`pub fn KanbanCard` in `portal/src/canvas/board/card.rs`). Body content is variant-keyed (BodyPlanning / BodyRecruitment / BodySales) and dispatched off the board's element_type — keeping kind-specific layout out of the column itself.
StateChipstatusPer-card state pill keyed off classify(card.state) → State::{Open, InProgress, Blocked, Done}. Color comes from --tf-signal-* tokens, never raw.
ForecastPanelcontentSales-board sub-view — replaces the kanban grid with a weighted/total/active metrics strip plus a forecast table. Activated via the BoardToolbar's view tabs, not auto-routed.
BoardStatusBarchromeQuiet bottom strip — '· N cards · filter: <mode>' summary on the left, last-saved timestamp on the right. Suppressed when no board is loaded.
DragOverlayoverlayFloating ghost card that follows the pointer during a drag. Lives in a portal so it can clear column overflow clipping without a z-index war.
CardDetailoverlayCentered modal when a card is selected. Owns its own field-edit + activity-log surface — the column row is read-only outside the modal.
ComposeMessagePopoveroverlayCard-anchored popover for outbound channel messaging (sales boards). Fired via context::start_compose from the card itself.
BoardLiveRegiona11yARIA live region announcing focus moves and drag-drop placement to screen readers. Required for keyboard-driven board navigation.
Uses Components
Flat list of every component referenced — verifiable against the composition tree by the future generator audit.