@invana/ui 0.0.30 → 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/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  import * as React$1 from 'react';
3
- import React__default, { Component, ReactNode } from 'react';
3
+ import React__default, { Component, ReactNode, ErrorInfo, ElementType, CSSProperties } from 'react';
4
4
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
5
5
  import * as class_variance_authority_types from 'class-variance-authority/types';
6
6
  import { VariantProps } from 'class-variance-authority';
@@ -16,6 +16,7 @@ import * as MenubarPrimitive from '@radix-ui/react-menubar';
16
16
  import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
17
17
  import * as PopoverPrimitive from '@radix-ui/react-popover';
18
18
  import * as ProgressPrimitive from '@radix-ui/react-progress';
19
+ import { Questionnaire as Questionnaire$1 } from '@shadcn/react/questionnaire';
19
20
  import { Separator as Separator$1, Panel, Group } from 'react-resizable-panels';
20
21
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
21
22
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
@@ -25,24 +26,6 @@ import * as TogglePrimitive from '@radix-ui/react-toggle';
25
26
  import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
26
27
  import { LucideIcon } from 'lucide-react';
27
28
 
28
- /**
29
- * `clsx` + `tailwind-merge`, and nothing else.
30
- *
31
- * This used to be an `extendTailwindMerge` that registered one class group.
32
- * `text-*` is ambiguous — it is both the font-size scale and the text-colour
33
- * scale — so tailwind-merge decides which group a class belongs to by matching
34
- * its value against Tailwind's built-in size names. `meta` was not one of them,
35
- * so `text-meta` was read as a *colour* and silently dropped whatever colour
36
- * class came before it:
37
- *
38
- * cn("text-[var(--badge-ink)]", "text-meta") → "text-meta" // colour lost
39
- *
40
- * The type ladder is now `base · sm · xs` (`@invana/styling`), every one of
41
- * them a Tailwind built-in, so there is nothing left to register and the
42
- * footgun is gone with the token that caused it. If a future `--text-*` token
43
- * invents a name Tailwind does not know, bring the `extend` back in the same
44
- * breath — it will eat colours at a distance and the cause will not be obvious.
45
- */
46
29
  declare function cn(...inputs: ClassValue[]): string;
47
30
 
48
31
  declare const Accordion: React$1.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React$1.RefAttributes<HTMLDivElement>>;
@@ -52,6 +35,7 @@ declare const AccordionContent: React$1.ForwardRefExoticComponent<Omit<Accordion
52
35
 
53
36
  declare const Alert: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
54
37
  variant?: "default" | "destructive" | null | undefined;
38
+ tone?: "destructive" | "info" | "success" | "warning" | null | undefined;
55
39
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLDivElement>>;
56
40
  declare const AlertTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLParagraphElement>>;
57
41
  declare const AlertDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
@@ -74,9 +58,31 @@ declare const AlertDialogDescription: React$1.ForwardRefExoticComponent<Omit<Ale
74
58
  declare const AlertDialogAction: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
75
59
  declare const AlertDialogCancel: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
76
60
 
77
- declare const Avatar: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
61
+ /**
62
+ * Sizes are the control scale, so an avatar sits in a row of controls at the
63
+ * row's height: `xs` 22 · `sm` 26 · `md` 32 · `lg` 40px at a 13px root. `lg`
64
+ * is the default — the size it always had. Its initials step down with it.
65
+ */
66
+ declare const avatarVariants: (props?: ({
67
+ size?: "xs" | "sm" | "lg" | "md" | null | undefined;
68
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
69
+ interface AvatarProps extends React$1.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>, VariantProps<typeof avatarVariants> {
70
+ }
71
+ declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & React$1.RefAttributes<HTMLSpanElement>>;
78
72
  declare const AvatarImage: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React$1.RefAttributes<HTMLImageElement>, "ref"> & React$1.RefAttributes<HTMLImageElement>>;
79
73
  declare const AvatarFallback: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
74
+ interface AvatarGroupProps extends React$1.HTMLAttributes<HTMLDivElement> {
75
+ /** Show this many and fold the rest into a `+n` avatar. */
76
+ max?: number;
77
+ /** The size of the `+n` avatar — the same as the avatars it follows. */
78
+ size?: AvatarProps["size"];
79
+ }
80
+ /**
81
+ * Avatars overlapping in a row — who is on a run, a thread, a review — each
82
+ * ringed in the background so the overlap reads as edges. Past `max`, the rest
83
+ * are one `+n`.
84
+ */
85
+ declare const AvatarGroup: React$1.ForwardRefExoticComponent<AvatarGroupProps & React$1.RefAttributes<HTMLDivElement>>;
80
86
 
81
87
  /**
82
88
  * `variant` is the treatment, `tone` is the meaning.
@@ -88,15 +94,15 @@ declare const AvatarFallback: React$1.ForwardRefExoticComponent<Omit<AvatarPrimi
88
94
  * recolours `default`, `outline` and `soft`, and leaves `secondary` and
89
95
  * `destructive` alone — those are already a colour decision.
90
96
  *
91
- * No pill. A badge is structure, so it takes the structure radius, 0 (see
92
- * `@invana/styling` › border radius, decided 01-09-2026). Where round *is* the
93
- * object — a count bubble on a nav item, a state marker — that is `StatusDot`
94
- * or an explicit `rounded-full`, never a badge variant.
97
+ * No pill. A badge sits at control height beside buttons, so it takes the
98
+ * control radius, `rounded-control` (see `@invana/styling` › border radius).
99
+ * Where round *is* the object — a count bubble on a nav item, a state marker —
100
+ * that is `StatusDot` or an explicit `rounded-full`, never a badge variant.
95
101
  */
96
102
  declare const badgeVariants: (props?: ({
97
103
  variant?: "default" | "destructive" | "outline" | "secondary" | "soft" | null | undefined;
98
- tone?: "primary" | "success" | "warning" | "info" | "muted" | null | undefined;
99
- size?: "default" | "xs" | "sm" | null | undefined;
104
+ tone?: "destructive" | "info" | "success" | "warning" | "primary" | "muted" | null | undefined;
105
+ size?: "xs" | "sm" | null | undefined;
100
106
  } & class_variance_authority_types.ClassProp) | undefined) => string;
101
107
  interface BadgeProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
102
108
  }
@@ -122,7 +128,7 @@ declare const BreadcrumbEllipsis: {
122
128
 
123
129
  declare const buttonVariants: (props?: ({
124
130
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "soft" | null | undefined;
125
- size?: "default" | "xs" | "sm" | "lg" | "icon-xs" | "icon" | "nav-icon" | null | undefined;
131
+ size?: "default" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon" | "nav-icon" | null | undefined;
126
132
  } & class_variance_authority_types.ClassProp) | undefined) => string;
127
133
  interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
128
134
  asChild?: boolean;
@@ -302,8 +308,10 @@ declare const itemVariants: (props?: ({
302
308
  variant?: "default" | "outline" | "muted" | null | undefined;
303
309
  size?: "default" | "xs" | "sm" | null | undefined;
304
310
  selected?: boolean | null | undefined;
311
+ dim?: boolean | null | undefined;
312
+ struck?: boolean | null | undefined;
305
313
  } & class_variance_authority_types.ClassProp) | undefined) => string;
306
- declare function Item({ className, variant, size, selected, asChild, ...props }: React$1.ComponentProps<"div"> & VariantProps<typeof itemVariants> & {
314
+ declare function Item({ className, variant, size, selected, dim, struck, asChild, ...props }: React$1.ComponentProps<"div"> & VariantProps<typeof itemVariants> & {
307
315
  asChild?: boolean;
308
316
  }): React$1.JSX.Element;
309
317
  declare const itemMediaVariants: (props?: ({
@@ -453,6 +461,75 @@ declare const Progress: React$1.ForwardRefExoticComponent<Omit<ProgressPrimitive
453
461
  size?: ProgressSize;
454
462
  } & React$1.RefAttributes<HTMLDivElement>>;
455
463
 
464
+ type NavProps = Pick<ButtonProps, "size" | "variant">;
465
+ declare function Questionnaire({ className, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Root>): React$1.JSX.Element;
466
+ /**
467
+ * The progress line on its own — a label and a bar filled to `value` (0–1).
468
+ * `QuestionnaireProgress` draws it from the questionnaire's position; a step
469
+ * outside the items, such as a review before submitting, draws it directly.
470
+ */
471
+ declare function QuestionnaireProgressBar({ label, value, className, ...props }: React$1.ComponentProps<"div"> & {
472
+ label?: React$1.ReactNode;
473
+ value: number;
474
+ }): React$1.JSX.Element;
475
+ /**
476
+ * `1 of 3` and a bar that fills as the steps are answered. Pass children to
477
+ * replace the count's words; the bar stays.
478
+ */
479
+ declare function QuestionnaireProgress({ className, children, ...props }: Omit<React$1.ComponentProps<typeof Questionnaire$1.Progress>, "render">): React$1.JSX.Element;
480
+ declare function QuestionnaireItem({ className, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Item>): React$1.JSX.Element;
481
+ declare function QuestionnaireTitle({ className, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Title>): React$1.JSX.Element;
482
+ declare function QuestionnaireDescription({ className, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Description>): React$1.JSX.Element;
483
+ declare function QuestionnaireChoices({ className, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Choices>): React$1.JSX.Element;
484
+ interface QuestionnaireChoiceProps extends React$1.ComponentProps<typeof Questionnaire$1.Choice> {
485
+ /**
486
+ * Where the choice comes from, on the right in mono — `142 open POs`,
487
+ * `pnl.total`. What makes an option read as something the data holds.
488
+ */
489
+ detail?: React$1.ReactNode;
490
+ /**
491
+ * A settled answer: the choice is shown, not offered. Unlike `disabled` it
492
+ * keeps full strength, so the answer still reads.
493
+ */
494
+ readOnly?: boolean;
495
+ /**
496
+ * A short tag or an icon in a box before the choice — `BV`, a store. What
497
+ * the choice is, read before its name.
498
+ */
499
+ lead?: React$1.ReactNode;
500
+ /**
501
+ * A figure on the right, in place of `detail` — the value over its unit,
502
+ * `2,480` over `kg/ha`. What the choice would give, read before picking it.
503
+ */
504
+ figure?: QuestionnaireChoiceFigure;
505
+ }
506
+ /**
507
+ * The tones the kit draws specially — **suggestions, not a limit.** Anything
508
+ * else renders in the foreground.
509
+ */
510
+ type QuestionnaireFigureTone = "success" | "warning" | "error" | (string & {});
511
+ interface QuestionnaireChoiceFigure {
512
+ value: React$1.ReactNode;
513
+ unit?: React$1.ReactNode;
514
+ tone?: QuestionnaireFigureTone;
515
+ }
516
+ declare function QuestionnaireChoice({ children, className, detail, readOnly, disabled, lead, figure, ...props }: QuestionnaireChoiceProps): React$1.JSX.Element;
517
+ /** The choice itself — `Delegation`. Sits above an optional description. */
518
+ declare function QuestionnaireChoiceTitle({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
519
+ /** What the choice means — `Show how work moves to a specialist.` */
520
+ declare function QuestionnaireChoiceDescription({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
521
+ interface QuestionnaireInputProps extends React$1.ComponentProps<typeof Questionnaire$1.Input> {
522
+ /** The unit, on the right in mono — `%`, `kg/ha`. Open vocabulary. */
523
+ unit?: React$1.ReactNode;
524
+ }
525
+ declare function QuestionnaireInput({ className, unit, ...props }: QuestionnaireInputProps): React$1.JSX.Element;
526
+ declare function QuestionnaireError({ className, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Error>): React$1.JSX.Element;
527
+ declare function QuestionnaireActions({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
528
+ declare function QuestionnairePrevious({ children, className, size, variant, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Previous> & NavProps): React$1.JSX.Element;
529
+ declare function QuestionnaireSkip({ children, className, size, variant, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Skip> & NavProps): React$1.JSX.Element;
530
+ declare function QuestionnaireNext({ children, className, size, variant, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Next> & NavProps): React$1.JSX.Element;
531
+ declare function QuestionnaireSubmit({ children, className, size, variant, ...props }: React$1.ComponentProps<typeof Questionnaire$1.Submit> & NavProps): React$1.JSX.Element;
532
+
456
533
  declare const ResizablePanelGroup: (props: React.ComponentProps<typeof Group>) => React$1.JSX.Element;
457
534
  declare const ResizablePanel: typeof Panel;
458
535
  declare const ResizableHandle: ({ withHandle, className, ...props }: React.ComponentProps<typeof Separator$1> & {
@@ -462,13 +539,74 @@ declare const ResizableHandle: ({ withHandle, className, ...props }: React.Compo
462
539
  declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
463
540
  declare const ScrollBar: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
464
541
 
542
+ interface SegmentedOption {
543
+ /** What the caller gets back. */
544
+ value: string;
545
+ label: React$1.ReactNode;
546
+ /** A second line under the label, smaller and muted — `±1.4 pp`. */
547
+ sub?: React$1.ReactNode;
548
+ disabled?: boolean;
549
+ }
550
+ interface SegmentedControlProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue"> {
551
+ options: SegmentedOption[];
552
+ /** Controlled. Pass it with {@link onValueChange}; `null` is no pick. */
553
+ value?: string | null;
554
+ /**
555
+ * Uncontrolled starting option. Defaults to the first, because a reading is
556
+ * never off. `null` starts with none picked — a question not yet answered,
557
+ * where picking the first for the reader would answer it for them.
558
+ */
559
+ defaultValue?: string | null;
560
+ onValueChange?: (value: string) => void;
561
+ /**
562
+ * The control scale: `xs` (22px) inside a row, `sm` (26px) beside a search
563
+ * or filter chips, `md` (32px, the default — as for every control) in a
564
+ * standalone form.
565
+ */
566
+ size?: "xs" | "sm" | "md";
567
+ /** Fill the width given, each option an equal share of it. */
568
+ stretch?: boolean;
569
+ /**
570
+ * `tint` marks the active option with the primary tint — a reading of the
571
+ * page. `solid` fills it with primary and rules the options apart — an
572
+ * answer to a question, where the pick is the thing being read.
573
+ */
574
+ variant?: "tint" | "solid";
575
+ /**
576
+ * A settled answer: the pick is shown, not offered. Unlike disabling every
577
+ * option it keeps full strength, so the answer still reads.
578
+ */
579
+ readOnly?: boolean;
580
+ }
581
+ /**
582
+ * One page, read another way.
583
+ *
584
+ * A run has four readings and a step has three — *In order · Layers · Flow ·
585
+ * Lens*, *Overview · Touched · Log* — and each of them is the **same record**
586
+ * drawn differently. That is what this control says and a tab strip does not:
587
+ * tabs own a panel and imply separate content underneath, so four tabs over one
588
+ * trace read as four pages that happen to share a header. A segmented control
589
+ * sits in the pagehead's action slot, beside the chips that describe the record,
590
+ * and says *this is a switch on what you are already looking at*.
591
+ *
592
+ * It is also not `ToggleGroup`. That is a set of independent toggles which may
593
+ * all be off; a reading is never off, so the control is a radio group and is
594
+ * announced as one. Arrow keys move between options, which is what a reader who
595
+ * never leaves the keyboard expects of a radio group.
596
+ *
597
+ * **The frame is the control.** One border around the whole thing, the active
598
+ * option filled with the primary tint and the rest plain — never a border per
599
+ * option, which draws three controls where there is one.
600
+ */
601
+ declare const SegmentedControl: React$1.ForwardRefExoticComponent<SegmentedControlProps & React$1.RefAttributes<HTMLDivElement>>;
602
+
465
603
  declare const Sheet: React$1.FC<DialogPrimitive.DialogProps>;
466
604
  declare const SheetTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
467
605
  declare const SheetClose: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
468
606
  declare const SheetPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
469
607
  declare const SheetOverlay: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
470
608
  declare const sheetVariants: (props?: ({
471
- side?: "top" | "right" | "bottom" | "left" | null | undefined;
609
+ side?: "bottom" | "left" | "right" | "top" | null | undefined;
472
610
  } & class_variance_authority_types.ClassProp) | undefined) => string;
473
611
  interface SheetContentProps extends React$1.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
474
612
  }
@@ -558,6 +696,26 @@ declare const Toaster: ({ ...props }: ToasterProps) => React$1.JSX.Element;
558
696
 
559
697
  declare function Spinner({ className, ...props }: React.ComponentProps<"svg">): React$1.JSX.Element;
560
698
 
699
+ /**
700
+ * Things laid out one after another, a set gap apart: a column (the default)
701
+ * or a row. The layout every screen and story otherwise writes by hand as
702
+ * `flex flex-col gap-4` — so the gaps come from one short scale, in `rem`, and
703
+ * follow the root as the type does.
704
+ *
705
+ * `gap` is the space between, never around: a stack draws no padding, border
706
+ * or background, so it can sit inside anything without changing its frame.
707
+ */
708
+ declare const stackVariants: (props?: ({
709
+ direction?: "row" | "column" | null | undefined;
710
+ gap?: "none" | "xs" | "sm" | "lg" | "md" | "xl" | null | undefined;
711
+ align?: "end" | "start" | "center" | "stretch" | "baseline" | null | undefined;
712
+ justify?: "end" | "start" | "center" | "between" | null | undefined;
713
+ wrap?: boolean | null | undefined;
714
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
715
+ interface StackProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof stackVariants> {
716
+ }
717
+ declare const Stack: React$1.ForwardRefExoticComponent<StackProps & React$1.RefAttributes<HTMLDivElement>>;
718
+
561
719
  /**
562
720
  * The state of one thing, as a dot.
563
721
  *
@@ -577,7 +735,7 @@ declare function Spinner({ className, ...props }: React.ComponentProps<"svg">):
577
735
  * `motion-reduce` variant below honours by design.
578
736
  */
579
737
  declare const statusDotVariants: (props?: ({
580
- tone?: "success" | "warning" | "info" | "muted" | "error" | "running" | "queued" | null | undefined;
738
+ tone?: "info" | "success" | "warning" | "muted" | "error" | "running" | "queued" | null | undefined;
581
739
  size?: "xs" | "sm" | "lg" | "md" | null | undefined;
582
740
  } & class_variance_authority_types.ClassProp) | undefined) => string;
583
741
  interface StatusDotProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, "children">, VariantProps<typeof statusDotVariants> {
@@ -591,8 +749,51 @@ interface StatusDotProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, "
591
749
  }
592
750
  declare const StatusDot: React$1.ForwardRefExoticComponent<StatusDotProps & React$1.RefAttributes<HTMLSpanElement>>;
593
751
 
752
+ declare const statusIconVariants: (props?: ({
753
+ state?: "alert" | "success" | "error" | "waiting" | "running" | "queued" | "question" | "cancelled" | null | undefined;
754
+ size?: "sm" | "md" | null | undefined;
755
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
756
+ type StatusIconState = "success" | "error" | "running" | "queued" | "waiting" | "question" | "alert" | "cancelled";
757
+ interface StatusIconProps extends Omit<React$1.SVGAttributes<SVGSVGElement>, "children">, VariantProps<typeof statusIconVariants> {
758
+ state: StatusIconState;
759
+ /**
760
+ * What this state is called — the accessible name and the tooltip.
761
+ *
762
+ * Pass it whenever the glyph stands alone, which is the reason to use one.
763
+ */
764
+ label?: string;
765
+ }
766
+ declare const StatusIcon: React$1.ForwardRefExoticComponent<StatusIconProps & React$1.RefAttributes<SVGSVGElement>>;
767
+
768
+ /**
769
+ * How much room a row gets. The type size never moves — a row is the root size
770
+ * at every density — only the height and the cell padding do.
771
+ *
772
+ * - `compact` — the control scale's `sm`, 26px: a journal, a trace, a
773
+ * step's output, a log.
774
+ * - `default` — `md`, 32px: a list in an application.
775
+ * - `comfortable` — `lg`, 40px: a table standing alone on a page, a settings
776
+ * list.
777
+ *
778
+ * The px are at a 13px root. Every density is a ratio of the root, like the
779
+ * type, so a site that sets a 16px root gets proportionally roomier rows.
780
+ */
781
+ type TableDensity = "compact" | "default" | "comfortable";
594
782
  declare const Table: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLTableElement> & {
595
- density?: "default" | "compact";
783
+ density?: TableDensity;
784
+ /**
785
+ * No box, and nothing wasted on its outside: only the rules between rows
786
+ * are drawn, and the first and last columns sit flush with the text around
787
+ * the table. For a table inside a card, a panel or an answer, whose edge
788
+ * already frames it — a second border a few pixels in reads as a box
789
+ * inside a box.
790
+ */
791
+ seamless?: boolean;
792
+ /**
793
+ * Draw the box. Off for a wrapper that draws the box itself, as `DataTable`
794
+ * does. `seamless` draws no box either way.
795
+ */
796
+ bordered?: boolean;
596
797
  } & React$1.RefAttributes<HTMLTableElement>>;
597
798
  declare const TableHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLTableSectionElement> & React$1.RefAttributes<HTMLTableSectionElement>>;
598
799
  declare const TableBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLTableSectionElement> & React$1.RefAttributes<HTMLTableSectionElement>>;
@@ -639,6 +840,38 @@ declare const ToggleGroupItem: React$1.ForwardRefExoticComponent<Omit<ToggleGrou
639
840
  size?: "default" | "sm" | "lg" | null | undefined;
640
841
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLButtonElement>>;
641
842
 
843
+ /**
844
+ * Why a band is not drawn — **and these are three different facts.**
845
+ *
846
+ * - `unrecorded` — nobody wrote this document. A step in flight has no
847
+ * `result.json` because the interpreter writes it when the row settles.
848
+ * - `purged` — it was written, and retention removed it. The counts and the
849
+ * outcome stay; the input, the output and the log do not.
850
+ * - `declared-none` — the step declares no such output at all: a `notify` step
851
+ * returns nothing, and a read under `read_only: true` writes nothing.
852
+ *
853
+ * Collapsing them into one *empty* is the thing this component exists to stop.
854
+ * An empty table claims a step returned an empty result; *purged* claims it
855
+ * returned nothing. Both are lies about a different record.
856
+ */
857
+ type AbsenceReason = "unrecorded" | "purged" | "declared-none";
858
+ interface AbsenceNoteProps extends React$1.HTMLAttributes<HTMLDivElement> {
859
+ reason: AbsenceReason;
860
+ /** Overrides the word. The engine's own term is better where there is one — `read_only: true`. */
861
+ label?: React$1.ReactNode;
862
+ /** Why, in the record's terms. One or two sentences, and it is not optional in spirit. */
863
+ children?: React$1.ReactNode;
864
+ }
865
+ /**
866
+ * A band with nothing in it, saying which kind of nothing.
867
+ *
868
+ * It is not `EmptyState`: that invites an action — *load a dataset*, *ask a
869
+ * question* — and there is no action here. A step that recorded nothing is a
870
+ * finished fact about a finished record, and the only thing owed to the reader
871
+ * is which fact it is.
872
+ */
873
+ declare const AbsenceNote: React$1.ForwardRefExoticComponent<AbsenceNoteProps & React$1.RefAttributes<HTMLDivElement>>;
874
+
642
875
  /**
643
876
  * How this address stood in the run, or in the rule being read.
644
877
  *
@@ -722,6 +955,168 @@ interface AgentChipProps extends React$1.HTMLAttributes<HTMLSpanElement>, Varian
722
955
  */
723
956
  declare const AgentChip: React$1.ForwardRefExoticComponent<AgentChipProps & React$1.RefAttributes<HTMLSpanElement>>;
724
957
 
958
+ /** One published model, and what this session may do with it. */
959
+ interface DataReachModel {
960
+ id: string;
961
+ /** `Accounts`, `Funding rounds`. */
962
+ name: string;
963
+ /**
964
+ * Records this session can see, after its slice — not the model's size.
965
+ * `null` or left out while the count is on its way.
966
+ */
967
+ records?: number | null;
968
+ /**
969
+ * What it may do — `["read"]`, `["read", "write"]` — or `"denied"`. An open
970
+ * vocabulary: a product that adds `export` passes it and it is written out.
971
+ */
972
+ access: string[] | "denied";
973
+ /** What the session's view of it is narrowed to — `time 2019 → now · axis announced_at`. */
974
+ slice?: React$1.ReactNode;
975
+ }
976
+ /** What a session can reach, summed: the models it may read and the records in them. */
977
+ declare function summarizeReach(models: DataReachModel[]): {
978
+ readable: number;
979
+ total: number;
980
+ records: number;
981
+ counting: boolean;
982
+ };
983
+ /** `1.2M`, `84K` — how a record count is written where room is short. */
984
+ declare const formatRecords: (n: number) => string;
985
+ interface DataReachProps extends React$1.HTMLAttributes<HTMLDivElement> {
986
+ models: DataReachModel[];
987
+ /**
988
+ * Ask for the denied models. Shown only when some are denied; it receives
989
+ * their ids. What a request does is the host's.
990
+ */
991
+ onRequestAccess?: (models: string[]) => void;
992
+ }
993
+ /**
994
+ * The data a session can reach: every published model, the records it can see
995
+ * in each, what it may do with them, and what its view is narrowed to.
996
+ *
997
+ * **Denied models are listed, muted, never left out.** What a session cannot
998
+ * see is what a bigger question would need, and a list of only what is open
999
+ * would make the agent look more capable than it is. A count still on its way
1000
+ * says so (`counting…`) rather than drawing a zero.
1001
+ *
1002
+ * Counts are what *this session* sees after its slice — a model's full size
1003
+ * would overstate what the agent can answer from.
1004
+ */
1005
+ declare const DataReach: React$1.ForwardRefExoticComponent<DataReachProps & React$1.RefAttributes<HTMLDivElement>>;
1006
+
1007
+ /**
1008
+ * What of the Graph's data may accompany a call across the boundary.
1009
+ *
1010
+ * A **closed** set, because an open one is a list nobody can audit: a reader
1011
+ * has to know that what is not named cannot be sent, and that only holds if the
1012
+ * vocabulary is fixed.
1013
+ */
1014
+ type EgressClass = "type_names" | "property_names" | "the_question" | "property_values" | "record_ids" | "aggregates" | "everything";
1015
+ interface EgressListProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
1016
+ /** The destination this governs — `llm/anthropic-prod/claude-opus-5`. */
1017
+ to: string;
1018
+ /** What may be sent. **Empty is the default and means nothing may.** */
1019
+ classes?: EgressClass[];
1020
+ /**
1021
+ * What was actually withheld on a real crossing. Absent reads as a **rule**
1022
+ * at rest; present reads as an **event** — see the note below.
1023
+ */
1024
+ cut?: EgressClass[];
1025
+ }
1026
+ /**
1027
+ * Per destination: what may be sent, and what was cut.
1028
+ *
1029
+ * **Egress is declared per destination, on the rule that matched it.** A
1030
+ * run-wide setting would have to be the strictest of its destinations, which is
1031
+ * the least useful one — so this component is always about *one* address, and a
1032
+ * surface showing several renders several.
1033
+ *
1034
+ * **Reading a thing and sending it are different permissions.** A query may
1035
+ * filter on `Deal.revenue` while the value never enters a prompt — used to
1036
+ * **compute**, not to **reason**. That is the distinction this list exists to
1037
+ * make visible, and it is why `property_values` being absent is worth as much
1038
+ * screen as the classes that are present.
1039
+ *
1040
+ * **`cut` is what makes it evidence rather than configuration.** The same
1041
+ * component states the bound before a run and what the bound actually withheld
1042
+ * after one; without `cut`, a reader cannot tell a rule that did work from a
1043
+ * rule that never bit.
1044
+ *
1045
+ * An empty `classes` is drawn in words, because the lens default is `[]` and a
1046
+ * blank row would read as *not configured* rather than *nothing may leave*.
1047
+ */
1048
+ declare const EgressList: React$1.ForwardRefExoticComponent<EgressListProps & React$1.RefAttributes<HTMLDivElement>>;
1049
+
1050
+ interface AgentHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
1051
+ /** What the session is — its name, or a switcher that lists the others. */
1052
+ title: React$1.ReactNode;
1053
+ /** Who is answering — `Analyst`, `v2`, `sonnet-5.5`. */
1054
+ agent?: {
1055
+ name: string;
1056
+ version?: string;
1057
+ model?: string;
1058
+ };
1059
+ /** Where the session is — `running…`, `needs input (1)`, `idle`. `short` is said under 420px. */
1060
+ status?: {
1061
+ tone: NonNullable<StatusDotProps["tone"]>;
1062
+ label: string;
1063
+ short?: string;
1064
+ };
1065
+ /** At the end of the first line — a menu of the session's actions, a close. */
1066
+ actions?: React$1.ReactNode;
1067
+ /** The data the session can reach: the whole world it opened on, or an access group's share. */
1068
+ access?: {
1069
+ kind: "world" | "group";
1070
+ label: string;
1071
+ models?: DataReachModel[];
1072
+ };
1073
+ /** The lens the session reads through — `Funding watch`. */
1074
+ lens?: string;
1075
+ /** Tokens spent of the session's budget. Tokens, never money. */
1076
+ budget?: {
1077
+ used: number;
1078
+ limit: number;
1079
+ };
1080
+ /** The rules it runs under: the strictest as the badge, every one in its popover. */
1081
+ governance?: {
1082
+ summary: string;
1083
+ rules?: {
1084
+ label: string;
1085
+ value: string;
1086
+ }[];
1087
+ egress?: {
1088
+ to: string;
1089
+ classes?: EgressClass[];
1090
+ }[];
1091
+ };
1092
+ /** The marks before the access, the lens and the governance badge. The kit ships no icons. */
1093
+ icons?: {
1094
+ world?: React$1.ReactNode;
1095
+ group?: React$1.ReactNode;
1096
+ lens?: React$1.ReactNode;
1097
+ governance?: React$1.ReactNode;
1098
+ };
1099
+ /** Ask for the denied models — their ids. Shown in the data reach when some are denied. */
1100
+ onRequestAccess?: (models: string[]) => void;
1101
+ /** The host's settings, at a section — `data`, `governance`. Shown as a link in each popover. */
1102
+ onOpenSettings?: (section: "data" | "governance") => void;
1103
+ }
1104
+ /**
1105
+ * The header of an agent's session: who is answering and where it stands,
1106
+ * then what it can reach and the rules it runs under.
1107
+ *
1108
+ * Line one is the session, the agent and its status, and the host's actions.
1109
+ * Line two — drawn when any of it is given — is the data reach (opens every
1110
+ * model, the records this session sees in each, and what it may do), the
1111
+ * lens, the token budget and the governance badge (opens the rules and what
1112
+ * may leave, per destination). Under 420px of its own width the second line
1113
+ * keeps its marks and counts and drops the words.
1114
+ *
1115
+ * Plain props, no conversation: pass it as a `ChatSession`'s `header`, or
1116
+ * over a run view or a board that shows the same session.
1117
+ */
1118
+ declare const AgentHeader: React$1.ForwardRefExoticComponent<AgentHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
1119
+
725
1120
  declare const stateVariants: (props?: ({
726
1121
  tone?: "active" | "error" | "running" | "draft" | "review" | null | undefined;
727
1122
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -734,7 +1129,7 @@ interface AppStatusBarProps extends React$1.HTMLAttributes<HTMLDivElement>, Vari
734
1129
  end?: React$1.ReactNode;
735
1130
  }
736
1131
  /**
737
- * The 25px line at the bottom of the window.
1132
+ * The `sm` line at the bottom of the window — a control's height.
738
1133
  *
739
1134
  * It describes the **session**, not the screen: what is loaded, what state it
740
1135
  * is in, which build is running. That is why it barely changes as you navigate
@@ -748,106 +1143,70 @@ interface AppStatusBarProps extends React$1.HTMLAttributes<HTMLDivElement>, Vari
748
1143
  */
749
1144
  declare const AppStatusBar: React$1.ForwardRefExoticComponent<AppStatusBarProps & React$1.RefAttributes<HTMLDivElement>>;
750
1145
 
751
- /**
752
- * TODO — provisional. Built ahead of its design review.
753
- *
754
- * The chart set was deliberately deferred while the rest of the kit was built,
755
- * because charts are the one group with a real design question in them rather
756
- * than a markup question: which forms this product actually needs, at what
757
- * sizes, and how much a 330px drawer can carry. This component satisfies the
758
- * dataviz rules and the validated palette, but the *form inventory* has not been
759
- * agreed — treat the API as unsettled until a board screen uses it in anger.
760
- */
761
-
762
- interface BarDatum {
763
- label: React$1.ReactNode;
764
- value: number;
1146
+ interface Artifact {
1147
+ /** The file's name as the step wrote it — `rows-1284.csv`. */
1148
+ name: React$1.ReactNode;
1149
+ /** What produced it — `interpreter`, `export`, `rejects`, `input`. */
1150
+ kind?: React$1.ReactNode;
1151
+ size?: React$1.ReactNode;
765
1152
  /**
766
- * Overrides the series colour for this bar. Use a data-palette token
767
- * (`var(--color-data-3)`) when the bar's identity is an entity — a node type,
768
- * a theme — so it matches that entity everywhere else it appears.
1153
+ * **The address.** The same bytes produced twice are one artifact, so the
1154
+ * digest — eight characters, mono — is what a reader quotes, not the name.
769
1155
  */
770
- color?: string;
771
- /** What the tip should read, if not the raw value. */
772
- display?: React$1.ReactNode;
1156
+ digest?: React$1.ReactNode;
1157
+ /** When it landed, on the run's own clock — `+76.8s`. */
1158
+ written?: React$1.ReactNode;
1159
+ /**
1160
+ * Retention has taken the bytes. The row stays and is struck: *this file
1161
+ * existed and is gone* is a different fact from *no file was written*.
1162
+ */
1163
+ gone?: boolean;
1164
+ /** A glyph before the name, in `list` — the file's type. Passed in: the kit ships no icon set. */
1165
+ icon?: React$1.ReactNode;
773
1166
  }
774
- interface BarChartHProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
775
- data: BarDatum[];
776
- /** Fixes the scale. Defaults to the largest value present. */
777
- max?: number;
778
- /** Width of the label column, so bars start on the same x. */
779
- labelWidth?: number;
780
- /** Series colour when a datum does not override it. */
781
- color?: string;
782
- /** Names what is plotted. A single series needs no legend when this is set. */
783
- caption?: React$1.ReactNode;
1167
+ interface ArtifactTableProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
1168
+ files: Artifact[];
1169
+ /**
1170
+ * `table` (default) — the step's full record: header, kind, written, and an
1171
+ * Open / Download per row. `list` — name, size and digest in bare rows, for
1172
+ * the files an answer hands over, where the header and buttons would
1173
+ * outweigh two or three names.
1174
+ */
1175
+ variant?: "table" | "list";
1176
+ onOpen?: (file: Artifact, index: number) => void;
1177
+ onDownload?: (file: Artifact, index: number) => void;
1178
+ /** Anything else a row offers. Replaces the two defaults when given. */
1179
+ renderActions?: (file: Artifact, index: number) => React$1.ReactNode;
784
1180
  }
785
1181
  /**
786
- * Magnitude across a handful of named things.
1182
+ * The files a step left behind.
787
1183
  *
788
- * Horizontal because the labels are words — a stock, a pattern, a theme — and
789
- * words read badly rotated under a column. Bars grow from a single baseline on
790
- * the left, so length is the only thing carrying the value.
1184
+ * A file is the one thing a step produces that outlives the reading of it, and
1185
+ * it is **addressed by digest** — which is why the digest is drawn beside the
1186
+ * name rather than hidden behind a tooltip: a file that outlives its run is
1187
+ * still reachable, and two runs that produced the same bytes produced one
1188
+ * artifact.
791
1189
  *
792
- * One series, so there is no legend: `caption` names what is plotted. Every bar
793
- * is directly labelled at its tip, which is also what discharges the light-mode
794
- * contrast obligation on the data palette — identity and value are never
795
- * carried by hue alone.
796
- */
797
- declare const BarChartH: React$1.ForwardRefExoticComponent<BarChartHProps & React$1.RefAttributes<HTMLDivElement>>;
798
-
799
- /**
800
- * TODO — provisional. Built ahead of its design review.
1190
+ * Rejected records are a file like any other. That is what makes `18 rejected`
1191
+ * something a person can open instead of a dead count.
801
1192
  *
802
- * The chart set was deliberately deferred while the rest of the kit was built,
803
- * because charts are the one group with a real design question in them rather
804
- * than a markup question: which forms this product actually needs, at what
805
- * sizes, and how much a 330px drawer can carry. This component satisfies the
806
- * dataviz rules and the validated palette, but the *form inventory* has not been
807
- * agreed — treat the API as unsettled until a board screen uses it in anger.
1193
+ * **A step that left nothing draws no table.** Absence is the caller's to
1194
+ * render — see `AbsenceNote` — because an empty table here would claim the step
1195
+ * wrote an empty file.
808
1196
  */
809
-
810
- interface ColumnDatum {
811
- /** The period — `wk 36`. */
812
- label: React$1.ReactNode;
813
- /** A second line under the label — `1–5 Sep`. */
814
- sublabel?: React$1.ReactNode;
815
- value: number;
816
- display?: React$1.ReactNode;
817
- }
818
- interface BarChartVProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
819
- data: ColumnDatum[];
820
- /** Fixes the scale. Defaults to the largest value present. */
821
- max?: number;
822
- /** Values to draw a hairline at — `[50, 75, 100]`. */
823
- gridlines?: number[];
824
- height?: number;
825
- color?: string;
826
- /** Colour for the column the story is about. Defaults to `color`. */
827
- highlightColor?: string;
828
- /** Which column carries the emphasis — usually the most recent. */
829
- highlightIndex?: number;
830
- /**
831
- * Which columns get a value on the cap.
832
- *
833
- * `last` by default. A number on every column stops being a label and becomes
834
- * texture; the gridlines carry the rest.
835
- */
836
- labelMode?: "last" | "all" | "none";
837
- caption?: React$1.ReactNode;
1197
+ declare const ArtifactTable: React$1.ForwardRefExoticComponent<ArtifactTableProps & React$1.RefAttributes<HTMLDivElement>>;
1198
+ interface ArtifactCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
1199
+ file: Artifact;
1200
+ /** The line under the name — `48 KB · kept for 7 days`, `412 rows · missing store code`. */
1201
+ note?: React$1.ReactNode;
1202
+ /** At the right — a `Download` button, or a tag saying what the file is. */
1203
+ aside?: React$1.ReactNode;
838
1204
  }
839
1205
  /**
840
- * One measure over a few periods.
841
- *
842
- * Vertical because the x-axis is time and time reads left to right. Columns are
843
- * capped at 24px and separated by real gaps, so the band's leftover is air
844
- * rather than a fatter bar.
845
- *
846
- * `labelMode` defaults to `last`: the current period is the one being asked
847
- * about, and the gridlines carry the others. One series, so no legend —
848
- * `caption` says what is plotted.
1206
+ * One file, as the whole of what an answer hands over: its type, its name,
1207
+ * what it holds and what to do with it. Several files are an `ArtifactTable`.
849
1208
  */
850
- declare const BarChartV: React$1.ForwardRefExoticComponent<BarChartVProps & React$1.RefAttributes<HTMLDivElement>>;
1209
+ declare const ArtifactCard: React$1.ForwardRefExoticComponent<ArtifactCardProps & React$1.RefAttributes<HTMLDivElement>>;
851
1210
 
852
1211
  /**
853
1212
  * The capabilities Invana ships today — **suggestions, not a limit.**
@@ -938,6 +1297,11 @@ interface CannotAnswerCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
938
1297
  remedy?: React$1.ReactNode;
939
1298
  /** Overrides the label. Defaults to `cannot answer`. */
940
1299
  label?: React$1.ReactNode;
1300
+ /**
1301
+ * `info` for an answer given in part: the card says which part the data
1302
+ * does not hold, above the answer that covers the rest.
1303
+ */
1304
+ tone?: "default" | "info";
941
1305
  }
942
1306
  /**
943
1307
  * The graph does not hold what was asked.
@@ -963,7 +1327,7 @@ declare const CannotAnswerCard: React$1.ForwardRefExoticComponent<CannotAnswerCa
963
1327
  *
964
1328
  * `agent` is the **spine**: the runtime itself, which does the participating
965
1329
  * rather than being a participant, and is never governed. Nothing in this file
966
- * knows that — a band says so with `spine`, see `LayerStrip`.
1330
+ * knows that — the surface that draws the layers says so.
967
1331
  */
968
1332
  type KnownLayer = "graph_data" | "llm" | "third_party" | "cache" | "human" | "agent";
969
1333
  /**
@@ -1065,7 +1429,7 @@ interface LayerChipProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, "
1065
1429
  /**
1066
1430
  * One class of participant, as a swatch and a name.
1067
1431
  *
1068
- * It heads a `LayerSection`, bands a run's `LayerStrip`, and counts a layer in
1432
+ * It heads a `LayerSection`, names a layer's row in a run's `Gantt`, and counts a layer in
1069
1433
  * the Worlds drawer — everywhere a reader has to know *what kind of thing this
1070
1434
  * is* before reading which one.
1071
1435
  *
@@ -1171,6 +1535,8 @@ interface CastTableProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "c
1171
1535
  */
1172
1536
  resolved?: CastResolution[];
1173
1537
  readOnly?: boolean;
1538
+ /** Passed to the table: no box, outer columns flush — for a cast inside a panel. */
1539
+ seamless?: boolean;
1174
1540
  }
1175
1541
  /**
1176
1542
  * `role → resolves to → why this one`, four fixed rows.
@@ -1193,6 +1559,30 @@ interface CastTableProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "c
1193
1559
  */
1194
1560
  declare const CastTable: React$1.ForwardRefExoticComponent<CastTableProps & React$1.RefAttributes<HTMLDivElement>>;
1195
1561
 
1562
+ interface CaveatNoteProps extends React$1.HTMLAttributes<HTMLDivElement> {
1563
+ /** The kind of caveat, one word — `indicative`, `association`, `simulation`. */
1564
+ label: React$1.ReactNode;
1565
+ /** What was excluded, imputed or assumed, and how far to trust the figure. */
1566
+ children?: React$1.ReactNode;
1567
+ /**
1568
+ * `warning` (the default) qualifies the figure. `info` says what was filled
1569
+ * in rather than measured; `destructive` says the data itself is wrong or late.
1570
+ */
1571
+ tone?: "warning" | "info" | "destructive";
1572
+ /** A link after the text, to what the caveat is about — `Show the 4 stores`. */
1573
+ action?: React$1.ReactNode;
1574
+ onAction?: () => void;
1575
+ }
1576
+ /**
1577
+ * How far to trust the figure above it.
1578
+ *
1579
+ * What was excluded, imputed or assumed, said beside the answer rather than
1580
+ * in a footnote, and labelled with its kind so a reader scanning several
1581
+ * answers can tell an association from a simulation at a glance. Tinted, not
1582
+ * bordered: it qualifies the answer, it is not an error.
1583
+ */
1584
+ declare const CaveatNote: React$1.ForwardRefExoticComponent<CaveatNoteProps & React$1.RefAttributes<HTMLDivElement>>;
1585
+
1196
1586
  interface ChatSessionProps {
1197
1587
  /** The message list — typically `<ChatSessionMessage />` nodes. */
1198
1588
  children?: React$1.ReactNode;
@@ -1221,6 +1611,8 @@ interface ChatSessionProps {
1221
1611
  * ResizeObserver watches the message column), but only while the user is already
1222
1612
  * near the bottom — scroll up to read history and the view stays put. Layout and
1223
1613
  * scroll behaviour only; it owns no session state.
1614
+ *
1615
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1224
1616
  */
1225
1617
  declare function ChatSession({ children, footer, emptyState, autoScrollKey, followThreshold, className, bodyClassName, }: ChatSessionProps): React$1.JSX.Element;
1226
1618
 
@@ -1258,6 +1650,8 @@ interface ChatSessionMessageProps {
1258
1650
  *
1259
1651
  * Presentational only — no data fetching or state — so it composes over any
1260
1652
  * backend.
1653
+ *
1654
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1261
1655
  */
1262
1656
  declare function ChatSessionMessage({ role, children, status, icon, meta, actions, footer, className, }: ChatSessionMessageProps): React$1.JSX.Element;
1263
1657
 
@@ -1293,6 +1687,8 @@ interface ChatSessionMessageOptionsProps {
1293
1687
  *
1294
1688
  * Purely presentational and icon-agnostic: you supply the icons and handlers, so
1295
1689
  * it slots into any backend.
1690
+ *
1691
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1296
1692
  */
1297
1693
  declare function ChatSessionMessageOptions({ actions, className, }: ChatSessionMessageOptionsProps): React$1.JSX.Element;
1298
1694
 
@@ -1333,6 +1729,8 @@ interface ChatSessionComposerProps {
1333
1729
  * Deliberately dependency-free — no query-language editor or provider selects
1334
1730
  * are baked in. Drop your own controls into `toolbarStart` / `toolbarEnd` (and
1335
1731
  * a QL editor into a custom layout if you need one).
1732
+ *
1733
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1336
1734
  */
1337
1735
  declare function ChatSessionComposer({ value, onChange, onSend, onStop, isRunning, disabled, placeholder, toolbarStart, toolbarEnd, attachments, sendIcon, stopIcon, sendDisabled, className, textareaClassName, }: ChatSessionComposerProps): React$1.JSX.Element;
1338
1736
 
@@ -1341,6 +1739,8 @@ declare function ChatSessionComposer({ value, onChange, onSend, onStop, isRunnin
1341
1739
  * status dot, prompt caret, spinner — occupies this fixed-width column so all
1342
1740
  * body text starts on one left edge ({@link ChatSessionPromptRow},
1343
1741
  * {@link ChatSessionProgressLine} and this row all use it).
1742
+ *
1743
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1344
1744
  */
1345
1745
  declare const chatSessionGutterClass = "w-3.5 shrink-0 flex justify-center";
1346
1746
  /**
@@ -1372,6 +1772,8 @@ interface ChatSessionActivityRowProps {
1372
1772
  * `actions` for the re-run / view-query / copy / vote toolbar.
1373
1773
  *
1374
1774
  * Presentational only — no data fetching or state.
1775
+ *
1776
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1375
1777
  */
1376
1778
  declare function ChatSessionActivityRow({ status, marker, children, actions, meta, footer, className, }: ChatSessionActivityRowProps): React$1.JSX.Element;
1377
1779
  interface ChatSessionActivitySubLineProps {
@@ -1384,6 +1786,8 @@ interface ChatSessionActivitySubLineProps {
1384
1786
  * An indented detail line under an activity row — "└ Backgrounded agent
1385
1787
  * (↓ to manage)", an interruption note, a one-line result. Render inside the
1386
1788
  * row's `footer` (or directly after the body in `children`).
1789
+ *
1790
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1387
1791
  */
1388
1792
  declare function ChatSessionActivitySubLine({ elbow, children, className, }: ChatSessionActivitySubLineProps): React$1.JSX.Element;
1389
1793
 
@@ -1404,6 +1808,8 @@ interface ChatSessionPromptRowProps {
1404
1808
  * Full bleed assumes the default `ChatSession` body padding (`p-3`) — the
1405
1809
  * negative margins here cancel it. If you override `bodyClassName` with a
1406
1810
  * different horizontal padding, pass matching `-mx-*`/`px-*` via `className`.
1811
+ *
1812
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1407
1813
  */
1408
1814
  declare function ChatSessionPromptRow({ children, caret, meta, className, }: ChatSessionPromptRowProps): React$1.JSX.Element;
1409
1815
 
@@ -1420,6 +1826,8 @@ interface ChatSessionProgressLineProps {
1420
1826
  * A transient "work in flight" line in the transcript — spinner in the shared
1421
1827
  * gutter, label, and an optional right-aligned elapsed readout. Replace it with
1422
1828
  * a settled {@link ChatSessionActivityRow} when the run finishes.
1829
+ *
1830
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1423
1831
  */
1424
1832
  declare function ChatSessionProgressLine({ children, spinner, elapsed, className, }: ChatSessionProgressLineProps): React$1.JSX.Element;
1425
1833
 
@@ -1435,6 +1843,13 @@ interface ChatSessionDisclosureProps {
1435
1843
  /** Uncontrolled initial state. Defaults to closed. */
1436
1844
  defaultOpen?: boolean;
1437
1845
  onOpenChange?: (open: boolean) => void;
1846
+ /**
1847
+ * `card` (default) is a bordered block under an activity row. `inline` is a
1848
+ * bare line inside an answer — `▸ method` with its meta at the right in mono —
1849
+ * that opens onto a preformatted code block when its content is text, or onto
1850
+ * the content as given — code, the facts under it, a list of steps — when not.
1851
+ */
1852
+ variant?: "card" | "inline";
1438
1853
  /** Custom chevron node; the default "▸" rotates when open. */
1439
1854
  chevron?: React$1.ReactNode;
1440
1855
  className?: string;
@@ -1448,8 +1863,30 @@ interface ChatSessionDisclosureProps {
1448
1863
  * `overflow-x-auto` body, matching the transcript's nested-detail grammar.
1449
1864
  *
1450
1865
  * Controlled (`open` + `onOpenChange`) or uncontrolled (`defaultOpen`).
1866
+ *
1867
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1868
+ */
1869
+ declare function ChatSessionDisclosure({ label, meta, children, open, defaultOpen, onOpenChange, variant, chevron, className, contentClassName, }: ChatSessionDisclosureProps): React$1.JSX.Element;
1870
+ /**
1871
+ * The code an inline disclosure opens onto, when it opens onto more than code:
1872
+ * a query, a formula, a model. `<strong>` inside marks its keywords.
1873
+ *
1874
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1875
+ */
1876
+ declare function ChatSessionDisclosureCode({ className, ...props }: React$1.HTMLAttributes<HTMLPreElement>): React$1.JSX.Element;
1877
+ interface ChatSessionDisclosureStepsProps extends React$1.OlHTMLAttributes<HTMLOListElement> {
1878
+ /** Each step in the order it ran, with its count or time at the right. */
1879
+ steps: {
1880
+ label: React$1.ReactNode;
1881
+ detail?: React$1.ReactNode;
1882
+ }[];
1883
+ }
1884
+ /**
1885
+ * A method of several steps, numbered in the order they ran.
1886
+ *
1887
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1451
1888
  */
1452
- declare function ChatSessionDisclosure({ label, meta, children, open, defaultOpen, onOpenChange, chevron, className, contentClassName, }: ChatSessionDisclosureProps): React$1.JSX.Element;
1889
+ declare function ChatSessionDisclosureSteps({ steps, className, ...props }: ChatSessionDisclosureStepsProps): React$1.JSX.Element;
1453
1890
 
1454
1891
  /**
1455
1892
  * Lifecycle of a background task / session. Mapped to the status tokens from
@@ -1475,7 +1912,9 @@ interface ChatSessionTaskRowProps {
1475
1912
  /**
1476
1913
  * One background task / agent / session: status dot, bold name, truncating
1477
1914
  * description, right-aligned meta. Used both in the pinned strip under a
1478
- * transcript and in the grouped task dashboard ({@link ChatSessionTaskGroup}).
1915
+ * transcript and in the grouped task board ({@link ChatSessionTaskGroup}).
1916
+ *
1917
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1479
1918
  */
1480
1919
  declare function ChatSessionTaskRow({ status, indicator, name, description, meta, onClick, className, }: ChatSessionTaskRowProps): React$1.JSX.Element;
1481
1920
  interface ChatSessionTaskGroupProps {
@@ -1487,7 +1926,9 @@ interface ChatSessionTaskGroupProps {
1487
1926
  }
1488
1927
  /**
1489
1928
  * A titled section of task rows — the "Needs input" / "Completed" groups of a
1490
- * session dashboard.
1929
+ * session board.
1930
+ *
1931
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1491
1932
  */
1492
1933
  declare function ChatSessionTaskGroup({ heading, children, className, }: ChatSessionTaskGroupProps): React$1.JSX.Element;
1493
1934
 
@@ -1502,6 +1943,8 @@ interface ChatSessionStatusBarProps {
1502
1943
  * The slim bar under a chat session's composer — mode indicator, view
1503
1944
  * switches, agent counts, keyboard hints. Two slots, muted by default; put
1504
1945
  * interactive elements (buttons, toggles) straight into the slots.
1946
+ *
1947
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1505
1948
  */
1506
1949
  declare function ChatSessionStatusBar({ start, end, className, }: ChatSessionStatusBarProps): React$1.JSX.Element;
1507
1950
 
@@ -1525,19 +1968,46 @@ interface ChatSessionContextChipProps extends React$1.HTMLAttributes<HTMLDivElem
1525
1968
  *
1526
1969
  * It states the binding in words. A highlight on the canvas alone would leave
1527
1970
  * the reader guessing what scope their question has.
1971
+ *
1972
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1528
1973
  */
1529
1974
  declare function ChatSessionContextChip({ icon, onDismiss, dismissLabel, className, children, ...props }: ChatSessionContextChipProps): React$1.JSX.Element;
1530
1975
 
1976
+ /**
1977
+ * The cursor at the end of text that is still being written. A block, not a
1978
+ * bar: it reads as the place the next word lands.
1979
+ *
1980
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1981
+ */
1982
+ declare function ChatSessionCaret({ className, ...props }: React$1.HTMLAttributes<HTMLSpanElement>): React$1.JSX.Element;
1983
+
1531
1984
  interface CitationRowProps extends Omit<React$1.HTMLAttributes<HTMLLIElement>, "children"> {
1532
1985
  /** What kind of record this is — `Article`, `Bar`, `Event`. */
1533
- kind: React$1.ReactNode;
1986
+ kind?: React$1.ReactNode;
1987
+ /**
1988
+ * The number an answer cites it by — `1` renders as `[1]`. Numbered rows are
1989
+ * how an answer's markers are resolved, so the number leads the row.
1990
+ */
1991
+ marker?: React$1.ReactNode;
1534
1992
  /** The record itself, in the words it was stored with. */
1535
1993
  children?: React$1.ReactNode;
1536
1994
  /** Where it came from — the dataset, the publisher, the timestamp. */
1537
1995
  source?: React$1.ReactNode;
1996
+ /** How many records it contributed — `3,406`, `5 days`. Mono, at the right. */
1997
+ count?: React$1.ReactNode;
1998
+ /** A second line under the record — what kind of source it is and how fresh: `table · loaded 28 Sep`. */
1999
+ detail?: React$1.ReactNode;
2000
+ /** The row the reader is on — the one a lit marker in the prose points to. */
2001
+ active?: boolean;
1538
2002
  }
1539
2003
  interface CitationListProps extends React$1.HTMLAttributes<HTMLUListElement> {
1540
2004
  children?: React$1.ReactNode;
2005
+ /**
2006
+ * A line under the sources. `warning` when it says the answer rests on no
2007
+ * records — which is said out loud, never left for the zeros to imply.
2008
+ */
2009
+ note?: React$1.ReactNode;
2010
+ noteTone?: "muted" | "warning";
1541
2011
  }
1542
2012
  /**
1543
2013
  * The records an answer rests on.
@@ -1593,21 +2063,56 @@ interface ClarifyOption {
1593
2063
  detail?: React$1.ReactNode;
1594
2064
  disabled?: boolean;
1595
2065
  }
2066
+ /**
2067
+ * Where the ask is in its life. `pending` waits on the reader; the rest are
2068
+ * settled and read-only. Open: a surface may name its own.
2069
+ */
2070
+ type ClarifyState = "pending" | "answered" | "skipped" | "superseded" | "expired" | (string & {});
1596
2071
  interface ClarifyCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onSelect"> {
2072
+ /** @default "pending" */
2073
+ state?: ClarifyState;
2074
+ /** The header's word while the ask waits — `confirm` for a yes-or-no. @default "question" */
2075
+ kind?: React$1.ReactNode;
1597
2076
  /** Which step asked — `understand`. */
1598
2077
  step?: React$1.ReactNode;
1599
2078
  /** How long it has been waiting — `parked 14 min`. */
1600
2079
  waiting?: React$1.ReactNode;
2080
+ /** When it settled — `just now`, `2 min ago`. At the header's right, after `waiting`. */
2081
+ time?: React$1.ReactNode;
1601
2082
  /** The question. One sentence. */
1602
- question: React$1.ReactNode;
1603
- options: ClarifyOption[];
2083
+ question?: React$1.ReactNode;
2084
+ /** The choices, as one Questionnaire item. Ignored when `children` is given. */
2085
+ options?: ClarifyOption[];
1604
2086
  value?: string;
1605
2087
  onSelect?: (value: string) => void;
1606
- /** The confirm control. */
1607
- actions?: React$1.ReactNode;
1608
- /** Why these options and not others. */
2088
+ /**
2089
+ * Any other control, in place of `options` — a `Questionnaire` of several
2090
+ * steps, a form, a summary of the answers.
2091
+ */
2092
+ children?: React$1.ReactNode;
2093
+ /** Why these options and not others, or where a default came from. */
1609
2094
  footnote?: React$1.ReactNode;
2095
+ /** The confirm control. */
2096
+ actions?: React$1.ReactNode;
2097
+ /** Which edge the actions sit on. @default "start" */
2098
+ actionsAlign?: "start" | "end";
2099
+ }
2100
+ interface ClarifyFootnoteProps extends React$1.HTMLAttributes<HTMLParagraphElement> {
2101
+ children?: React$1.ReactNode;
1610
2102
  }
2103
+ /** The line under an ask: why these options, or where a default came from. *
2104
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
2105
+ */
2106
+ declare const ClarifyFootnote: React$1.ForwardRefExoticComponent<ClarifyFootnoteProps & React$1.RefAttributes<HTMLParagraphElement>>;
2107
+ interface ClarifyActionsProps extends React$1.HTMLAttributes<HTMLDivElement> {
2108
+ /** Which edge the actions sit on. @default "start" */
2109
+ align?: "start" | "end";
2110
+ children?: React$1.ReactNode;
2111
+ }
2112
+ /** The row of controls that answers, skips or changes an ask. *
2113
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
2114
+ */
2115
+ declare const ClarifyActions: React$1.ForwardRefExoticComponent<ClarifyActionsProps & React$1.RefAttributes<HTMLDivElement>>;
1611
2116
  /**
1612
2117
  * The run stopped and asked, rather than guessing.
1613
2118
  *
@@ -1620,6 +2125,14 @@ interface ClarifyCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>,
1620
2125
  * holds, which is why `detail` exists and why `footnote` is worth saying out
1621
2126
  * loud. A card that offered invented options would undo the grounding the rest
1622
2127
  * of the system is built on.
2128
+ *
2129
+ * **One card through the ask's whole life.** `pending` offers the choice; once
2130
+ * `answered`, `skipped`, `superseded` or `expired` the header says so and the
2131
+ * body is read-only. The body is `options` for a choice, or any control passed
2132
+ * as `children` — a `Questionnaire` of several steps (with its progress and
2133
+ * Skip / Next), a form, or the answers of a finished multi-step ask.
2134
+ *
2135
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1623
2136
  */
1624
2137
  declare const ClarifyCard: React$1.ForwardRefExoticComponent<ClarifyCardProps & React$1.RefAttributes<HTMLDivElement>>;
1625
2138
 
@@ -1638,7 +2151,8 @@ interface ContextBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
1638
2151
  hint?: React$1.ReactNode;
1639
2152
  }
1640
2153
  /**
1641
- * The 28px bar between a panel and the status bar.
2154
+ * The `sm` bar between a panel and the status bar — a control's height, so
2155
+ * it lines up with the controls it sits beside.
1642
2156
  *
1643
2157
  * It answers "where am I, and what is true right now" — the view switch, the
1644
2158
  * counts that matter for the work in front of you, and the shortcut that
@@ -1702,100 +2216,19 @@ interface DiffListProps extends React$1.HTMLAttributes<HTMLUListElement> {
1702
2216
  declare const DiffList: React$1.ForwardRefExoticComponent<DiffListProps & React$1.RefAttributes<HTMLUListElement>>;
1703
2217
  declare const DiffRow: React$1.ForwardRefExoticComponent<DiffRowProps & React$1.RefAttributes<HTMLLIElement>>;
1704
2218
 
1705
- /**
1706
- * TODO — provisional. Built ahead of its design review.
1707
- *
1708
- * The chart set was deliberately deferred while the rest of the kit was built,
1709
- * because charts are the one group with a real design question in them rather
1710
- * than a markup question: which forms this product actually needs, at what
1711
- * sizes, and how much a 330px drawer can carry. This component satisfies the
1712
- * dataviz rules and the validated palette, but the *form inventory* has not been
1713
- * agreed — treat the API as unsettled until a board screen uses it in anger.
1714
- */
1715
-
1716
- interface DivergingDatum {
1717
- label: React$1.ReactNode;
1718
- /** Signed. The sign is the whole point of this chart. */
1719
- value: number;
1720
- display?: React$1.ReactNode;
1721
- }
1722
- interface DivergingBarProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
1723
- data: DivergingDatum[];
1724
- /** Fixes the scale on both sides. Defaults to the largest magnitude present. */
1725
- max?: number;
1726
- labelWidth?: number;
1727
- /** Above the midpoint. Defaults to `--color-success`. */
1728
- positiveColor?: string;
1729
- /** Below it. Defaults to `--color-destructive`. */
1730
- negativeColor?: string;
1731
- caption?: React$1.ReactNode;
1732
- }
1733
- /**
1734
- * Polarity — how far either side of zero.
1735
- *
1736
- * A net learning weight, a delta against a baseline, a sentiment score. The
1737
- * midpoint is a real zero line, drawn in the neutral border colour, and both
1738
- * sides share one scale so a `−9` is visibly longer than a `+6`.
1739
- *
1740
- * The poles use the **status** colours rather than data-palette hues, because
1741
- * this chart's two directions are good and bad, not two categories. That is the
1742
- * one place status colour belongs on a chart — it is encoding valence, not
1743
- * identity, so it is never "series 1 and series 2". Every bar is directly
1744
- * labelled, so the sign is readable without seeing colour at all.
1745
- */
1746
- declare const DivergingBar: React$1.ForwardRefExoticComponent<DivergingBarProps & React$1.RefAttributes<HTMLDivElement>>;
1747
-
1748
- /**
1749
- * What of the Graph's data may accompany a call across the boundary.
1750
- *
1751
- * A **closed** set, because an open one is a list nobody can audit: a reader
1752
- * has to know that what is not named cannot be sent, and that only holds if the
1753
- * vocabulary is fixed.
1754
- */
1755
- type EgressClass = "type_names" | "property_names" | "the_question" | "property_values" | "record_ids" | "aggregates" | "everything";
1756
- interface EgressListProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
1757
- /** The destination this governs — `llm/anthropic-prod/claude-opus-5`. */
1758
- to: string;
1759
- /** What may be sent. **Empty is the default and means nothing may.** */
1760
- classes?: EgressClass[];
1761
- /**
1762
- * What was actually withheld on a real crossing. Absent reads as a **rule**
1763
- * at rest; present reads as an **event** — see the note below.
1764
- */
1765
- cut?: EgressClass[];
1766
- }
1767
- /**
1768
- * Per destination: what may be sent, and what was cut.
1769
- *
1770
- * **Egress is declared per destination, on the rule that matched it.** A
1771
- * run-wide setting would have to be the strictest of its destinations, which is
1772
- * the least useful one — so this component is always about *one* address, and a
1773
- * surface showing several renders several.
1774
- *
1775
- * **Reading a thing and sending it are different permissions.** A query may
1776
- * filter on `Deal.revenue` while the value never enters a prompt — used to
1777
- * **compute**, not to **reason**. That is the distinction this list exists to
1778
- * make visible, and it is why `property_values` being absent is worth as much
1779
- * screen as the classes that are present.
1780
- *
1781
- * **`cut` is what makes it evidence rather than configuration.** The same
1782
- * component states the bound before a run and what the bound actually withheld
1783
- * after one; without `cut`, a reader cannot tell a rule that did work from a
1784
- * rule that never bit.
1785
- *
1786
- * An empty `classes` is drawn in words, because the lens default is `[]` and a
1787
- * blank row would read as *not configured* rather than *nothing may leave*.
1788
- */
1789
- declare const EgressList: React$1.ForwardRefExoticComponent<EgressListProps & React$1.RefAttributes<HTMLDivElement>>;
1790
-
1791
2219
  /**
1792
2220
  * How an answer's records are rendered. A kind is a *body inside* the emission
1793
2221
  * card, never a block of its own (DS9) — so this names the body, it does not
1794
2222
  * pick a different container.
2223
+ *
2224
+ * Open: the names below are the common ones, and an assistant answer labels
2225
+ * its card in the grammar's own words — `ranked`, `scenario`, `model check`.
1795
2226
  */
1796
- type EmissionKind = "metric" | "table" | "chart" | "subgraph" | "prose" | "empty" | "html";
1797
- interface EmissionHeaderProps extends React$1.HTMLAttributes<HTMLDivElement> {
2227
+ type EmissionKind = "metric" | "table" | "chart" | "subgraph" | "prose" | "empty" | "html" | (string & {});
2228
+ interface EmissionHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
1798
2229
  kind: EmissionKind;
2230
+ /** What the card shows, in words — `Apex Components, weekly lead time`. */
2231
+ title?: React$1.ReactNode;
1799
2232
  /** The projection template that rendered it — `table-compact@3`. Shown in mono. */
1800
2233
  template?: React$1.ReactNode;
1801
2234
  /**
@@ -1812,6 +2245,7 @@ interface EmissionHeaderProps extends React$1.HTMLAttributes<HTMLDivElement> {
1812
2245
  actions?: React$1.ReactNode;
1813
2246
  }
1814
2247
  interface EmissionCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title">, Omit<EmissionHeaderProps, keyof React$1.HTMLAttributes<HTMLDivElement>> {
2248
+ title?: React$1.ReactNode;
1815
2249
  /** Set false to render the body alone, where a surface supplies its own header. */
1816
2250
  showHeader?: boolean;
1817
2251
  children?: React$1.ReactNode;
@@ -1823,6 +2257,8 @@ interface EmissionCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>,
1823
2257
  * result, a scheduled answer (DS7). It is exported on its own so a surface that
1824
2258
  * already owns its container can still show the same header rather than
1825
2259
  * inventing a second one that drifts.
2260
+ *
2261
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1826
2262
  */
1827
2263
  declare const EmissionHeader: React$1.ForwardRefExoticComponent<EmissionHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
1828
2264
  /**
@@ -1837,11 +2273,21 @@ declare const EmissionHeader: React$1.ForwardRefExoticComponent<EmissionHeaderPr
1837
2273
  * object (DS6). It does not know what an Observation is, and it does not fetch,
1838
2274
  * re-render or re-query anything; switching templates is the caller's job,
1839
2275
  * handed in through `actions`.
2276
+ *
2277
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1840
2278
  */
1841
2279
  declare const EmissionCard: React$1.ForwardRefExoticComponent<EmissionCardProps & React$1.RefAttributes<HTMLDivElement>>;
2280
+ /**
2281
+ * The card's body: its blocks in one padded column, each a step apart.
2282
+ *
2283
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
2284
+ */
2285
+ declare const EmissionBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1842
2286
  /**
1843
2287
  * The `prose` body's citation marker — the superscript that ties a clause to
1844
- * the records behind it.
2288
+ * the records behind it. Set `data-active` while its source is the one in view.
2289
+ *
2290
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
1845
2291
  */
1846
2292
  declare const CitationMarker: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
1847
2293
 
@@ -1875,21 +2321,81 @@ declare const EmptyState: React$1.ForwardRefExoticComponent<EmptyStateProps & Re
1875
2321
  /** One not-yet-available surface, and the condition that opens it. */
1876
2322
  declare const EmptyStateLock: React$1.ForwardRefExoticComponent<EmptyStateLockProps & React$1.RefAttributes<HTMLSpanElement>>;
1877
2323
 
1878
- declare class ErrorBoundary extends Component<{
2324
+ interface ErrorBoundaryProps {
1879
2325
  children: ReactNode;
1880
- }, {
2326
+ /**
2327
+ * Called once for each error the boundary catches, with React's component
2328
+ * stack — where an app reports the error (a log, a counter). The boundary
2329
+ * still shows its fallback; this only observes.
2330
+ */
2331
+ onError?: (error: Error, info: ErrorInfo) => void;
2332
+ /** What to show instead of the children once they have thrown. Defaults to a short notice. */
2333
+ fallback?: ReactNode;
2334
+ }
2335
+ /**
2336
+ * Catches a render error in its children and shows a fallback in their place,
2337
+ * so one broken region does not blank the whole screen.
2338
+ *
2339
+ * Usage:
2340
+ *
2341
+ * ```tsx
2342
+ * <ErrorBoundary onError={(error) => report(error)}>
2343
+ * <Region />
2344
+ * </ErrorBoundary>
2345
+ * ```
2346
+ *
2347
+ * `onError` is how an app learns what broke; without it the error goes to the
2348
+ * console only.
2349
+ */
2350
+ declare class ErrorBoundary extends Component<ErrorBoundaryProps, {
1881
2351
  hasError: boolean;
1882
2352
  }> {
1883
- constructor(props: {
1884
- children: ReactNode;
1885
- });
1886
- static getDerivedStateFromError(_: Error): {
2353
+ constructor(props: ErrorBoundaryProps);
2354
+ static getDerivedStateFromError(): {
1887
2355
  hasError: boolean;
1888
2356
  };
1889
- componentDidCatch(error: Error, errorInfo: any): void;
2357
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
1890
2358
  render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | React$1.ReactPortal | React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | React$1.JSX.Element | null | undefined;
1891
2359
  }
1892
2360
 
2361
+ interface ExchangeOption {
2362
+ label: React$1.ReactNode;
2363
+ /** The one that was taken. */
2364
+ chosen?: boolean;
2365
+ }
2366
+ interface ExchangeRecordProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
2367
+ /** Who asked — `the agent asks`. */
2368
+ asker?: React$1.ReactNode;
2369
+ question: React$1.ReactNode;
2370
+ /** Why it had to ask — `parse_intent found two readings and was told not to guess`. */
2371
+ why?: React$1.ReactNode;
2372
+ /** What it offered. Every option, with the taken one marked. */
2373
+ options?: ExchangeOption[];
2374
+ /** Who answered — `ravi answers`. */
2375
+ answerer?: React$1.ReactNode;
2376
+ answer?: React$1.ReactNode;
2377
+ /** What the answer cost and what happened next — `after 41.2s · the run resumed on round 2`. */
2378
+ answerNote?: React$1.ReactNode;
2379
+ }
2380
+ /**
2381
+ * A question a run asked a person, after it was answered.
2382
+ *
2383
+ * `ClarifyCard` is the **live** ask — it has controls, and the run is waiting on
2384
+ * them. This is the same exchange once it is a record: the question, every
2385
+ * option it offered with the one taken marked, who answered and how long the
2386
+ * run stood still. Nothing here is pickable, because the choice was made and a
2387
+ * trace is never rewritten.
2388
+ *
2389
+ * **The options that were not taken stay.** *It chose by promise date* is a
2390
+ * different fact from *it was offered two readings and chose by promise date* —
2391
+ * the second is the one that explains the round that follows.
2392
+ *
2393
+ * The rails mark the **act**, not the participant: asking is an interruption,
2394
+ * answering is what let the run continue. Which colour means `human` is a
2395
+ * palette decision and belongs to the layer components.
2396
+ */
2397
+ declare const ExchangeRecord: React$1.ForwardRefExoticComponent<ExchangeRecordProps & React$1.RefAttributes<HTMLDivElement>>;
2398
+
1893
2399
  interface EyebrowProps extends React$1.HTMLAttributes<HTMLDivElement> {
1894
2400
  /**
1895
2401
  * Right-aligned trailing text — a count, a position, a state. Kept separate
@@ -1925,6 +2431,18 @@ interface EyebrowProps extends React$1.HTMLAttributes<HTMLDivElement> {
1925
2431
  */
1926
2432
  declare const Eyebrow: React$1.ForwardRefExoticComponent<EyebrowProps & React$1.RefAttributes<HTMLDivElement>>;
1927
2433
 
2434
+ interface ExpandToggleProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
2435
+ open: boolean;
2436
+ /** What opens — `fetch_filings` — read as `Open fetch_filings` / `Close fetch_filings`. */
2437
+ label?: string;
2438
+ }
2439
+ declare function Spacer({ className }: {
2440
+ className?: string;
2441
+ }): React$1.JSX.Element;
2442
+ declare const ExpandToggle: React$1.ForwardRefExoticComponent<ExpandToggleProps & React$1.RefAttributes<HTMLButtonElement>> & {
2443
+ Spacer: typeof Spacer;
2444
+ };
2445
+
1928
2446
  interface FilterBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
1929
2447
  /** The filter controls. `FilterChip`s, a `SearchInput`, a toggle. */
1930
2448
  children?: React$1.ReactNode;
@@ -1935,6 +2453,12 @@ interface FilterBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
1935
2453
  * filters ask, so it belongs on the same line as them and nowhere else.
1936
2454
  */
1937
2455
  summary?: React$1.ReactNode;
2456
+ /**
2457
+ * No rule under it and no padding at its ends: whatever holds it is the
2458
+ * frame — a table's border under it, the table's edges either side. Off by
2459
+ * default, so a bar over a bare list keeps the rule that divides the two.
2460
+ */
2461
+ seamless?: boolean;
1938
2462
  }
1939
2463
  interface FilterChipProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "value"> {
1940
2464
  /** The dimension — `status`, `kind`, `agent`, `age`. */
@@ -1943,6 +2467,18 @@ interface FilterChipProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonEl
1943
2467
  value?: React$1.ReactNode;
1944
2468
  /** Marks the chip as narrowing the list, so an active filter is visible while scrolling. */
1945
2469
  active?: boolean;
2470
+ /**
2471
+ * Clear this one filter, without opening its menu.
2472
+ *
2473
+ * Only for a chip that **is** set: an unset chip has nothing to clear, and an
2474
+ * × on it would offer to undo something nobody did. With it, the chip is a
2475
+ * pair of controls rather than one — the label opens the picker, the × drops
2476
+ * the value — so both are reachable by keyboard and the × carries its own
2477
+ * name.
2478
+ */
2479
+ onRemove?: () => void;
2480
+ /** What the × is called, for a screen reader. Defaults to `Clear <label>`. */
2481
+ removeLabel?: string;
1946
2482
  }
1947
2483
  /**
1948
2484
  * The row above a list that narrows it.
@@ -1957,62 +2493,102 @@ declare const FilterBar: React$1.ForwardRefExoticComponent<FilterBarProps & Reac
1957
2493
  /**
1958
2494
  * One dimension, as a chip that opens a menu.
1959
2495
  *
1960
- * The caret is drawn rather than iconised so the chip stays 22px and reads as
1961
- * one token — `status ▾` — instead of a control with an icon glued to it.
2496
+ * The caret is drawn rather than iconised so the chip reads as
2497
+ * one token — `status ▾` — instead of a control with an icon glued to it. It is
2498
+ * a `sm` button: the control scale's 26px, the height of the `sm` search
2499
+ * beside it.
1962
2500
  */
1963
2501
  declare const FilterChip: React$1.ForwardRefExoticComponent<FilterChipProps & React$1.RefAttributes<HTMLButtonElement>>;
2502
+ /** One choice in a {@link MultiFilterChip}: its value, or a value with a label. */
2503
+ type FilterChipOption = string | {
2504
+ value: string;
2505
+ label?: React$1.ReactNode;
2506
+ };
2507
+ interface MultiFilterChipProps {
2508
+ /** The dimension — `kind`, `agent`, `status`. */
2509
+ label: React$1.ReactNode;
2510
+ options: FilterChipOption[];
2511
+ /** What it is narrowed to. Empty means "not filtered". */
2512
+ value: string[];
2513
+ onChange: (next: string[]) => void;
2514
+ /**
2515
+ * Many at once (the default) — a row matches any of them — or one, where
2516
+ * picking a choice replaces the last and picking it again clears it.
2517
+ */
2518
+ multiple?: boolean;
2519
+ }
2520
+ /**
2521
+ * A `FilterChip` with its menu: the choices for one dimension, checked as
2522
+ * they narrow the list. The chip reads what it is set to — the value, or
2523
+ * `3 selected` — and, once set, carries the × that clears it.
2524
+ */
2525
+ declare function MultiFilterChip({ label, options, value, onChange, multiple, }: MultiFilterChipProps): React$1.JSX.Element;
1964
2526
 
2527
+ interface FloatingPanelProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
2528
+ /** What the panel is — `Activity`, `Logs`. */
2529
+ title: React$1.ReactNode;
2530
+ /** Beside the title — a `live` dot, a count, a view switch. */
2531
+ aside?: React$1.ReactNode;
2532
+ /** Folded to its bar: the body is hidden and `summary` takes the title's room. */
2533
+ collapsed?: boolean;
2534
+ onCollapsedChange?: (collapsed: boolean) => void;
2535
+ /** What a folded panel still says — `● 3 · 4 layers`. */
2536
+ summary?: React$1.ReactNode;
2537
+ /** Shows a close control at the end of the bar. */
2538
+ onClose?: () => void;
2539
+ /** Under the body, above the edge — a total, a link out. */
2540
+ footer?: React$1.ReactNode;
2541
+ children?: React$1.ReactNode;
2542
+ bodyClassName?: string;
2543
+ }
1965
2544
  /**
1966
- * TODO — provisional. Built ahead of its design review.
2545
+ * A panel that floats over the work — the run's activity, its log — rather
2546
+ * than taking a split of it.
2547
+ *
2548
+ * It stays open over the work, so it is drawn as a card that is lifted — the
2549
+ * card ground, a border and a shadow — and not as a popover, which is the
2550
+ * ground of what opens and closes in a moment. Its bar is chrome, as every
2551
+ * panel's header is.
2552
+ *
2553
+ * It sits **on** a canvas, so it can be folded to its bar and closed: a panel
2554
+ * that could only be moved out of the way by resizing the work would be a
2555
+ * split, and a split is `AppLayoutV2`'s. Folded, it keeps one line of what it
2556
+ * would say, so folding it never hides that something is happening.
1967
2557
  *
1968
- * The chart set was deliberately deferred while the rest of the kit was built,
1969
- * because charts are the one group with a real design question in them rather
1970
- * than a markup question: which forms this product actually needs, at what
1971
- * sizes, and how much a 330px drawer can carry. This component satisfies the
1972
- * dataviz rules and the validated palette, but the *form inventory* has not been
1973
- * agreed — treat the API as unsettled until a board screen uses it in anger.
2558
+ * Content-height up to its parent, then its body scrolls: two of these stacked
2559
+ * in a column share the height between them.
1974
2560
  */
2561
+ declare const FloatingPanel: React$1.ForwardRefExoticComponent<FloatingPanelProps & React$1.RefAttributes<HTMLDivElement>>;
1975
2562
 
1976
- interface HeatCell {
1977
- /** When this cell is — `09:45`. Used in the hover title. */
1978
- at: React$1.ReactNode;
1979
- /** Which state key this cell is in. Must exist in `states`. */
1980
- state: string;
1981
- /** Extra detail for the hover title — `2 names: BPCL, HINDPETRO`. */
1982
- detail?: React$1.ReactNode;
1983
- }
1984
- interface HeatState {
1985
- key: string;
1986
- /** What the state is called. Shown in the legend and the hover title. */
1987
- label: React$1.ReactNode;
1988
- color?: string;
1989
- /** Renders as a ring rather than a fill — for "nothing happened here". */
1990
- hollow?: boolean;
1991
- }
1992
- interface HeatStripProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
1993
- cells: HeatCell[];
1994
- states: HeatState[];
1995
- /** Axis ticks under the strip — `[{at: 0, label: '09'}, …]`. */
1996
- ticks?: {
1997
- at: number;
1998
- label: React$1.ReactNode;
1999
- }[];
2000
- cellSize?: number;
2563
+ /**
2564
+ * The kinds of run Invana opens today — **suggestions, not a limit.**
2565
+ *
2566
+ * A product that grows a `simulate` kind passes `"simulate"` and the chip draws
2567
+ * it. The journal is one list with one filter over it ([SR7]), so the kind is a
2568
+ * *column value*, never a panel of its own — and a component that refused an
2569
+ * unknown value would make the kit a release blocker for every new one.
2570
+ */
2571
+ type KnownRunKind = "ask" | "import" | "bulk" | "stitch" | "enrich" | "schedule";
2572
+ /** What a run is, as an identifier — any string at all. See {@link KnownRunKind}. */
2573
+ type RunKind = KnownRunKind | (string & {});
2574
+ interface KindChipProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, "children"> {
2575
+ kind: RunKind;
2576
+ /** Not in play — a kind the current filter excludes. */
2577
+ dim?: boolean;
2001
2578
  }
2002
2579
  /**
2003
- * A run of firings, one square each, in time order.
2580
+ * What kind of run this row is: `ask` · `import` · `bulk` · `stitch` · `enrich`.
2004
2581
  *
2005
- * A schedule's day: twenty-one firings, most served, one skipped, one that could
2006
- * not answer. The shape of the day is the point — a reader sees the run of green
2007
- * and the one square that is not, without reading any of them.
2582
+ * **Neutral on purpose.** A kind is not a status and not a layer: it says which
2583
+ * shape of work opened the run, and every kind is equally ordinary. Painting
2584
+ * them would put five more hues on a row that already carries a status dot and
2585
+ * a layer, and would invite a reader to think `import` is worse than `ask`.
2008
2586
  *
2009
- * These are **status** colours, so they are reserved and never stand in for
2010
- * categories. The legend is mandatory rather than optional: a square carries no
2011
- * label of its own, so without the legend the strip would be colour-alone. Each
2012
- * cell also names its state in the hover title, which is what a screen reader
2013
- * and a keyboard user get.
2587
+ * Mono, because the value is the engine's own (`kind in (import, bulk)` is a
2588
+ * filter a person types), and small, because it sits inside a row that is
2589
+ * already carrying an address and a summary.
2014
2590
  */
2015
- declare const HeatStrip: React$1.ForwardRefExoticComponent<HeatStripProps & React$1.RefAttributes<HTMLDivElement>>;
2591
+ declare const KindChip: React$1.ForwardRefExoticComponent<KindChipProps & React$1.RefAttributes<HTMLSpanElement>>;
2016
2592
 
2017
2593
  interface LayerSectionProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children" | "title"> {
2018
2594
  layer: Layer;
@@ -2059,272 +2635,17 @@ interface LayerSectionProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>,
2059
2635
  */
2060
2636
  declare const LayerSection: React$1.ForwardRefExoticComponent<LayerSectionProps & React$1.RefAttributes<HTMLDivElement>>;
2061
2637
 
2062
- /**
2063
- * What an item is doing where it sits — the two tenses in one vocabulary.
2064
- *
2065
- * `declared` is the plan tense: this is what the playbook **will** engage.
2066
- * `out` · `in` · `refused` · `skipped` are the run tense: what it did engage,
2067
- * what a bound stopped, and what it never reached for. Refused and skipped stay
2068
- * two different facts, and both are drawn — a drawing that showed only what
2069
- * happened would answer *what did this run do* and not *what was it stopped
2070
- * from doing*, and the second is the question the strip exists for.
2071
- */
2072
- type KnownLayerItemState = "declared" | "out" | "in" | "refused" | "skipped";
2073
- /**
2074
- * What an item is doing — **suggestions, not a limit.** A run that grows a
2075
- * `deferred` or a `retried` passes it and the bar draws: the neutral edge, and
2076
- * the state's own name under the label. Only the states above carry special
2077
- * drawing, because only they have a meaning defined here to draw.
2078
- */
2079
- type LayerItemState = KnownLayerItemState | (string & {});
2080
- /** The run half of {@link LayerItemState}, as the ledger's `direction` column. */
2081
- type TouchDirection = Exclude<KnownLayerItemState, "declared"> | (string & {});
2082
- /**
2083
- * One participant under a band — the row a task actually lands on.
2084
- *
2085
- * A band says *llm*; a part says **which** llm, or which role a caller may
2086
- * re-cast: `role: decide`, `model/Orders@v2`, `third_party/app/email`. Reading
2087
- * a plan is reading its parts, because that is the list a world is checked
2088
- * against.
2089
- */
2090
- interface LayerPart {
2091
- id: string;
2092
- /** The participant address, or the role — `model/Orders@v2`, `role: decide`. */
2093
- label: string;
2094
- /** What the caller still owes, or what the crossing is — `egress: the note`. */
2095
- note?: string;
2096
- }
2097
- interface LayerBand {
2098
- layer: Layer;
2099
- /** Overrides the layer's own name. */
2100
- label?: React$1.ReactNode;
2101
- /** Right of the name — `declared · 1`, `nothing declared`, `2 roles`. */
2102
- note?: string;
2103
- /** The participants under it, each its own row. */
2104
- parts?: LayerPart[];
2105
- /**
2106
- * This band is the **spine** — the runtime's own dispatches, which the other
2107
- * bands are timed against and which is never governed. Its wire runs the
2108
- * whole axis and it is never drawn as unspent.
2109
- *
2110
- * The band says so rather than the component recognising a layer by name:
2111
- * `agent` is Invana's spine, but the layer vocabulary is a product's to grow
2112
- * and a strip that hard-coded one of its values would be a strip that had to
2113
- * be edited before anyone could rename it.
2114
- */
2115
- spine?: boolean;
2116
- }
2117
- /**
2118
- * One task, where it sits and how long it takes.
2119
- *
2120
- * `start` and `end` are in the axis's own unit — a step ordinal under `seq`, a
2121
- * millisecond under `elapsed`. A task with no `end` is an instant and is drawn
2122
- * at the minimum width.
2123
- */
2124
- interface LayerItem {
2125
- id: string;
2126
- /** The task. This is the only place a task name is written. */
2127
- label: string;
2128
- layer: Layer;
2129
- /** The {@link LayerPart} it lands on. Omitted, it sits on the band itself. */
2130
- part?: string;
2131
- start: number;
2132
- end?: number;
2133
- state?: LayerItemState;
2134
- /** Under the name — `decide`, `${supplier_id}`, `form: human`. */
2135
- note?: string;
2136
- /** The rule that refused it, when one did. */
2137
- ruleMatched?: string;
2138
- }
2139
- /** A bounded repetition over a stretch of the axis — `loop · max 3`. */
2140
- interface LayerBracket {
2141
- id: string;
2142
- start: number;
2143
- end: number;
2144
- label: string;
2145
- }
2146
- /**
2147
- * A **seam** — a moment on the axis where everything stops at once.
2148
- *
2149
- * A gate belongs to no band. It is not dispatched, it holds no slot and it has
2150
- * no participant, so it cannot be a bar: it is a condition on the way into a
2151
- * step, and it stops every layer together. That makes it a **position on the
2152
- * axis**, drawn as a rule the bands are crossed by — which is also the only
2153
- * drawing left once task names stop being the axis, because there are no
2154
- * columns for it to sit between.
2155
- *
2156
- * **Which side of the line the label sits on is the price of saying no.**
2157
- * `before` means nothing has been spent yet; `after` means the work up to here
2158
- * is already paid for. A reader gets what declining costs from where the mark
2159
- * sits, before reading a word of it.
2160
- */
2161
- interface LayerSeam {
2162
- id: string;
2163
- /**
2164
- * Where it sits, in the axis's own unit. **Omitted, it has no position** —
2165
- * it can be raised at any dispatch, and it is drawn across the whole axis
2166
- * rather than at a point. Placing such a gate on one moment would be a guess.
2167
- */
2168
- at?: number;
2169
- /** What it is — `approval · before dispatch`, `verdict · after the pass`. */
2170
- label: string;
2171
- /** Which side of the line the cost falls on. Defaults to `before`. */
2172
- edge?: "before" | "after";
2173
- /**
2174
- * It is not on the plan: it resolves at dispatch, so the same plan is gated
2175
- * for one caller and not another. Drawn dashed — *this may appear*.
2176
- */
2177
- conditional?: boolean;
2178
- /** Under the label — `nothing spent · finance-approvers · 4h`. */
2179
- note?: string;
2180
- }
2181
- /** What the axis counts. */
2182
- type LayerScale = "seq" | "elapsed";
2183
- interface LayerStripProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children" | "onSelect"> {
2184
- bands: LayerBand[];
2185
- items: LayerItem[];
2186
- /**
2187
- * `seq` is a plan's time — what happens before what, one unit per step.
2188
- * `elapsed` is a run's, in milliseconds from the run opening.
2189
- */
2190
- scale?: LayerScale;
2191
- /** The axis extent. Defaults to the items' own. */
2192
- domain?: [number, number];
2193
- /** Tick positions in axis units. Defaults to integers (`seq`) or five (`elapsed`). */
2194
- ticks?: number[];
2195
- formatTick?: (value: number) => string;
2196
- brackets?: LayerBracket[];
2197
- /**
2198
- * The gates — the moments the whole drawing stops at. They get a row of their
2199
- * own above the bands *and* a rule down the track, because a gate has to read
2200
- * both as a thing with a name and as something every band is stopped by.
2201
- */
2202
- seams?: LayerSeam[];
2203
- onSelectItem?: (itemId: string) => void;
2204
- selectedItem?: string;
2205
- /**
2206
- * The bands whose participants are folded away, uncontrolled. Their tasks do
2207
- * not disappear with them: they drop onto the band's own line, which is the
2208
- * whole point of shutting one.
2209
- */
2210
- defaultCollapsed?: Layer[];
2211
- /** The same, controlled. Pass it with `onCollapsedChange`. */
2212
- collapsed?: Layer[];
2213
- onCollapsedChange?: (layers: Layer[]) => void;
2214
- /**
2215
- * Offer the disclosures at all. Off, the bands render as given and a caller
2216
- * that wants an overview passes the bands it wants shut in `collapsed`.
2217
- */
2218
- collapsible?: boolean;
2219
- /**
2220
- * A hover card on each task, saying what the bar cannot fit: the participant
2221
- * it spends, when it runs and for how long, and the rule that refused it. On
2222
- * by default; off falls back to the native `title`.
2223
- */
2224
- hoverDetail?: boolean;
2225
- /** What that card says, when the default is not what this surface owes. */
2226
- itemDetail?: (item: LayerItem) => React$1.ReactNode;
2227
- /**
2228
- * Keep the band labels in place while time scrolls. On by default: a run with
2229
- * forty steps scrolls, and a band you cannot name is a row of marks.
2230
- */
2231
- frozenLabels?: boolean;
2232
- /**
2233
- * The label column, in `rem`. The default fits a layer name at the root size
2234
- * beside its note — `human` and `3 rounds · 6m 01s` on one line.
2235
- */
2236
- labelWidth?: number;
2237
- /** The narrowest the track is drawn before it scrolls, in `rem`. */
2238
- minTrackWidth?: number;
2239
- /**
2240
- * The narrowest one tick may be squeezed to, in `rem`. Past that the strip
2241
- * scrolls rather than shrinking: a bar too narrow to carry its task's name
2242
- * has stopped being a drawing of that task.
2243
- */
2244
- minSlotWidth?: number;
2245
- /**
2246
- * What the layers are painted with. The same map reaches the band chips and
2247
- * the bars, so a strip never disagrees with its own labels; a layer left out
2248
- * draws in the neutral.
2249
- */
2250
- palette?: LayerPalette;
2251
- }
2252
- /** An unknown state is still a state: it says its own name. */
2253
- declare const stateLabel: (state: LayerItemState) => string;
2254
- /**
2255
- * A plan or a run as layer bands over a time axis — a gantt, not a matrix.
2256
- *
2257
- * **Time is the x axis, in whichever tense the drawing is in.** A plan's time
2258
- * is its order (`seq` — what happens before what); a run's is the wall clock
2259
- * (`elapsed`). Task names are not an axis: a task is a bar, written once where
2260
- * it sits, so a reader answers *what does this engage, and for how long* by
2261
- * scanning across, and *what spends this participant* by scanning down.
2262
- *
2263
- * **A band opens into its participants.** `llm` is a band; `role: decide` and
2264
- * `role: extract` are the rows under it, and the task sits on the row it
2265
- * actually spends. The band alone cannot say which model a step will reach, and
2266
- * that is the list a world is checked against.
2267
- *
2268
- * **A band folds its participants away without losing its tasks.** Shut, the
2269
- * rows go and every task the layer spends drops onto the band's own line —
2270
- * which is the overview: six lines, every task placed in time, *what was this
2271
- * layer busy with* answered without reading twelve rows. Open, the same tasks
2272
- * sit on the participant that spends them. `collapse all` in the header does it
2273
- * to every band that has participants to fold, and nothing is hidden either
2274
- * way: folding moves a task up a row, it never drops it.
2275
- *
2276
- * **A bar says what it is; hovering it says what it cannot fit.** The card
2277
- * carries the participant the row truncates or folding took away, when the task
2278
- * runs and for how long, and the rule that refused it — so a bar can stay a bar
2279
- * rather than growing a second line for every fact somebody might want.
2280
- *
2281
- * **Refusals are struck in place, not removed.** A refused engagement keeps its
2282
- * bar and takes a struck label, because the gap it would otherwise leave is
2283
- * indistinguishable from a stretch of time that never reached for that layer.
2284
- *
2285
- * **A row nothing spent is drawn muted, never dropped.** A band no task
2286
- * touched takes the muted ground **across its whole width** — label column and
2287
- * track together — and so does a participant row under an open band:
2288
- * `role: extract` declared and never reached reads as *this run did not get
2289
- * that far*, not as an ordinary empty row. A dropped row would say nothing at
2290
- * all, and *this plan never reaches for a cache* is a finding.
2291
- *
2292
- * The ground is the carrier, not the type colour. A row is unspent because it
2293
- * is *empty*, and an empty row has no text to mute past its own name — greying
2294
- * the chip while the row keeps the card ground says *this label is quiet* when
2295
- * the fact is *nothing spends this layer*.
2296
- *
2297
- * **A bar wears its layer, and its state is the edge.** The hue tints the bar's
2298
- * ground and border and runs down its rail; dashed says the task never ran, and
2299
- * the destructive token says a rule refused it — the one fact that outranks
2300
- * whose bar it is. The label itself stays on a text token: the data palette is
2301
- * a surface palette here, which keeps `cache` as legible as `human`.
2302
- *
2303
- * **Refused is not unspent.** A row whose only task was refused keeps its full
2304
- * weight: being stopped from reaching a participant and never reaching for one
2305
- * are the two facts this drawing exists to separate.
2306
- *
2307
- * **A gate is a seam, not a row.** Nothing is dispatched at a gate, so it has
2308
- * no participant and cannot be a bar; it stops every band at once, so it is a
2309
- * position on the axis and the bands are crossed by it. Which side of the line
2310
- * its label hangs on is what saying no costs — `before` and nothing is spent,
2311
- * `after` and the pass is already paid for. A gate that can be raised at any
2312
- * dispatch has no position and draws across the whole axis instead.
2313
- *
2314
- * **The spine band is always drawn**, with its wire running the whole axis: the
2315
- * runtime's own dispatches are what the other bands are timed against, and it
2316
- * is never governed. A band declares itself the spine with `spine` — the strip
2317
- * recognises no layer by name. A spine that has dispatched nothing recedes like
2318
- * any other empty row: the wire still says *this is the clock*, and the muted
2319
- * ground says *it has not run yet*, which are two different facts.
2320
- *
2321
- * DOM over a fixed track, not canvas: it binds to no canvas store, it lives in
2322
- * `mainSection` where no canvas exists, and frozen row labels plus text
2323
- * selection are free here and expensive there.
2324
- */
2325
- declare const LayerStrip: React$1.ForwardRefExoticComponent<LayerStripProps & React$1.RefAttributes<HTMLDivElement>>;
2326
-
2327
- type LegendSwatchKind = "dot" | "line" | "dashed" | "arrow" | "ring";
2638
+ type LegendSwatchKind = "dot"
2639
+ /** A filled square — a column or a bar. */
2640
+ | "box"
2641
+ /** A dashed square outline — a plan or a target a column stands inside. */
2642
+ | "outline" | "line" | "dashed" | "arrow" | "ring"
2643
+ /** The rail down a row — how a trace says which layer a step spent. */
2644
+ | "stripe"
2645
+ /** A box around what it holds — a bounded repetition, drawn by containment. */
2646
+ | "bracket"
2647
+ /** A line the drawing is crossed by, with the mark that names it — a gate. */
2648
+ | "rule";
2328
2649
  interface LegendItemProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "color"> {
2329
2650
  /**
2330
2651
  * What the mark looks like on the canvas. A legend that draws a dot for
@@ -2360,35 +2681,135 @@ interface LegendProps extends React$1.HTMLAttributes<HTMLDivElement> {
2360
2681
  declare const Legend: React$1.ForwardRefExoticComponent<LegendProps & React$1.RefAttributes<HTMLDivElement>>;
2361
2682
  declare const LegendItem: React$1.ForwardRefExoticComponent<LegendItemProps & React$1.RefAttributes<HTMLDivElement>>;
2362
2683
 
2363
- interface LensChipProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, "children" | "onClick"> {
2684
+ type TerminalLineKind = "prompt" | "output" | "comment";
2685
+ /**
2686
+ * The severity a **log** line was emitted at, as the runtime recorded it.
2687
+ *
2688
+ * Distinct from `kind`, which says what part of a *transcript* a line is — a
2689
+ * command you typed, what it printed, a comment. A run's log has no prompts and
2690
+ * no comments; every line is output, and what varies is how loud it is.
2691
+ */
2692
+ type KnownTerminalLevel = "info" | "warn" | "error" | "debug";
2693
+ /**
2694
+ * The values the kit draws specially — **suggestions, not a limit.** Anything
2695
+ * else renders with the neutral token and its own name.
2696
+ */
2697
+ type TerminalLevel = KnownTerminalLevel | (string & {});
2698
+ interface TerminalLineProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
2699
+ kind?: TerminalLineKind;
2700
+ /**
2701
+ * How loud this line is. Tints **one** cell — the one named by
2702
+ * `levelColumn` — and nothing else.
2703
+ *
2704
+ * Only the level word is coloured, never the message: a wall of amber
2705
+ * sentences is unreadable, and what a reader scans is the column, not the
2706
+ * prose. Setting this also drops the `kind` marker — a log line is not a
2707
+ * transcript line and does not want a `→` in front of it.
2708
+ *
2709
+ * The level **word** stays in `columns`. Colour is never the carrier.
2710
+ */
2711
+ level?: TerminalLevel;
2364
2712
  /**
2365
- * The lens in force. **`undefined` is a real, common state** and reads
2366
- * `Everything` — see below.
2713
+ * Which cell of `columns` holds the level word. Defaults to `1`, because a
2714
+ * log line reads `time · LEVEL · source · message` and the timestamp comes
2715
+ * first in every log anyone has ever read.
2367
2716
  */
2368
- lens?: {
2369
- name: string;
2370
- kind?: "world" | "guardrail";
2371
- };
2372
- /** Open the picker. Absent leaves the chip as a statement. */
2373
- onPick?: () => void;
2717
+ levelColumn?: number;
2718
+ /**
2719
+ * Columns, for the step-shaped output a run prints — name, detail, timing,
2720
+ * result. Given as cells so they align down the transcript instead of each
2721
+ * line padding itself with spaces.
2722
+ */
2723
+ columns?: React$1.ReactNode[];
2724
+ children?: React$1.ReactNode;
2725
+ }
2726
+ interface TerminalProps extends React$1.HTMLAttributes<HTMLDivElement> {
2727
+ children?: React$1.ReactNode;
2728
+ /** Shows a blinking block at the end. */
2729
+ cursor?: boolean;
2730
+ /**
2731
+ * `grid-template-columns` for every columned line in this transcript.
2732
+ *
2733
+ * Set once here rather than per line, because the point of columns is that
2734
+ * they line up *down* the transcript — a width chosen per row aligns nothing.
2735
+ */
2736
+ columnTemplate?: string;
2737
+ }
2738
+ /**
2739
+ * A shell transcript, as a first-class surface.
2740
+ *
2741
+ * Some of this product's work happens outside Studio — imports run from the
2742
+ * CLI, a scheduler calls the Python API — and the hand-off has to be shown
2743
+ * honestly rather than redrawn as a wizard. So this renders what the terminal
2744
+ * actually printed.
2745
+ *
2746
+ * It is presentational: a record of a run that already happened, not a live
2747
+ * console. There is no input here, and it does not scroll itself.
2748
+ */
2749
+ declare const Terminal: React$1.ForwardRefExoticComponent<TerminalProps & React$1.RefAttributes<HTMLDivElement>>;
2750
+ declare const TerminalLine: React$1.ForwardRefExoticComponent<TerminalLineProps & React$1.RefAttributes<HTMLDivElement>>;
2751
+
2752
+ /** One line of a run's log, as the runtime emitted it. */
2753
+ interface LogLine {
2754
+ id?: string;
2755
+ /** When, already worded — `10:42:01`. */
2756
+ at: string;
2757
+ level: TerminalLevel;
2758
+ /** What emitted it — `graph.query`, `egress`. */
2759
+ source?: string;
2760
+ message: string;
2761
+ }
2762
+ /** How loud a line must be to show: everything, warnings and up, errors only. */
2763
+ type LogFloor = "all" | "warn" | "error";
2764
+ interface LogCardProps extends Omit<FloatingPanelProps, "title" | "children" | "summary" | "aside"> {
2765
+ /** @default "Logs" */
2766
+ title?: React$1.ReactNode;
2767
+ /** Every line so far, oldest first. New lines are appended as they arrive. */
2768
+ lines: LogLine[];
2769
+ /** Lines are still arriving. */
2770
+ live?: boolean;
2771
+ /** Only lines from this source — a call opened in the activity panel. Controlled with `onSourceChange`. */
2772
+ source?: string | null;
2773
+ onSourceChange?: (source: string | null) => void;
2774
+ }
2775
+ /**
2776
+ * The run's log, as it is written — in a panel that floats over the work.
2777
+ *
2778
+ * The raw record behind the activity panel: every line the runtime emitted,
2779
+ * its level the one coloured word ({@link TerminalLine}). It follows new lines
2780
+ * while live; **pausing freezes what is shown**, so a line can be read while
2781
+ * the run keeps writing, and resuming catches up. Filter by how loud a line
2782
+ * is, by words, or by the source a call wrote it from.
2783
+ */
2784
+ declare const LogCard: React$1.ForwardRefExoticComponent<LogCardProps & React$1.RefAttributes<HTMLDivElement>>;
2785
+
2786
+ /** What the mark means, as a tone. The same seven `StatusDot` uses, less the dot. */
2787
+ type MarkTone = "muted" | "info" | "success" | "warning" | "destructive";
2788
+ interface MarkChipProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2789
+ tone?: MarkTone;
2790
+ /** `↺ 2 of 3`, `⏸ 1 of 3`, `live`, `↳ delegates`. */
2791
+ children?: React$1.ReactNode;
2374
2792
  }
2375
2793
  /**
2376
- * Which world a run is being read under — the header's right-hand chip, and the
2377
- * one on an agent's row.
2794
+ * What happened to this row that its own columns cannot say.
2795
+ *
2796
+ * A run's trace row already carries a name, a description, a layer, a role and
2797
+ * a duration. What it does *not* carry is the exception: this step took two
2798
+ * attempts, this one is painting right now, this one asked a person, this one
2799
+ * delegated a run of its own. Those are marks — they appear on a handful of
2800
+ * rows and they are the rows a reader is looking for.
2378
2801
  *
2379
- * **No lens reads `Everything`, never blank and never `None`.** A Graph that
2380
- * sets no lens sees the whole global model, every configured provider and every
2381
- * third party its agents are credentialed for: the widest state is the default,
2382
- * and it is a *state*, not a missing value. `None` would suggest nothing is in
2383
- * view, which is the exact opposite of what is true. `Everything` is also still
2384
- * inside the guardrails, which is why a guardrail is not a lens you pick.
2802
+ * **Outlined, never filled.** A filled chip competes with the row's own name at
2803
+ * the same size; an outline reads as an annotation on the name, which is what it
2804
+ * is. Mono, because most marks are counts against a bound (`2 of 3`) and the
2805
+ * bound is the engine's number.
2385
2806
  *
2386
- * It is the smallest surface in Govern and the one most often on screen, so it
2387
- * carries the name and nothing else. What that world narrows belongs in the
2388
- * drawer the chip opens — a chip that listed its rules would be a rule list
2389
- * that happened to be in a header.
2807
+ * Distinct from `BoundChip`, and the distinction is the point: a bound is what a
2808
+ * callable **may** spend, declared before anything ran. A mark is what a run
2809
+ * **did** — it exists only in the record, and it is usually the reason a reader
2810
+ * opened the trace at all.
2390
2811
  */
2391
- declare const LensChip: React$1.ForwardRefExoticComponent<LensChipProps & React$1.RefAttributes<HTMLSpanElement>>;
2812
+ declare const MarkChip: React$1.ForwardRefExoticComponent<MarkChipProps & React$1.RefAttributes<HTMLSpanElement>>;
2392
2813
 
2393
2814
  interface MatchCandidate {
2394
2815
  address: string;
@@ -2442,6 +2863,11 @@ interface MenuItem {
2442
2863
  onClick?: () => void;
2443
2864
  children?: MenuItem[];
2444
2865
  }
2866
+ /**
2867
+ * A row of a menu; with `children`, a submenu that opens beside it. The submenu
2868
+ * opens on hover and on focus, and from the keyboard: → or Enter opens it on its
2869
+ * first row, ← or Escape closes it back to its row.
2870
+ */
2445
2871
  declare const MenuItem: React$1.FC<MenuItemProps>;
2446
2872
 
2447
2873
  /**
@@ -2451,7 +2877,7 @@ declare const MenuItem: React$1.FC<MenuItemProps>;
2451
2877
  * Omit it for an ordinary measurement. A grid where every tile is coloured
2452
2878
  * carries no signal, and a number that is merely large is not a warning.
2453
2879
  */
2454
- type KnownMetricTone = "running" | "success" | "warning" | "error" | "info";
2880
+ type KnownMetricTone = "running" | "success" | "warning" | "error" | "info" | "muted";
2455
2881
  /**
2456
2882
  * The values the kit draws specially — **suggestions, not a limit.** Anything
2457
2883
  * else renders with the neutral token and its own name.
@@ -2466,6 +2892,11 @@ interface MetricTileProps extends React$1.HTMLAttributes<HTMLDivElement> {
2466
2892
  caption?: React$1.ReactNode;
2467
2893
  /** Tints the value. See {@link MetricTone} — most tiles should not set it. */
2468
2894
  tone?: MetricTone;
2895
+ /**
2896
+ * Tints the caption instead — for a caption that is a change, `▲ 8 d vs
2897
+ * normal`, where the direction is the signal and the value is a plain figure.
2898
+ */
2899
+ captionTone?: MetricTone;
2469
2900
  /**
2470
2901
  * How much of a known ceiling has been spent, `0`–`1`, as a 4px bar under the
2471
2902
  * caption. Takes `tone`'s colour when one is set.
@@ -2476,6 +2907,36 @@ interface MetricTileProps extends React$1.HTMLAttributes<HTMLDivElement> {
2476
2907
  * a deadline that does not exist.
2477
2908
  */
2478
2909
  meter?: number;
2910
+ /**
2911
+ * The figure against a target, as a bar under it: `fill` is how far the
2912
+ * figure has come and `mark` where the target sits, both `0`–`1` of the
2913
+ * scale. `labels` writes the scale's start, the target and its end under it.
2914
+ *
2915
+ * Unlike `meter`, the target is a line the figure is read against, not a
2916
+ * ceiling it spends — the fill may pass it.
2917
+ */
2918
+ gauge?: {
2919
+ fill: number;
2920
+ mark: number;
2921
+ labels?: [React$1.ReactNode, React$1.ReactNode, React$1.ReactNode];
2922
+ };
2923
+ /**
2924
+ * Set on the warning ground: the one tile in a band that needs a second look
2925
+ * — a figure resting on too few records. Say why in a line under the band.
2926
+ */
2927
+ flagged?: boolean;
2928
+ /** Beside the figure, at the right, bottom-aligned — a sparkline of its recent run. */
2929
+ aside?: React$1.ReactNode;
2930
+ /**
2931
+ * `tile` is one of several, boxed, in a strip. `hero` is the one figure an
2932
+ * answer turns on — the adjusted odds ratio, net revenue retention — set
2933
+ * large on the surface it sits in: no box, the label in sentence case over
2934
+ * it, the caption in mono under it, so it reads as a result, not a gauge.
2935
+ * `figure` is one of a band of figures inside an answer — boxed like a tile
2936
+ * but set like a small hero: the label in sentence case, the value in a
2937
+ * larger sans, the caption in mono.
2938
+ */
2939
+ variant?: "tile" | "hero" | "figure";
2479
2940
  /** A sparkline, or anything else that sits under the value. */
2480
2941
  children?: React$1.ReactNode;
2481
2942
  }
@@ -2487,10 +2948,28 @@ interface MetricGridProps extends React$1.HTMLAttributes<HTMLDivElement> {
2487
2948
  *
2488
2949
  * It is a prop because a tile strip is usually one band of something larger,
2489
2950
  * and a grid that keeps its own tighter rhythm makes the whole surface read
2490
- * as two grids. A dashboard passes its own gap; a standalone strip keeps the
2951
+ * as two grids. A board passes its own gap; a standalone strip keeps the
2491
2952
  * default.
2492
2953
  */
2493
2954
  gap?: number;
2955
+ /**
2956
+ * One strip, the tiles divided by rules instead of spaced apart — for a
2957
+ * band of figures that belong to one answer and read left to right. `gap`
2958
+ * is ignored.
2959
+ */
2960
+ joined?: boolean;
2961
+ /**
2962
+ * With `joined`: no box around the strip, and nothing wasted on its outside
2963
+ * — only the rules between tiles are drawn, and the outer tiles sit flush
2964
+ * with the text around the grid, as a seamless table's outer columns do.
2965
+ * For a strip inside a card or an answer, whose edge already frames it.
2966
+ */
2967
+ seamless?: boolean;
2968
+ /**
2969
+ * A fixed number of columns instead of fitting to the width — for a band
2970
+ * whose shape is part of what it says: three across, two by two.
2971
+ */
2972
+ columns?: number;
2494
2973
  children?: React$1.ReactNode;
2495
2974
  }
2496
2975
  /**
@@ -2530,6 +3009,12 @@ interface NavMenuItem {
2530
3009
  /** Draw a separator immediately above this row. */
2531
3010
  separatorBefore?: boolean;
2532
3011
  onSelect?: () => void;
3012
+ /**
3013
+ * A submenu: the row opens these beside it (hover, → or Enter; ← or Escape
3014
+ * closes it). Its own `onSelect` is not called — the rows inside are the
3015
+ * choices.
3016
+ */
3017
+ children?: NavMenuItem[];
2533
3018
  }
2534
3019
  /**
2535
3020
  * NavItemConfig - Shared configuration for a single navigation item, used by
@@ -2592,6 +3077,12 @@ interface NavItemConfig {
2592
3077
  * is why a tab strip could not be built on nav items before.
2593
3078
  */
2594
3079
  menuTrigger?: "item" | "caret";
3080
+ /**
3081
+ * Draws an inline `×` inside the item — a tab that is closed rather than
3082
+ * managed. The body still selects; only the `×` closes. Like the caret, it
3083
+ * makes the item host a button, so the item itself renders as a `<div>`.
3084
+ */
3085
+ onClose?: () => void;
2595
3086
  /**
2596
3087
  * A count pinned to the item's top-right — unread reviews, waiting questions.
2597
3088
  *
@@ -2608,11 +3099,11 @@ interface NavItemConfig {
2608
3099
  /**
2609
3100
  * The visual treatments a strip of nav items can wear.
2610
3101
  *
2611
- * One table, because the kit draws all three and used to draw two of them by
2612
- * hand in separate components. `nav` is what nav items have always looked
2613
- * like; `underline` and `folder` are the two tab strips — a panel's views and
2614
- * a workbook's pages — lifted out of `TabbedPanel` and
2615
- * `CanvasPagesViewPanel` unchanged, so migrating those renders identically.
3102
+ * One table, because the kit used to draw these by hand in separate
3103
+ * components. `nav` is what nav items have always looked like; `underline` and
3104
+ * `folder` are the two tab strips — a panel's views (`TabbedPanel`) and a
3105
+ * workbook's pages (`Workbook`) — and `folder-bottom` is the workbook's strip
3106
+ * under its pages.
2616
3107
  */
2617
3108
  declare const VARIANT: {
2618
3109
  /** The capsule: a filled, ringed chip. Toolbars, rails, header actions. */
@@ -2642,6 +3133,14 @@ declare const VARIANT: {
2642
3133
  readonly active: "mb-[-1px] rounded-t-md border border-b-0 border-primary text-primary";
2643
3134
  readonly strip: "items-stretch";
2644
3135
  };
3136
+ /** The folder tab turned over, for a strip under its pages: open at the top, rounded below. */
3137
+ readonly "folder-bottom": {
3138
+ readonly item: "h-full rounded-none px-3 py-2 gap-1.5";
3139
+ readonly hover: "hover:text-foreground";
3140
+ readonly open: "data-[state=open]:text-foreground";
3141
+ readonly active: "mt-[-1px] rounded-b-md border border-t-0 border-primary text-primary";
3142
+ readonly strip: "items-stretch";
3143
+ };
2645
3144
  };
2646
3145
  type NavItemsVariant = keyof typeof VARIANT;
2647
3146
  interface NavItemsProps {
@@ -2904,8 +3403,12 @@ interface NestedMenuProps {
2904
3403
  declare const NestedMenu: React__default.FC<NestedMenuProps>;
2905
3404
 
2906
3405
  interface PanelBoxProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
2907
- /** What this band is — `Input · what opened this run`, `result.json`, `Log`. */
2908
- title: React$1.ReactNode;
3406
+ /**
3407
+ * What this band is — `Input · what opened this run`, `result.json`, `Log`.
3408
+ * Without one there is no label bar: the box still frames its content, which
3409
+ * is how a band of figures sits on a board as it sits in an answer card.
3410
+ */
3411
+ title?: React$1.ReactNode;
2909
3412
  /**
2910
3413
  * The fact on the right of the header — `214 lines · tailing`, `rendered from
2911
3414
  * result.json`, a `<Badge>`, a count.
@@ -2924,9 +3427,10 @@ interface PanelBoxProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "ti
2924
3427
  bodyClassName?: string;
2925
3428
  }
2926
3429
  /**
2927
- * One band of a dashboard: a bordered box with a label bar over it.
3430
+ * One band of a board: a bordered box, with a label bar over it when it
3431
+ * has a `title`.
2928
3432
  *
2929
- * A dashboard is a scrolling column of these — tiles, then the flow, then
3433
+ * A board is a scrolling column of these — tiles, then the flow, then
2930
3434
  * Input beside `result.json`, then the Log. Each box is **content-height and
2931
3435
  * owns no scroller**: the column scrolls, so a band that scrolled itself would
2932
3436
  * hide its own content behind a second bar.
@@ -2949,6 +3453,11 @@ interface PanelContentProps {
2949
3453
  title?: React__default.ReactNode;
2950
3454
  /** Header title as plain text, rendered in the default panel header style. */
2951
3455
  titleText?: string;
3456
+ /**
3457
+ * How many things the panel holds — `4`, `12 changed` — beside the title,
3458
+ * muted. A fact about the panel, so always shown, unlike its actions.
3459
+ */
3460
+ count?: React__default.ReactNode;
2952
3461
  children?: React__default.ReactNode;
2953
3462
  /** Classes for the outer card. */
2954
3463
  className?: string;
@@ -2989,7 +3498,7 @@ interface PanelContentProps {
2989
3498
  */
2990
3499
  actionsOnHover?: boolean;
2991
3500
  }
2992
- declare function PanelContent({ title, titleText, children, className, headerClassName, bodyClassName, footerContent, footerClassName, headerActions, actionsOnHover, }: PanelContentProps): React__default.JSX.Element;
3501
+ declare function PanelContent({ title, titleText, count, children, className, headerClassName, bodyClassName, footerContent, footerClassName, headerActions, actionsOnHover, }: PanelContentProps): React__default.JSX.Element;
2993
3502
 
2994
3503
  interface PanelStackSection {
2995
3504
  /** Unique identifier for the section within the stack. */
@@ -3006,6 +3515,12 @@ interface PanelStackSection {
3006
3515
  content: React$1.ReactNode;
3007
3516
  /** Optional leading icon component, shown before the title. */
3008
3517
  icon?: React$1.ElementType;
3518
+ /**
3519
+ * How many things the section holds — `4`, `12 changed` — beside the title,
3520
+ * muted. A fact, not an action: always shown, even while the actions wait
3521
+ * for hover, and while the section is collapsed.
3522
+ */
3523
+ count?: React$1.ReactNode;
3009
3524
  /**
3010
3525
  * Actions on the right of the title bar, as `NavHorizontal` items — the same
3011
3526
  * list `PanelContent` and `TabbedPanel` take, so a header is described once
@@ -3027,7 +3542,7 @@ interface PanelStackSection {
3027
3542
  /**
3028
3543
  * Keep `headerActions` hidden until the header is hovered or focused (or a
3029
3544
  * menu inside them is open) — VS Code's quiet view header. Defaults to
3030
- * `true`. Chrome that must always read, like a count, belongs in `title`.
3545
+ * `true`. A count that must always read is `count`.
3031
3546
  */
3032
3547
  actionsOnHover?: boolean;
3033
3548
  /** Start the section collapsed (header only). Defaults to `false`. */
@@ -3125,12 +3640,65 @@ interface PanelStackProps {
3125
3640
  */
3126
3641
  declare function PanelStack({ sections, stackRef, onCollapsedChange, headerHeight, withHandle, className, headerClassName, bodyClassName, }: PanelStackProps): React$1.JSX.Element;
3127
3642
 
3643
+ /**
3644
+ * What a run did with a participant it was allowed — **suggestions, not a
3645
+ * limit.** A product with a seventh verdict passes it and the row draws it in
3646
+ * the neutral.
3647
+ */
3648
+ type KnownParticipantVerdict = "touched" | "never touched" | "refused" | "miss" | "denied";
3649
+ type ParticipantVerdict = KnownParticipantVerdict | (string & {});
3650
+ interface ParticipantRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
3651
+ /** The participant, as the world addresses it — `model/Routes@v4`. */
3652
+ address: string;
3653
+ verdict: ParticipantVerdict;
3654
+ /** What happened — `1,284 rows · step 7`, `allowed, and nothing asked for it`. */
3655
+ note?: React$1.ReactNode;
3656
+ /**
3657
+ * The tone the verdict is read in. Defaults: `touched` succeeds, `refused`
3658
+ * and `denied` are destructive, everything else is muted — *allowed and never
3659
+ * reached for* is not a failure, it is an invitation to narrow.
3660
+ */
3661
+ tone?: "success" | "muted" | "warning" | "destructive";
3662
+ /**
3663
+ * How the **address** is drawn. Derived from the verdict — `refused` strikes
3664
+ * it in place, `never touched` mutes it — and overridable for a vocabulary
3665
+ * the kit has not seen.
3666
+ *
3667
+ * Striking is `AddressChip`'s job and not this row's: the address is struck
3668
+ * everywhere a refusal is shown, and two components deciding that
3669
+ * independently is how one surface comes to strike and another to hide.
3670
+ */
3671
+ addressTone?: AddressTone;
3672
+ }
3673
+ /**
3674
+ * One participant a run could have spent, and what it actually did with it.
3675
+ *
3676
+ * The Lens reading of a run is a list of these under their layers: every
3677
+ * address the world allowed, each marked `touched` · `never touched` ·
3678
+ * `refused`. **Nothing is filtered out**, because the list is not an inventory
3679
+ * of what ran — it is the gap between *declared* and *did*, and each kind of
3680
+ * gap names a different act. Three allowed and never touched is an invitation
3681
+ * to narrow the world; a refusal is an invitation to widen it, or to accept
3682
+ * that the graph cannot answer inside it.
3683
+ *
3684
+ * It is not `RuleRow`: a rule is a sentence about what *may* happen, written
3685
+ * before anything ran. This is a fact about one execution.
3686
+ */
3687
+ declare const ParticipantRow: React$1.ForwardRefExoticComponent<ParticipantRowProps & React$1.RefAttributes<HTMLDivElement>>;
3688
+
3128
3689
  interface PropertyListProps extends React$1.HTMLAttributes<HTMLDListElement> {
3129
3690
  /**
3130
3691
  * Width of the label column. One value for the whole list, so every value
3131
3692
  * starts on the same x — the reason to use this rather than a row of flexes.
3693
+ * `"auto"` sizes the column to the widest label, for a short list of known
3694
+ * labels such as the answers to an ask.
3132
3695
  */
3133
- labelWidth?: number | string;
3696
+ labelWidth?: number | "auto" | (string & {});
3697
+ /**
3698
+ * `summary` sets the rows tight — a settled answer read at a glance, such as
3699
+ * the values an ask was answered with, or a proposal's terms.
3700
+ */
3701
+ variant?: "default" | "summary";
3134
3702
  children?: React$1.ReactNode;
3135
3703
  }
3136
3704
  interface PropertyRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
@@ -3154,14 +3722,26 @@ declare const PropertyList: React$1.ForwardRefExoticComponent<PropertyListProps
3154
3722
  declare const PropertyRow: React$1.ForwardRefExoticComponent<PropertyRowProps & React$1.RefAttributes<HTMLDivElement>>;
3155
3723
 
3156
3724
  interface ProposalCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
3157
- /** What is being proposed — `Draft pattern`. */
3158
- title: React$1.ReactNode;
3725
+ /** What is being proposed — `Draft pattern`. Left out when the frame around the card already says it. */
3726
+ title?: React$1.ReactNode;
3159
3727
  /** Where it came from — `from the agent's result`. */
3160
3728
  source?: React$1.ReactNode;
3161
3729
  /** The draft itself. A `PropertyList`, usually. */
3162
3730
  children?: React$1.ReactNode;
3731
+ /**
3732
+ * The draft without its muted box — for a card whose frame is already its
3733
+ * own, such as a proposal under an answer, where a box inside it is a box
3734
+ * inside a box.
3735
+ */
3736
+ flush?: boolean;
3163
3737
  /** What the proposal rests on — the instances, as a table or list. */
3164
3738
  evidence?: React$1.ReactNode;
3739
+ /**
3740
+ * The evidence without its box — for evidence that is a `seamless` table or
3741
+ * grid, drawing only the rules between its rows, whose edge the card's own
3742
+ * frame already is.
3743
+ */
3744
+ seamless?: boolean;
3165
3745
  /** A heading for the evidence — `The six instances`. */
3166
3746
  evidenceTitle?: React$1.ReactNode;
3167
3747
  /** Scope of the evidence — `30 days`. */
@@ -3170,6 +3750,8 @@ interface ProposalCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>,
3170
3750
  consequence?: React$1.ReactNode;
3171
3751
  /** Author / reject / reassign. */
3172
3752
  actions?: React$1.ReactNode;
3753
+ /** Written: what was made — `Alert created` — stamped above the draft. */
3754
+ done?: React$1.ReactNode;
3173
3755
  }
3174
3756
  /**
3175
3757
  * An agent proposes; a person publishes.
@@ -3248,15 +3830,22 @@ interface RecordHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>,
3248
3830
  chips?: React$1.ReactNode;
3249
3831
  /** What you can do to it — prev/next, a view switch, buttons, a `…` menu. */
3250
3832
  actions?: React$1.ReactNode;
3833
+ /**
3834
+ * The bar's height, on the control scale — a bar is as tall as a control of
3835
+ * its size. `lg` (40px at a 13px root) tops a page or a board; `md`
3836
+ * (32px) tops a panel or a drawer, level with a `PanelBox` header. Either
3837
+ * holds `sm` chips and buttons.
3838
+ */
3839
+ size?: "md" | "lg";
3251
3840
  }
3252
3841
  /**
3253
3842
  * Which record you are looking at, across the top of the surface showing it.
3254
3843
  *
3255
- * A run dashboard, a step dashboard, a plan, a draft — every one of them opens
3844
+ * A run board, a step board, a plan, a draft — every one of them opens
3256
3845
  * with this line, so a reader who followed a link knows what they are reading
3257
3846
  * before they read any of it.
3258
3847
  *
3259
- * It is **not** a `ContextBar`. That is 28px under a panel and describes the
3848
+ * It is **not** a `ContextBar`. That is the `sm` bar under a panel and describes the
3260
3849
  * *view* — counts, a keyboard hint, a tab-shaped switch. This is above the
3261
3850
  * content and names the *record*, which is why the crumbs are mono: they are
3262
3851
  * identifiers, not prose.
@@ -3267,6 +3856,60 @@ interface RecordHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>,
3267
3856
  */
3268
3857
  declare const RecordHeader: React$1.ForwardRefExoticComponent<RecordHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
3269
3858
 
3859
+ interface RecordPagerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
3860
+ /** Where the reader is — `step 7 of 9`. */
3861
+ position?: React$1.ReactNode;
3862
+ onPrevious?: () => void;
3863
+ onNext?: () => void;
3864
+ /** What the two controls are called. The defaults name the *record*, not the direction. */
3865
+ previousLabel?: string;
3866
+ nextLabel?: string;
3867
+ }
3868
+ /**
3869
+ * The record before this one, and the one after.
3870
+ *
3871
+ * A step opened from a run's trace is one of nine, and the reader almost always
3872
+ * wants the next one — so walking the run costs two keystrokes rather than a
3873
+ * return to the list and a second drill-in.
3874
+ *
3875
+ * **Both controls carry a name.** An icon-only button with no accessible name
3876
+ * is a control a screen reader announces as "button", which is the one thing a
3877
+ * pager must not be; `previousLabel` and `nextLabel` name the record, so it
3878
+ * reads *previous step* rather than *left*.
3879
+ *
3880
+ * At either end the control is **disabled, not hidden**: a pager that loses a
3881
+ * button at the edges moves the other one under the reader's cursor.
3882
+ */
3883
+ declare const RecordPager: React$1.ForwardRefExoticComponent<RecordPagerProps & React$1.RefAttributes<HTMLDivElement>>;
3884
+
3885
+ interface RefusalCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
3886
+ /**
3887
+ * Which bound refused it, as a short label — `refused · the agent's
3888
+ * guardrail`. The bound is the point: it says whom to ask.
3889
+ */
3890
+ label?: React$1.ReactNode;
3891
+ /**
3892
+ * What was refused and why, in one or two sentences — *This ask was not run.
3893
+ * In Everything, decide is cast to … and … does not allow it.*
3894
+ */
3895
+ children?: React$1.ReactNode;
3896
+ /** The way round it — another world, another agent, a person to ask. */
3897
+ remedy?: React$1.ReactNode;
3898
+ }
3899
+ /**
3900
+ * A bound refused the work **before it ran**.
3901
+ *
3902
+ * Not a cannot-answer and not a failure, and its own component for the same
3903
+ * reason those are (DS8): nothing was read, so there is nothing the graph does
3904
+ * not hold; nothing broke, so there is no fault to diagnose. A rule said no,
3905
+ * and the card names the rule's side so the reader knows whose rule to change.
3906
+ *
3907
+ * Tinted with the destructive token, because the reader has to act before
3908
+ * anything happens — but no citation strip and no retry, since running it again
3909
+ * under the same bounds would be refused again.
3910
+ */
3911
+ declare const RefusalCard: React$1.ForwardRefExoticComponent<RefusalCardProps & React$1.RefAttributes<HTMLDivElement>>;
3912
+
3270
3913
  interface RepairNoteProps extends React$1.HTMLAttributes<HTMLDivElement> {
3271
3914
  /** What was wrong — `unknown property Theme.velocity5d`. */
3272
3915
  from: React$1.ReactNode;
@@ -3314,6 +3957,33 @@ interface RichSelectOption {
3314
3957
  /** Trailing content (e.g. a count or status badge), pushed to the right. */
3315
3958
  badge?: React$1.ReactNode;
3316
3959
  disabled?: boolean;
3960
+ /**
3961
+ * Why a disabled option cannot be picked, shown under it in the warning
3962
+ * tone. A greyed-out row with no reason is a refusal nobody can act on.
3963
+ */
3964
+ disabledReason?: React$1.ReactNode;
3965
+ }
3966
+ /**
3967
+ * An on/off setting beside the choice — *Next ask only* on a world picker. It
3968
+ * is not an option: it scopes the choice, so it sits below the options and
3969
+ * toggling it keeps the menu open.
3970
+ */
3971
+ interface RichSelectToggle {
3972
+ id: string;
3973
+ label: React$1.ReactNode;
3974
+ checked: boolean;
3975
+ onCheckedChange: (checked: boolean) => void;
3976
+ disabled?: boolean;
3977
+ }
3978
+ /**
3979
+ * Something to do rather than something to pick — *Manage worlds…*. It sits
3980
+ * last, below a separator, so it is never mistaken for a value.
3981
+ */
3982
+ interface RichSelectAction {
3983
+ id: string;
3984
+ label: React$1.ReactNode;
3985
+ icon?: React$1.ElementType;
3986
+ onSelect: () => void;
3317
3987
  }
3318
3988
  interface RichSelectProps {
3319
3989
  options: RichSelectOption[];
@@ -3343,6 +4013,25 @@ interface RichSelectProps {
3343
4013
  side?: "top" | "right" | "bottom" | "left";
3344
4014
  /** Gap in px between the trigger and the menu. Default `4`. */
3345
4015
  sideOffset?: number;
4016
+ /**
4017
+ * `field` (default) is an outlined control for a form. `inline` is the
4018
+ * borderless, compact trigger a toolbar uses — every control in a chat
4019
+ * composer is one, so the ask kind and the world read as one row.
4020
+ */
4021
+ appearance?: "field" | "inline";
4022
+ /** Glyph before the selected value on the trigger — a globe for a world. */
4023
+ triggerIcon?: React$1.ElementType;
4024
+ /** A short tag after the value on the trigger — `next ask only`. */
4025
+ triggerTag?: React$1.ReactNode;
4026
+ /** Settings that scope the choice; rendered below the options. */
4027
+ toggles?: RichSelectToggle[];
4028
+ /** Acts, not values; rendered last. */
4029
+ actions?: RichSelectAction[];
4030
+ /**
4031
+ * The trigger's accessible name — *Ask kind*, *World*. An inline trigger
4032
+ * shows only the current value, which names the choice made, not the control.
4033
+ */
4034
+ triggerAriaLabel?: string;
3346
4035
  /** Trigger tooltip content; omit to disable the tooltip. */
3347
4036
  tooltip?: React$1.ReactNode;
3348
4037
  /** Side the trigger tooltip is placed on. Default `'top'`. */
@@ -3360,8 +4049,13 @@ interface RichSelectProps {
3360
4049
  * rich content (`label`, `description`, `icon`, `badge`) and both the rows and
3361
4050
  * the trigger are fully customizable via `renderOption` / `renderValue`.
3362
4051
  * Supports single (radio) and multi (checkbox) selection via `multiple`.
4052
+ *
4053
+ * Beyond the choice it can carry **toggles** that scope it and **actions**
4054
+ * below it, and an `inline` trigger for toolbars — which is what lets every
4055
+ * control in a chat composer (ask kind, query language, world, timeout) be the
4056
+ * same component rather than a `Select` beside a hand-rolled menu.
3363
4057
  */
3364
- declare function RichSelect({ options, value, onChange, multiple, label, placeholder, renderOption, renderValue, align, side, sideOffset, tooltip, tooltipSide, disabled, triggerClassName, contentClassName, className, }: RichSelectProps): React$1.JSX.Element;
4058
+ declare function RichSelect({ options, value, onChange, multiple, label, placeholder, renderOption, renderValue, align, side, sideOffset, tooltip, tooltipSide, disabled, appearance, triggerIcon: TriggerIcon, triggerTag, triggerAriaLabel, toggles, actions, triggerClassName, contentClassName, className, }: RichSelectProps): React$1.JSX.Element;
3365
4059
 
3366
4060
  /** A slice along the axes the matched model **declared**. */
3367
4061
  interface RuleSelect {
@@ -3493,19 +4187,191 @@ interface RuleRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "chi
3493
4187
  declare const RuleRow: React$1.ForwardRefExoticComponent<RuleRowProps & React$1.RefAttributes<HTMLDivElement>>;
3494
4188
 
3495
4189
  /**
3496
- * `sm` (26px) is the application field — a search box docked in a panel header,
3497
- * beside a 30px tab strip. `default` (40px) stays the page size.
4190
+ * How a run or a step ended, as the engine writes it — **suggestions, not a
4191
+ * limit.** An unknown status still renders: it says its own name, in the
4192
+ * neutral.
4193
+ */
4194
+ type KnownRunStatus = "queued" | "running" | "succeeded" | "failed" | "cancelled" | "cannot_answer" | "awaiting_approval" | "awaiting_input" | "partial" | "skipped" | "held" | "purged";
4195
+ type RunStatus = KnownRunStatus | (string & {});
4196
+ /**
4197
+ * Which tone each status is read in.
4198
+ *
4199
+ * The kit owns this map where it does **not** own a layer's or a bound's
4200
+ * colour, and the difference is real: a layer is a product's vocabulary, while
4201
+ * *finished · finished but look at it · failed · not started* is the same small
4202
+ * set of states every surface in the system already draws with `StatusDot`. Two
4203
+ * maps for one idea is how a journal row and its own pagehead come to disagree.
4204
+ *
4205
+ * **`succeeded` and `cannot_answer` are deliberately different tones.** The
4206
+ * machinery succeeded; the reading is that the graph cannot answer inside this
4207
+ * world. A run that says both in one green word would be hiding the only fact
4208
+ * the reader needs ([SR53]).
4209
+ */
4210
+ declare const TONE: Record<string, StatusDotProps["tone"]>;
4211
+ interface RunStatusTextProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, "children"> {
4212
+ status: RunStatus;
4213
+ /** Overrides the tone {@link RunStatus} resolves to. */
4214
+ tone?: StatusDotProps["tone"];
4215
+ /** Draw the dot before the word. Off in a table cell, on in a row. */
4216
+ dot?: boolean;
4217
+ /** What to call it, when the engine's own word is not what this surface says. */
4218
+ label?: React$1.ReactNode;
4219
+ }
4220
+ /**
4221
+ * A run's outcome, in its tone and in the engine's own word.
4222
+ *
4223
+ * `succeeded` · `running` · `cannot_answer` · `awaiting_approval` — written as
4224
+ * the record writes them, underscores and all, because these are the values a
4225
+ * reader filters on and quotes into a support thread. Prettifying them here
4226
+ * would mean the word on screen is not the word in the API.
4227
+ *
4228
+ * The word is always present, so colour is never the only carrier of the state.
4229
+ */
4230
+ declare const RunStatusText: React$1.ForwardRefExoticComponent<RunStatusTextProps & React$1.RefAttributes<HTMLSpanElement>>;
4231
+ /**
4232
+ * Which glyph each status is drawn with, where the word is not beside it.
4233
+ *
4234
+ * The shape is the point: every state a reader acts on differently gets its own
4235
+ * — done, broken, moving, not started, **waiting on you**, could not answer,
4236
+ * answered in part, stopped. An unknown status reads as not started.
4237
+ */
4238
+ declare const ICON: Record<string, StatusIconState>;
4239
+
4240
+ interface RunRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "onSelect"> {
4241
+ status: RunStatus;
4242
+ /** Overrides the glyph the status resolves to — `partial` on a run that succeeded. */
4243
+ state?: StatusIconState;
4244
+ kind?: RunKind;
4245
+ /**
4246
+ * What it was about, in the words it was opened with — the question as typed,
4247
+ * the query text, the dataset loaded. **Line one**, because it is what a
4248
+ * reader scans the journal for.
4249
+ */
4250
+ title: React$1.ReactNode;
4251
+ /** The title is a query, not a sentence — drawn mono. */
4252
+ titleMono?: boolean;
4253
+ /**
4254
+ * The run's address — the last eight characters of its uuid, mono.
4255
+ *
4256
+ * **First on line two.** A row a reader cannot quote into a log line, a
4257
+ * support thread or `GET …/runs/{id}` has made them drill in to find out what
4258
+ * they are looking at.
4259
+ */
4260
+ address?: React$1.ReactNode;
4261
+ /** After the address — `nl-query@5 · 2m 51s · 21.4k · 9/9 · 4 mins ago`. */
4262
+ meta?: React$1.ReactNode;
4263
+ /** Hard right — a badge, a count, an outcome. */
4264
+ aside?: React$1.ReactNode;
4265
+ /** A child run sits under the step that spawned it, indented — never a sibling. */
4266
+ depth?: number;
4267
+ selected?: boolean;
4268
+ onSelect?: () => void;
4269
+ }
4270
+ /**
4271
+ * One run in the journal.
4272
+ *
4273
+ * Every execution in a Graph is one of these — a question answered, a dataset
4274
+ * loaded, a stitch committed, an enrichment gated on a person — because they
4275
+ * are one record walked by one interpreter. **There is no row type per kind**
4276
+ * and no panel per kind: the kind is a chip and a filter value, which is what
4277
+ * keeps one journal from becoming four lists that drift apart.
4278
+ *
4279
+ * Line one is what it was about; line two is the id, then what it spent. The
4280
+ * status is a glyph in the leading slot and **not a word** — the shape carries
4281
+ * it, so the badge's column goes back to the prompt.
4282
+ *
4283
+ * With `onSelect` the whole row is one button, so the accessible name is the
4284
+ * whole row — the id, the kind and the summary in one string, which is exactly
4285
+ * what a reader driving this from the keyboard needs to hear.
4286
+ */
4287
+ declare const RunRow: React$1.ForwardRefExoticComponent<RunRowProps & React$1.RefAttributes<HTMLDivElement>>;
4288
+
4289
+ interface ScopeLineChoice {
4290
+ value: string;
4291
+ label: React$1.ReactNode;
4292
+ /** At the right of the choice, in mono — `188`, `2 of 3`. */
4293
+ detail?: React$1.ReactNode;
4294
+ }
4295
+ /** A part with more to say than its text. */
4296
+ interface ScopeLinePart {
4297
+ text: React$1.ReactNode;
4298
+ /**
4299
+ * `changed` — this part differs from the question it was carried from;
4300
+ * `stale` — the data behind it is late.
4301
+ */
4302
+ mark?: "changed" | "stale";
4303
+ /** What the part can be changed to. Opening the part lists them under the line. */
4304
+ choices?: ScopeLineChoice[];
4305
+ }
4306
+ interface ScopeLineProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
4307
+ /** What the figure covers, in order — period, comparison, filters, population, freshness. */
4308
+ parts: (React$1.ReactNode | ScopeLinePart)[];
4309
+ /**
4310
+ * Makes the text parts editable in place: click one, type, `Enter` to send
4311
+ * the new value, `Escape` or leaving it to keep the old one. Called only
4312
+ * when the value changed.
4313
+ */
4314
+ onPartChange?: (index: number, value: string) => void;
4315
+ /**
4316
+ * Parts that stay as stated even when the rest can be edited — the data's
4317
+ * freshness is a fact about the load, not a choice of the analyst's.
4318
+ */
4319
+ fixedParts?: number[];
4320
+ /** The part whose choices are showing. Controlled; see `defaultOpenPart`. */
4321
+ openPart?: number | null;
4322
+ /** The part whose choices show at first, uncontrolled. */
4323
+ defaultOpenPart?: number;
4324
+ onOpenPartChange?: (index: number | null) => void;
4325
+ /** A line under the scope — `Click any part to change it and re-run`. */
4326
+ note?: React$1.ReactNode;
4327
+ /** `warning` when the note is about late data. */
4328
+ noteTone?: "muted" | "warning";
4329
+ /**
4330
+ * No box, and nothing wasted on its outside: only the rules between parts
4331
+ * are drawn, and the first part sits flush with the text around the strip.
4332
+ * For a scope inside a card or an answer, whose edge already frames it.
4333
+ */
4334
+ seamless?: boolean;
4335
+ }
4336
+ /**
4337
+ * What an answer covers, stated in one strip: `Q3 2026 · vs Q2 · Stores,
4338
+ * Online · 214 stores · as of 06:00`.
4339
+ *
4340
+ * Every analytic answer carries one, above its figures, so a number is never
4341
+ * read without the period and population it was computed over. The parts are
4342
+ * exactly as applied — the filters the query ran with, not the ones asked for.
4343
+ *
4344
+ * With `onPartChange` the scope is also where it is changed: a part is edited
4345
+ * where it is read, rather than by asking the question again.
4346
+ */
4347
+ declare const ScopeLine: React$1.ForwardRefExoticComponent<ScopeLineProps & React$1.RefAttributes<HTMLDivElement>>;
4348
+
4349
+ /**
4350
+ * The control scale: `sm` (26px) is the application field — a search box
4351
+ * docked in a panel header or a table toolbar; `default` (32px) a standalone
4352
+ * form; `lg` (40px) a page. Size is height only: every size reads at the root,
4353
+ * the size of the rows being searched.
3498
4354
  *
3499
4355
  * Named `inputSize` for the same reason `Input` is: `size` is already an
3500
4356
  * `<input>` attribute meaning "how many characters wide".
3501
4357
  */
3502
- type SearchInputSize = 'default' | 'sm';
4358
+ type SearchInputSize = 'sm' | 'default' | 'lg';
3503
4359
  interface SearchInputProps extends Omit<React__default.ComponentProps<'input'>, 'value' | 'onChange' | 'size' | 'type'> {
4360
+ /** Sits on the box around the field — its width, its place in a row. */
3504
4361
  className?: string;
3505
4362
  value: string;
3506
4363
  /** Receives the raw string, not the event — a search box has one value. */
3507
4364
  onChange: (value: string) => void;
3508
4365
  inputSize?: SearchInputSize;
4366
+ /**
4367
+ * A clear button at the end of the field while it holds text, and Escape
4368
+ * clears it too; both send `onChange("")`. On by default.
4369
+ */
4370
+ clearable?: boolean;
4371
+ /** The clear button's glyph — yours, at 14px. Default: a plain cross. */
4372
+ clearIcon?: React__default.ReactNode;
4373
+ /** The clear button's accessible name. */
4374
+ clearLabel?: string;
3509
4375
  }
3510
4376
  declare const SearchInput: React__default.FC<SearchInputProps>;
3511
4377
 
@@ -3532,47 +4398,12 @@ interface SectionHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>
3532
4398
  *
3533
4399
  * A panel is a stack of these: Node types, Edge types, Relationships, Selected,
3534
4400
  * Anchors, Recent plans. It is 35px because that is what reads as a heading
3535
- * against 30px rows without becoming a second toolbar.
3536
- *
3537
- * Not a `<Card>` header — a section is a band inside a scrolling panel, not a
3538
- * container, so it carries a rule rather than a border box.
3539
- */
3540
- declare const SectionHeader: React$1.ForwardRefExoticComponent<SectionHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
3541
-
3542
- /**
3543
- * TODO — provisional. Built ahead of its design review.
3544
- *
3545
- * The chart set was deliberately deferred while the rest of the kit was built,
3546
- * because charts are the one group with a real design question in them rather
3547
- * than a markup question: which forms this product actually needs, at what
3548
- * sizes, and how much a 330px drawer can carry. This component satisfies the
3549
- * dataviz rules and the validated palette, but the *form inventory* has not been
3550
- * agreed — treat the API as unsettled until a board screen uses it in anger.
3551
- */
3552
-
3553
- interface SparklineProps extends Omit<React$1.SVGAttributes<SVGSVGElement>, "children" | "values"> {
3554
- values: number[];
3555
- width?: number;
3556
- height?: number;
3557
- color?: string;
3558
- /** Washes the area under the line at 10%. Off by default at this size. */
3559
- area?: boolean;
3560
- /** A filled dot on the last point, ringed in the surface colour. */
3561
- endMarker?: boolean;
3562
- /** What the line is, for assistive tech. The surface around it usually says. */
3563
- label?: string;
3564
- }
3565
- /**
3566
- * The shape of a series, small enough to sit inside a row.
3567
- *
3568
- * No axis, no gridlines, no labels — a sparkline answers "which way, and how
3569
- * steadily", and the number it accompanies answers "how much". If a reader
3570
- * needs to read a value off it, it wanted to be a chart.
4401
+ * against 30px rows without becoming a second toolbar.
3571
4402
  *
3572
- * The end marker carries a 2px ring in the surface colour so it stays legible
3573
- * where the line runs under it.
4403
+ * Not a `<Card>` header — a section is a band inside a scrolling panel, not a
4404
+ * container, so it carries a rule rather than a border box.
3574
4405
  */
3575
- declare const Sparkline: React$1.ForwardRefExoticComponent<SparklineProps & React$1.RefAttributes<SVGSVGElement>>;
4406
+ declare const SectionHeader: React$1.ForwardRefExoticComponent<SectionHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
3576
4407
 
3577
4408
  interface TabConfig {
3578
4409
  /** Unique identifier for the tab */
@@ -3590,6 +4421,8 @@ interface TabConfig {
3590
4421
  content: React__default.ReactNode;
3591
4422
  /** Whether this tab should be disabled */
3592
4423
  disabled?: boolean;
4424
+ /** Draw a close button on the tab; pressing it calls the panel's `onTabClose`. */
4425
+ closable?: boolean;
3593
4426
  }
3594
4427
  interface TabbedPanelProps {
3595
4428
  /** Array of tab configurations */
@@ -3600,6 +4433,11 @@ interface TabbedPanelProps {
3600
4433
  activeTab?: string;
3601
4434
  /** Callback when tab changes */
3602
4435
  onTabChange?: (value: string) => void;
4436
+ /**
4437
+ * A `closable` tab's close was pressed, by its value. The tabs are yours, so
4438
+ * closing is too: drop it from `tabs`, and move `activeTab` if it was open.
4439
+ */
4440
+ onTabClose?: (value: string) => void;
3603
4441
  /**
3604
4442
  * Actions on the right of the tab bar, as `NavHorizontal` items. A panel
3605
4443
  * header has one action area — the right — so this is the item list itself
@@ -3616,6 +4454,16 @@ interface TabbedPanelProps {
3616
4454
  * ```
3617
4455
  */
3618
4456
  headerActions?: NavHorizontalItem[];
4457
+ /**
4458
+ * A control on the right of the tab strip, before `headerActions`, that
4459
+ * applies to **every** tab: a time window, a version. Not a place for a
4460
+ * tab's own controls — those belong in that tab's body.
4461
+ *
4462
+ * ```tsx
4463
+ * headerContent={<ToggleGroup type="single" size="sm">…</ToggleGroup>}
4464
+ * ```
4465
+ */
4466
+ headerContent?: React__default.ReactNode;
3619
4467
  /**
3620
4468
  * Fold the tabs that do not fit the header into a `…` dropdown at the end of
3621
4469
  * the strip, instead of letting the strip set the panel's minimum width.
@@ -3653,7 +4501,7 @@ interface TabbedPanelProps {
3653
4501
  footerContent?: React__default.ReactNode;
3654
4502
  }
3655
4503
  /**
3656
- * TabbedPanel — a panel whose views sit behind one 30px tab strip.
4504
+ * TabbedPanel — a panel whose views sit behind one `md` tab strip.
3657
4505
  *
3658
4506
  * The strip is a `NavItems` tab list (`variant="underline"`), not a Radix
3659
4507
  * `Tabs`: the same component draws this kit's nav rails and its workbook tabs,
@@ -3663,47 +4511,129 @@ interface TabbedPanelProps {
3663
4511
  * `TabsContent`, and a panel that tears its canvas down on every tab switch is
3664
4512
  * not a panel anyone wants.
3665
4513
  */
3666
- declare function TabbedPanel({ tabs, defaultTab, activeTab, onTabChange, headerActions, overflow, overflowLabel, keepMounted, className, headerClassName, bodyClassName, footerClassName, footerContent, }: TabbedPanelProps): React__default.JSX.Element;
4514
+ declare function TabbedPanel({ tabs, defaultTab, activeTab, onTabChange, onTabClose, headerActions, headerContent, overflow, overflowLabel, keepMounted, className, headerClassName, bodyClassName, footerClassName, footerContent, }: TabbedPanelProps): React__default.JSX.Element;
4515
+
4516
+ /**
4517
+ * Which rows of a tree are open, by key — `true` for every one. The same shape
4518
+ * as a `DataTable`'s `expanded`, so a page holding both passes one value.
4519
+ */
4520
+ type ExpandedKeys = true | Record<string, boolean>;
4521
+ interface UseExpandedKeysOptions {
4522
+ /** Controlled. Pair it with `onExpandedChange`. */
4523
+ expanded?: ExpandedKeys;
4524
+ /** Uncontrolled: what is open at first. Closed by default. */
4525
+ defaultExpanded?: ExpandedKeys;
4526
+ onExpandedChange?: (expanded: ExpandedKeys) => void;
4527
+ /** Every key that can open, so closing one row of `true` keeps the rest open. */
4528
+ keys: string[];
4529
+ }
4530
+ /**
4531
+ * Open and close the rows of a tree, controlled or not. What a chart drawn as
4532
+ * rows uses to nest — a Gantt's subtasks, a heat strip's children — so each
4533
+ * opens the same way and reports the same value.
4534
+ */
4535
+ declare function useExpandedKeys({ expanded, defaultExpanded, onExpandedChange, keys, }: UseExpandedKeysOptions): {
4536
+ isOpen: (key: string) => boolean;
4537
+ toggle: (key: string) => void;
4538
+ };
3667
4539
 
3668
4540
  /**
3669
- * What a task did with its slice of the run's clock.
4541
+ * What a bar did with its slice of the clock.
3670
4542
  *
3671
4543
  * These are the engine's own step statuses (`StepStatus`, plus `skipped` for a
3672
4544
  * branch that never ran), not a second vocabulary: a Gantt row and a log line
3673
- * are the same task seen twice, so they say the same word for the same state.
4545
+ * are the same work seen twice, so they say the same word for the same state.
4546
+ * `refused` is what a rule stopped — reached for and not allowed — which is a
4547
+ * different fact from `skipped`, and both are drawn.
3674
4548
  */
3675
- type TaskGanttStatus = "succeeded" | "running" | "failed" | "needs_input" | "stopped" | "skipped" | "queued";
4549
+ type GanttStatus = "succeeded" | "running" | "failed" | "needs_input" | "stopped" | "skipped" | "queued" | "refused";
3676
4550
  /** A `Date`, an ISO string, or epoch milliseconds — whatever the JSON carried. */
3677
- type TaskGanttInstant = string | number | Date;
4551
+ type GanttInstant = string | number | Date;
3678
4552
  /**
3679
- * One bar. A task is usually one of these; a retried task is two or more, the
3680
- * failed attempt sitting to the left of the one that stuck.
4553
+ * One bar on the clock. A row's own bar is one of these, so is each earlier
4554
+ * attempt — the failed one sitting to the left of the one that stuck — and so
4555
+ * is each of the row's `bars`.
3681
4556
  */
3682
- interface TaskGanttSegment {
4557
+ interface GanttBar {
3683
4558
  /** Offset from the run's zero. Use this, or `startedAt` with `origin`. */
3684
4559
  startMs?: number;
3685
4560
  durationMs?: number;
3686
- startedAt?: TaskGanttInstant;
3687
- finishedAt?: TaskGanttInstant;
3688
- status?: TaskGanttStatus;
4561
+ startedAt?: GanttInstant;
4562
+ finishedAt?: GanttInstant;
4563
+ status?: GanttStatus;
3689
4564
  /** Overrides the hover text, which otherwise reads `key · status · duration`. */
3690
4565
  title?: string;
4566
+ /**
4567
+ * Names the bar, so it can be picked on its own — `fetch_source#1`. Only a
4568
+ * bar in a row's `bars` has one; the row's own bar is picked with the row.
4569
+ */
4570
+ key?: string;
4571
+ /**
4572
+ * Written in the bar — the task a slot held, the participant a layer reached.
4573
+ * A row with a labelled bar grows to the `xs` control height to carry it, and
4574
+ * the bar draws as a card with its fill as a rail, so the text stays legible
4575
+ * on any status or palette colour.
4576
+ */
4577
+ label?: React$1.ReactNode;
4578
+ /**
4579
+ * Which entry of `palette` paints it, in place of its status fill — a layer,
4580
+ * a lane, an agent. A group the palette does not name keeps the status fill,
4581
+ * and a `failed` or `refused` bar is always drawn as one.
4582
+ */
4583
+ group?: string;
4584
+ /**
4585
+ * `solid` (the default) is spent time. `outline` is time held but not spent
4586
+ * — queued, waiting on a gate; `dashed` is time that may be spent — declared,
4587
+ * not yet dispatched.
4588
+ */
4589
+ variant?: "solid" | "outline" | "dashed";
4590
+ /**
4591
+ * A second line under the label — `1,204 of 1,251`, `503`. A row with one
4592
+ * grows to the `md` control height to carry both lines.
4593
+ */
4594
+ note?: React$1.ReactNode;
4595
+ /** A small mark at the bar's end — a `Badge`, an icon, a count. Drawn with a label. */
4596
+ chip?: React$1.ReactNode;
4597
+ /**
4598
+ * What this bar did, for its own hover card — the same fields a row's card
4599
+ * reads. A row with a bar that has one opens no card of its own: its bars
4600
+ * do, so the reader gets the bar under the cursor rather than the row.
4601
+ */
4602
+ summary?: React$1.ReactNode;
4603
+ result?: React$1.ReactNode | Record<string, unknown>;
4604
+ error?: {
4605
+ code?: React$1.ReactNode;
4606
+ message?: React$1.ReactNode;
4607
+ detail?: React$1.ReactNode;
4608
+ };
4609
+ log?: React$1.ReactNode;
3691
4610
  }
3692
- interface TaskGanttTask extends TaskGanttSegment {
3693
- /** `task_key` — what the log lines call this task. Also the row's label. */
4611
+ /**
4612
+ * One row: a task on a run's clock, a worker slot, a layer, a participant —
4613
+ * whatever the surface groups time by. It carries its own bar, earlier
4614
+ * attempts, many `bars` of its own, and the `rows` it opens into.
4615
+ */
4616
+ interface GanttRow extends GanttBar {
4617
+ /** What the log lines call it — `task_key`, `slot-1`, `ingest`. Also the row's label. */
3694
4618
  key: string;
3695
4619
  /** Shown instead of `key`, when the row wants a human name. */
3696
4620
  label?: React$1.ReactNode;
3697
4621
  /** Earlier attempts, oldest first. A failed one draws in `destructive`. */
3698
- attempts?: TaskGanttSegment[];
3699
- /** Overrides the right-hand duration cell. `—` when the task never ran. */
4622
+ attempts?: GanttBar[];
4623
+ /**
4624
+ * Many bars on one row, each a thing of its own rather than a retry — what a
4625
+ * worker slot held in order, what a layer was reached for. Drawn with the
4626
+ * row's own bar, if it has one; give each a `label` to say what it was.
4627
+ */
4628
+ bars?: GanttBar[];
4629
+ /** Overrides the right-hand duration cell. `—` when the row never ran. */
3700
4630
  duration?: React$1.ReactNode;
3701
- /** One line — what the task said. The card's last line. */
4631
+ /** One line — what it said. The card's last line. */
3702
4632
  log?: React$1.ReactNode;
3703
4633
  /** A sentence under the card's header, when the row wants one. */
3704
4634
  summary?: React$1.ReactNode;
3705
4635
  /**
3706
- * What the task produced — its `result.json`, or any part of it.
4636
+ * What it produced — its `result.json`, or any part of it.
3707
4637
  *
3708
4638
  * An object renders as label/value pairs, with nested values as JSON; a node
3709
4639
  * renders as given, which is the hook for a kind-specific card (a table
@@ -3718,12 +4648,44 @@ interface TaskGanttTask extends TaskGanttSegment {
3718
4648
  };
3719
4649
  /** Replaces this row's card body entirely. */
3720
4650
  detail?: React$1.ReactNode;
4651
+ /**
4652
+ * The rows this one opens into — the tasks it split into, the participants
4653
+ * of a layer — drawn under it, indented, when it is open. A row with no
4654
+ * timing of its own draws the stretch its rows cover.
4655
+ */
4656
+ rows?: GanttRow[];
4657
+ }
4658
+ /**
4659
+ * A bounded repetition — a loop's rounds — drawn as a bracket over the rows
4660
+ * it holds, with its label on a line of its own above them.
4661
+ */
4662
+ interface GanttBracket {
4663
+ /** The first row it holds, by `key`. */
4664
+ from: string;
4665
+ /** The last row it holds, by `key`. Rows are matched in order, first hit. */
4666
+ to: string;
4667
+ /** `↻ 2 of 3 rounds — understood on round 2`. */
4668
+ label: React$1.ReactNode;
4669
+ }
4670
+ /**
4671
+ * A gate — a moment the run held and spent nothing — drawn as a rule across
4672
+ * the stretch of the clock it held, between the rows it lies between.
4673
+ */
4674
+ interface GanttSeam extends Pick<GanttBar, "startMs" | "durationMs" | "startedAt" | "finishedAt"> {
4675
+ /** The row it follows, by `key`. */
4676
+ after: string;
4677
+ /** The label column's word — `approval`. */
4678
+ label: React$1.ReactNode;
4679
+ /** What it was and how it resolved, written on the rule — `approved by ravi`. */
4680
+ note?: React$1.ReactNode;
4681
+ /** Overrides the right-hand cell, which otherwise reads the time it held. */
4682
+ duration?: React$1.ReactNode;
3721
4683
  }
3722
- interface TaskGanttProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onSelect"> {
3723
- /** One entry per task, in plan order — the run's `steps`, grouped by task. */
3724
- tasks: TaskGanttTask[];
3725
- /** The run's zero, when tasks carry timestamps. Defaults to the earliest one. */
3726
- origin?: TaskGanttInstant;
4684
+ interface GanttProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onSelect"> {
4685
+ /** One entry per row, in order — a run's tasks, its slots, its layers. */
4686
+ rows: GanttRow[];
4687
+ /** The clock's zero, when bars carry timestamps. Defaults to the earliest one. */
4688
+ origin?: GanttInstant;
3727
4689
  /** The clock's ceiling. Defaults to the last end, or `nowMs` if that is later. */
3728
4690
  spanMs?: number;
3729
4691
  /** Draws the *now* line. Set it while the run is in flight; omit it after. */
@@ -3734,10 +4696,32 @@ interface TaskGanttProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "o
3734
4696
  ticks?: number;
3735
4697
  formatTick?: (ms: number) => string;
3736
4698
  formatDuration?: (ms: number) => string;
3737
- /** The key column, in px. 112 in the drawer, wider on a dashboard. */
4699
+ /**
4700
+ * The key column, in px. Omit it and the column takes its longest label,
4701
+ * up to 40% of the width — the surface decides the width, never the chart.
4702
+ */
3738
4703
  labelWidth?: number;
3739
4704
  /**
3740
- * `compact` in a drawer, `comfortable` on a dashboard. It moves the bar's
4705
+ * The right-hand duration column, in px. Omit it and it takes its widest
4706
+ * cell; set it on charts stacked over one clock so their tracks end together.
4707
+ */
4708
+ durationWidth?: number;
4709
+ /** Loops, bracketed over their rounds. */
4710
+ brackets?: GanttBracket[];
4711
+ /** Gates, ruled across the time they held. */
4712
+ seams?: GanttSeam[];
4713
+ /**
4714
+ * What each bar `group` is painted with — `{ ingest: "bg-data-1" }`. The
4715
+ * kit ships no hues: a group nobody painted keeps its status fill.
4716
+ */
4717
+ palette?: Record<string, string>;
4718
+ /**
4719
+ * The inside of a bar, for every bar in `bars` — a chip, an icon, a count. Return
4720
+ * `null` for a bar that should stay a plain fill. Wins over `label`.
4721
+ */
4722
+ renderBar?: (bar: GanttBar, row: GanttRow) => React$1.ReactNode;
4723
+ /**
4724
+ * `compact` in a drawer, `comfortable` on a board. It moves the bar's
3741
4725
  * height, not the type scale — one component, three surfaces (SR14).
3742
4726
  */
3743
4727
  density?: "compact" | "comfortable";
@@ -3752,18 +4736,33 @@ interface TaskGanttProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "o
3752
4736
  * Replaces the default card body, for every row. Return `null` for a row that
3753
4737
  * should not open one.
3754
4738
  */
3755
- renderDetail?: (task: TaskGanttTask) => React$1.ReactNode;
4739
+ renderDetail?: (row: GanttRow) => React$1.ReactNode;
3756
4740
  /** Where the card sits, how fast it opens, and how wide it is. */
3757
- detailProps?: TaskGanttDetailProps;
3758
- /** The task the log is currently filtered to (SR15). */
4741
+ detailProps?: GanttDetailProps;
4742
+ /** The row or bar picked — what the log is currently filtered to (SR15). */
3759
4743
  selectedKey?: string | null;
3760
4744
  /** Makes the rows pickable. Picking one is what filters the log. */
3761
- onSelectTask?: (key: string) => void;
4745
+ onSelectRow?: (key: string) => void;
4746
+ /**
4747
+ * Makes each keyed bar pickable on its own — the task a layer was reached
4748
+ * for, rather than the layer. A row whose bars are keyed is then
4749
+ * picked by its bars, not as a whole, so a bar is never a button inside a
4750
+ * button. `selectedKey` lights a bar with that key as it lights a row.
4751
+ */
4752
+ onSelectBar?: (barKey: string, rowKey: string) => void;
4753
+ /** Which rows with `rows` are open, by key — `true` for all. Controlled. */
4754
+ expanded?: ExpandedKeys;
4755
+ /** Which are open at first, uncontrolled. Closed by default. */
4756
+ defaultExpanded?: ExpandedKeys;
4757
+ /** A row opened or closed: every open key, as a `DataTable`'s `expanded` reads. */
4758
+ onExpandedChange?: (expanded: ExpandedKeys) => void;
3762
4759
  }
3763
- interface TaskGanttDetailProps {
3764
- /** @default "right" */
4760
+ /**
4761
+ * Where the card opens. With neither `side` nor `align` it opens beside the
4762
+ * cursor, under the row; set either and it is placed against the row instead.
4763
+ */
4764
+ interface GanttDetailProps {
3765
4765
  side?: "top" | "right" | "bottom" | "left";
3766
- /** @default "start" */
3767
4766
  align?: "start" | "center" | "end";
3768
4767
  sideOffset?: number;
3769
4768
  /** @default 200 */
@@ -3774,14 +4773,14 @@ interface TaskGanttDetailProps {
3774
4773
  width?: number | string;
3775
4774
  className?: string;
3776
4775
  }
3777
- interface TaskGanttDetailCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
3778
- task: TaskGanttTask;
3779
- /** Elapsed so far, for a task still running — it has no `durationMs` yet. */
4776
+ interface GanttDetailCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
4777
+ row: GanttRow;
4778
+ /** Elapsed so far, for a row still running — it has no `durationMs` yet. */
3780
4779
  elapsedMs?: number;
3781
4780
  formatDuration?: (ms: number) => string;
3782
4781
  }
3783
4782
  /**
3784
- * What one task did, as a card.
4783
+ * What one row — or one bar — did, as a card.
3785
4784
  *
3786
4785
  * The body of the hover card, and exported so a surface can compose its own
3787
4786
  * around the same header — `renderDetail` returning this with a kind-specific
@@ -3791,25 +4790,30 @@ interface TaskGanttDetailCardProps extends Omit<React$1.HTMLAttributes<HTMLDivEl
3791
4790
  * Order is fixed and is the order a reader asks in: what state, how long, what
3792
4791
  * went wrong, what came out, what it said last.
3793
4792
  */
3794
- declare const TaskGanttDetailCard: React$1.ForwardRefExoticComponent<TaskGanttDetailCardProps & React$1.RefAttributes<HTMLDivElement>>;
4793
+ declare const GanttDetailCard: React$1.ForwardRefExoticComponent<GanttDetailCardProps & React$1.RefAttributes<HTMLDivElement>>;
3795
4794
  /**
3796
- * Where the time went — one row per task, on the run's own clock.
4795
+ * Where the time went — rows of bars on one clock.
3797
4796
  *
3798
- * Duration is the question a run detail is opened with, and a step list with a
3799
- * duration column answers it one row at a time. A bar placed by start and sized
3800
- * by duration puts the slow task, the retry and the branch that never ran in one
3801
- * glance (SR14).
4797
+ * A row is whatever a surface groups time by. Read by **task**, it answers the
4798
+ * question a run detail is opened with: a bar placed by start and sized by
4799
+ * duration puts the slow task, the retry and the branch that never ran in one
4800
+ * glance (SR14). Read by **layer**, the same drawing answers what the run
4801
+ * reached and what it was stopped from reaching: a row per layer opens into its
4802
+ * participants, and each holds the `bars` of the tasks that reached it, painted
4803
+ * by `palette` — `refused` where a rule said no, `dashed` where it was declared
4804
+ * and never dispatched. Read by **slot**, each row is a worker and its bars are
4805
+ * what it ran, in order.
3802
4806
  *
3803
- * It is one component across three surfaces — the Runs drawer (compact, with a
3804
- * line of log per row), the run dashboard (full width, logs off) and the
3805
- * document rendering — so `density` and `showLogs` are props, not three
3806
- * drawings.
4807
+ * A row opens into its `rows`, indented under it, and a parent with no timing
4808
+ * of its own draws the stretch they cover as a thin rule — so a closed plan
4809
+ * still says how long it took. The clock is milliseconds by default; a plan
4810
+ * read in order passes step numbers and a `formatTick` that names them.
3807
4811
  *
3808
- * Colour never carries state alone: every row names its duration, the bar
3809
- * titles itself with its status, and a task that never ran is an *outline*
3810
- * rather than a paler fill.
4812
+ * Colour never carries state alone: every row names its duration, a bar titles
4813
+ * itself with its status, a row that never ran is an *outline* rather than a
4814
+ * paler fill, and a refused bar's name is struck through.
3811
4815
  */
3812
- declare const TaskGantt: React$1.ForwardRefExoticComponent<TaskGanttProps & React$1.RefAttributes<HTMLDivElement>>;
4816
+ declare const Gantt: React$1.ForwardRefExoticComponent<GanttProps & React$1.RefAttributes<HTMLDivElement>>;
3813
4817
 
3814
4818
  interface TaskNodeTag {
3815
4819
  /** `3 lanes`, `attempt 2`, `map_over: datasets`. */
@@ -3839,6 +4843,15 @@ interface TaskNodeProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "ch
3839
4843
  * (`p50 3.4s · 14/14`). One rendering, three readings.
3840
4844
  */
3841
4845
  meta?: React$1.ReactNode;
4846
+ /**
4847
+ * The drawing is a **record**, not a draft: a picked node gets the ring and
4848
+ * **no handles**.
4849
+ *
4850
+ * Handles are an offer to move something. A run paints status onto the plan
4851
+ * it ran and nothing on it is editable, so a handle there is a control that
4852
+ * does nothing — the one thing worse on a trace than a missing affordance.
4853
+ */
4854
+ readOnly?: boolean;
3842
4855
  /** Picked — draws the ring and four corner handles. */
3843
4856
  selected?: boolean;
3844
4857
  /** Needs an approval before it writes. Rings it in `warning`. */
@@ -3897,76 +4910,10 @@ interface TemplatePickerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement
3897
4910
  * again**. That is why unavailable options are listed rather than hidden — the
3898
4911
  * reason a template does not fit ("needs a time column") is information about
3899
4912
  * the data, and hiding it would leave the reader wondering what else exists.
3900
- */
3901
- declare const TemplatePicker: React$1.ForwardRefExoticComponent<TemplatePickerProps & React$1.RefAttributes<HTMLDivElement>>;
3902
-
3903
- type TerminalLineKind = "prompt" | "output" | "comment";
3904
- /**
3905
- * The severity a **log** line was emitted at, as the runtime recorded it.
3906
- *
3907
- * Distinct from `kind`, which says what part of a *transcript* a line is — a
3908
- * command you typed, what it printed, a comment. A run's log has no prompts and
3909
- * no comments; every line is output, and what varies is how loud it is.
3910
- */
3911
- type KnownTerminalLevel = "info" | "warn" | "error" | "debug";
3912
- /**
3913
- * The values the kit draws specially — **suggestions, not a limit.** Anything
3914
- * else renders with the neutral token and its own name.
3915
- */
3916
- type TerminalLevel = KnownTerminalLevel | (string & {});
3917
- interface TerminalLineProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
3918
- kind?: TerminalLineKind;
3919
- /**
3920
- * How loud this line is. Tints **one** cell — the one named by
3921
- * `levelColumn` — and nothing else.
3922
- *
3923
- * Only the level word is coloured, never the message: a wall of amber
3924
- * sentences is unreadable, and what a reader scans is the column, not the
3925
- * prose. Setting this also drops the `kind` marker — a log line is not a
3926
- * transcript line and does not want a `→` in front of it.
3927
- *
3928
- * The level **word** stays in `columns`. Colour is never the carrier.
3929
- */
3930
- level?: TerminalLevel;
3931
- /**
3932
- * Which cell of `columns` holds the level word. Defaults to `1`, because a
3933
- * log line reads `time · LEVEL · source · message` and the timestamp comes
3934
- * first in every log anyone has ever read.
3935
- */
3936
- levelColumn?: number;
3937
- /**
3938
- * Columns, for the step-shaped output a run prints — name, detail, timing,
3939
- * result. Given as cells so they align down the transcript instead of each
3940
- * line padding itself with spaces.
3941
- */
3942
- columns?: React$1.ReactNode[];
3943
- children?: React$1.ReactNode;
3944
- }
3945
- interface TerminalProps extends React$1.HTMLAttributes<HTMLDivElement> {
3946
- children?: React$1.ReactNode;
3947
- /** Shows a blinking block at the end. */
3948
- cursor?: boolean;
3949
- /**
3950
- * `grid-template-columns` for every columned line in this transcript.
3951
- *
3952
- * Set once here rather than per line, because the point of columns is that
3953
- * they line up *down* the transcript — a width chosen per row aligns nothing.
3954
- */
3955
- columnTemplate?: string;
3956
- }
3957
- /**
3958
- * A shell transcript, as a first-class surface.
3959
- *
3960
- * Some of this product's work happens outside Studio — imports run from the
3961
- * CLI, a scheduler calls the Python API — and the hand-off has to be shown
3962
- * honestly rather than redrawn as a wizard. So this renders what the terminal
3963
- * actually printed.
3964
4913
  *
3965
- * It is presentational: a record of a run that already happened, not a live
3966
- * console. There is no input here, and it does not scroll itself.
4914
+ * @deprecated Import from `@invana/assistant`. This export leaves `@invana/ui` in the next release.
3967
4915
  */
3968
- declare const Terminal: React$1.ForwardRefExoticComponent<TerminalProps & React$1.RefAttributes<HTMLDivElement>>;
3969
- declare const TerminalLine: React$1.ForwardRefExoticComponent<TerminalLineProps & React$1.RefAttributes<HTMLDivElement>>;
4916
+ declare const TemplatePicker: React$1.ForwardRefExoticComponent<TemplatePickerProps & React$1.RefAttributes<HTMLDivElement>>;
3970
4917
 
3971
4918
  /**
3972
4919
  * How the list arranges one entry.
@@ -3978,8 +4925,12 @@ declare const TerminalLine: React$1.ForwardRefExoticComponent<TerminalLineProps
3978
4925
  * `rail` — `when` sits above the title and a line threads the markers. For a
3979
4926
  * narrow card or sidebar, where a 72px column would eat a third of the width
3980
4927
  * and titles wrap anyway; the rail supplies the alignment the column was.
4928
+ *
4929
+ * `compact` — `when`, the marker and the text on one line, no rules. For a few
4930
+ * dated events inside an answer, `wk 8 · Yantian port congestion notice`,
4931
+ * where rules between two lines would outweigh the lines.
3981
4932
  */
3982
- type TimelineVariant = "columns" | "rail";
4933
+ type TimelineVariant = "columns" | "rail" | "compact";
3983
4934
  interface TimelineEntryProps extends Omit<React$1.HTMLAttributes<HTMLLIElement>, "title"> {
3984
4935
  /** When — `Fri 5 Sep`, `09:47`, `Sun`. */
3985
4936
  when: React$1.ReactNode;
@@ -3987,6 +4938,21 @@ interface TimelineEntryProps extends Omit<React$1.HTMLAttributes<HTMLLIElement>,
3987
4938
  title?: React$1.ReactNode;
3988
4939
  /** A marker in the rail — a `StatusDot`, usually. */
3989
4940
  marker?: React$1.ReactNode;
4941
+ /**
4942
+ * Calls the entry out on a tinted ground — the anomaly the events around it
4943
+ * explain. `compact` only.
4944
+ */
4945
+ highlight?: "error" | "warning" | "success" | "info";
4946
+ /**
4947
+ * The events this one breaks into — `TimelineEntry`s drawn under it, in the
4948
+ * list's variant, when it is open. A chevron beside the entry opens it.
4949
+ */
4950
+ nested?: React$1.ReactNode;
4951
+ /** Controlled. Pair it with `onOpenChange`. */
4952
+ open?: boolean;
4953
+ /** Uncontrolled: open at first. Closed by default. */
4954
+ defaultOpen?: boolean;
4955
+ onOpenChange?: (open: boolean) => void;
3990
4956
  children?: React$1.ReactNode;
3991
4957
  }
3992
4958
  interface TimelineListProps extends React$1.HTMLAttributes<HTMLOListElement> {
@@ -4004,7 +4970,9 @@ interface TimelineFooterProps extends React$1.HTMLAttributes<HTMLLIElement> {
4004
4970
  * because the order carries meaning — these are events in sequence, not a set.
4005
4971
  *
4006
4972
  * Both variants take the same entries; only the arrangement differs. See
4007
- * `TimelineVariant` for which one a surface wants.
4973
+ * `TimelineVariant` for which one a surface wants. An entry that breaks into
4974
+ * smaller events carries them as `nested` entries, drawn under it, in the
4975
+ * same variant, once it is opened.
4008
4976
  */
4009
4977
  declare const TimelineList: React$1.ForwardRefExoticComponent<TimelineListProps & React$1.RefAttributes<HTMLOListElement>>;
4010
4978
  declare const TimelineEntry: React$1.ForwardRefExoticComponent<TimelineEntryProps & React$1.RefAttributes<HTMLLIElement>>;
@@ -4018,8 +4986,80 @@ declare const TimelineEntry: React$1.ForwardRefExoticComponent<TimelineEntryProp
4018
4986
  * `columns` has no rail to run on, so the footer is a plain last row there.
4019
4987
  */
4020
4988
  declare const TimelineFooter: React$1.ForwardRefExoticComponent<TimelineFooterProps & React$1.RefAttributes<HTMLLIElement>>;
4989
+ interface TimelineSectionProps extends React$1.HTMLAttributes<HTMLLIElement> {
4990
+ children?: React$1.ReactNode;
4991
+ }
4992
+ /**
4993
+ * A label over a run of entries — `Before`, `Spike`, `After` — for events read
4994
+ * around one moment rather than as one sequence.
4995
+ */
4996
+ declare const TimelineSection: React$1.ForwardRefExoticComponent<TimelineSectionProps & React$1.RefAttributes<HTMLLIElement>>;
4997
+
4998
+ /** One control of a toolbar: a word, or an icon named by its tooltip. */
4999
+ interface ToolbarAction {
5000
+ id: string;
5001
+ /** The word, or — with an `icon` — the tooltip and accessible name. */
5002
+ label: string;
5003
+ /** Draws the control as an icon; the caller's, at 16px. */
5004
+ icon?: React$1.ReactNode;
5005
+ /** A toggle that is on — `Lock` while the canvas is locked. */
5006
+ pressed?: boolean;
5007
+ disabled?: boolean;
5008
+ }
5009
+ /** A rule between groups of controls. */
5010
+ interface ToolbarSeparator {
5011
+ separator: true;
5012
+ }
5013
+ type ToolbarItem = ToolbarAction | ToolbarSeparator;
5014
+ interface ToolbarProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
5015
+ items: ToolbarItem[];
5016
+ /** A control was pressed, by its `id`. */
5017
+ onAction?: (id: string) => void;
5018
+ }
5019
+ /**
5020
+ * A row of controls over a canvas or a panel — icon toggles named by their
5021
+ * tooltips, words, and rules between groups — on the control scale a step
5022
+ * below its bar (`sm`). What each control does is the caller's: it says which
5023
+ * was pressed.
5024
+ */
5025
+ declare const Toolbar: React$1.ForwardRefExoticComponent<ToolbarProps & React$1.RefAttributes<HTMLDivElement>>;
4021
5026
 
4022
- declare const Toolbar: React__default.FC;
5027
+ interface TouchItem {
5028
+ layer: Layer;
5029
+ /** What it amounts to — `3 calls`, `1,284 rows`, `miss`, `asked + approved`. */
5030
+ note?: React$1.ReactNode;
5031
+ /** What to call it, when {@link layerLabel} is not what this surface says. */
5032
+ label?: React$1.ReactNode;
5033
+ /** A guardrail said no. Struck in place, never dropped. */
5034
+ refused?: boolean;
5035
+ /** Allowed, and nothing reached for it. Present, and visibly not in play. */
5036
+ dim?: boolean;
5037
+ }
5038
+ interface TouchStripProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
5039
+ items: TouchItem[];
5040
+ palette?: LayerPalette;
5041
+ /**
5042
+ * `row` (default) is one cell per layer on one line, above a trace. `column`
5043
+ * is one line per layer, the note right-aligned — how a 420px panel reads the
5044
+ * same summary, where six cells on a line would truncate every note.
5045
+ */
5046
+ orientation?: "row" | "column";
5047
+ }
5048
+ /**
5049
+ * What a run touched at all — one cell per layer, on one line.
5050
+ *
5051
+ * This is a **summary**, and the whole reason it is a strip and not an axis.
5052
+ * *What did this touch* is answered once for the whole run, so it costs one
5053
+ * line above the list; drawn as a band per layer down a trace it would be a
5054
+ * matrix one sixth full, because a step spends exactly one layer.
5055
+ *
5056
+ * **Refused is struck in place and never touched is dimmed, and neither is
5057
+ * hidden.** The gap between what a world allowed and what the run reached for
5058
+ * is the finding: three layers allowed and never touched is an invitation to
5059
+ * narrow, and a refusal is an invitation to widen or to accept that the graph
5060
+ * cannot answer. A strip that showed only what was spent could say neither.
5061
+ */
5062
+ declare const TouchStrip: React$1.ForwardRefExoticComponent<TouchStripProps & React$1.RefAttributes<HTMLDivElement>>;
4023
5063
 
4024
5064
  /**
4025
5065
  * A single clickable/displayed reference shown in a step's
@@ -4124,6 +5164,122 @@ interface TourProps {
4124
5164
  */
4125
5165
  declare function Tour({ controller, steps, onExit, onComplete, badgeLabel, prevLabel, nextLabel, finishLabel, exitLabel, showExit, showCounter, showProgressBar, position, className, }: TourProps): React$1.JSX.Element | null;
4126
5166
 
5167
+ interface TraceListProps extends React$1.HTMLAttributes<HTMLDivElement> {
5168
+ /**
5169
+ * `default` is the run view: stripe, sequence, layer, duration. `progress` is
5170
+ * the trace a running answer streams — a dot per step (filled when done,
5171
+ * pulsing while it runs, hollow while it waits), the step in plain text, and
5172
+ * its timing or count at the right in mono.
5173
+ */
5174
+ variant?: "default" | "progress";
5175
+ children?: React$1.ReactNode;
5176
+ }
5177
+ /**
5178
+ * A run, in the order it happened.
5179
+ *
5180
+ * The default reading of a trace, because *what happened, and then what* is the
5181
+ * cheapest honest answer to a reader opening a run. Its rows are
5182
+ * {@link TraceStep}s; a bounded repetition **contains** its rounds
5183
+ * ({@link TraceLoop}) and a gate lies **between** rows ({@link TraceGate}).
5184
+ *
5185
+ * Nothing here is an axis. The layer a step spent is a column on its row, so a
5186
+ * list nests for free and a second round is simply another row inside the box
5187
+ * that holds it. The clock reading of the same trace is `Gantt`, by task or by layer.
5188
+ */
5189
+ declare const TraceList: React$1.ForwardRefExoticComponent<TraceListProps & React$1.RefAttributes<HTMLDivElement>>;
5190
+ interface TraceStepProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onSelect" | "role"> {
5191
+ /** Where it sits in the run — the sequence number. */
5192
+ seq?: React$1.ReactNode;
5193
+ /** The step's key — `execute_query`. Mono, because it is the plan's own word. */
5194
+ name: React$1.ReactNode;
5195
+ /** One line: what it did, in the graph's terms. */
5196
+ description?: React$1.ReactNode;
5197
+ /** The participant class it spent. A step spends exactly one. */
5198
+ layer?: Layer;
5199
+ /** What it spent it on — `extract`, `decide`, `read_only`, `schema`. */
5200
+ role?: React$1.ReactNode;
5201
+ /** How long it took, or `—` when it never ran. */
5202
+ duration?: React$1.ReactNode;
5203
+ /** Under the duration — `ok`, `round 2`, `1,284 rows`, `skipped`. */
5204
+ note?: React$1.ReactNode;
5205
+ /** The exception this row carries — a `MarkChip`. */
5206
+ mark?: React$1.ReactNode;
5207
+ palette?: LayerPalette;
5208
+ /** A delegated run's steps sit under the step that spawned them. */
5209
+ depth?: number;
5210
+ /** Dispatched to nobody: queued, held, or never reached. Present, not in play. */
5211
+ dim?: boolean;
5212
+ /** It ran and it failed, or it was refused. The name is struck, in the destructive tone. */
5213
+ struck?: boolean;
5214
+ selected?: boolean;
5215
+ onSelect?: () => void;
5216
+ /**
5217
+ * Where the step is, in a `progress` list: `done`, `running`, `pending`,
5218
+ * `failed`, `waiting` on the reader, `retrying` after a failed attempt, or
5219
+ * `stopped` by the reader. Defaults to `done`. The run view says the same
5220
+ * with `dim` and `struck`.
5221
+ */
5222
+ status?: "done" | "running" | "pending" | "failed" | "waiting" | "retrying" | "stopped";
5223
+ /** Why a failed step failed, on a line under it in a `progress` list. */
5224
+ error?: React$1.ReactNode;
5225
+ }
5226
+ /**
5227
+ * One event of a run: a step, and everything that is true of it.
5228
+ *
5229
+ * **The stripe is the layer.** A step touches exactly one participant class, so
5230
+ * the layer is a 3px rail down the row rather than a column of its own — which
5231
+ * leaves the row's width for the two things a reader is actually scanning, the
5232
+ * step's key and what it did.
5233
+ *
5234
+ * A row keeps its place in every state. A step that is painting right now, one
5235
+ * that was skipped because the step above it failed, one that was refused: all
5236
+ * three stay where they sit in the order, dimmed or struck. A list that dropped
5237
+ * them would be a list that cannot say *nothing below the failure was
5238
+ * dispatched*.
5239
+ */
5240
+ declare const TraceStep: React$1.ForwardRefExoticComponent<TraceStepProps & React$1.RefAttributes<HTMLDivElement>>;
5241
+ interface TraceLoopProps extends React$1.HTMLAttributes<HTMLDivElement> {
5242
+ /** What bounded it — `↻ 2 of 3 rounds — understood on round 2`. */
5243
+ label: React$1.ReactNode;
5244
+ /** Hard right — `3 events · 42.8s`. */
5245
+ summary?: React$1.ReactNode;
5246
+ /** The rail and wash it is drawn in. Defaults to the warning token. */
5247
+ tone?: "warning" | "info" | "muted";
5248
+ children?: React$1.ReactNode;
5249
+ }
5250
+ /**
5251
+ * A bounded repetition, drawn by containment.
5252
+ *
5253
+ * The rounds are **inside** it, so a second round is one more row in the box
5254
+ * and a list nests for free. Drawing a loop as a marker beside its rows would
5255
+ * make a reader reconstruct which rows it held; drawing it as a bracket down the
5256
+ * side is the clock reading's job, where the axis is time and rows are bands.
5257
+ */
5258
+ declare const TraceLoop: React$1.ForwardRefExoticComponent<TraceLoopProps & React$1.RefAttributes<HTMLDivElement>>;
5259
+ interface TraceGateProps extends React$1.HTMLAttributes<HTMLDivElement> {
5260
+ /** What it is — `approval — approved by ravi`. */
5261
+ label: React$1.ReactNode;
5262
+ /** What it cost — `waited 2m 04s · nothing was spent while it waited`. */
5263
+ note?: React$1.ReactNode;
5264
+ /** Defaults to the destructive token, which is what a stop is drawn in. */
5265
+ tone?: "destructive" | "warning" | "muted";
5266
+ /**
5267
+ * Which side of the line the cost falls on. `before` — nothing has been spent
5268
+ * yet; `after` — the work up to here is already paid for.
5269
+ */
5270
+ edge?: "before" | "after";
5271
+ }
5272
+ /**
5273
+ * A gate — a rule across the list, never a row in it.
5274
+ *
5275
+ * It is dispatched by nobody, holds no slot and spends no participant, so it is
5276
+ * not a step: it is a **condition on the way into one**. Drawn as a full-width
5277
+ * rule with its chip hung off the side the cost falls on, *above this, nothing
5278
+ * has been spent* becomes something the drawing says rather than something a
5279
+ * legend has to claim.
5280
+ */
5281
+ declare const TraceGate: React$1.ForwardRefExoticComponent<TraceGateProps & React$1.RefAttributes<HTMLDivElement>>;
5282
+
4127
5283
  interface TreeViewProps {
4128
5284
  style?: React$1.CSSProperties;
4129
5285
  className?: string;
@@ -4155,64 +5311,169 @@ interface UnderDevelopmentProps extends VariantProps<typeof underDevelopmentVari
4155
5311
  }
4156
5312
  declare function UnderDevelopment({ title, description, iconSize, size, className, }: UnderDevelopmentProps): React$1.JSX.Element;
4157
5313
 
4158
- interface TypographyPreProps extends React$1.HTMLAttributes<HTMLPreElement> {
5314
+ /** One page in the strip — its tab label plus the content shown when active. */
5315
+ interface WorkbookPage {
5316
+ /** Stable identity — the key for mounting and the value passed to callbacks. */
5317
+ id: string;
5318
+ /** Tab label. */
5319
+ title: string;
5320
+ /** What renders in the body when this page is active (or, with
5321
+ * `keepMounted`, stays mounted-but-hidden while another page is active). */
5322
+ content: ReactNode;
5323
+ /** Optional leading icon in the tab. */
5324
+ icon?: ElementType;
5325
+ /** Disable selecting this tab. */
5326
+ disabled?: boolean;
5327
+ /** Extra classes for *this* tab button (win over the built-ins via
5328
+ * tailwind-merge) — e.g. a per-page accent. */
5329
+ tabClassName?: string;
5330
+ /** Inline styles for *this* tab button — e.g. a custom brand colour. */
5331
+ tabStyle?: CSSProperties;
5332
+ /** Draw an inline `×` on this tab (active or not) that calls the view's
5333
+ * `onClose`, in place of the caret menu — for a page with nothing to manage
5334
+ * but its own closing. Needs `onClose`. */
5335
+ closable?: boolean;
5336
+ }
5337
+ /**
5338
+ * One entry in the active tab's actions dropdown. The consumer supplies the list
5339
+ * (`pageMenuItems`); each item's `onSelect` is invoked with the id of the page
5340
+ * whose menu is open. This is how a host declares what a page can do — rename,
5341
+ * duplicate, remove, export, … — without the view knowing any of those verbs.
5342
+ */
5343
+ interface WorkbookPageMenuItem {
5344
+ /** Stable key for the row. */
5345
+ id: string;
5346
+ /** Row label. */
5347
+ label: string;
5348
+ /** Optional leading icon. */
5349
+ icon?: ElementType;
5350
+ /** Invoked with the active page's id when the row is chosen. */
5351
+ onSelect: (pageId: string) => void;
5352
+ /** Render with destructive (danger) styling — e.g. "Remove". */
5353
+ destructive?: boolean;
5354
+ /** Disable the row — a boolean, or a predicate on the page id (e.g. disable
5355
+ * "Remove" on the last remaining page). */
5356
+ disabled?: boolean | ((pageId: string) => boolean);
5357
+ /** Draw a separator immediately *before* this row (to group actions). */
5358
+ separatorBefore?: boolean;
5359
+ }
5360
+ /**
5361
+ * An extra icon button for the header's right-pinned control cluster (next to the
5362
+ * pager / `+`) — e.g. settings, about, help. Strip-level, not per-page: its
5363
+ * `onSelect` takes no page id. The consumer supplies the list via `headerActions`.
5364
+ */
5365
+ interface WorkbookAction {
5366
+ /** Stable key for the button. */
5367
+ id: string;
5368
+ /** Accessible label / tooltip. */
5369
+ label: string;
5370
+ /** Icon component. */
5371
+ icon: ElementType;
5372
+ /** Click handler. */
5373
+ onClick: () => void;
5374
+ /** Optional disabled state. */
5375
+ disabled?: boolean;
4159
5376
  }
5377
+ interface WorkbookProps {
5378
+ /** The pages, in tab order. */
5379
+ pages: WorkbookPage[];
5380
+ /** Id of the active page. */
5381
+ activeId: string;
5382
+ /** Select a page (tab click). */
5383
+ onSelect: (id: string) => void;
5384
+ /** Show a `+` (in the pager cluster) that requests a new page. Omit to hide it. */
5385
+ onAdd?: () => void;
5386
+ /** Which edge of the body the tab strip sits on — `'top'` (default) or
5387
+ * `'bottom'`, the spreadsheet look, with each tab open at its top. */
5388
+ tabPosition?: 'top' | 'bottom';
5389
+ /** Which end of the strip the pager cluster (prev / next / `+`) docks at —
5390
+ * `'start'` (left of the tabs) or `'end'` (right of the tabs). Default `'end'`. */
5391
+ pagerPosition?: 'start' | 'end';
5392
+ /** Extra icon buttons pinned to the far right of the strip (right of the pager)
5393
+ * — e.g. settings, about. Optional. */
5394
+ headerActions?: WorkbookAction[];
5395
+ /** Actions offered on the **active** tab via a caret dropdown. Omit (or pass an
5396
+ * empty list) to hide the caret entirely. */
5397
+ pageMenuItems?: WorkbookPageMenuItem[];
5398
+ /** Close a page — invoked by the `×` on a `closable` page. */
5399
+ onClose?: (id: string) => void;
5400
+ /** Tooltip / aria label for the add button. */
5401
+ addLabel?: string;
5402
+ /** Fold tabs that don't fit into a `…` menu at the end of the strip, instead of
5403
+ * scrolling the strip horizontally. Default `true` — the pager still steps
5404
+ * through every page, folded or not. */
5405
+ overflow?: boolean;
5406
+ /** Accessible label / tooltip for the overflow (`…`) trigger. */
5407
+ overflowLabel?: string;
5408
+ /** Keep every page mounted and hide the inactive ones (default `true`), so a
5409
+ * page's state survives tab switches — a canvas's camera and layout, a
5410
+ * board's scroll and fetched data. Set `false` to mount only the active page. */
5411
+ keepMounted?: boolean;
5412
+ /** Extra classes on the root column. */
5413
+ className?: string;
5414
+ /** Extra classes on the header (tab strip). */
5415
+ headerClassName?: string;
5416
+ /** Extra classes on the body. */
5417
+ bodyClassName?: string;
5418
+ /** Extra classes applied to *every* tab button (win over the built-ins via
5419
+ * tailwind-merge). Per-page `WorkbookPage.tabClassName` layers on top of this. */
5420
+ tabClassName?: string;
5421
+ /** Extra classes applied to the **active** tab only — override the default
5422
+ * folder-tab look (e.g. a different accent colour). */
5423
+ activeTabClassName?: string;
5424
+ }
5425
+ /**
5426
+ * A folder-tab strip over independent pages. The active tab carries a
5427
+ * caret dropdown of consumer-supplied {@link WorkbookPageMenuItem}s (rename /
5428
+ * duplicate / remove / …). Presentational and engine-agnostic — the consumer owns
5429
+ * the page list + active id and applies the reported intents. See the module
5430
+ * header for `keepMounted` and strip-renderer notes.
5431
+ */
5432
+ declare function Workbook({ pages, activeId, onSelect, onAdd, tabPosition, pagerPosition, headerActions, pageMenuItems, onClose, addLabel, overflow, overflowLabel, keepMounted, className, headerClassName, bodyClassName, tabClassName, activeTabClassName, }: WorkbookProps): React$1.JSX.Element;
5433
+
5434
+ type TypographyPreProps = React$1.HTMLAttributes<HTMLPreElement>;
4160
5435
  declare const TypographyPre: React$1.ForwardRefExoticComponent<TypographyPreProps & React$1.RefAttributes<HTMLPreElement>>;
4161
5436
 
4162
- interface TypographyListProps extends React$1.HTMLAttributes<HTMLUListElement> {
4163
- }
5437
+ type TypographyListProps = React$1.HTMLAttributes<HTMLUListElement>;
4164
5438
  declare const TypographyList: React$1.ForwardRefExoticComponent<TypographyListProps & React$1.RefAttributes<HTMLUListElement>>;
4165
5439
 
4166
- interface TypographyMutedProps extends React$1.HTMLAttributes<HTMLParagraphElement> {
4167
- }
5440
+ type TypographyMutedProps = React$1.HTMLAttributes<HTMLParagraphElement>;
4168
5441
  declare const TypographyMuted: React$1.ForwardRefExoticComponent<TypographyMutedProps & React$1.RefAttributes<HTMLParagraphElement>>;
4169
5442
 
4170
- interface TypographySmallProps extends React$1.HTMLAttributes<HTMLElement> {
4171
- }
5443
+ type TypographySmallProps = React$1.HTMLAttributes<HTMLElement>;
4172
5444
  declare const TypographySmall: React$1.ForwardRefExoticComponent<TypographySmallProps & React$1.RefAttributes<HTMLElement>>;
4173
5445
 
4174
- interface TypographyLargeProps extends React$1.HTMLAttributes<HTMLDivElement> {
4175
- }
5446
+ type TypographyLargeProps = React$1.HTMLAttributes<HTMLDivElement>;
4176
5447
  declare const TypographyLarge: React$1.ForwardRefExoticComponent<TypographyLargeProps & React$1.RefAttributes<HTMLDivElement>>;
4177
5448
 
4178
- interface TypographyLeadProps extends React$1.HTMLAttributes<HTMLParagraphElement> {
4179
- }
5449
+ type TypographyLeadProps = React$1.HTMLAttributes<HTMLParagraphElement>;
4180
5450
  declare const TypographyLead: React$1.ForwardRefExoticComponent<TypographyLeadProps & React$1.RefAttributes<HTMLParagraphElement>>;
4181
5451
 
4182
- interface TypographyInlineCodeProps extends React$1.HTMLAttributes<HTMLElement> {
4183
- }
5452
+ type TypographyInlineCodeProps = React$1.HTMLAttributes<HTMLElement>;
4184
5453
  declare const TypographyInlineCode: React$1.ForwardRefExoticComponent<TypographyInlineCodeProps & React$1.RefAttributes<HTMLElement>>;
4185
5454
 
4186
- interface TypographyBlockquoteProps extends React$1.BlockquoteHTMLAttributes<HTMLQuoteElement> {
4187
- }
5455
+ type TypographyBlockquoteProps = React$1.BlockquoteHTMLAttributes<HTMLQuoteElement>;
4188
5456
  declare const TypographyBlockquote: React$1.ForwardRefExoticComponent<TypographyBlockquoteProps & React$1.RefAttributes<HTMLQuoteElement>>;
4189
5457
 
4190
- interface TypographyPProps extends React$1.HTMLAttributes<HTMLParagraphElement> {
4191
- }
5458
+ type TypographyPProps = React$1.HTMLAttributes<HTMLParagraphElement>;
4192
5459
  declare const TypographyP: React$1.ForwardRefExoticComponent<TypographyPProps & React$1.RefAttributes<HTMLParagraphElement>>;
4193
5460
 
4194
- interface TypographyH6Props extends React$1.HTMLAttributes<HTMLHeadingElement> {
4195
- }
5461
+ type TypographyH6Props = React$1.HTMLAttributes<HTMLHeadingElement>;
4196
5462
  declare const TypographyH6: React$1.ForwardRefExoticComponent<TypographyH6Props & React$1.RefAttributes<HTMLHeadingElement>>;
4197
5463
 
4198
- interface TypographyH5Props extends React$1.HTMLAttributes<HTMLHeadingElement> {
4199
- }
5464
+ type TypographyH5Props = React$1.HTMLAttributes<HTMLHeadingElement>;
4200
5465
  declare const TypographyH5: React$1.ForwardRefExoticComponent<TypographyH5Props & React$1.RefAttributes<HTMLHeadingElement>>;
4201
5466
 
4202
- interface TypographyH4Props extends React$1.HTMLAttributes<HTMLHeadingElement> {
4203
- }
5467
+ type TypographyH4Props = React$1.HTMLAttributes<HTMLHeadingElement>;
4204
5468
  declare const TypographyH4: React$1.ForwardRefExoticComponent<TypographyH4Props & React$1.RefAttributes<HTMLHeadingElement>>;
4205
5469
 
4206
- interface TypographyH3Props extends React$1.HTMLAttributes<HTMLHeadingElement> {
4207
- }
5470
+ type TypographyH3Props = React$1.HTMLAttributes<HTMLHeadingElement>;
4208
5471
  declare const TypographyH3: React$1.ForwardRefExoticComponent<TypographyH3Props & React$1.RefAttributes<HTMLHeadingElement>>;
4209
5472
 
4210
- interface TypographyH2Props extends React$1.HTMLAttributes<HTMLHeadingElement> {
4211
- }
5473
+ type TypographyH2Props = React$1.HTMLAttributes<HTMLHeadingElement>;
4212
5474
  declare const TypographyH2: React$1.ForwardRefExoticComponent<TypographyH2Props & React$1.RefAttributes<HTMLHeadingElement>>;
4213
5475
 
4214
- interface TypographyH1Props extends React$1.HTMLAttributes<HTMLHeadingElement> {
4215
- }
5476
+ type TypographyH1Props = React$1.HTMLAttributes<HTMLHeadingElement>;
4216
5477
  declare const TypographyH1: React$1.ForwardRefExoticComponent<TypographyH1Props & React$1.RefAttributes<HTMLHeadingElement>>;
4217
5478
 
4218
5479
  declare const Typography: {
@@ -4305,4 +5566,4 @@ interface UseOverflowItemsResult {
4305
5566
  */
4306
5567
  declare function useOverflowItems({ count, enabled, pinnedIndex, reserve, }: UseOverflowItemsOptions): UseOverflowItemsResult;
4307
5568
 
4308
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AddressChip, type AddressChipProps, type AddressTone, AgentChip, type AgentChipProps, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppStatusBar, type AppStatusBarProps, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BarChartH, type BarChartHProps, BarChartV, type BarChartVProps, type BarDatum, type BaseNavProps, type Bound, BoundChip, type BoundChipProps, type BoundPalette, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, ButtonWithTooltip, type ButtonWithTooltipProps, CAST_ROLES, CannotAnswerCard, type CannotAnswerCardProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardWithHeader, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CastResolution, type CastRole, type CastSource, CastTable, type CastTableProps, ChatSession, ChatSessionActivityRow, type ChatSessionActivityRowProps, type ChatSessionActivityStatus, ChatSessionActivitySubLine, type ChatSessionActivitySubLineProps, ChatSessionComposer, type ChatSessionComposerProps, ChatSessionContextChip, type ChatSessionContextChipProps, ChatSessionDisclosure, type ChatSessionDisclosureProps, ChatSessionMessage, type ChatSessionMessageAction, ChatSessionMessageOptions, type ChatSessionMessageOptionsProps, type ChatSessionMessageProps, type ChatSessionMessageRole, type ChatSessionMessageStatus, ChatSessionProgressLine, type ChatSessionProgressLineProps, ChatSessionPromptRow, type ChatSessionPromptRowProps, type ChatSessionProps, ChatSessionStatusBar, type ChatSessionStatusBarProps, ChatSessionTaskGroup, type ChatSessionTaskGroupProps, ChatSessionTaskRow, type ChatSessionTaskRowProps, type ChatSessionTaskStatus, CitationList, type CitationListProps, CitationMarker, CitationRow, type CitationRowProps, ClampedText, type ClampedTextProps, ClarifyCard, type ClarifyCardProps, type ClarifyOption, type ColumnDatum, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextBar, type ContextBarProps, type DeclaredAxes, DiagnosisCard, type DiagnosisCardProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffList, type DiffListProps, type DiffOp, DiffRow, type DiffRowProps, DivergingBar, type DivergingBarProps, type DivergingDatum, DotRating, type DotRatingProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type EgressClass, EgressList, type EgressListProps, EmissionCard, type EmissionCardProps, EmissionHeader, type EmissionHeaderProps, type EmissionKind, EmptyState, EmptyStateLock, type EmptyStateLockProps, type EmptyStateProps, ErrorBoundary, Eyebrow, type EyebrowProps, FilterBar, type FilterBarProps, FilterChip, type FilterChipProps, type HeatCell, type HeatState, HeatStrip, type HeatStripProps, HoverCard, HoverCardContent, HoverCardTrigger, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, type KnownAddressTone, type KnownBound, type KnownDiffOp, type KnownLayer, type KnownLayerItemState, type KnownMetricTone, type KnownTerminalLevel, type Layer, type LayerBand, type LayerBracket, LayerChip, type LayerChipProps, type LayerItem, type LayerItemState, type LayerPaint, type LayerPalette, type LayerPart, type LayerScale, type LayerSeam, LayerSection, type LayerSectionProps, LayerStrip, type LayerStripProps, Legend, LegendItem, type LegendItemProps, type LegendProps, type LegendSwatchKind, LensChip, type LensChipProps, LensRow, type LensRowProps, type LensUsage, Link, type LinkProps, type MatchCandidate, MatchPreview, type MatchPreviewProps, MenuItem, type MenuItemProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricGrid, type MetricGridProps, MetricTile, type MetricTileProps, type MetricTone, type Narrowing, NavBase, NavHorizontal, type NavHorizontalItem, NavHorizontalItems, type NavHorizontalItemsProps, type NavHorizontalProps, type NavItemConfig, NavItems, type NavItemsProps, type NavItemsVariant, type NavMenuItem, type NavSection, NavVertical, type NavVerticalItem, NavVerticalItems, type NavVerticalItemsProps, type NavVerticalProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NestedMenu, type NestedMenuProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelBox, type PanelBoxProps, PanelContent, type PanelContentProps, PanelStack, type PanelStackHandle, type PanelStackProps, type PanelStackSection, Popover, PopoverContent, PopoverTrigger, Progress, PropertyList, type PropertyListProps, PropertyRow, type PropertyRowProps, ProposalCard, type ProposalCardProps, RatingControl, type RatingControlProps, RecordHeader, type RecordHeaderProps, RepairNote, type RepairNoteProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RetryNote, type RetryNoteProps, RichSelect, type RichSelectOption, type RichSelectProps, type RuleEgress, type RuleProperties, RuleRow, type RuleRowProps, type RuleSelect, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SearchInputSize, SectionHeader, type SectionHeaderProps, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, type SliceLine, SliceSummary, type SliceSummaryProps, Sparkline, type SparklineProps, Spinner, StatusDot, type StatusDotProps, type TabConfig, TabbedPanel, type TabbedPanelProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TaskGantt, TaskGanttDetailCard, type TaskGanttDetailCardProps, type TaskGanttDetailProps, type TaskGanttInstant, type TaskGanttProps, type TaskGanttSegment, type TaskGanttStatus, type TaskGanttTask, TaskNode, type TaskNodeProps, type TaskNodeTag, type TemplateOption, TemplatePicker, type TemplatePickerProps, Terminal, type TerminalLevel, TerminalLine, type TerminalLineKind, type TerminalLineProps, type TerminalProps, TimelineEntry, type TimelineEntryProps, TimelineFooter, type TimelineFooterProps, TimelineList, type TimelineListProps, type TimelineVariant, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TouchDirection, Tour, type TourController, type TourProps, type TourReference, type TourStep, TreeItem, TreeView, type TreeViewProps, Typography, TypographyBlockquote, type TypographyBlockquoteProps, TypographyH1, type TypographyH1Props, TypographyH2, type TypographyH2Props, TypographyH3, type TypographyH3Props, TypographyH4, type TypographyH4Props, TypographyH5, type TypographyH5Props, TypographyH6, type TypographyH6Props, TypographyInlineCode, type TypographyInlineCodeProps, TypographyLarge, type TypographyLargeProps, TypographyLead, type TypographyLeadProps, TypographyList, type TypographyListProps, TypographyMuted, type TypographyMutedProps, TypographyP, type TypographyPProps, TypographyPre, type TypographyPreProps, TypographySmall, type TypographySmallProps, UnderDevelopment, type UnderDevelopmentProps, type UseOverflowItemsOptions, type UseOverflowItemsResult, type UseTourOptions, type Verdict, agentChipVariants, badgeVariants, buttonGroupVariants, buttonVariants, chatSessionGutterClass, cn, describeSlice, stateLabel as layerItemLabel, layerLabel, layerPaint, linkVariants, navigationMenuTriggerStyle, split as splitAddress, statusDotVariants, toggleVariants, useOverflowItems, useSidebar, useTour };
5569
+ export { AbsenceNote, type AbsenceNoteProps, type AbsenceReason, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AddressChip, type AddressChipProps, type AddressTone, AgentChip, type AgentChipProps, AgentHeader, type AgentHeaderProps, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppStatusBar, type AppStatusBarProps, type Artifact, ArtifactCard, type ArtifactCardProps, ArtifactTable, type ArtifactTableProps, Avatar, AvatarFallback, AvatarGroup, type AvatarGroupProps, AvatarImage, type AvatarProps, Badge, type BadgeProps, type BaseNavProps, type Bound, BoundChip, type BoundChipProps, type BoundPalette, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, ButtonWithTooltip, type ButtonWithTooltipProps, CAST_ROLES, CannotAnswerCard, type CannotAnswerCardProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardWithHeader, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CastResolution, type CastRole, type CastSource, CastTable, type CastTableProps, CaveatNote, type CaveatNoteProps, ChatSession, ChatSessionActivityRow, type ChatSessionActivityRowProps, type ChatSessionActivityStatus, ChatSessionActivitySubLine, type ChatSessionActivitySubLineProps, ChatSessionCaret, ChatSessionComposer, type ChatSessionComposerProps, ChatSessionContextChip, type ChatSessionContextChipProps, ChatSessionDisclosure, ChatSessionDisclosureCode, type ChatSessionDisclosureProps, ChatSessionDisclosureSteps, type ChatSessionDisclosureStepsProps, ChatSessionMessage, type ChatSessionMessageAction, ChatSessionMessageOptions, type ChatSessionMessageOptionsProps, type ChatSessionMessageProps, type ChatSessionMessageRole, type ChatSessionMessageStatus, ChatSessionProgressLine, type ChatSessionProgressLineProps, ChatSessionPromptRow, type ChatSessionPromptRowProps, type ChatSessionProps, ChatSessionStatusBar, type ChatSessionStatusBarProps, ChatSessionTaskGroup, type ChatSessionTaskGroupProps, ChatSessionTaskRow, type ChatSessionTaskRowProps, type ChatSessionTaskStatus, CitationList, type CitationListProps, CitationMarker, CitationRow, type CitationRowProps, ClampedText, type ClampedTextProps, ClarifyActions, type ClarifyActionsProps, ClarifyCard, type ClarifyCardProps, ClarifyFootnote, type ClarifyFootnoteProps, type ClarifyOption, type ClarifyState, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextBar, type ContextBarProps, DataReach, type DataReachModel, type DataReachProps, type DeclaredAxes, DiagnosisCard, type DiagnosisCardProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffList, type DiffListProps, type DiffOp, DiffRow, type DiffRowProps, DotRating, type DotRatingProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type EgressClass, EgressList, type EgressListProps, EmissionBody, EmissionCard, type EmissionCardProps, EmissionHeader, type EmissionHeaderProps, type EmissionKind, EmptyState, EmptyStateLock, type EmptyStateLockProps, type EmptyStateProps, ErrorBoundary, type ErrorBoundaryProps, type ExchangeOption, ExchangeRecord, type ExchangeRecordProps, ExpandToggle, type ExpandToggleProps, type ExpandedKeys, Eyebrow, type EyebrowProps, FilterBar, type FilterBarProps, FilterChip, type FilterChipOption, type FilterChipProps, FloatingPanel, type FloatingPanelProps, Gantt, type GanttBar, type GanttBracket, GanttDetailCard, type GanttDetailCardProps, type GanttDetailProps, type GanttInstant, type GanttProps, type GanttRow, type GanttSeam, type GanttStatus, HoverCard, HoverCardContent, HoverCardTrigger, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, KindChip, type KindChipProps, type KnownAddressTone, type KnownBound, type KnownDiffOp, type KnownLayer, type KnownMetricTone, type KnownParticipantVerdict, type KnownRunKind, type KnownRunStatus, type KnownTerminalLevel, type Layer, LayerChip, type LayerChipProps, type LayerPaint, type LayerPalette, LayerSection, type LayerSectionProps, Legend, LegendItem, type LegendItemProps, type LegendProps, type LegendSwatchKind, LensRow, type LensRowProps, type LensUsage, Link, type LinkProps, LogCard, type LogCardProps, type LogFloor, type LogLine, MarkChip, type MarkChipProps, type MarkTone, type MatchCandidate, MatchPreview, type MatchPreviewProps, MenuItem, type MenuItemProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricGrid, type MetricGridProps, MetricTile, type MetricTileProps, type MetricTone, MultiFilterChip, type MultiFilterChipProps, type Narrowing, NavBase, NavHorizontal, type NavHorizontalItem, NavHorizontalItems, type NavHorizontalItemsProps, type NavHorizontalProps, type NavItemConfig, NavItems, type NavItemsProps, type NavItemsVariant, type NavMenuItem, type NavSection, NavVertical, type NavVerticalItem, NavVerticalItems, type NavVerticalItemsProps, type NavVerticalProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NestedMenu, type NestedMenuProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelBox, type PanelBoxProps, PanelContent, type PanelContentProps, PanelStack, type PanelStackHandle, type PanelStackProps, type PanelStackSection, ParticipantRow, type ParticipantRowProps, type ParticipantVerdict, Popover, PopoverContent, PopoverTrigger, Progress, PropertyList, type PropertyListProps, PropertyRow, type PropertyRowProps, ProposalCard, type ProposalCardProps, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, type QuestionnaireChoiceFigure, type QuestionnaireChoiceProps, QuestionnaireChoiceTitle, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, type QuestionnaireFigureTone, QuestionnaireInput, type QuestionnaireInputProps, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireProgressBar, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RatingControl, type RatingControlProps, RecordHeader, type RecordHeaderProps, RecordPager, type RecordPagerProps, RefusalCard, type RefusalCardProps, RepairNote, type RepairNoteProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RetryNote, type RetryNoteProps, RichSelect, type RichSelectAction, type RichSelectOption, type RichSelectProps, type RichSelectToggle, type RuleEgress, type RuleProperties, RuleRow, type RuleRowProps, type RuleSelect, type RunKind, RunRow, type RunRowProps, type RunStatus, RunStatusText, type RunStatusTextProps, ScopeLine, type ScopeLineChoice, type ScopeLinePart, type ScopeLineProps, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SearchInputSize, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlProps, type SegmentedOption, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, type SliceLine, SliceSummary, type SliceSummaryProps, Spinner, Stack, type StackProps, StatusDot, type StatusDotProps, StatusIcon, type StatusIconProps, type StatusIconState, type TabConfig, TabbedPanel, type TabbedPanelProps, Table, TableBody, TableCaption, TableCell, type TableDensity, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TaskNode, type TaskNodeProps, type TaskNodeTag, type TemplateOption, TemplatePicker, type TemplatePickerProps, Terminal, type TerminalLevel, TerminalLine, type TerminalLineKind, type TerminalLineProps, type TerminalProps, TimelineEntry, type TimelineEntryProps, TimelineFooter, type TimelineFooterProps, TimelineList, type TimelineListProps, TimelineSection, type TimelineSectionProps, type TimelineVariant, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, type ToolbarAction, type ToolbarItem, type ToolbarProps, type ToolbarSeparator, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TouchItem, TouchStrip, type TouchStripProps, Tour, type TourController, type TourProps, type TourReference, type TourStep, TraceGate, type TraceGateProps, TraceList, type TraceListProps, TraceLoop, type TraceLoopProps, TraceStep, type TraceStepProps, TreeItem, TreeView, type TreeViewProps, Typography, TypographyBlockquote, type TypographyBlockquoteProps, TypographyH1, type TypographyH1Props, TypographyH2, type TypographyH2Props, TypographyH3, type TypographyH3Props, TypographyH4, type TypographyH4Props, TypographyH5, type TypographyH5Props, TypographyH6, type TypographyH6Props, TypographyInlineCode, type TypographyInlineCodeProps, TypographyLarge, type TypographyLargeProps, TypographyLead, type TypographyLeadProps, TypographyList, type TypographyListProps, TypographyMuted, type TypographyMutedProps, TypographyP, type TypographyPProps, TypographyPre, type TypographyPreProps, TypographySmall, type TypographySmallProps, UnderDevelopment, type UnderDevelopmentProps, type UseExpandedKeysOptions, type UseOverflowItemsOptions, type UseOverflowItemsResult, type UseTourOptions, type Verdict, Workbook, type WorkbookAction, type WorkbookPage, type WorkbookPageMenuItem, type WorkbookProps, agentChipVariants, avatarVariants, badgeVariants, buttonGroupVariants, buttonVariants, chatSessionGutterClass, cn, describeSlice, formatRecords, layerLabel, layerPaint, linkVariants, navigationMenuTriggerStyle, ICON as runStatusIcons, TONE as runStatusTones, split as splitAddress, stackVariants, statusDotVariants, statusIconVariants, summarizeReach, toggleVariants, useExpandedKeys, useOverflowItems, useSidebar, useTour };