@invana/boards 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -0
- package/dist/index.cjs +1121 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1013 -0
- package/dist/index.d.ts +1013 -0
- package/dist/index.js +1069 -0
- package/dist/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/panels/data.tsx","../src/panels/events.tsx","../src/panels/block.tsx","../src/chips.tsx","../src/panels/rows.tsx","../src/registry.ts","../src/parts/record-description.tsx","../src/parts/staged-bar.tsx","../src/stream.ts","../src/board.tsx","../src/pages.tsx","../src/parts/attempt-clock.tsx","../src/panels/run.tsx"],"names":["jsx","jsxs","Badge","React2","Button","React3","cn","PropertyList","PropertyRow","React4","React5","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","StatusDot","React6","React7"],"mappings":"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","file":"index.js","sourcesContent":["import { Eyebrow } from \"@invana/ui\"\nimport { CodeBlock } from \"@invana/editor\"\n\nimport type {\n CodeOptions,\n ExchangeOptions,\n JsonOptions,\n PanelRendererProps,\n} from \"../types\"\n\nexport function JsonPanel({ options }: PanelRendererProps<JsonOptions>) {\n const value =\n typeof options.value === \"string\"\n ? options.value\n : JSON.stringify(options.value, null, 2)\n return (\n <CodeBlock language=\"json\" value={value} maxHeight={options.maxHeight} className=\"border-0\" />\n )\n}\n\nexport function CodePanel({ options }: PanelRendererProps<CodeOptions>) {\n return (\n <CodeBlock\n language={options.language ?? \"plain\"}\n value={options.value}\n maxHeight={options.maxHeight}\n showLineNumbers={options.showLineNumbers}\n className=\"border-0\"\n />\n )\n}\n\n/**\n * A labelled pair of mono blocks — a prompt and what came back.\n *\n * Its own kind rather than two `code` panels, because the two are one record:\n * a completion shown without the prompt that produced it is not evidence.\n */\nexport function ExchangePanel({ options }: PanelRendererProps<ExchangeOptions>) {\n return (\n <div className=\"flex flex-col gap-2\">\n {options.blocks.map((block, i) => (\n <div key={i} className=\"flex flex-col gap-1\">\n <Eyebrow>{block.label}</Eyebrow>\n <CodeBlock language={block.language ?? \"plain\"} value={block.value} />\n </div>\n ))}\n </div>\n )\n}\n","import * as React from \"react\"\nimport { Badge, Button, ButtonGroup, PropertyList, PropertyRow } from \"@invana/ui\"\nimport {\n DataTable,\n PaginatedTable,\n type ColumnDef,\n type ExpandedState,\n type TableFilter,\n} from \"@invana/tables\"\n\nimport type { EventSpec, EventsOptions, PanelRendererProps } from \"../types\"\n\nconst LEVELS: EventSpec[\"level\"][] = [\"error\", \"warn\", \"info\", \"debug\"]\nconst offset = (ms: number) => `${(ms / 1000).toFixed(3)}s`\nconst took = (ms?: number) => (ms == null ? \"—\" : ms < 1000 ? `${ms}ms` : `${(ms / 1000).toFixed(1)}s`)\n\n/** A kind reads in its level's colour: grey for info and debug, amber for warn, red for error. */\nfunction KindBadge({ kind, level }: Pick<EventSpec, \"kind\" | \"level\">) {\n if (level === \"error\")\n return (\n <Badge variant=\"destructive\" size=\"xs\">\n {kind}\n </Badge>\n )\n if (level === \"warn\")\n return (\n <Badge variant=\"soft\" tone=\"warning\" size=\"xs\">\n {kind}\n </Badge>\n )\n return (\n <Badge variant=\"outline\" tone=\"muted\" size=\"xs\">\n {kind}\n </Badge>\n )\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n if (status === \"succeeded\")\n return (\n <Badge variant=\"soft\" tone=\"success\" size=\"xs\">\n {status}\n </Badge>\n )\n if (status === \"failed\")\n return (\n <Badge variant=\"destructive\" size=\"xs\">\n {status}\n </Badge>\n )\n return (\n <Badge variant=\"outline\" tone=\"muted\" size=\"xs\">\n {status.replace(\"_\", \" \")}\n </Badge>\n )\n}\n\n/**\n * The run's event stream — see {@link EventsOptions}. Both layouts read the\n * same events, so a log and a tree of one run never disagree.\n */\nexport function EventsPanel(props: PanelRendererProps<EventsOptions>) {\n return props.options.layout === \"tree\" ? <EventTree {...props} /> : <EventLog {...props} />\n}\n\n// ── log ─────────────────────────────────────────────────────────────────────\n\nfunction EventLog({ panel, options, onAction }: PanelRendererProps<EventsOptions>) {\n const { selectAction, hideTask } = options\n const columns = React.useMemo<ColumnDef<EventSpec, unknown>[]>(\n () => [\n {\n id: \"at\",\n accessorKey: \"atMs\",\n header: \"t\",\n size: 84,\n meta: { mono: true, align: \"right\" },\n cell: ({ getValue }) => offset(getValue() as number),\n },\n {\n id: \"kind\",\n accessorKey: \"kind\",\n header: \"Kind\",\n size: 132,\n cell: ({ row }) => <KindBadge kind={row.original.kind} level={row.original.level} />,\n },\n ...(hideTask\n ? []\n : [\n {\n id: \"task\",\n accessorKey: \"task\",\n header: \"Task\",\n size: 150,\n meta: { mono: true },\n cell: ({ getValue }) => (getValue() as string | undefined) ?? \"—\",\n } satisfies ColumnDef<EventSpec, unknown>,\n ]),\n {\n id: \"took\",\n accessorKey: \"tookMs\",\n header: \"Took\",\n size: 72,\n meta: { mono: true, align: \"right\" },\n cell: ({ getValue }) => took(getValue() as number | undefined),\n },\n { id: \"message\", accessorKey: \"message\", header: \"Detail\", size: 360, enableSorting: false },\n ],\n [hideTask],\n )\n // The level has no column of its own — the kind's badge already reads in its colour — so its\n // chip matches the event and names the levels the stream holds.\n const levels = React.useMemo(() => LEVELS.filter((l) => options.events.some((e) => e.level === l)), [options.events])\n const filters = React.useMemo<TableFilter<EventSpec>[]>(\n () => [\n { id: \"kind\", label: \"kind\" },\n ...(hideTask ? [] : [{ id: \"task\", label: \"task\" }]),\n { id: \"level\", label: \"level\", options: levels, match: (e, picked) => picked.includes(e.level) },\n ],\n [hideTask, levels],\n )\n return (\n <PaginatedTable<EventSpec>\n columns={columns}\n data={options.events}\n density=\"compact\"\n seamless\n filters={filters}\n searchColumns={hideTask ? [\"message\"] : [\"task\", \"message\"]}\n searchPlaceholder={hideTask ? \"Search detail…\" : \"Search task or detail…\"}\n noun=\"events\"\n pageSize={options.pageSize ?? 25}\n pageSizeOptions={[25, 50, 100]}\n onRowClick={\n selectAction\n ? (e) => e.task && onAction(selectAction, { panelId: panel.id, value: e.task })\n : undefined\n }\n />\n )\n}\n\n// ── tree ────────────────────────────────────────────────────────────────────\n\ntype TreeRow = {\n id: string\n name: string\n atMs?: number\n tookMs?: number\n summary: string\n status?: string\n event?: EventSpec\n /** The task a row picks — itself, or the task an event belongs to. */\n task?: string\n children?: TreeRow[]\n}\n\n/** A task's own events first, in time order, then the tasks it split into. */\nfunction treeOf(options: EventsOptions): TreeRow[] {\n const tasks = options.tasks ?? []\n const row = (t: (typeof tasks)[number]): TreeRow => ({\n id: t.key,\n name: t.key,\n atMs: t.startMs,\n tookMs: t.durationMs,\n summary: t.summary ?? \"\",\n status: t.status,\n task: t.key,\n children: [\n ...options.events\n .filter((e) => e.task === t.key)\n .sort((a, b) => a.atMs - b.atMs)\n .map((e) => ({\n id: e.id,\n name: e.kind,\n atMs: e.atMs,\n tookMs: e.tookMs,\n summary: e.message,\n event: e,\n task: t.key,\n })),\n ...tasks.filter((c) => c.parent === t.key).map(row),\n ],\n })\n return tasks.filter((t) => !t.parent).map(row)\n}\n\n/** Every task on the way to an event at warn or error, and the event itself. */\nfunction troublePaths(options: EventsOptions): Record<string, boolean> {\n const parent = new Map((options.tasks ?? []).map((t) => [t.key, t.parent]))\n const open: Record<string, boolean> = {}\n for (const e of options.events.filter((ev) => ev.level === \"error\" || ev.level === \"warn\")) {\n open[e.id] = true\n for (let k: string | undefined = e.task; k; k = parent.get(k)) open[k] = true\n }\n return open\n}\n\nconst resolve = <T,>(next: T | ((old: T) => T), old: T) =>\n typeof next === \"function\" ? (next as (old: T) => T)(old) : next\n\nconst TREE_COLUMNS: ColumnDef<TreeRow, unknown>[] = [\n {\n id: \"name\",\n accessorKey: \"name\",\n header: \"Task / event\",\n size: 260,\n cell: ({ row }) =>\n row.original.event ? (\n <KindBadge kind={row.original.event.kind} level={row.original.event.level} />\n ) : (\n <span className=\"font-mono\">{row.original.name}</span>\n ),\n },\n {\n id: \"status\",\n header: \"Status\",\n size: 100,\n cell: ({ row }) => (row.original.status ? <StatusBadge status={row.original.status} /> : \"—\"),\n },\n {\n id: \"at\",\n accessorKey: \"atMs\",\n header: \"t\",\n size: 84,\n meta: { mono: true, align: \"right\" },\n cell: ({ getValue }) => {\n const v = getValue() as number | undefined\n return v == null ? \"—\" : offset(v)\n },\n },\n {\n id: \"took\",\n accessorKey: \"tookMs\",\n header: \"Took\",\n size: 72,\n meta: { mono: true, align: \"right\" },\n cell: ({ getValue }) => took(getValue() as number | undefined),\n },\n { id: \"summary\", accessorKey: \"summary\", header: \"Detail\", size: 360, enableSorting: false },\n]\n\nfunction EventTree({ panel, options, onAction }: PanelRendererProps<EventsOptions>) {\n const tree = React.useMemo(() => treeOf(options), [options])\n const roots = React.useMemo(() => Object.fromEntries(tree.map((r) => [r.id, true])), [tree])\n const [expanded, setExpanded] = React.useState<ExpandedState>(roots)\n const { selectAction } = options\n return (\n <DataTable<TreeRow>\n columns={TREE_COLUMNS}\n data={tree}\n density=\"compact\"\n seamless\n getSubRows={(r) => r.children}\n getRowId={(r) => r.id}\n expanded={expanded}\n onExpandedChange={(next) => setExpanded(resolve(next, expanded))}\n canExpand={(r) => r.event?.fields != null}\n enableSorting={false}\n enableColumnVisibility={false}\n onRowClick={\n selectAction\n ? (r) => r.task && onAction(selectAction, { panelId: panel.id, value: r.task })\n : undefined\n }\n toolbar={\n <ButtonGroup>\n <Button size=\"xs\" variant=\"outline\" onClick={() => setExpanded(troublePaths(options))}>\n Open failures\n </Button>\n <Button size=\"xs\" variant=\"outline\" onClick={() => setExpanded(true)}>\n Expand all\n </Button>\n <Button size=\"xs\" variant=\"outline\" onClick={() => setExpanded({})}>\n Collapse all\n </Button>\n </ButtonGroup>\n }\n renderExpanded={(r) =>\n r.event?.fields ? (\n <PropertyList labelWidth={80}>\n {Object.entries(r.event.fields).map(([label, value]) => (\n <PropertyRow key={label} label={label} mono>\n {value}\n </PropertyRow>\n ))}\n </PropertyList>\n ) : null\n }\n />\n )\n}\n","import { BLOCKS, Block, type BlockSpec } from \"@invana/blocks\"\n\nimport type { PanelRegistry, PanelRendererProps } from \"../types\"\n\n/**\n * A block as a panel: the same JSON a conversation turn draws, framed by the\n * panel. The block draws bare — its title and aside are the panel's — and what\n * it does arrives as `onAction(action, { panelId, value })`, so a row picked in\n * a `table` is `select` with the row's key, told apart by the panel it came from;\n * an action its spec declares arrives by its own id — `approve`.\n */\nexport function BlockPanel({ panel, options, onAction }: PanelRendererProps) {\n return (\n <Block\n spec={{ kind: panel.kind, ...options } as BlockSpec}\n id={panel.id}\n state={panel.state}\n value={panel.value}\n onAction={(action, value) =>\n // An action the spec declares arrives by its own id, as every panel's does.\n action === \"action\" ? onAction(String(value), { panelId: panel.id }) : onAction(action, { panelId: panel.id, value })\n }\n />\n )\n}\n\n/** Every block kind, drawn by {@link BlockPanel}. A kind with no renderer yet is a labelled placeholder. */\nexport const BLOCK_PANELS: PanelRegistry = Object.fromEntries(BLOCKS.map((b) => [b.id, BlockPanel]))\n","import * as React from \"react\"\nimport {\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n} from \"@invana/forms\"\nimport {\n Badge,\n BoundChip,\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n ToggleGroup,\n ToggleGroupItem,\n} from \"@invana/ui\"\n\nimport type { ActionContext, ActionSpec, ChipSpec } from \"./types\"\n\n/** A chip from its spec — a bound renders as a `BoundChip`, everything else as a `Badge`. */\nexport function SpecChip({ chip }: { chip: ChipSpec }) {\n if (chip.bound)\n return <BoundChip bound={chip.bound} swatch={chip.swatch} />\n return (\n <Badge\n variant={chip.variant ?? \"outline\"}\n tone={chip.tone === \"running\" || chip.tone === \"error\" ? undefined : chip.tone}\n size=\"sm\"\n >\n {chip.label}\n </Badge>\n )\n}\n\nexport function SpecChips({ chips }: { chips?: ChipSpec[] }) {\n if (!chips?.length) return null\n return (\n <>\n {chips.map((chip, i) => (\n <SpecChip key={i} chip={chip} />\n ))}\n </>\n )\n}\n\n/**\n * An action from its spec.\n *\n * `options` turns it into a segmented switch, because a view switch is one\n * decision with several positions and rendering it as three buttons would let a\n * reader think they could pick two. `picker` draws the same choice as a\n * dropdown, for records too many or too long to lay side by side. `menu` puts\n * them behind the action's own button, as acts rather than a choice.\n */\nexport function SpecAction({\n action,\n onAction,\n icons,\n ctx,\n}: {\n action: ActionSpec\n onAction: (id: string, ctx?: ActionContext) => void\n icons: Record<string, React.ComponentType<{ className?: string }>>\n ctx?: ActionContext\n}) {\n const switchId = React.useId()\n const optionLabel = (option: string) => action.optionLabels?.[option] ?? option\n if (action.options?.length && action.menu) {\n const Trigger = action.icon ? icons[action.icon] : undefined\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {/* With an icon the label names the button rather than printing\n beside it — `⋯` is read as *More*, not drawn as it. */}\n <Button\n variant={action.variant ?? \"outline\"}\n size={Trigger ? \"icon-sm\" : \"sm\"}\n disabled={action.disabled}\n aria-label={action.label ?? action.id}\n >\n {Trigger ? <Trigger /> : action.label}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {action.options.map((option) => (\n <DropdownMenuItem key={option} onSelect={() => onAction(action.id, { ...ctx, option })}>\n {optionLabel(option)}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n if (action.options?.length && action.picker) {\n return (\n <Select\n value={action.value}\n disabled={action.disabled}\n onValueChange={(option: string) => onAction(action.id, { ...ctx, option })}\n >\n <SelectTrigger triggerSize=\"sm\" className=\"w-auto gap-2\" aria-label={action.label ?? action.id}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {action.options.map((option) => (\n <SelectItem key={option} value={option}>\n {optionLabel(option)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n if (action.options?.length) {\n return (\n <ToggleGroup\n type=\"single\"\n size=\"sm\"\n value={action.value}\n disabled={action.disabled}\n onValueChange={(option: string) => option && onAction(action.id, { ...ctx, option })}\n >\n {action.options.map((option) => (\n <ToggleGroupItem key={option} value={option}>\n {optionLabel(option)}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )\n }\n\n const Icon = action.icon ? icons[action.icon] : undefined\n const iconOnly = !action.label && Icon\n\n if (action.pressed != null) {\n return (\n <span className=\"flex items-center gap-1.5\">\n <Label htmlFor={switchId} className=\"font-normal\">\n {action.label ?? action.id}\n </Label>\n <Switch\n id={switchId}\n checked={action.pressed}\n disabled={action.disabled}\n onCheckedChange={(pressed: boolean) => onAction(action.id, { ...ctx, pressed })}\n />\n </span>\n )\n }\n\n return (\n <Button\n variant={action.variant ?? \"outline\"}\n size={iconOnly ? \"icon-sm\" : \"sm\"}\n disabled={action.disabled}\n aria-label={iconOnly ? action.id : undefined}\n onClick={() => onAction(action.id, ctx)}\n >\n {Icon ? <Icon /> : null}\n {action.label}\n </Button>\n )\n}\n\nexport function SpecActions({\n actions,\n onAction,\n icons,\n ctx,\n}: {\n actions?: ActionSpec[]\n onAction: (id: string, ctx?: ActionContext) => void\n icons: Record<string, React.ComponentType<{ className?: string }>>\n ctx?: ActionContext\n}) {\n if (!actions?.length) return null\n return (\n <>\n {actions.map((action) => (\n <SpecAction\n key={action.id}\n action={action}\n onAction={onAction}\n icons={icons}\n ctx={ctx}\n />\n ))}\n </>\n )\n}\n","import {\n Alert,\n AlertDescription,\n Item,\n ItemActions,\n ItemContent,\n ItemMedia,\n ItemTitle,\n StatusDot,\n Terminal,\n TerminalLine,\n cn,\n} from \"@invana/ui\"\nimport { ParamRow } from \"@invana/forms\"\n\nimport { SpecActions, SpecChip } from \"../chips\"\nimport type {\n ListOptions,\n LogOptions,\n PanelRendererProps,\n ParamsOptions,\n TextOptions,\n} from \"../types\"\n\nexport function LogPanel({ options }: PanelRendererProps<LogOptions>) {\n const columns = options.columnTemplate ?? \"48px 44px 132px minmax(0,1fr)\"\n return (\n <Terminal columnTemplate={columns}>\n {options.lines.map((line, i) => (\n <TerminalLine\n key={i}\n level={line.level}\n columns={[\n line.time ?? \"\",\n line.level ? line.level.toUpperCase() : \"\",\n line.source ?? \"\",\n line.message,\n ]}\n />\n ))}\n </Terminal>\n )\n}\n\n/**\n * Rows that are not a table: artifacts, the runs of a plan, a version history.\n *\n * A table is for values you compare down a column. These are records you scan\n * and open, which is what `Item` is for — so a list panel is never a\n * one-column table.\n */\nexport function ListPanel({ panel, options, onAction, icons }: PanelRendererProps<ListOptions>) {\n return (\n <div className=\"flex flex-col\">\n {options.items.map((item, i) => {\n const Icon = item.icon ? icons[item.icon] : undefined\n const clickable = Boolean(item.action)\n return (\n <Item\n key={item.id ?? i}\n size=\"xs\"\n // `flex-nowrap` because `Item` wraps by default, and in a 340px\n // panel a long `meta` drops to a second line — so a list of files\n // renders at two different row heights depending on its captions.\n className={cn(\n \"flex-nowrap gap-2 border-b border-border/55 last:border-b-0\",\n clickable && \"cursor-pointer\",\n )}\n onClick={\n clickable\n ? () => onAction(item.action as string, { panelId: panel.id, itemId: item.id })\n : undefined\n }\n >\n {item.tone || Icon ? (\n <ItemMedia>\n {item.tone ? <StatusDot tone={item.tone} size=\"md\" /> : null}\n {Icon ? <Icon className=\"size-3.5 text-muted-foreground\" /> : null}\n </ItemMedia>\n ) : null}\n <ItemContent className=\"min-w-0\">\n {/* `ItemTitle` ships `flex w-fit`, so it keeps its content width\n and paints over whatever follows once the row is too narrow —\n and being a flex box, `truncate` on it clips without\n ellipsising. The text does the truncating; the title only has\n to be allowed to shrink. */}\n <ItemTitle className={cn(\"w-auto min-w-0\", item.mono && \"font-mono\")}>\n <span className=\"min-w-0 truncate\">{item.title}</span>\n </ItemTitle>\n </ItemContent>\n {/* The caption is capped in `ch`, which is the only definite unit\n available here. A percentage resolves against a parent sized by\n its own content (circular, silently ignored); equal `flex-1`\n bases truncate a short caption that would have fitted; and a\n shrink weight does nothing, because `flex-1` on the title gives\n it basis 0 so it never joins the shrink distribution at all. A\n caption longer than ~16 characters is a caption, not a fact\n worth the row. */}\n {item.meta || item.chip ? (\n <ItemActions className=\"min-w-0 shrink justify-end\">\n {item.meta ? (\n <span className=\"max-w-[16ch] truncate font-mono text-sm text-muted-foreground\">\n {item.meta}\n </span>\n ) : null}\n {item.chip ? (\n <span className=\"shrink-0\">\n <SpecChip chip={item.chip} />\n </span>\n ) : null}\n </ItemActions>\n ) : null}\n </Item>\n )\n })}\n </div>\n )\n}\n\nexport function ParamsPanel({ panel, options, onAction }: PanelRendererProps<ParamsOptions>) {\n const emit = options.changeAction\n return (\n <div className=\"flex flex-col\">\n {options.params.map((param) => (\n <ParamRow\n key={param.name}\n name={param.name}\n type={param.type}\n source={param.source}\n value={param.value}\n note={param.note}\n invalid={param.invalid}\n disabled={param.disabled}\n onSourceChange={\n emit\n ? (source) =>\n onAction(emit, {\n panelId: panel.id,\n param: { name: param.name, source, value: param.value },\n })\n : undefined\n }\n onValueChange={\n emit\n ? (value) =>\n onAction(emit, {\n panelId: panel.id,\n param: { name: param.name, source: param.source, value },\n })\n : undefined\n }\n />\n ))}\n </div>\n )\n}\n\nconst TEXT_TONE: Record<string, string> = {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n warning: \"text-warning\",\n error: \"text-destructive\",\n info: \"text-info\",\n}\n\nexport function TextPanel({ panel, options, onAction, icons }: PanelRendererProps<TextOptions>) {\n const body = (\n <p className={cn(\"text-sm\", TEXT_TONE[options.tone ?? \"muted\"])}>{options.text}</p>\n )\n\n const content = options.callout ? (\n <Alert variant={options.tone === \"error\" ? \"destructive\" : \"default\"}>\n <AlertDescription>{body}</AlertDescription>\n </Alert>\n ) : (\n body\n )\n\n if (!options.actions?.length) return content\n\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0 flex-1\">{content}</div>\n <div className=\"flex shrink-0 items-center gap-1.5\">\n <SpecActions\n actions={options.actions}\n onAction={onAction}\n icons={icons}\n ctx={{ panelId: panel.id }}\n />\n </div>\n </div>\n )\n}\n","import { CodePanel, ExchangePanel, JsonPanel } from \"./panels/data\"\nimport { EventsPanel } from \"./panels/events\"\nimport { BLOCK_PANELS } from \"./panels/block\"\nimport { ListPanel, LogPanel, ParamsPanel, TextPanel } from \"./panels/rows\"\nimport type { PanelRegistry } from \"./types\"\n\n/**\n * The panels only a board has. Everything a conversation also draws — a\n * table, a band of figures, a record, a chart — is a block, and every block\n * kind is a panel kind too (see `BLOCK_PANELS`).\n *\n * Eight, and the number is meant to stay near it. Another belongs here only\n * when two unrelated surfaces both need it and a conversation does not —\n * otherwise it is a block, or a consumer's registry entry. `events` passes:\n * a run page and a telemetry view both read an engine's event stream.\n *\n * Deliberately absent: **`canvas`**. A flow, a map or a graph needs\n * `@invana/canvas`, and importing it here would put PixiJS in the bundle of\n * every consumer that only wanted tiles and a log. It arrives as a registry\n * entry instead — see the `canvas` note in `types.ts`.\n */\nexport const BUILT_IN_PANELS: PanelRegistry = {\n json: JsonPanel,\n code: CodePanel,\n exchange: ExchangePanel,\n log: LogPanel,\n events: EventsPanel,\n list: ListPanel,\n params: ParamsPanel,\n text: TextPanel,\n}\n\n/**\n * Every kind a board can draw: the blocks, then the panels only a\n * board has, then the consumer's own. Later entries win, so a registered\n * kind replaces a block of the same name — `RUN_PANELS`' `trace` does.\n */\nexport function resolveRegistry(extra?: PanelRegistry): PanelRegistry {\n return { ...BLOCK_PANELS, ...BUILT_IN_PANELS, ...extra }\n}\n","import * as React from \"react\"\n\nimport { Button, PropertyList, PropertyRow, cn } from \"@invana/ui\"\n\nexport interface RecordDescriptionDetail {\n label: React.ReactNode\n value: React.ReactNode\n /** The value in the mono face — an id, a mode, a date. */\n mono?: boolean\n}\n\nexport interface RecordDescriptionProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** The one field a reader scans — one line, truncated, until `More`. */\n description?: React.ReactNode\n /** What `More` shows beneath the full description, as label/value pairs. */\n details?: RecordDescriptionDetail[]\n moreLabel?: string\n lessLabel?: string\n}\n\n/**\n * A record's own metadata, on the line under its `RecordHeader`.\n *\n * The description reads on one line, and `More` puts the rest — the whole\n * description, then the record's facts as a `PropertyList` — in place, and\n * `Less` folds it back. Not in a tooltip or a dialog: the reader is already\n * looking at the record.\n *\n * `More` is there only when there is more: details to show, or a description\n * the line cuts.\n */\nexport const RecordDescription = React.forwardRef<HTMLDivElement, RecordDescriptionProps>(\n (\n { description, details, moreLabel = \"More\", lessLabel = \"Less\", className, ...props },\n ref,\n ) => {\n const [expanded, setExpanded] = React.useState(false)\n const [clipped, setClipped] = React.useState(false)\n const lineRef = React.useRef<HTMLParagraphElement>(null)\n\n React.useLayoutEffect(() => {\n const el = lineRef.current\n if (!el || expanded) return\n const measure = () => setClipped(el.scrollWidth - el.clientWidth > 1)\n measure()\n const observer = new ResizeObserver(measure)\n observer.observe(el)\n return () => observer.disconnect()\n }, [expanded, description])\n\n const hasMore = clipped || expanded || (details?.length ?? 0) > 0\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-1 border-b border-border bg-card px-3 pb-2\", className)}\n {...props}\n >\n <div className=\"flex min-w-0 items-baseline gap-2\">\n <p\n ref={lineRef}\n className={cn(\n \"min-w-0 flex-1 text-sm text-muted-foreground\",\n expanded ? \"whitespace-pre-line\" : \"truncate\",\n )}\n >\n {description}\n </p>\n {hasMore ? (\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto shrink-0 p-0\"\n aria-expanded={expanded}\n onClick={() => setExpanded((open) => !open)}\n >\n {expanded ? lessLabel : moreLabel}\n </Button>\n ) : null}\n </div>\n {expanded && details?.length ? (\n <PropertyList labelWidth={110}>\n {details.map((d, i) => (\n <PropertyRow key={i} label={d.label} mono={d.mono}>\n {d.value}\n </PropertyRow>\n ))}\n </PropertyList>\n ) : null}\n </div>\n )\n },\n)\nRecordDescription.displayName = \"RecordDescription\"\n","import * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { Button, cn, type DiffOp } from \"@invana/ui\"\n\nexport interface StagedBarItem {\n id: string\n op: DiffOp\n /** What changed, in the mono face — `airport.timezone`. */\n name: React.ReactNode\n /** What the change is — `property`, `integer → float`. */\n note?: React.ReactNode\n}\n\nexport interface StagedBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n items: StagedBarItem[]\n /** Discard one change. Left out, the items carry no `×`. */\n onDiscard?: (id: string) => void\n /** Discard every change. Left out, there is no `Discard all`. */\n onDiscardAll?: () => void\n /** The keyboard route to what finishes the set — `⌘↵ publish`. */\n hint?: React.ReactNode\n discardAllLabel?: string\n}\n\nconst OP_SIGN: Record<string, string> = { add: \"+\", remove: \"−\", change: \"~\" }\nconst OP_CLASS: Record<string, string> = {\n add: \"text-success\",\n remove: \"text-destructive\",\n change: \"text-warning\",\n}\n\n/**\n * What is staged and not yet published, as one bar across the surface it\n * changes.\n *\n * The count, then each change as a chip with its sign spelled out — a reader\n * who cannot separate red from green still tells an addition from a removal —\n * and its own `×`; `Discard all` and the shortcut that publishes on the right.\n * It sits under the record's header while a draft is open, and not at all\n * otherwise: a bar reading *0 staged* is noise.\n */\nexport const StagedBar = React.forwardRef<HTMLDivElement, StagedBarProps>(\n (\n { items, onDiscard, onDiscardAll, hint, discardAllLabel = \"Discard all\", className, ...props },\n ref,\n ) => (\n <div\n ref={ref}\n role=\"region\"\n aria-label=\"Staged changes\"\n className={cn(\n \"flex min-h-control-md shrink-0 flex-wrap items-center gap-2 border-b border-border bg-primary/5 px-3 py-1\",\n className,\n )}\n {...props}\n >\n <span className=\"shrink-0 text-sm font-semibold\">{items.length} staged</span>\n {items.map((item) => (\n <span\n key={item.id}\n className=\"inline-flex max-w-full items-center gap-1.5 border border-border bg-card px-1.5 py-0.5 text-xs\"\n >\n <span className={cn(\"font-mono\", OP_CLASS[item.op] ?? \"text-muted-foreground\")}>\n {OP_SIGN[item.op] ?? item.op}\n </span>\n <span className=\"truncate font-mono\">{item.name}</span>\n {item.note != null ? <span className=\"truncate text-muted-foreground\">{item.note}</span> : null}\n {onDiscard ? (\n <button\n type=\"button\"\n aria-label=\"Discard this change\"\n className=\"text-muted-foreground hover:text-foreground focus-visible:outline-none\"\n onClick={() => onDiscard(item.id)}\n >\n <X className=\"size-3\" />\n </button>\n ) : null}\n </span>\n ))}\n <span className=\"flex-1\" />\n {onDiscardAll ? (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onDiscardAll}>\n {discardAllLabel}\n </Button>\n ) : null}\n {hint != null ? <span className=\"shrink-0 text-sm text-muted-foreground\">{hint}</span> : null}\n </div>\n ),\n)\nStagedBar.displayName = \"StagedBar\"\n","import { applyBlockPatch, type BlockPatch, BlockPatchError } from \"@invana/blocks\"\n\nimport type { BoardSpec, ExtraPanels, PanelBase } from \"./types\"\n\n/**\n * How a board changes while it streams. A panel's options stream by the\n * block's own {@link BlockPatch} — the patch a conversation streams the same\n * block by — so a gantt panel and a gantt answer take one stream.\n */\nexport type BoardPatch =\n /** Stream a panel's options — its block's spec — by a block patch. `panel` is its `id`. */\n | { op: \"patch-panel\"; panel: string; patch: BlockPatch }\n /**\n * The panel's own fields — its `aside` as the run moves, its `state` once\n * answered; `null` removes one. Never its `id`, `kind` or `options`.\n */\n | {\n op: \"update-panel\"\n panel: string\n fields: { [F in keyof Omit<PanelBase, \"id\" | \"render\">]?: PanelBase[F] | null }\n }\n\nexport type BoardPatchOp = BoardPatch[\"op\"]\n\nexport class BoardPatchError extends Error {}\n\n/** Inside the walk every spec is the widest one — the types guard authors, not the walk. */\ntype Panel = PanelBase & { kind: string; options?: unknown }\ntype Row = { panels: Panel[] }\ntype Loose = { rows: Row[]; tabs?: { rows: Row[] }[] }\n\n/** `rows` with the panel `id` replaced by `fn(panel)`; `hit` says whether it was there. */\nfunction onRows(rows: Row[], id: string, fn: (panel: Panel) => Panel, hit: { found: boolean }): Row[] {\n return rows.map((row) => {\n if (!row.panels.some((p) => p.id === id)) return row\n hit.found = true\n return { ...row, panels: row.panels.map((p) => (p.id === id ? fn(p) : p)) }\n })\n}\n\nfunction patchPanel(panel: Panel, patch: BoardPatch): Panel {\n if (patch.op === \"update-panel\") {\n // The block patch's own merge, so a field sent as `null` is removed here too.\n const { id, kind, options } = panel\n return { ...applyBlockPatch(panel, { op: \"set\", fields: patch.fields }), id, kind, options }\n }\n try {\n return { ...panel, options: applyBlockPatch((panel.options ?? {}) as object, patch.patch) }\n } catch (error) {\n if (error instanceof BlockPatchError) throw new BoardPatchError(`\"patch-panel\" on \"${patch.panel}\": ${error.message}`)\n throw error\n }\n}\n\n/** A board's spec after one patch: the panel it names, wherever it sits — a row, or a tab's row. */\nexport function applyBoardPatch<X extends ExtraPanels>(spec: BoardSpec<X>, patch: BoardPatch): BoardSpec<X> {\n const loose = spec as unknown as Loose\n const hit = { found: false }\n const fn = (panel: Panel) => patchPanel(panel, patch)\n const next: Loose = {\n ...loose,\n rows: onRows(loose.rows, patch.panel, fn, hit),\n ...(loose.tabs ? { tabs: loose.tabs.map((tab) => ({ ...tab, rows: onRows(tab.rows, patch.panel, fn, hit) })) } : {}),\n }\n if (!hit.found) throw new BoardPatchError(`\"${patch.op}\": no panel \"${patch.panel}\" on the board.`)\n return next as unknown as BoardSpec<X>\n}\n\n/** Apply patches in order — a recorded stream, replayed. */\nexport function applyBoardPatches<X extends ExtraPanels>(spec: BoardSpec<X>, patches: BoardPatch[]): BoardSpec<X> {\n return patches.reduce<BoardSpec<X>>(applyBoardPatch, spec)\n}\n","import * as React from \"react\"\nimport { useStreamedSpec } from \"@invana/blocks\"\nimport {\n AbsenceNote,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n PanelBox,\n RecordHeader,\n StatusDot,\n TabbedPanel,\n cn,\n} from \"@invana/ui\"\nimport { Check, ChevronDown, Lock } from \"lucide-react\"\n\nimport { SpecActions, SpecChip, SpecChips } from \"./chips\"\nimport { RecordDescription } from \"./parts/record-description\"\nimport { StagedBar } from \"./parts/staged-bar\"\nimport { resolveRegistry } from \"./registry\"\nimport { applyBoardPatches } from \"./stream\"\nimport type {\n ActionContext,\n BoardProps,\n ExtraPanels,\n HeaderSpec,\n PanelRegistry,\n PanelSpec,\n RowSpec,\n StagedSpec,\n} from \"./types\"\n\n/** Inside the renderer every spec is the widest one — the types guard authors, not the walk. */\ntype AnyPanel = PanelSpec<Record<string, unknown>>\ntype AnyRow = RowSpec<Record<string, unknown>>\n\n/**\n * A band nobody recorded is **absent, not zero** (SR34).\n *\n * `unrecorded` is the one reason that removes the panel outright: an empty\n * Artifacts box says the step produced no files, while no box at all says\n * nobody wrote the record. The other two are facts worth drawing — `purged`\n * means it existed and aged out (O6), `declared-none` that the step's contract\n * has no such output — so those keep their band and say so inside it.\n */\nfunction isDropped(panel: AnyPanel) {\n return panel.absent?.reason === \"unrecorded\"\n}\n\n/**\n * A panel that names a kind nothing can draw.\n *\n * Shown rather than skipped. A board is data that outlives the code reading\n * it, so a spec written against a newer schema will arrive here eventually —\n * and a silently missing band is a worse bug than a visible one, because the\n * reader draws conclusions from a board they believe is complete.\n */\nfunction UnknownPanel({ kind }: { kind: string }) {\n return (\n <div className=\"border border-dashed border-border p-3 text-sm text-muted-foreground\">\n No renderer for panel kind <span className=\"font-mono\">{kind}</span>. Register one, or\n remove it from the spec.\n </div>\n )\n}\n\nfunction Panel({\n panel,\n registry,\n onAction,\n icons,\n gap,\n}: {\n panel: AnyPanel\n registry: PanelRegistry\n onAction: (id: string, ctx?: ActionContext) => void\n icons: Record<string, React.ComponentType<{ className?: string }>>\n gap: number\n}) {\n const Renderer = registry[panel.kind]\n\n // Absence outranks the renderer: a band nobody recorded says which kind of\n // nothing it is, and never draws an empty one of itself.\n const body = panel.absent ? (\n <AbsenceNote reason={panel.absent.reason} label={panel.absent.label}>\n {panel.absent.note}\n </AbsenceNote>\n ) : panel.render ?? (\n Renderer ? (\n <Renderer\n panel={panel}\n options={(panel.options ?? {}) as never}\n onAction={onAction}\n icons={icons}\n gap={gap}\n />\n ) : (\n <UnknownPanel kind={panel.kind} />\n )\n )\n\n const style: React.CSSProperties = panel.width\n ? { width: panel.width, flexShrink: 0 }\n : { flexGrow: panel.grow ?? 1, flexBasis: 0, minWidth: 0 }\n\n // Every panel is framed, as an answer card frames every block: the same JSON\n // draws the same in either shell. `title` adds the label bar, nothing more.\n return (\n <PanelBox\n title={panel.title}\n aside={\n panel.actions?.length ? (\n <span className=\"flex items-center gap-2\">\n {panel.asideChip ? <SpecChip chip={panel.asideChip} /> : panel.aside}\n <SpecActions\n actions={panel.actions}\n onAction={onAction}\n icons={icons}\n ctx={{ panelId: panel.id }}\n />\n </span>\n ) : panel.asideChip ? (\n <SpecChip chip={panel.asideChip} />\n ) : (\n panel.aside\n )\n }\n flush={panel.flush || panel.absent != null}\n style={style}\n >\n {body}\n </PanelBox>\n )\n}\n\nfunction Row({\n row,\n gap,\n registry,\n onAction,\n icons,\n}: {\n row: AnyRow\n gap: number\n registry: PanelRegistry\n onAction: (id: string, ctx?: ActionContext) => void\n icons: Record<string, React.ComponentType<{ className?: string }>>\n}) {\n return (\n <div\n className={cn(\"flex min-w-0 items-stretch\", row.fill && row.height == null && \"min-h-0 flex-1\")}\n style={{ gap: row.gap ?? gap, height: row.height }}\n >\n {row.panels.filter((panel) => !isDropped(panel as AnyPanel)).map((panel, i) => (\n <Panel\n key={panel.id ?? i}\n panel={panel}\n registry={registry}\n onAction={onAction}\n icons={icons}\n gap={gap}\n />\n ))}\n </div>\n )\n}\n\n/**\n * A board, assembled from JSON.\n *\n * The spec says what bands there are, what kind each one is and what data it\n * carries; this decides nothing except layout. That split is the point — the\n * same component renders a run, a step, a plan and a draft, and adding a\n * seventh surface is a new document rather than a new screen.\n *\n * **Behaviour is not in the spec.** Actions carry an `id` and arrive back\n * through `onAction`; a gantt row's pick, a list row's click and a\n * parameter edit all come through the same seam. So a spec can be fetched,\n * stored beside a plan as `board.yml`, diffed between two runs, and handed\n * to a renderer that has never heard of the record it describes.\n *\n * **It owns one scroller.** The body scrolls; no band does. A `PanelBox` is\n * content-height by construction, which is what keeps twenty of them in a\n * column from becoming twenty scroll regions.\n */\nexport function Board<X extends ExtraPanels = Record<never, never>>({\n spec: given,\n onAction,\n registry: extraRegistry,\n icons = {},\n stream,\n onStreamEnd,\n onStreamError,\n className,\n ...props\n}: BoardProps<X>) {\n // Read as every shell reads its stream: a block's, a conversation's.\n const { live: spec } = useStreamedSpec(given, stream, applyBoardPatches<X>, {\n onEnd: onStreamEnd,\n onError: onStreamError,\n })\n const registry = React.useMemo(() => resolveRegistry(extraRegistry), [extraRegistry])\n const gap = spec.gap ?? 12\n const emit = React.useCallback(\n (id: string, ctx?: ActionContext) => onAction?.(id, ctx),\n [onAction],\n )\n const tabs = spec.tabs?.length ? spec.tabs : null\n const inspector = spec.inspector\n // Uncontrolled unless the spec names an action — a frozen report still\n // switches tabs, it just has nobody to tell.\n const [ownTab, setOwnTab] = React.useState(spec.tab ?? tabs?.[0]?.id)\n const activeTab = spec.tabAction ? (spec.tab ?? tabs?.[0]?.id) : ownTab\n\n const body = (rows: AnyRow[], flush?: boolean) => (\n <div\n className={cn(\"flex min-h-0 flex-1 flex-col overflow-y-auto\", !flush && \"p-3\")}\n style={{ gap }}\n >\n {rows\n .filter((row) => row.panels.some((panel) => !isDropped(panel as AnyPanel)))\n .map((row, i) => (\n <Row\n key={row.id ?? i}\n row={row}\n gap={gap}\n registry={registry}\n onAction={emit}\n icons={icons}\n />\n ))}\n </div>\n )\n\n const main = tabs ? (\n <TabbedPanel\n className=\"min-h-0 flex-1 border-0 bg-transparent shadow-none\"\n bodyClassName=\"flex min-h-0 flex-col\"\n activeTab={activeTab}\n onTabChange={(value) =>\n spec.tabAction ? emit(spec.tabAction, { option: value }) : setOwnTab(value)\n }\n headerContent={\n spec.tabActions?.length ? (\n <SpecActions actions={spec.tabActions} onAction={emit} icons={icons} />\n ) : undefined\n }\n tabs={tabs.map((tab) => ({\n value: tab.id,\n label: tab.label,\n icon: tab.locked ? Lock : undefined,\n disabled: tab.locked,\n content: body(tab.rows as AnyRow[], tab.flush),\n }))}\n />\n ) : (\n body(spec.rows as AnyRow[])\n )\n\n return (\n <div className={cn(\"flex min-h-0 flex-col bg-background\", className)} {...props}>\n {spec.header ? <SpecHeader header={spec.header} onAction={emit} icons={icons} /> : null}\n {spec.header?.description != null || spec.header?.details?.length ? (\n <RecordDescription description={spec.header.description} details={spec.header.details} />\n ) : null}\n {spec.staged ? <SpecStaged staged={spec.staged} onAction={emit} /> : null}\n\n {inspector ? (\n <div className=\"flex min-h-0 flex-1\">\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col\">{main}</div>\n <Board\n className=\"border-l border-border\"\n style={{ width: inspector.width ?? 440, flexShrink: 0 }}\n spec={{\n ...inspector.spec,\n inspector: undefined,\n header: inspector.spec.header && { size: \"md\", ...inspector.spec.header },\n }}\n onAction={emit}\n registry={extraRegistry}\n icons={icons}\n />\n </div>\n ) : (\n main\n )}\n </div>\n )\n}\n\n/** The staged set, from its spec — each act dispatched by id. */\nfunction SpecStaged({\n staged,\n onAction,\n}: {\n staged: StagedSpec\n onAction: (id: string, ctx?: ActionContext) => void\n}) {\n const { discardAction, discardAllAction } = staged\n return (\n <StagedBar\n items={staged.items}\n hint={staged.hint}\n onDiscard={discardAction ? (id) => onAction(discardAction, { itemId: id }) : undefined}\n onDiscardAll={discardAllAction ? () => onAction(discardAllAction) : undefined}\n />\n )\n}\n\n/**\n * The header, from its spec: a crumb with an action is a link back, and the\n * last crumb can open a picker of its siblings.\n */\nfunction SpecHeader({\n header,\n onAction,\n icons,\n}: {\n header: HeaderSpec\n onAction: (id: string, ctx?: ActionContext) => void\n icons: Record<string, React.ComponentType<{ className?: string }>>\n}) {\n const last = header.crumbs.length - 1\n const crumbs = header.crumbs.map((crumb, i): React.ReactNode => {\n const action = header.crumbActions?.[i]\n if (i === last && header.crumbMenu) {\n const menu = header.crumbMenu\n return (\n <DropdownMenu key={i}>\n <DropdownMenuTrigger className=\"inline-flex items-center gap-1 hover:text-primary focus-visible:outline-none\">\n {crumb}\n <ChevronDown className=\"size-3.5 text-muted-foreground\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"max-h-96 min-w-64 overflow-y-auto\">\n {menu.placeholder ? (\n <div className=\"px-2 py-1 text-sm text-muted-foreground\">{menu.placeholder}</div>\n ) : null}\n {menu.items.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onSelect={() => onAction(menu.action, { itemId: item.id })}\n className={cn(item.id === menu.selected && \"bg-accent\")}\n >\n {item.tone ? <StatusDot tone={item.tone} /> : null}\n <span className=\"min-w-0 flex-1 truncate font-mono\">{item.label}</span>\n {item.aside ? (\n <span className=\"font-mono text-sm text-muted-foreground tabular-nums\">\n {item.aside}\n </span>\n ) : null}\n {item.id === menu.selected ? (\n <Check className=\"size-3.5 text-primary\" />\n ) : (\n <span className=\"size-3.5\" />\n )}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n return action ? (\n <button\n key={i}\n type=\"button\"\n className=\"hover:text-primary hover:underline focus-visible:outline-none\"\n onClick={() => onAction(action)}\n >\n {crumb}\n </button>\n ) : (\n crumb\n )\n })\n\n return (\n <RecordHeader\n size={header.size}\n tone={header.tone}\n crumbs={crumbs}\n chips={<SpecChips chips={header.chips} />}\n actions={<SpecActions actions={header.actions} onAction={onAction} icons={icons} />}\n />\n )\n}\n","import * as React from \"react\"\nimport { Workbook, type WorkbookPage } from \"@invana/ui\"\n\nimport { Board } from \"./board\"\nimport type { ActionContext, BoardPagesProps, ExtraPanels } from \"./types\"\n\n/**\n * Several boards in one {@link Workbook} — the open boards of a shell's\n * main section. Each page is a {@link Board} drawn from its own spec; every\n * page stays mounted, so switching keeps a board's scroll and tab.\n *\n * Uncontrolled unless the spec names `selectAction`, as a board's own tabs\n * are: then the pick is reported and `active` is the host's to change.\n */\nexport function BoardPages<X extends ExtraPanels = Record<never, never>>({\n spec,\n onAction,\n registry,\n icons = {},\n className,\n}: BoardPagesProps<X>) {\n const first = spec.pages[0]?.id ?? \"\"\n const [ownActive, setOwnActive] = React.useState(spec.active ?? first)\n const active = spec.selectAction ? (spec.active ?? first) : ownActive\n const emit = React.useCallback(\n (id: string, ctx?: ActionContext) => onAction?.(id, ctx),\n [onAction],\n )\n\n const pages = React.useMemo<WorkbookPage[]>(\n () =>\n spec.pages.map((page) => ({\n id: page.id,\n title: page.title,\n icon: page.icon ? icons[page.icon] : undefined,\n disabled: page.disabled,\n closable: page.closable,\n content: (\n <Board\n spec={page.board}\n registry={registry}\n icons={icons}\n className=\"h-full\"\n // A board's own actions arrive told apart by the page they came from.\n onAction={(id, ctx) => emit(id, { ...ctx, pageId: page.id })}\n />\n ),\n })),\n [spec.pages, icons, registry, emit],\n )\n\n return (\n <Workbook\n pages={pages}\n activeId={active}\n tabPosition={spec.tabPosition}\n pagerPosition={spec.pagerPosition}\n onSelect={(id) => {\n setOwnActive(id)\n if (spec.selectAction) emit(spec.selectAction, { pageId: id })\n }}\n onAdd={spec.addAction ? () => emit(spec.addAction!) : undefined}\n addLabel={spec.addLabel}\n onClose={spec.closeAction ? (id) => emit(spec.closeAction!, { pageId: id }) : undefined}\n className={className}\n />\n )\n}\n","import * as React from \"react\"\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from \"@invana/ui\"\n\nexport interface AttemptRow {\n /** `queued` · `attempt 1` · `attempt 2` · `settled`. */\n label: React.ReactNode\n /** When it started, on the run's own clock — `+44.5s`. */\n started?: React.ReactNode\n /** How long it took — `30.0s`, or `4.2s…` while it is still running. */\n took?: React.ReactNode\n /** What happened, in one line. */\n what?: React.ReactNode\n tone?: \"muted\" | \"info\" | \"success\" | \"warning\" | \"destructive\"\n /** It ran and it did not stick. **Struck, never dropped.** */\n struck?: boolean\n}\n\nexport interface AttemptClockProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n rows: AttemptRow[]\n /**\n * What the two numbers are — `elapsed 32.4s · working 2.3s · the gap is the\n * attempt that timed out`.\n *\n * **Stated, never left as arithmetic.** A reader who has to subtract two\n * durations to find a 30-second timeout has been handed a sum instead of an\n * answer.\n */\n summary?: React.ReactNode\n}\n\nconst TONE: Record<string, string> = {\n muted: \"text-muted-foreground\",\n info: \"text-info\",\n success: \"text-success\",\n warning: \"text-warning\",\n destructive: \"text-destructive\",\n}\n\n/**\n * A step's clock, attempt by attempt.\n *\n * One duration cannot say what happened to a step that timed out once and then\n * returned: `2.1s` is what it *did*, `32.4s` is what a reader waited, and the\n * gap between them **is** the first attempt. So the clock is a row per attempt\n * — queued, each try, settled — and the try that failed keeps its place, struck.\n *\n * Nothing new is recorded for this: it is the `timing` and `attempt` fields the\n * interpreter already writes, read as a list instead of as a total.\n */\nexport const AttemptClock = React.forwardRef<HTMLDivElement, AttemptClockProps>(\n ({ rows, summary, className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n <Table density=\"compact\">\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-[7rem]\">\n <span className=\"sr-only\">what</span>\n </TableHead>\n <TableHead className=\"w-[6rem]\">started</TableHead>\n <TableHead className=\"w-[5.5rem]\">took</TableHead>\n <TableHead>what happened</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row, index) => {\n // The tone marks **the attempt and its duration** — the two cells\n // that carry the verdict. The sentence stays type: a table where\n // every line is coloured has no emphasis left, and *succeeded* is\n // the expected case, not a finding. A struck attempt is the\n // exception, and it takes the tone all the way across.\n const tone = row.tone ? TONE[row.tone] : undefined\n return (\n <TableRow key={index}>\n <TableCell className={cn(tone, row.struck && \"line-through\")}>\n {row.label}\n </TableCell>\n <TableCell className=\"font-mono tabular-nums text-muted-foreground\">\n {row.started}\n </TableCell>\n <TableCell className={cn(\"font-mono tabular-nums\", tone)}>\n {row.took}\n </TableCell>\n <TableCell\n className={cn(row.struck && [\"line-through\", tone])}\n >\n {row.what}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n {summary != null ? (\n <div className=\"border-border border-t px-2.5 py-1.5 text-sm text-muted-foreground\">\n {summary}\n </div>\n ) : null}\n </div>\n ),\n)\nAttemptClock.displayName = \"AttemptClock\"\n","import * as React from \"react\"\nimport {\n ArtifactTable,\n ExchangeRecord,\n LayerSection,\n LensRow,\n MarkChip,\n ParticipantRow,\n TouchStrip,\n TraceGate,\n TraceList,\n TraceLoop,\n TraceStep,\n type Artifact,\n type Layer,\n type LayerPalette,\n type LensUsage,\n type Narrowing,\n type TouchItem,\n} from \"@invana/ui\"\n\nimport { AttemptClock, type AttemptRow } from \"../parts/attempt-clock\"\n\nimport type { PanelRendererProps } from \"../types\"\n\n/**\n * The panels a **run page** is made of.\n *\n * They are not in `BUILT_IN_PANELS`, and that is deliberate: the built-in list\n * is eleven kinds two unrelated surfaces each need, and these six are one\n * surface family's — a run read in order, what it touched, a step's clock, the\n * files it left, what governed it, and the ask it settled. The layers it spent\n * are the `gantt` block — a row per layer, a bar per task that reached it — so\n * a conversation draws them too.\n * Shipping them here rather than in the default registry keeps a consumer that\n * only wanted tiles and a log from carrying the run vocabulary, while keeping\n * the adapter in the kit rather than copied into every product that draws runs.\n *\n * ```ts\n * <Board spec={spec} registry={RUN_PANELS} />\n * ```\n */\n\n/** One row of a trace — a step, a loop that holds rows, or a gate between them. */\nexport type TraceEntry =\n | {\n kind?: \"step\"\n seq?: number | string\n name: string\n description?: string\n layer?: string\n role?: string\n duration?: string\n note?: string\n /** The exception this row carries — `↺ 2 of 3`, `live`, `↳ delegates`. */\n mark?: string\n markTone?: React.ComponentProps<typeof MarkChip>[\"tone\"]\n depth?: number\n dim?: boolean\n struck?: boolean\n /** Fired as `selectAction` with `{ stepId }`. */\n id?: string\n }\n | {\n kind: \"loop\"\n label: string\n summary?: string\n tone?: \"warning\" | \"info\" | \"muted\"\n rounds: TraceEntry[]\n }\n | {\n kind: \"gate\"\n label: string\n note?: string\n tone?: \"destructive\" | \"warning\" | \"muted\"\n edge?: \"before\" | \"after\"\n }\n\nexport interface TraceOptions {\n entries: TraceEntry[]\n palette?: LayerPalette\n /** Which step is open elsewhere. */\n selectedId?: string | null\n /** Dispatched with `{ stepId }` when a row is picked. */\n selectAction?: string\n}\n\nexport interface TouchedOptions {\n items: TouchItem[]\n palette?: LayerPalette\n}\n\nexport interface AttemptsOptions {\n rows: AttemptRow[]\n summary?: string\n}\n\n\n/**\n * One file a step left, as **data**.\n *\n * `ArtifactTable`'s own `Artifact` types every cell as a `ReactNode`, which a\n * spec cannot be. These are strings: a board is fetched, stored beside a\n * plan and diffed, and a `ReactNode` survives none of that.\n */\nexport interface ArtifactSpec {\n name: string\n kind?: string\n size?: string\n /** The address — eight characters, drawn mono ([SR58]). */\n digest?: string\n written?: string\n /** Retention took the bytes. The row stays, struck. */\n gone?: boolean\n}\n\nexport interface ArtifactsOptions {\n files: ArtifactSpec[]\n /** Dispatched with `{ digest, name, index }`. Omitted, the column is absent. */\n openAction?: string\n downloadAction?: string\n}\n\n/** One lens row under the layer it narrows. */\nexport interface LensRowSpec {\n name: string\n narrows?: Narrowing[]\n usage?: LensUsage\n}\n\n/** One participant the world allowed, and what the run did with it ([SR53]). */\nexport interface ParticipantSpec {\n address: string\n /** `touched` · `never touched` · `refused` · `miss` — any word the engine writes. */\n verdict: string\n /** What came back, or why nothing did — `1,284 rows · step 7`. */\n note?: string\n}\n\nexport interface LensSectionSpec {\n layer: Layer\n summary?: string\n count?: number\n /** Nothing narrows this layer. Drawn dim rather than dropped. */\n dim?: boolean\n /**\n * **A section carries one of two readings, and they are different questions.**\n * `participants` is a *run's* lens — every address the world allowed, each\n * marked with what this execution did with it. `rows` is a *world's* — the\n * lenses that narrow this layer, as they read in the Govern drawer. A section\n * that gives both draws both, participants first.\n */\n participants?: ParticipantSpec[]\n rows?: LensRowSpec[]\n}\n\nexport interface LensOptions {\n sections: LensSectionSpec[]\n palette?: LayerPalette\n /** Which lens is open elsewhere, by name. */\n selected?: string | null\n /** Dispatched with `{ lens }` when a row is picked. */\n selectAction?: string\n}\n\nexport interface ClarificationOption {\n label: string\n /** The one that was taken. */\n chosen?: boolean\n}\n\nexport interface ClarificationOptions {\n /** Who asked — `the agent asks`. */\n asker?: string\n question: string\n /** Why it had to ask, in the step's own terms. */\n why?: string\n options?: ClarificationOption[]\n answerer?: string\n answer?: string\n /** What it cost and what happened next — `after 41.2s · resumed on round 2`. */\n answerNote?: string\n}\n\n/**\n * The six kinds, as a type argument for `BoardSpec`.\n *\n * A `type` and not an `interface`: `ExtraPanels` is `Record<string, unknown>`,\n * which an interface never satisfies — it has no implicit index signature — so\n * an interface here would compile everywhere except at the one call site that\n * matters.\n */\nexport type RunPanelOptions = {\n trace: TraceOptions\n touched: TouchedOptions\n attempts: AttemptsOptions\n artifacts: ArtifactsOptions\n lens: LensOptions\n clarification: ClarificationOptions\n}\n\nexport function TracePanel({\n panel,\n options,\n onAction,\n}: PanelRendererProps<TraceOptions>) {\n const step = (entry: Extract<TraceEntry, { kind?: \"step\" }>, key: string) => (\n <TraceStep\n key={key}\n seq={entry.seq}\n name={entry.name}\n description={entry.description}\n layer={entry.layer}\n role={entry.role}\n duration={entry.duration}\n note={entry.note}\n mark={\n entry.mark ? (\n <MarkChip tone={entry.markTone}>{entry.mark}</MarkChip>\n ) : undefined\n }\n palette={options.palette}\n depth={entry.depth}\n dim={entry.dim}\n struck={entry.struck}\n selected={entry.id != null && entry.id === options.selectedId}\n onSelect={\n options.selectAction && entry.id\n ? () =>\n onAction(options.selectAction as string, {\n panelId: panel.id,\n stepId: entry.id,\n })\n : undefined\n }\n />\n )\n\n const draw = (entry: TraceEntry, key: string): React.ReactNode => {\n if (entry.kind === \"gate\")\n return (\n <TraceGate\n key={key}\n label={entry.label}\n note={entry.note}\n tone={entry.tone}\n edge={entry.edge}\n />\n )\n if (entry.kind === \"loop\")\n return (\n <TraceLoop\n key={key}\n label={entry.label}\n summary={entry.summary}\n tone={entry.tone}\n >\n {entry.rounds.map((round, i) => draw(round, `${key}-${i}`))}\n </TraceLoop>\n )\n return step(entry, key)\n }\n\n return <TraceList>{options.entries.map((entry, i) => draw(entry, `${i}`))}</TraceList>\n}\n\nexport function TouchedPanel({ options }: PanelRendererProps<TouchedOptions>) {\n return <TouchStrip items={options.items} palette={options.palette} />\n}\n\nexport function AttemptsPanel({ options }: PanelRendererProps<AttemptsOptions>) {\n return <AttemptClock rows={options.rows} summary={options.summary} />\n}\n\n/** Merge into a board's registry to draw a run — see the note above. */\nexport const RUN_PANELS = {\n trace: TracePanel,\n touched: TouchedPanel,\n attempts: AttemptsPanel,\n artifacts: ArtifactsPanel,\n lens: LensPanel,\n clarification: ClarificationPanel,\n}\n\n// ── the renderers for the four kinds above ───────────────────────────────\n\nexport function ArtifactsPanel({\n panel,\n options,\n onAction,\n}: PanelRendererProps<ArtifactsOptions>) {\n return (\n <ArtifactTable\n files={options.files as Artifact[]}\n onOpen={\n options.openAction\n ? (file) =>\n onAction(options.openAction as string, {\n panelId: panel.id,\n itemId: String(file.digest ?? file.name),\n })\n : undefined\n }\n onDownload={\n options.downloadAction\n ? (file) =>\n onAction(options.downloadAction as string, {\n panelId: panel.id,\n itemId: String(file.digest ?? file.name),\n })\n : undefined\n }\n />\n )\n}\n\nexport function LensPanel({ panel, options, onAction }: PanelRendererProps<LensOptions>) {\n const pick = options.selectAction\n ? (lens: string) => onAction(options.selectAction as string, { panelId: panel.id, lens })\n : undefined\n return (\n <div className=\"flex flex-col gap-2\">\n {options.sections.map((section) => (\n <LayerSection\n key={section.layer}\n layer={section.layer}\n summary={section.summary}\n palette={options.palette}\n count={section.count ?? section.participants?.length}\n dim={section.dim}\n >\n {(section.participants ?? []).map((participant) => (\n <ParticipantRow\n key={participant.address}\n address={participant.address}\n verdict={participant.verdict}\n note={participant.note}\n />\n ))}\n {(section.rows ?? []).map((row) => (\n <LensRow\n key={row.name}\n name={row.name}\n narrows={row.narrows}\n usage={row.usage}\n palette={options.palette}\n selected={options.selected === row.name}\n onSelect={pick}\n />\n ))}\n </LayerSection>\n ))}\n </div>\n )\n}\n\nexport function ClarificationPanel({\n options,\n}: PanelRendererProps<ClarificationOptions>) {\n return (\n <ExchangeRecord\n asker={options.asker}\n question={options.question}\n why={options.why}\n options={options.options}\n answerer={options.answerer}\n answer={options.answer}\n answerNote={options.answerNote}\n />\n )\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@invana/boards",
|
|
3
|
+
"version": "0.0.32",
|
|
4
|
+
"description": "Invana Design System - JSON-driven boards assembled from design-kit panels",
|
|
5
|
+
"homepage": "https://github.com/invana/design-kit#readme",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.cjs",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/index.cjs"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"keywords": [
|
|
21
|
+
"design-system",
|
|
22
|
+
"react",
|
|
23
|
+
"board",
|
|
24
|
+
"invana/board"
|
|
25
|
+
],
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/invana/design-kit/issues"
|
|
28
|
+
},
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/invana/design-kit.git",
|
|
32
|
+
"directory": "packages/boards"
|
|
33
|
+
},
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"author": "Ravi Raja Merugu",
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"react": "^18 || ^19",
|
|
41
|
+
"react-dom": "^18 || ^19",
|
|
42
|
+
"react-hook-form": "^7",
|
|
43
|
+
"@invana/charts": "0.0.32",
|
|
44
|
+
"@invana/editor": "0.0.32",
|
|
45
|
+
"@invana/forms": "0.0.32",
|
|
46
|
+
"@invana/tables": "0.0.32",
|
|
47
|
+
"@invana/styling": "0.0.32",
|
|
48
|
+
"@invana/ui": "0.0.32",
|
|
49
|
+
"@invana/blocks": "0.0.32"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"lucide-react": "^1.24.0"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@types/react": "^19.2.17",
|
|
56
|
+
"@types/react-dom": "^19.2.3",
|
|
57
|
+
"react": "^19.2.7",
|
|
58
|
+
"react-dom": "^19.2.7",
|
|
59
|
+
"react-hook-form": "^7.81.0",
|
|
60
|
+
"tsup": "^8.5.1",
|
|
61
|
+
"typescript": "~5.9.3",
|
|
62
|
+
"vitest": "^4.1.10",
|
|
63
|
+
"@invana/blocks": "0.0.32",
|
|
64
|
+
"@invana/editor": "0.0.32",
|
|
65
|
+
"@invana/forms": "0.0.32",
|
|
66
|
+
"@invana/charts": "0.0.32",
|
|
67
|
+
"@invana/tables": "0.0.32",
|
|
68
|
+
"@invana/ui": "0.0.32",
|
|
69
|
+
"@invana/styling": "0.0.32"
|
|
70
|
+
},
|
|
71
|
+
"scripts": {
|
|
72
|
+
"build": "tsup",
|
|
73
|
+
"lint": "eslint .",
|
|
74
|
+
"type-check": "tsc --noEmit -p tsconfig.lib.json",
|
|
75
|
+
"test": "vitest run"
|
|
76
|
+
}
|
|
77
|
+
}
|