@trembus/ui 0.1.0

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.
@@ -0,0 +1,1867 @@
1
+ import { ComponentContract } from '@trembus/tokens/contract';
2
+ import { ComponentPropsWithoutRef } from 'react';
3
+ import { ComponentPropsWithRef } from 'react';
4
+ import { CSSProperties } from 'react';
5
+ import { ElementType } from 'react';
6
+ import { ElevationToken } from '@trembus/tokens';
7
+ import { FocusEventHandler } from 'react';
8
+ import { FontWeightToken } from '@trembus/tokens';
9
+ import { HTMLAttributes } from 'react';
10
+ import { InputHTMLAttributes } from 'react';
11
+ import { JobSatisfaction } from '@trembus/tokens/contract';
12
+ import { JSX } from 'react';
13
+ import { KeyboardEventHandler } from 'react';
14
+ import { MaterialTone } from '@trembus/tokens';
15
+ import { MouseEvent as MouseEvent_2 } from 'react';
16
+ import { MouseEventHandler } from 'react';
17
+ import { PointerEventHandler } from 'react';
18
+ import { PropsWithChildren } from 'react';
19
+ import { RadiusToken } from '@trembus/tokens';
20
+ import { ReactElement } from 'react';
21
+ import { ReactNode } from 'react';
22
+ import { Ref } from 'react';
23
+ import { RefCallback } from 'react';
24
+ import { RefObject } from 'react';
25
+ import { SelectHTMLAttributes } from 'react';
26
+ import { SpaceToken } from '@trembus/tokens';
27
+ import { StatusTone } from '@trembus/tokens';
28
+ import { SurfaceTone } from '@trembus/tokens';
29
+ import { SyntheticEvent } from 'react';
30
+ import { TableHTMLAttributes } from 'react';
31
+ import { TdHTMLAttributes } from 'react';
32
+ import { TextareaHTMLAttributes } from 'react';
33
+ import { TextTone } from '@trembus/tokens';
34
+ import { ThemeName } from '@trembus/tokens';
35
+ import { ThHTMLAttributes } from 'react';
36
+ import { Tokens } from '@trembus/tokens';
37
+ import { tokens } from '@trembus/tokens';
38
+ import { TypeToken } from '@trembus/tokens';
39
+ import { UIJob } from '@trembus/tokens/contract';
40
+ import { ZToken } from '@trembus/tokens';
41
+
42
+ export declare interface AffordanceDataAttrs {
43
+ 'data-state': AffordanceState;
44
+ 'aria-disabled'?: true;
45
+ 'aria-busy'?: true;
46
+ }
47
+
48
+ export declare interface AffordanceHandlers {
49
+ onPointerEnter: PointerEventHandler;
50
+ onPointerLeave: PointerEventHandler;
51
+ onPointerDown: PointerEventHandler;
52
+ onPointerUp: PointerEventHandler;
53
+ onKeyDown: KeyboardEventHandler;
54
+ onKeyUp: KeyboardEventHandler;
55
+ onFocus: FocusEventHandler;
56
+ onBlur: FocusEventHandler;
57
+ onClick: MouseEventHandler;
58
+ }
59
+
60
+ /**
61
+ * The Affordance state machine — the SINGLE source of interaction state for the
62
+ * whole library (the vault primitive: an input-accepting region with an
63
+ * idle → hover → pressed → focus → disabled machine). Every interactive
64
+ * component consumes this so feedback (Job #3, Acknowledge Input) is structural,
65
+ * not re-implemented per component. CSS targets the emitted `[data-state]`.
66
+ */
67
+ export declare type AffordanceState = 'idle' | 'hover' | 'pressed' | 'focus-visible' | 'disabled';
68
+
69
+ /**
70
+ * `Stack` / `Inline` — the Relation primitive (order + grouping made visual).
71
+ * Thin flex layers over `Box`: `Stack` stacks vertically, `Inline` flows
72
+ * horizontally. Both inherit every `Box` prop (`as`, surface, padding…).
73
+ */
74
+ declare type Align = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
75
+
76
+ /**
77
+ * Polymorphic component typing — lets a primitive change its rendered element
78
+ * via an `as` prop while staying fully type-safe (props follow the element).
79
+ */
80
+ declare type AsProp<C extends ElementType> = {
81
+ as?: C;
82
+ };
83
+
84
+ export declare function Avatar({ src, alt, name, size, shape, tone, className, ...rest }: AvatarProps): JSX.Element;
85
+
86
+ export declare interface AvatarProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
87
+ /** Image URL. Falls back to initials, then a glyph, on error or absence. */
88
+ src?: string;
89
+ /** Accessible name. Falls back to `name`. */
90
+ alt?: string;
91
+ /** Person/entity name — used for initials and as the accessible name. */
92
+ name?: string;
93
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
94
+ shape?: 'circle' | 'square';
95
+ /** Tints the initials fallback via the color-coded ontology. */
96
+ tone?: StatusTone;
97
+ }
98
+
99
+ export declare function Badge({ tone, variant, size, dot, className, children, ...rest }: BadgeProps): JSX.Element;
100
+
101
+ export declare interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
102
+ /** Status/intent — the color-coded ontology. */
103
+ tone?: BadgeTone;
104
+ variant?: 'soft' | 'solid' | 'outline';
105
+ size?: 'sm' | 'md';
106
+ /** Leading status dot glyph. */
107
+ dot?: boolean;
108
+ children?: ReactNode;
109
+ }
110
+
111
+ declare type BadgeTone = StatusTone | 'accent';
112
+
113
+ export declare function BarChart({ data, selectedId: selProp, defaultSelectedId, onSelect, height, className, }: BarChartProps): JSX.Element;
114
+
115
+ export declare interface BarChartContract {
116
+ view?: 'bar-chart';
117
+ brand?: string;
118
+ code?: string;
119
+ title?: string;
120
+ caption?: string;
121
+ /** Unit suffix appended to every value label (e.g. `%`, `ms`, `k`). */
122
+ unit?: string;
123
+ orientation?: 'vertical' | 'horizontal';
124
+ /** Force the axis maximum; otherwise derived from the data (and markers). */
125
+ max?: number;
126
+ /** Reference lines drawn across the plot (a target / threshold). */
127
+ markers?: BarChartMarker[];
128
+ /** Single-series data — each datum is a bar. */
129
+ bars?: BarDatum[];
130
+ /** Clustered multi-series data — pair with `categories` (one cluster per category). */
131
+ series?: BarSeries[];
132
+ /** Category (x) labels shared across all `series`. */
133
+ categories?: string[];
134
+ }
135
+
136
+ export declare interface BarChartMarker {
137
+ /** Axis position of the reference line. */
138
+ value: number;
139
+ label?: string;
140
+ tone?: BarTone;
141
+ }
142
+
143
+ export declare interface BarChartProps {
144
+ data: BarChartContract;
145
+ /** Controlled selected bar id. */
146
+ selectedId?: string;
147
+ defaultSelectedId?: string;
148
+ onSelect?: (id: string) => void;
149
+ /** Plot height in px (vertical orientation only; horizontal sizes intrinsically). */
150
+ height?: number;
151
+ className?: string;
152
+ }
153
+
154
+ export declare interface BarDatum {
155
+ /** Stable id for selection; falls back to `label`. */
156
+ id?: string;
157
+ /** Category label — the axis tick. */
158
+ label: string;
159
+ /** Magnitude (non-negative). */
160
+ value: number;
161
+ /** Color-coded tone for the bar (default `accent`). */
162
+ tone?: BarTone;
163
+ /** Explicit bar color (hex) — overrides `tone`. */
164
+ color?: string;
165
+ /** Small caption shown beside the value in the inspector. */
166
+ sub?: string;
167
+ /** Inspector detail shown when this bar is selected. */
168
+ note?: string;
169
+ }
170
+
171
+ export declare interface BarSeries {
172
+ /** Stable id for selection; falls back to the series index. */
173
+ id?: string;
174
+ /** Series name — shown in the legend and the selected bar's accessible name. */
175
+ name: string;
176
+ /** Color-coded tone (defaults cycle through the ontology by series order). */
177
+ tone?: BarTone;
178
+ /** Explicit series color (hex) — overrides `tone`. */
179
+ color?: string;
180
+ /** Values aligned to `categories`; `null`/non-finite leaves an empty slot. */
181
+ values: (number | null)[];
182
+ }
183
+
184
+ /**
185
+ * `BarChart` — a categorical magnitude chart (vertical columns or horizontal bars).
186
+ *
187
+ * It consumes a Trembus Visual Grammar **bar-chart contract** — the same authored
188
+ * JSON shape the static HTML kit renders — so one contract draws in both places.
189
+ * Each bar is color-coded by tone against a shared axis; selecting a bar inspects
190
+ * its detail in a live panel. Values are assumed non-negative.
191
+ *
192
+ * Two shapes are supported: a single series (`bars`) and clustered multi-series
193
+ * (`series` + `categories`), which groups one bar per series under each category.
194
+ */
195
+ export declare type BarTone = FillBarTone;
196
+
197
+ export declare function Box<C extends ElementType = 'div'>(props: BoxProps<C>): JSX.Element;
198
+
199
+ /**
200
+ * `Box` — the Surface primitive (and carrier of Marks). A bounded region with
201
+ * padding, an optional surface treatment, radius, border, and z-layer. Spacing
202
+ * is expressed only in token steps, never raw px, so the "bounded region"
203
+ * abstraction stays honest. Polymorphic via `as`.
204
+ */
205
+ export declare interface BoxOwnProps {
206
+ surface?: SurfaceTone;
207
+ /** Material skin (e.g. frosted `glass`) applied via [data-material]; tune with the --tcl-mat-* knobs. */
208
+ material?: MaterialTone;
209
+ radius?: RadiusToken;
210
+ border?: boolean | 'soft' | 'strong';
211
+ z?: ZToken;
212
+ p?: SpaceToken;
213
+ px?: SpaceToken;
214
+ py?: SpaceToken;
215
+ pt?: SpaceToken;
216
+ pr?: SpaceToken;
217
+ pb?: SpaceToken;
218
+ pl?: SpaceToken;
219
+ className?: string;
220
+ style?: CSSProperties;
221
+ children?: ReactNode;
222
+ }
223
+
224
+ export declare type BoxProps<C extends ElementType = 'div'> = PolymorphicComponentPropsWithRef<C, BoxOwnProps>;
225
+
226
+ export declare function Brief({ data, defaultCollapsed, className }: BriefProps): JSX.Element;
227
+
228
+ export declare interface BriefContract {
229
+ view?: 'brief';
230
+ /** Doc archetype — drives the header glyph + accent. */
231
+ kind?: BriefKind;
232
+ /** Gold mono code-title, e.g. 'claude.trembus-ui'. */
233
+ id?: string;
234
+ /** Human title (the `#` H1). Falls back to `id`. */
235
+ title?: string;
236
+ /** The intro paragraph. */
237
+ summary?: string;
238
+ /** Header pills (status / updated / owner / version). */
239
+ meta?: BriefMeta[];
240
+ sections?: BriefSection[];
241
+ }
242
+
243
+ export declare interface BriefIssue {
244
+ /** Path to the offending node, e.g. "sections[2].items[0].severity". */
245
+ path: string;
246
+ level: 'error' | 'warn' | 'info';
247
+ message: string;
248
+ got?: string;
249
+ expected?: string;
250
+ /** Nearest blessed value, when the input looks like a typo. */
251
+ didYouMean?: string;
252
+ }
253
+
254
+ /** A list item — a bare string is the common case; the object adds optional facets. */
255
+ export declare type BriefItem = string | {
256
+ text: string;
257
+ /** Secondary text: a command's gloss, an artifact's purpose, a rule's rationale. */
258
+ desc?: string;
259
+ /** Free-text status, shown as a trailing chip. */
260
+ status?: string;
261
+ /** Checklist emphasis. */
262
+ severity?: Severity;
263
+ /** A pointer (path or url) — a mono chip, or a link when it's an http(s) url. */
264
+ ref?: string;
265
+ /** Decisions: the chosen option for this `text` (the question/title). */
266
+ choice?: string;
267
+ };
268
+
269
+ /**
270
+ * `Brief` — renders an agent-instruction or planning document (CLAUDE.md,
271
+ * AGENTS.md, a plan, a spec) as a structured, navigable visual.
272
+ *
273
+ * It consumes a Trembus Visual Grammar **brief contract** (`view: 'brief'`),
274
+ * designed as a near-isomorphism of the source markdown's own outline: a titled
275
+ * doc + meta pills + an ordered list of `kind`-tagged sections. That shape lets
276
+ * an LLM "generator" transcribe a doc into the contract almost mechanically.
277
+ *
278
+ * The contract is deliberately permissive so a partial or slightly-off
279
+ * generation still renders: every field but item `text` is optional, list items
280
+ * accept a bare string OR an object, and an unknown section `kind` degrades to
281
+ * prose. Lenient parse, strict render.
282
+ */
283
+ export declare type BriefKind = 'claude' | 'agents' | 'plan' | 'spec' | (string & {});
284
+
285
+ export declare interface BriefMeta {
286
+ label: string;
287
+ value: string | number;
288
+ /** Pill accent (hex). */
289
+ tone?: string;
290
+ }
291
+
292
+ export declare interface BriefParseResult {
293
+ /** Always renderable — lenient parse, strict render. `sections` is always present. */
294
+ data: BriefContract & {
295
+ sections: BriefSection[];
296
+ };
297
+ issues: BriefIssue[];
298
+ /** True when no issue is an error (faithful, not merely renderable). */
299
+ ok: boolean;
300
+ }
301
+
302
+ export declare interface BriefProps {
303
+ data: BriefContract;
304
+ /** Section ids collapsed initially (everything expanded otherwise). */
305
+ defaultCollapsed?: string[];
306
+ className?: string;
307
+ }
308
+
309
+ export declare interface BriefSection {
310
+ id?: string;
311
+ /** Section heading (the markdown `##`). Falls back to the kind label if omitted. */
312
+ heading?: string;
313
+ /** How to render the items. Unknown/omitted → 'prose'. */
314
+ kind?: SectionKind;
315
+ /** Lead-in prose shown under the heading, before items. */
316
+ note?: string;
317
+ /** Prose body (alternative to items for `kind: 'prose'`). */
318
+ body?: string;
319
+ items?: BriefItem[];
320
+ }
321
+
322
+ /** Resolves the layout props of a Box into a style object (exported for reuse). */
323
+ export declare function buildBoxStyle(props: BoxOwnProps): CSSProperties;
324
+
325
+ export declare function Button({ variant, tone, size, loading, disabled, fullWidth, asChild, startSlot, endSlot, onPress, className, children, ...rest }: ButtonProps): JSX.Element;
326
+
327
+ export declare interface ButtonProps {
328
+ variant?: 'solid' | 'outline' | 'ghost';
329
+ /** Intent — maps to the color-coded ontology. */
330
+ tone?: ButtonTone;
331
+ size?: 'sm' | 'md' | 'lg';
332
+ loading?: boolean;
333
+ disabled?: boolean;
334
+ fullWidth?: boolean;
335
+ /** Lend Button's style + behavior to your own element (single child). */
336
+ asChild?: boolean;
337
+ startSlot?: ReactNode;
338
+ endSlot?: ReactNode;
339
+ onPress?: (event: SyntheticEvent) => void;
340
+ type?: 'button' | 'submit' | 'reset';
341
+ className?: string;
342
+ children?: ReactNode;
343
+ /** Forwarded to the underlying <button> (or the asChild element). */
344
+ ref?: Ref<HTMLButtonElement>;
345
+ 'aria-label'?: string;
346
+ }
347
+
348
+ declare type ButtonTone = 'accent' | StatusTone;
349
+
350
+ export declare function Callout({ tone, title, icon, onDismiss, dismissLabel, className, children, ...rest }: CalloutProps): JSX.Element;
351
+
352
+ export declare interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
353
+ /** Status/intent — the color-coded ontology (default `info`). */
354
+ tone?: CalloutTone;
355
+ /** Bold lead line above the body. */
356
+ title?: ReactNode;
357
+ /** Leading glyph; defaults to a per-tone icon. Pass `null` to hide it. */
358
+ icon?: ReactNode;
359
+ /** When set, renders a close button that calls this on click. */
360
+ onDismiss?: () => void;
361
+ /** Accessible name for the dismiss button (default "Dismiss"). */
362
+ dismissLabel?: string;
363
+ children?: ReactNode;
364
+ }
365
+
366
+ /**
367
+ * `Callout` — a tone-tinted banner that draws the eye to a contextual message
368
+ * (info / success / warning / danger / neutral / accent). It pairs the color-coded
369
+ * ontology (like `Badge`) with a raised, padded surface (like `Card`): a left
370
+ * accent rail + tone icon reveal the status, while the body can carry inline
371
+ * `<code>` and links. When `onDismiss` is set it gains a close button — the
372
+ * afford/acknowledge jobs.
373
+ */
374
+ export declare type CalloutTone = StatusTone | 'accent';
375
+
376
+ /**
377
+ * `Card` — a raised surface that groups related content into one perceivable
378
+ * unit. Compound API: `<Card><Card.Header/><Card.Body/><Card.Footer/></Card>`.
379
+ */
380
+ export declare const Card: typeof CardRoot & {
381
+ Header: typeof CardHeader;
382
+ Body: typeof CardBody;
383
+ Footer: typeof CardFooter;
384
+ };
385
+
386
+ declare function CardBody({ className, children, ...rest }: CardSectionProps): JSX.Element;
387
+
388
+ declare function CardFooter({ className, children, ...rest }: CardSectionProps): JSX.Element;
389
+
390
+ declare function CardHeader({ className, children, ...rest }: CardSectionProps): JSX.Element;
391
+
392
+ export declare interface CardProps extends HTMLAttributes<HTMLDivElement> {
393
+ /** Adds a hover affordance (pair with an interactive child or wrap in a link). */
394
+ interactive?: boolean;
395
+ }
396
+
397
+ declare function CardRoot({ interactive, className, children, ...rest }: CardProps): JSX.Element;
398
+
399
+ export declare interface CardSectionProps extends HTMLAttributes<HTMLDivElement> {
400
+ children?: ReactNode;
401
+ }
402
+
403
+ export declare type CellAlign = 'start' | 'center' | 'end';
404
+
405
+ export declare function Checkbox({ label, description, indeterminate, disabled, className, id, ref, ...rest }: CheckboxProps): JSX.Element;
406
+
407
+ export declare interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
408
+ label?: ReactNode;
409
+ description?: string;
410
+ /** Tri-state — shows a dash and sets the DOM `indeterminate` property. */
411
+ indeterminate?: boolean;
412
+ ref?: Ref<HTMLInputElement>;
413
+ }
414
+
415
+ export declare type ClassValue = string | number | false | null | undefined;
416
+
417
+ export { ComponentContract }
418
+
419
+ /** Combine multiple refs into one callback ref. */
420
+ export declare function composeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T>;
421
+
422
+ /** Tiny className combiner — filters falsy values and joins with spaces. */
423
+ export declare function cx(...values: ClassValue[]): string;
424
+
425
+ export declare type DataChipTone = StatusTone | 'accent';
426
+
427
+ export declare interface DataFilter {
428
+ /** Stable id — used for React keys + the remove callback. Falls back to the
429
+ * index, NEVER the label (duplicate labels would collide). */
430
+ id?: string;
431
+ /** Parameter name, e.g. "Period". */
432
+ label: string;
433
+ /** Applied value, e.g. "Q2 FY26". */
434
+ value: ReactNode;
435
+ /** Chip accent (default `neutral`); use `accent` for the primary parameter. */
436
+ tone?: DataChipTone;
437
+ }
438
+
439
+ export declare interface DataMetric {
440
+ /** Stable id — falls back to the index, never the label. */
441
+ id?: string;
442
+ /** Unit/dimension, e.g. "records". */
443
+ label: string;
444
+ /** Scalar, e.g. "1,284". */
445
+ value: ReactNode;
446
+ }
447
+
448
+ /**
449
+ * `DataStatusBar` — the context strip that frames a data view (a KPI grid, a
450
+ * report, a dashboard). It answers two questions at a glance: *can I trust this
451
+ * data right now?* and *what parameters produced it?*
452
+ *
453
+ * - **Reveal state (lead):** a color-coded status dot + label (live / stale /
454
+ * loading / error / partial / paused), a freshness readout, and scope metrics
455
+ * (record count, coverage…) sit in a `role="status"` live region — flip the
456
+ * `status` prop and a screen reader announces the change.
457
+ * - **Afford action:** each active parameter is a chip; pass `onRemoveFilter` to
458
+ * give every chip a remove button, and `onRefresh` for a re-pull control.
459
+ * - **Acknowledge input:** removing a chip or refreshing fires the callback so the
460
+ * host updates the data; the live region re-announces the new status.
461
+ *
462
+ * Presentational by default — with no `onRemoveFilter`/`onRefresh` it is a static
463
+ * read-out (like `Badge`/`Callout`), still carrying the live status region.
464
+ */
465
+ export declare type DataStatus = 'live' | 'stale' | 'loading' | 'error' | 'partial' | 'paused';
466
+
467
+ export declare function DataStatusBar({ status, statusLabel, title, updatedAt, updatedLabel, metrics, filters, onRemoveFilter, removeFilterLabel, onRefresh, refreshLabel, 'aria-label': ariaLabel, dense, className, ...rest }: DataStatusBarProps): JSX.Element;
468
+
469
+ export declare interface DataStatusBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
470
+ /** Freshness/health of the data (default `live`). Drives the dot + live region. */
471
+ status?: DataStatus;
472
+ /** Override the default status word (e.g. "Streaming" instead of "Live"). */
473
+ statusLabel?: ReactNode;
474
+ /** Dataset name shown at the start of the bar (e.g. "Delivery KPIs"). */
475
+ title?: ReactNode;
476
+ /** Machine timestamp for the `<time>` element (ISO string / epoch ms / Date). */
477
+ updatedAt?: string | number | Date;
478
+ /** Human freshness text, e.g. "Updated 4m ago". Rendered inside `<time>` when
479
+ * `updatedAt` is also set, otherwise as plain text. */
480
+ updatedLabel?: ReactNode;
481
+ /** Scope metrics — record counts, coverage, anything quantifying the slice. */
482
+ metrics?: ReadonlyArray<DataMetric>;
483
+ /** The active parameters/filters that scoped this data. */
484
+ filters?: ReadonlyArray<DataFilter>;
485
+ /** When set, every chip gains a remove button that calls this with the filter. */
486
+ onRemoveFilter?: (id: string, filter: DataFilter) => void;
487
+ /** Builds the remove button's accessible name (default "Remove {label} filter"). */
488
+ removeFilterLabel?: (filter: DataFilter) => string;
489
+ /** When set, renders a refresh button that calls this; disabled while loading. */
490
+ onRefresh?: () => void;
491
+ /** Accessible name + text for the refresh button (default "Refresh"). */
492
+ refreshLabel?: ReactNode;
493
+ /** Accessible name for the whole region (default "Data status"). */
494
+ 'aria-label'?: string;
495
+ /** Compact height + tighter spacing for embedding above dense tables. */
496
+ dense?: boolean;
497
+ }
498
+
499
+ /**
500
+ * `Dialog` — a focus-trapped modal. Proves the portal + focus-trap + ARIA spine
501
+ * that Tooltip/Menu/Toast/Select reuse. On open it moves focus inside, traps
502
+ * Tab, locks scroll, and closes on Esc / overlay press; on close it returns
503
+ * focus to the element that opened it.
504
+ */
505
+ export declare function Dialog({ open, onClose, title, description, children, footer, size, closeOnOverlayClick, closeOnEsc, className, }: DialogProps): JSX.Element | null;
506
+
507
+ export declare interface DialogProps {
508
+ open: boolean;
509
+ onClose: () => void;
510
+ title?: string;
511
+ description?: string;
512
+ children?: ReactNode;
513
+ footer?: ReactNode;
514
+ size?: 'sm' | 'md' | 'lg';
515
+ closeOnOverlayClick?: boolean;
516
+ closeOnEsc?: boolean;
517
+ className?: string;
518
+ }
519
+
520
+ export declare function DonutChart({ data, selectedId: selProp, defaultSelectedId, onSelect, size, className, }: DonutChartProps): JSX.Element;
521
+
522
+ export declare interface DonutChartProps {
523
+ data: DonutContract;
524
+ selectedId?: string;
525
+ defaultSelectedId?: string;
526
+ onSelect?: (id: string) => void;
527
+ /** Ring diameter in px (default 160). */
528
+ size?: number;
529
+ className?: string;
530
+ }
531
+
532
+ export declare interface DonutContract {
533
+ view?: 'donut';
534
+ brand?: string;
535
+ code?: string;
536
+ title?: string;
537
+ caption?: string;
538
+ /** Unit appended to segment values (e.g. `h`, `%`). */
539
+ unit?: string;
540
+ /** Big text in the ring center (defaults to the total). */
541
+ centerValue?: string;
542
+ /** Small label under the center value. */
543
+ centerLabel?: string;
544
+ segments: DonutSegment[];
545
+ }
546
+
547
+ export declare interface DonutSegment {
548
+ /** Stable id for selection; falls back to `label`. */
549
+ id?: string;
550
+ label: string;
551
+ /** Magnitude (non-negative). */
552
+ value: number;
553
+ tone?: DonutTone;
554
+ /** Explicit segment color (hex) — overrides `tone`. */
555
+ color?: string;
556
+ /** Inspector detail shown when this segment is selected. */
557
+ note?: string;
558
+ }
559
+
560
+ /**
561
+ * `DonutChart` — a proportion ring with a center readout and an interactive
562
+ * legend. It consumes a Trembus Visual Grammar **donut contract**. The ring is
563
+ * drawn in SVG (decorative); the legend rows are the affordance — selecting one
564
+ * (the Hub/BarChart spine) emphasizes its segment, swaps the center readout, and
565
+ * reveals its share in a live inspector.
566
+ */
567
+ export declare type DonutTone = FillBarTone;
568
+
569
+ export { ElevationToken }
570
+
571
+ export declare function EmptyState({ icon, title, description, pendingSource, badge, action, className, ...rest }: EmptyStateProps): JSX.Element;
572
+
573
+ /**
574
+ * `EmptyState` — the deliberate "nothing here (yet)" placeholder: no data, an
575
+ * awaiting/unexposed source, or a pending work-start confirmation (the PMO
576
+ * pending tile). A glyph + title + description orient the reader; an optional
577
+ * mono "pending source" chip names the missing feed, and an optional action slot
578
+ * offers the next step. Distinct from `Skeleton`, which represents content that
579
+ * is *loading*; an EmptyState represents content that is genuinely absent.
580
+ */
581
+ export declare interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
582
+ /** Leading glyph/illustration; defaults to an empty-set mark. Pass `null` to hide. */
583
+ icon?: ReactNode;
584
+ /** Headline naming what's missing. */
585
+ title: ReactNode;
586
+ /** Supporting line(s) explaining why / what to do. */
587
+ description?: ReactNode;
588
+ /** Mono code chip naming a data source that isn't exposed yet (e.g. `wsc.pending`). */
589
+ pendingSource?: string;
590
+ /** Optional status pill (e.g. a `<Badge>`Awaiting WSC`</Badge>`). */
591
+ badge?: ReactNode;
592
+ /** Optional call-to-action (e.g. a `<Button>`). */
593
+ action?: ReactNode;
594
+ }
595
+
596
+ declare type FillBarSize = 'sm' | 'md' | 'lg';
597
+
598
+ declare type FillBarTone = 'accent' | 'info' | 'success' | 'warning' | 'danger' | 'neutral';
599
+
600
+ export { FontWeightToken }
601
+
602
+ /**
603
+ * Deterministically convert a CLAUDE.md / AGENTS.md / plan markdown doc into a
604
+ * BriefContract. Model-free: the H1 is the title, leading prose is the summary,
605
+ * each H2 is a section whose `kind` is inferred from its content (code →
606
+ * commands, "Gotchas" → checklist, prose → prose, …). Pair with parseBrief() to
607
+ * validate. Imperfect kind inference is fine — the renderer degrades gracefully.
608
+ */
609
+ export declare function fromMarkdown(md: string): BriefContract & {
610
+ sections: BriefSection[];
611
+ };
612
+
613
+ export declare function Funnel({ data, selectedId: selProp, defaultSelectedId, onSelect, className, }: FunnelProps): JSX.Element;
614
+
615
+ export declare interface FunnelContract {
616
+ view?: 'funnel';
617
+ brand?: string;
618
+ code?: string;
619
+ title?: string;
620
+ caption?: string;
621
+ /** Unit suffix appended to every value label (e.g. `%`, `k`). */
622
+ unit?: string;
623
+ stages: FunnelStage[];
624
+ }
625
+
626
+ export declare interface FunnelProps {
627
+ data: FunnelContract;
628
+ /** Controlled selected stage id. */
629
+ selectedId?: string;
630
+ defaultSelectedId?: string;
631
+ onSelect?: (id: string) => void;
632
+ className?: string;
633
+ }
634
+
635
+ export declare interface FunnelStage {
636
+ /** Stable id for selection; falls back to the stage index. */
637
+ id?: string;
638
+ /** Stage label — the conversion step. */
639
+ label: string;
640
+ /** Magnitude (non-negative). */
641
+ value: number;
642
+ /** Color-coded tone for the bar (default `accent`). */
643
+ tone?: FunnelTone;
644
+ /** Explicit bar color (hex) — overrides `tone`. */
645
+ color?: string;
646
+ /** Inspector detail shown when this stage is selected. */
647
+ note?: string;
648
+ }
649
+
650
+ /**
651
+ * `Funnel` — a descending conversion chart (e.g. Booked → Approved → Pending).
652
+ * Each stage is a horizontal bar sized against the top stage and a focusable
653
+ * button (the Hub/BarChart interaction spine); selecting one reveals its value,
654
+ * conversion versus the top, and the drop from the previous stage in a live
655
+ * inspector. It consumes a Trembus Visual Grammar **funnel contract** so one
656
+ * authored shape draws in both the static HTML kit and React.
657
+ */
658
+ export declare type FunnelTone = FillBarTone;
659
+
660
+ export declare function Gauge({ value, min, max, unit, zones, target, label, ariaLabel, tone, className, }: GaugeProps): JSX.Element;
661
+
662
+ export declare interface GaugeProps {
663
+ value: number;
664
+ min?: number;
665
+ max: number;
666
+ /** Unit appended to the value readout (e.g. `d`, `%`). */
667
+ unit?: string;
668
+ /** Colored quality bands along the arc; without them the arc fills to `value`. */
669
+ zones?: GaugeZone[];
670
+ /** A threshold tick drawn on the arc. */
671
+ target?: {
672
+ value: number;
673
+ label?: string;
674
+ };
675
+ /** Metric name shown under the value. */
676
+ label?: string;
677
+ /** Accessible name for the meter (defaults to `label`). */
678
+ ariaLabel?: string;
679
+ /** Base tone for the value arc when no `zones` are given (default `accent`). */
680
+ tone?: GaugeTone;
681
+ className?: string;
682
+ }
683
+
684
+ /**
685
+ * `Gauge` — a 180° dial: a value drawn as a needle against optional colored
686
+ * quality zones (e.g. green/amber/red) and a target tick. Presentational like
687
+ * `Sparkline`/`Meter` — it reports a single measurement and exposes it to
688
+ * assistive tech via `role=meter` + `aria-valuetext`.
689
+ */
690
+ export declare type GaugeTone = FillBarTone;
691
+
692
+ export declare interface GaugeZone {
693
+ /** Upper bound of this band, in value units (bands run from the prior bound). */
694
+ upTo: number;
695
+ tone?: GaugeTone;
696
+ color?: string;
697
+ /** Short name announced when the value falls in this band (e.g. "on target"). */
698
+ label?: string;
699
+ }
700
+
701
+ export declare function Heatmap({ data, selectedId: selProp, defaultSelectedId, onSelect, className, }: HeatmapProps): JSX.Element;
702
+
703
+ export declare interface HeatmapContract {
704
+ view?: 'heatmap';
705
+ brand?: string;
706
+ code?: string;
707
+ title?: string;
708
+ caption?: string;
709
+ /** Unit appended to cell values (e.g. `%`, `d`). */
710
+ unit?: string;
711
+ /** Column (x) labels along the top. */
712
+ columns: string[];
713
+ rows: HeatmapRow[];
714
+ /** Bucketed color scale; when omitted, a continuous intensity of `tone` is used. */
715
+ stops?: HeatmapStop[];
716
+ /** Base tone for the continuous scale (default `accent`). */
717
+ tone?: HeatTone;
718
+ /** Domain for the continuous scale; defaults to the data extent. */
719
+ min?: number;
720
+ max?: number;
721
+ /** Print the value inside each cell (good for small grids). */
722
+ showValues?: boolean;
723
+ }
724
+
725
+ export declare interface HeatmapProps {
726
+ data: HeatmapContract;
727
+ selectedId?: string;
728
+ defaultSelectedId?: string;
729
+ onSelect?: (id: string) => void;
730
+ className?: string;
731
+ }
732
+
733
+ export declare interface HeatmapRow {
734
+ label: string;
735
+ /** Optional secondary label (e.g. a department) shown in the inspector. */
736
+ sub?: string;
737
+ /** Values aligned to `columns`; `null` is a no-data cell. */
738
+ cells: (number | null)[];
739
+ }
740
+
741
+ export declare interface HeatmapStop {
742
+ /** Lower bound this bucket applies from. */
743
+ at: number;
744
+ tone?: HeatTone;
745
+ color?: string;
746
+ label?: string;
747
+ }
748
+
749
+ /**
750
+ * `Heatmap` — a value-colored cell matrix (rows × columns). It consumes a Trembus
751
+ * Visual Grammar **heatmap contract**. Cells are real focusable buttons (the
752
+ * Hub/BarChart spine): each is shaded by a bucketed or continuous scale and, when
753
+ * selected, reveals its row, column, and value in a live inspector.
754
+ */
755
+ export declare type HeatTone = FillBarTone;
756
+
757
+ export declare function Hub({ data, selectedId: selProp, defaultSelectedId, onSelect, size, className, }: HubProps): JSX.Element;
758
+
759
+ export declare interface HubContract {
760
+ view?: 'hub';
761
+ brand?: string;
762
+ code?: string;
763
+ tagline?: string;
764
+ taglineNote?: string;
765
+ /** Tagline pill color (hex). */
766
+ tone?: string;
767
+ sub?: string;
768
+ axis?: string;
769
+ stats?: HubStat[];
770
+ domains: HubDomain[];
771
+ }
772
+
773
+ export declare interface HubDomain {
774
+ id: string;
775
+ /** Hex slot — legacy VG names (hub/robot/blood/decay/spirit/fate/shared),
776
+ * generic slots (center/n/ne/se/s/sw/nw), or omit to auto-place by order. */
777
+ pos?: string;
778
+ kind: HubDomainKind;
779
+ tag: string;
780
+ name: string;
781
+ sub: string;
782
+ status: string;
783
+ /** Accent dot color (hex). */
784
+ dot?: string;
785
+ /** Inspector detail shown when the tile is selected. */
786
+ note?: string;
787
+ sources?: HubSource[];
788
+ }
789
+
790
+ /**
791
+ * `Hub` — a hex-flower overview (one reserved center + up to six domain petals).
792
+ *
793
+ * It consumes the Trembus Visual Grammar **hub contract** — the same JSON shape
794
+ * as `canonical/kits/visual-grammar/schema/hub.schema.json`. So a `hub.example.json`
795
+ * authored for the static HTML kit renders here unchanged. Geometry is the kit's
796
+ * flat-top "6 around 1" flower, computed from a single `size`.
797
+ */
798
+ export declare type HubDomainKind = 'center' | 'shipped' | 'current' | 'planned';
799
+
800
+ export declare interface HubProps {
801
+ data: HubContract;
802
+ /** Controlled selected domain id. */
803
+ selectedId?: string;
804
+ defaultSelectedId?: string;
805
+ onSelect?: (id: string) => void;
806
+ /** Hex tile width in px (height derives as ~0.866×). */
807
+ size?: number;
808
+ className?: string;
809
+ }
810
+
811
+ export declare type HubSlot = 'center' | 'n' | 'ne' | 'se' | 's' | 'sw' | 'nw';
812
+
813
+ export declare type HubSource = string | {
814
+ label: string;
815
+ href?: string;
816
+ };
817
+
818
+ export declare interface HubStat {
819
+ label: string;
820
+ value: string | number;
821
+ color?: string;
822
+ }
823
+
824
+ /**
825
+ * `IconButton` — a compact, square affordance for a single icon. Composes
826
+ * `Button` (so it inherits every tone/variant), and *requires* an `aria-label`
827
+ * because an icon has no text to name it (Job #2, Afford Action: the capability
828
+ * must be reachable and named).
829
+ */
830
+ export declare function IconButton({ variant, size, className, children, ...rest }: IconButtonProps): JSX.Element;
831
+
832
+ export declare interface IconButtonProps extends Omit<ButtonProps, 'children' | 'startSlot' | 'endSlot' | 'fullWidth'> {
833
+ /** Required — an icon-only control must carry its own accessible name. */
834
+ 'aria-label': string;
835
+ /** The icon (or any single glyph node). */
836
+ children: ReactNode;
837
+ }
838
+
839
+ export declare function Inline<C extends ElementType = 'div'>(props: StackProps<C>): JSX.Element;
840
+
841
+ export declare function Input({ label, description, error, size, startSlot, endSlot, id, className, containerClassName, disabled, required, ref, ...rest }: InputProps): JSX.Element;
842
+
843
+ export declare interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
844
+ label?: string;
845
+ description?: string;
846
+ /** Validation message — sets aria-invalid and is announced via role="alert". */
847
+ error?: string;
848
+ size?: 'sm' | 'md' | 'lg';
849
+ startSlot?: ReactNode;
850
+ endSlot?: ReactNode;
851
+ containerClassName?: string;
852
+ ref?: Ref<HTMLInputElement>;
853
+ }
854
+
855
+ export { JobSatisfaction }
856
+
857
+ declare type Justify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';
858
+
859
+ export declare interface LineBand {
860
+ lo: number;
861
+ hi: number;
862
+ label?: string;
863
+ tone?: LineTone;
864
+ }
865
+
866
+ export declare function LineChart({ data, selectedId: selProp, defaultSelectedId, onSelect, height, className, }: LineChartProps): JSX.Element;
867
+
868
+ export declare interface LineChartContract {
869
+ view?: 'line-chart';
870
+ brand?: string;
871
+ code?: string;
872
+ title?: string;
873
+ caption?: string;
874
+ /** Unit suffix appended to every value label (e.g. `%`, `d`, `k`). */
875
+ unit?: string;
876
+ /** Force the y-axis minimum; otherwise derived from data (and band/target). */
877
+ yMin?: number;
878
+ /** Force the y-axis maximum. */
879
+ yMax?: number;
880
+ /** Shaded tolerance zone between two values. */
881
+ band?: LineBand;
882
+ /** Reference line drawn across the plot (a target / threshold). */
883
+ target?: LineTarget;
884
+ series: LineSeries[];
885
+ }
886
+
887
+ export declare interface LineChartProps {
888
+ data: LineChartContract;
889
+ /** Controlled selected point id (`"{seriesId}#{index}"`). */
890
+ selectedId?: string;
891
+ defaultSelectedId?: string;
892
+ onSelect?: (id: string) => void;
893
+ /** Plot viewBox height; sets the chart aspect ratio (default 220). */
894
+ height?: number;
895
+ className?: string;
896
+ }
897
+
898
+ export declare interface LinePoint {
899
+ /** Category / x-axis label (e.g. a week). */
900
+ x: string;
901
+ /** Value; `null` (or non-finite) is a gap the line skips. */
902
+ y: number | null;
903
+ /** Inspector detail shown when this point is selected. */
904
+ note?: string;
905
+ }
906
+
907
+ export declare interface LineSeries {
908
+ /** Stable id for selection; falls back to `name`. */
909
+ id?: string;
910
+ name: string;
911
+ /** Explicit line color (hex) — overrides `tone`. */
912
+ color?: string;
913
+ /** Color-coded tone (defaults cycle through the ontology by series order). */
914
+ tone?: LineTone;
915
+ /** Render the line dashed (e.g. a comparison/forecast series). */
916
+ dashed?: boolean;
917
+ /** Fill the area beneath the line. */
918
+ fill?: boolean;
919
+ points: LinePoint[];
920
+ }
921
+
922
+ export declare interface LineTarget {
923
+ value: number;
924
+ label?: string;
925
+ tone?: LineTone;
926
+ }
927
+
928
+ /**
929
+ * `LineChart` — a multi-series trend chart with an optional target line and
930
+ * tolerance band. It consumes a Trembus Visual Grammar **line-chart contract**
931
+ * (the same authored shape the static HTML kit renders) so one contract draws in
932
+ * both places. Lines, grid, band, and target are drawn in a proportionally-scaled
933
+ * SVG; each data point is a real focusable button (the Hub/BarChart interaction
934
+ * spine) whose selection is revealed in a live inspector.
935
+ */
936
+ export declare type LineTone = FillBarTone;
937
+
938
+ export { MaterialTone }
939
+
940
+ /**
941
+ * `Menu` — a dropdown menu (ARIA menu button pattern). The trigger gets
942
+ * aria-haspopup/expanded/controls; the content renders in a portal with roving
943
+ * focus among menuitems, and dismisses on Escape / outside-press / Tab —
944
+ * returning focus to the trigger. Compound API:
945
+ * `<Menu><Menu.Trigger><Button/></Menu.Trigger><Menu.Content><Menu.Item/></Menu.Content></Menu>`.
946
+ */
947
+ export declare const Menu: typeof MenuRoot & {
948
+ Trigger: typeof MenuTrigger;
949
+ Content: typeof MenuContent;
950
+ Item: typeof MenuItem;
951
+ };
952
+
953
+ declare function MenuContent({ align, className, children, ...rest }: MenuContentProps): JSX.Element | null;
954
+
955
+ export declare interface MenuContentProps extends HTMLAttributes<HTMLDivElement> {
956
+ align?: 'start' | 'end';
957
+ }
958
+
959
+ declare function MenuItem({ onSelect, disabled, className, children, ...rest }: MenuItemProps): JSX.Element;
960
+
961
+ export declare interface MenuItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {
962
+ onSelect?: () => void;
963
+ disabled?: boolean;
964
+ }
965
+
966
+ export declare interface MenuProps {
967
+ open?: boolean;
968
+ defaultOpen?: boolean;
969
+ onOpenChange?: (open: boolean) => void;
970
+ children?: ReactNode;
971
+ }
972
+
973
+ declare function MenuRoot({ open: openProp, defaultOpen, onOpenChange, children }: MenuProps): JSX.Element;
974
+
975
+ declare function MenuTrigger({ children }: MenuTriggerProps): JSX.Element;
976
+
977
+ export declare interface MenuTriggerProps {
978
+ /** A single interactive element (e.g. <Button>) to act as the trigger. */
979
+ children: ReactElement;
980
+ }
981
+
982
+ /**
983
+ * `Meter` — a static measurement (role=meter). `solid` fills to a value;
984
+ * `stacked` shows proportions that sum across the track; `threshold` recolors
985
+ * the fill as the value crosses configured markers (a gauge). Clean by default;
986
+ * `glow` turns on the HUD skin.
987
+ */
988
+ export declare function Meter({ value, min, max, tone, variant, segments, thresholds, size, glow, showValue, icon, label, className, }: MeterProps): JSX.Element;
989
+
990
+ export declare interface MeterProps {
991
+ value?: number;
992
+ min?: number;
993
+ max?: number;
994
+ tone?: FillBarTone;
995
+ variant?: 'solid' | 'stacked' | 'threshold';
996
+ /** Proportional segments for `variant="stacked"`. */
997
+ segments?: MeterSegment[];
998
+ /** Markers for `variant="threshold"`; the fill recolors as `value` crosses them. */
999
+ thresholds?: MeterThreshold[];
1000
+ size?: FillBarSize;
1001
+ glow?: boolean;
1002
+ showValue?: boolean;
1003
+ icon?: ReactNode;
1004
+ /** Accessible name for the meter. */
1005
+ label?: string;
1006
+ className?: string;
1007
+ }
1008
+
1009
+ export declare interface MeterSegment {
1010
+ value: number;
1011
+ tone?: FillBarTone;
1012
+ label?: string;
1013
+ }
1014
+
1015
+ export declare interface MeterThreshold {
1016
+ value: number;
1017
+ tone?: FillBarTone;
1018
+ }
1019
+
1020
+ declare type Orientation = 'horizontal' | 'vertical';
1021
+
1022
+ /**
1023
+ * Lenient validator: coerce any input into a renderable BriefContract and
1024
+ * report actionable issues. NEVER throws — a partially-wrong generation still
1025
+ * renders, and `issues` is the repair list for the next attempt.
1026
+ */
1027
+ export declare function parseBrief(input: unknown): BriefParseResult;
1028
+
1029
+ export declare type PolymorphicComponentProps<C extends ElementType, Props = object> = PropsWithChildren<Props & AsProp<C>> & Omit<ComponentPropsWithoutRef<C>, PropsToOmit<C, Props>>;
1030
+
1031
+ export declare type PolymorphicComponentPropsWithRef<C extends ElementType, Props = object> = PolymorphicComponentProps<C, Props> & {
1032
+ ref?: PolymorphicRef<C>;
1033
+ };
1034
+
1035
+ export declare type PolymorphicRef<C extends ElementType> = ComponentPropsWithRef<C>['ref'];
1036
+
1037
+ /**
1038
+ * Renders children into a DOM node outside the React tree (defaults to
1039
+ * `document.body`). Rendered synchronously so a parent's focus/measure effects
1040
+ * see the mounted content on the same commit. Returns null during SSR.
1041
+ */
1042
+ export declare function Portal({ children, container }: PortalProps): ReactNode;
1043
+
1044
+ export declare interface PortalProps {
1045
+ children: ReactNode;
1046
+ /** Mount target. Defaults to `document.body`. */
1047
+ container?: HTMLElement | null;
1048
+ }
1049
+
1050
+ export declare function Pressable<C extends ElementType = 'button'>(props: PressableProps<C>): JSX.Element;
1051
+
1052
+ /**
1053
+ * `Pressable` — the Affordance primitive. The one interactive element every
1054
+ * clickable component composes from. It owns the Affordance state machine
1055
+ * (via `useAffordanceState`), guarantees a focus ring + `data-state` feedback
1056
+ * (Job #3), and defaults to a real `<button>` so capability is never invisible
1057
+ * (Job #2). Use `asChild` to lend its behavior to an existing interactive
1058
+ * element with no extra DOM.
1059
+ */
1060
+ export declare interface PressableOwnProps extends UseAffordanceStateOptions {
1061
+ asChild?: boolean;
1062
+ className?: string;
1063
+ style?: CSSProperties;
1064
+ children?: ReactNode;
1065
+ }
1066
+
1067
+ export declare type PressableProps<C extends ElementType = 'button'> = PolymorphicComponentPropsWithRef<C, PressableOwnProps>;
1068
+
1069
+ declare interface PrimaryLink {
1070
+ href?: string;
1071
+ onClick?: (e: MouseEvent_2<HTMLElement>) => void;
1072
+ }
1073
+
1074
+ /**
1075
+ * `Progress` — a determinate progress bar (role=progressbar) that fills a track
1076
+ * proportional to `value / max`. Clean by default; `glow` turns on the HUD skin.
1077
+ * `variant="segments"` renders discrete cells instead of a continuous fill.
1078
+ */
1079
+ export declare function Progress({ value, max, tone, variant, segments, size, glow, showValue, icon, label, className, }: ProgressProps): JSX.Element;
1080
+
1081
+ export declare interface ProgressProps {
1082
+ value: number;
1083
+ max?: number;
1084
+ tone?: FillBarTone;
1085
+ variant?: 'solid' | 'segments';
1086
+ /** Number of cells when `variant="segments"`. */
1087
+ segments?: number;
1088
+ size?: FillBarSize;
1089
+ /** Opt-in neon HUD treatment. */
1090
+ glow?: boolean;
1091
+ showValue?: boolean;
1092
+ icon?: ReactNode;
1093
+ /** Accessible name for the progressbar. */
1094
+ label?: string;
1095
+ className?: string;
1096
+ }
1097
+
1098
+ declare type PropsToOmit<C extends ElementType, P> = keyof (AsProp<C> & P);
1099
+
1100
+ /**
1101
+ * `RadioGroup` — an accessible single-choice group (role=radiogroup). Native
1102
+ * radios share a name, so Arrow-key navigation + selection come from the
1103
+ * browser. Compound API: `<RadioGroup><RadioGroup.Item/></RadioGroup>`.
1104
+ */
1105
+ export declare const RadioGroup: typeof RadioGroupRoot & {
1106
+ Item: typeof RadioItem;
1107
+ };
1108
+
1109
+ export declare interface RadioGroupProps {
1110
+ name?: string;
1111
+ value?: string;
1112
+ defaultValue?: string;
1113
+ onValueChange?: (value: string) => void;
1114
+ label?: string;
1115
+ description?: string;
1116
+ error?: string;
1117
+ className?: string;
1118
+ children?: ReactNode;
1119
+ }
1120
+
1121
+ declare function RadioGroupRoot({ name, value: valueProp, defaultValue, onValueChange, label, description, error, className, children, }: RadioGroupProps): JSX.Element;
1122
+
1123
+ declare function RadioItem({ value, label, description, disabled, className }: RadioItemProps): JSX.Element;
1124
+
1125
+ export declare interface RadioItemProps {
1126
+ value: string;
1127
+ label?: ReactNode;
1128
+ description?: string;
1129
+ disabled?: boolean;
1130
+ className?: string;
1131
+ }
1132
+
1133
+ export { RadiusToken }
1134
+
1135
+ export declare function RunHistory({ data, selectedRunId: selProp, defaultSelectedRunId, onSelectRun, density, className, }: RunHistoryProps): JSX.Element;
1136
+
1137
+ export declare interface RunHistoryContract {
1138
+ view?: 'run-history';
1139
+ brand?: string;
1140
+ code?: string;
1141
+ title?: string;
1142
+ caption?: string;
1143
+ runs: RunRecord[];
1144
+ }
1145
+
1146
+ export declare interface RunHistoryProps {
1147
+ data: RunHistoryContract;
1148
+ /** Controlled selected run id. */
1149
+ selectedRunId?: string;
1150
+ defaultSelectedRunId?: string;
1151
+ onSelectRun?: (id: string) => void;
1152
+ /** Row padding scale, passed through to `Table` (default `comfortable`). */
1153
+ density?: 'comfortable' | 'compact';
1154
+ className?: string;
1155
+ }
1156
+
1157
+ export declare interface RunOutput {
1158
+ /** Stable id; falls back to the index, NEVER the label (the recurring viz-id gotcha). */
1159
+ id?: string;
1160
+ /** Link/artifact text, e.g. "transcript.md", "PR #482". */
1161
+ label: string;
1162
+ /** When set the chip is a real `<a>`; omit for a static (non-link) artifact chip. */
1163
+ href?: string;
1164
+ /** Artifact class → a tone-coded chip. */
1165
+ kind?: RunOutputKind;
1166
+ }
1167
+
1168
+ export declare type RunOutputKind = 'pr' | 'doc' | 'log' | 'dataset' | 'deploy' | 'link';
1169
+
1170
+ export declare interface RunRecord {
1171
+ /** Stable id for selection; falls back to `r${i}`. */
1172
+ id?: string;
1173
+ /** Human label, e.g. "#128" or "nightly-2026-06-21"; defaults to the id. */
1174
+ label?: string;
1175
+ /** Outcome of THIS execution (distinct from a step's status). */
1176
+ status: RunStatus;
1177
+ /** When it ran (ISO string / epoch ms / Date) → `<time>` + a relative readout. */
1178
+ startedAt: string | number | Date;
1179
+ /** Wall-clock ms → "4m 12s"; omit for an in-flight run (renders an em-dash). */
1180
+ durationMs?: number;
1181
+ /** What kicked it off, e.g. "manual", "schedule", an author. */
1182
+ trigger?: string;
1183
+ /** One-line outcome shown in the inspector. */
1184
+ note?: string;
1185
+ /** Per-step outcomes — powers run→step time-travel in a host. */
1186
+ stepOutcomes?: RunStepOutcome[];
1187
+ /** Run-level artifacts/links (rolled up); shown as chips in the inspector. */
1188
+ outputs?: RunOutput[];
1189
+ /** Optional precomputed step tally for the dense cell (else derived from stepOutcomes). */
1190
+ tally?: Partial<Record<SwimlaneStatus, number>>;
1191
+ }
1192
+
1193
+ /**
1194
+ * `RunHistory` — a selectable log of past executions ("runs") of a workflow or any
1195
+ * data-driven item (CI pipelines, ETL jobs, agent sessions). Built on the public
1196
+ * `Table`: each run is a focusable, keyboard-accessible row (status · when ·
1197
+ * duration · steps · outputs) and selecting one reveals its outcome note and the
1198
+ * real **output/result links** in a single `aria-live` inspector — the Hub/BarChart
1199
+ * interaction spine, with controlled/uncontrolled `selectedRunId`.
1200
+ *
1201
+ * A run carries an optional `stepOutcomes` (per-step statuses, reusing the Swimlane
1202
+ * vocabulary) which lets a host "time-travel" a `Swimlane` to that run — see the
1203
+ * `Examples/SwimlaneRuns` page. Standalone, RunHistory needs no Swimlane.
1204
+ */
1205
+ export declare type RunStatus = 'succeeded' | 'failed' | 'running' | 'cancelled' | 'partial' | 'queued';
1206
+
1207
+ /** Per-step outcome for THIS run — the bridge that lets a host time-travel a Swimlane. */
1208
+ export declare interface RunStepOutcome {
1209
+ /** Matches a `SwimlaneStep` id. */
1210
+ step: string;
1211
+ /** Reuses the step status ontology verbatim. */
1212
+ status: SwimlaneStatus;
1213
+ /** Artifacts produced at this step. */
1214
+ outputs?: RunOutput[];
1215
+ }
1216
+
1217
+ export declare type SectionKind = 'prose' | 'rules' | 'commands' | 'checklist' | 'phases' | 'artifacts' | 'boundaries' | 'decisions' | 'reference';
1218
+
1219
+ export declare function Select({ label, description, error, size, placeholder, id, className, containerClassName, disabled, required, ref, children, ...rest }: SelectProps): JSX.Element;
1220
+
1221
+ declare type SelectionMode_2 = 'none' | 'multiple';
1222
+ export { SelectionMode_2 as SelectionMode }
1223
+
1224
+ export declare interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {
1225
+ label?: string;
1226
+ description?: string;
1227
+ error?: string;
1228
+ size?: 'sm' | 'md' | 'lg';
1229
+ /** Shown as a disabled first option when no value is set. */
1230
+ placeholder?: string;
1231
+ containerClassName?: string;
1232
+ ref?: Ref<HTMLSelectElement>;
1233
+ /** <option> / <optgroup> elements. */
1234
+ children: ReactNode;
1235
+ }
1236
+
1237
+ /** Assign a value to a callback or object ref. */
1238
+ export declare function setRef<T>(ref: Ref<T> | undefined, value: T | null): void;
1239
+
1240
+ export declare type Severity = 'info' | 'warn' | 'danger' | (string & {});
1241
+
1242
+ /**
1243
+ * `Skeleton` — a decorative loading placeholder (aria-hidden). The shimmer
1244
+ * respects prefers-reduced-motion. Set `aria-busy` on the container that
1245
+ * swaps it for real content.
1246
+ */
1247
+ export declare function Skeleton({ variant, width, height, lines, className, style, ...rest }: SkeletonProps): JSX.Element;
1248
+
1249
+ export declare interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {
1250
+ variant?: 'text' | 'rect' | 'circle';
1251
+ width?: number | string;
1252
+ height?: number | string;
1253
+ /** For variant="text": number of lines (the last is shortened). */
1254
+ lines?: number;
1255
+ }
1256
+
1257
+ /**
1258
+ * Lends its props/behavior to its single child element instead of rendering a
1259
+ * wrapper node (the `asChild` pattern). Event handlers compose, className and
1260
+ * style merge, refs combine.
1261
+ */
1262
+ export declare function Slot({ children, ref, ...slotProps }: SlotProps): ReactElement | null;
1263
+
1264
+ export declare interface SlotProps extends HTMLAttributes<HTMLElement> {
1265
+ children?: ReactNode;
1266
+ ref?: Ref<HTMLElement>;
1267
+ }
1268
+
1269
+ export declare interface SortDescriptor {
1270
+ /** The `sortKey` of the currently sorted column. */
1271
+ column: string;
1272
+ direction: SortDirection;
1273
+ }
1274
+
1275
+ export declare type SortDirection = 'asc' | 'desc';
1276
+
1277
+ export { SpaceToken }
1278
+
1279
+ export declare function Sparkline({ values, tone, color, width, height, area, markLast, min, max, label, className, }: SparklineProps): JSX.Element;
1280
+
1281
+ export declare interface SparklineProps {
1282
+ /** The series. `null`/`undefined`/non-finite entries are gaps the line skips. */
1283
+ values: ReadonlyArray<number | null | undefined>;
1284
+ /** Color-coded tone for the line (default `accent`). */
1285
+ tone?: SparklineTone;
1286
+ /** Explicit stroke color (hex) — overrides `tone`. */
1287
+ color?: string;
1288
+ /** Intrinsic viewBox width; CSS may stretch it (the stroke stays crisp). */
1289
+ width?: number;
1290
+ /** Intrinsic viewBox height; CSS may stretch it. */
1291
+ height?: number;
1292
+ /** Fill the area beneath the line (default `true`). */
1293
+ area?: boolean;
1294
+ /** Mark the last data point with a dot (default `true`). */
1295
+ markLast?: boolean;
1296
+ /** Force the lower bound of the y-domain so several sparklines share one scale. */
1297
+ min?: number;
1298
+ /** Force the upper bound of the y-domain. */
1299
+ max?: number;
1300
+ /**
1301
+ * Accessible name. When set, the sparkline is exposed to assistive tech as an
1302
+ * image with this label; when omitted it is decorative (`aria-hidden`).
1303
+ */
1304
+ label?: string;
1305
+ className?: string;
1306
+ }
1307
+
1308
+ /**
1309
+ * `Sparkline` — a word-sized trend line. The series becomes a single path inside
1310
+ * a tiny fixed box so its trajectory reads at a glance; it mirrors the Trembus
1311
+ * Visual Grammar `spark` so one series draws the same in the static HTML kit and
1312
+ * in React. Presentational by design — pair it with a {@link Stat} value or a
1313
+ * table cell. `null`/non-finite entries are gaps the line skips over.
1314
+ */
1315
+ export declare type SparklineTone = FillBarTone;
1316
+
1317
+ export declare function Spinner({ size, tone, label, className, ...rest }: SpinnerProps): JSX.Element;
1318
+
1319
+ export declare interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {
1320
+ size?: 'sm' | 'md' | 'lg' | 'xl';
1321
+ /** `current` inherits the surrounding text color. */
1322
+ tone?: 'current' | 'accent' | StatusTone;
1323
+ /** Screen-reader label announced while busy. */
1324
+ label?: string;
1325
+ }
1326
+
1327
+ export declare function Stack<C extends ElementType = 'div'>(props: StackProps<C>): JSX.Element;
1328
+
1329
+ export declare interface StackOwnProps extends BoxOwnProps {
1330
+ gap?: SpaceToken;
1331
+ align?: Align;
1332
+ justify?: Justify;
1333
+ wrap?: boolean;
1334
+ }
1335
+
1336
+ export declare type StackProps<C extends ElementType = 'div'> = PolymorphicComponentPropsWithRef<C, StackOwnProps>;
1337
+
1338
+ export declare function Stat({ label, value, unit, strap, delta, target, trend, badge, tone, onSelect, href, className, }: StatProps): JSX.Element;
1339
+
1340
+ export declare interface StatDelta {
1341
+ /** Signed change versus the comparison period. */
1342
+ value: number;
1343
+ /** Preformatted text (e.g. "+1.2pp"); defaults to the signed value. */
1344
+ text?: string;
1345
+ /**
1346
+ * When true a DECREASE is good (down = success) — for latency/lag metrics where
1347
+ * lower is better (e.g. DIRT). Default false (up = success).
1348
+ */
1349
+ invert?: boolean;
1350
+ }
1351
+
1352
+ export declare interface StatProps {
1353
+ /** Metric name (e.g. "DIRT — avg lag"). */
1354
+ label: string;
1355
+ /** Headline value; use "—" (the default) when the source isn't available. */
1356
+ value?: ReactNode;
1357
+ /** Small unit after the value (e.g. "days", "%"). */
1358
+ unit?: string;
1359
+ /** Eyebrow / category strap above the label (e.g. "Cat 2 · Time Entry"). */
1360
+ strap?: string;
1361
+ /** Period-over-period change, shown as a colored ▲/▼ chip. */
1362
+ delta?: StatDelta;
1363
+ /** Context line under the value (target, secondary stats). */
1364
+ target?: ReactNode;
1365
+ /** Trend series; renders an embedded sparkline strip when set. */
1366
+ trend?: ReadonlyArray<number | null | undefined>;
1367
+ /** Status pill in the top-right (e.g. a `<Badge>` "Live" / "Awaiting WSC"). */
1368
+ badge?: ReactNode;
1369
+ /** Color-coded tone for the accent rail + sparkline (default `accent`). */
1370
+ tone?: StatTone;
1371
+ /** When set, the whole card becomes a drill-in `<button>`. */
1372
+ onSelect?: () => void;
1373
+ /** When set, the card becomes a drill-in `<a>` (takes precedence over `onSelect`). */
1374
+ href?: string;
1375
+ className?: string;
1376
+ }
1377
+
1378
+ /**
1379
+ * `Stat` — a KPI card: a labeled headline value with an optional period-over-period
1380
+ * delta, a target/context line, a status badge, and an embedded trend sparkline.
1381
+ * The signature tile of the PMO dashboard. Presentational by default; pass
1382
+ * `onSelect` or `href` to turn the whole card into a drill-in affordance.
1383
+ */
1384
+ export declare type StatTone = FillBarTone;
1385
+
1386
+ export { StatusTone }
1387
+
1388
+ export { SurfaceTone }
1389
+
1390
+ export declare function Swimlane({ data, selectedId: selProp, defaultSelectedId, onSelect, className, }: SwimlaneProps): JSX.Element;
1391
+
1392
+ export declare interface SwimlaneContract {
1393
+ view?: 'swimlane';
1394
+ brand?: string;
1395
+ code?: string;
1396
+ title?: string;
1397
+ caption?: string;
1398
+ lanes: SwimlaneLane[];
1399
+ steps: SwimlaneStep[];
1400
+ }
1401
+
1402
+ export declare interface SwimlaneLane {
1403
+ /** Stable id; steps reference it by `id` OR `label`. Falls back to the index. */
1404
+ id?: string;
1405
+ /** Lane name — the actor (e.g. "You", "Claude", "Tools"). */
1406
+ label: string;
1407
+ /** Actor kind → the lane's accent + dot (default `neutral`). */
1408
+ kind?: SwimlaneLaneKind;
1409
+ }
1410
+
1411
+ export declare type SwimlaneLaneKind = 'human' | 'ai' | 'system' | 'tool' | 'neutral';
1412
+
1413
+ export declare interface SwimlaneProps {
1414
+ data: SwimlaneContract;
1415
+ /** Controlled selected step id. */
1416
+ selectedId?: string;
1417
+ defaultSelectedId?: string;
1418
+ onSelect?: (id: string) => void;
1419
+ className?: string;
1420
+ }
1421
+
1422
+ /**
1423
+ * `Swimlane` — a process diagram for **human ↔ LLM workflows**. Each lane (row) is
1424
+ * an actor (human / ai / system / tool); each step is a focusable `<button>` placed
1425
+ * in its lane and ordered left-to-right by column, with decorative SVG connectors
1426
+ * tracing the **handoffs** as work crosses lanes. It consumes a Trembus Visual
1427
+ * Grammar **swimlane contract** so one authored shape draws in both the static HTML
1428
+ * kit and React.
1429
+ *
1430
+ * Layout is fully deterministic — lane row × explicit/sequential column, no layout
1431
+ * engine — which is why it lives in the Tier-1 viz spine alongside Funnel/Treemap.
1432
+ * It is the Hub/BarChart interaction spine: controlled/uncontrolled `selectedId`
1433
+ * (+ `defaultSelectedId` + `onSelect`), and selecting a step reveals its actor,
1434
+ * status, note, and handoffs in a live (`aria-live`) inspector.
1435
+ */
1436
+ export declare type SwimlaneStatus = 'done' | 'active' | 'pending' | 'blocked' | 'skipped';
1437
+
1438
+ export declare interface SwimlaneStep {
1439
+ /** Stable id for selection + handoff targeting; falls back to the step index. */
1440
+ id?: string;
1441
+ /** Owning lane — matches a lane's `id` or `label`. */
1442
+ lane: string;
1443
+ /** Step name. */
1444
+ label: string;
1445
+ /** Column (0-based). Omit to flow sequentially after the previous step. */
1446
+ col?: number;
1447
+ /** Progress state → the card's accent + status dot (default `pending`). */
1448
+ status?: SwimlaneStatus;
1449
+ /** Secondary line shown in the card + inspector. */
1450
+ detail?: string;
1451
+ /** Inspector detail shown when this step is selected. */
1452
+ note?: string;
1453
+ /**
1454
+ * Successor step ids this step hands off to (draws a connector to each).
1455
+ * Omit to connect to the next step in order; pass `[]` for a terminal step.
1456
+ */
1457
+ to?: string[];
1458
+ }
1459
+
1460
+ export declare function Switch({ label, description, disabled, className, id, ref, ...rest }: SwitchProps): JSX.Element;
1461
+
1462
+ export declare interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'role'> {
1463
+ label?: ReactNode;
1464
+ description?: string;
1465
+ ref?: Ref<HTMLInputElement>;
1466
+ }
1467
+
1468
+ declare function Tab({ value, disabled, children, className }: TabProps): JSX.Element;
1469
+
1470
+ /**
1471
+ * `Table` — a composable, accessible data table built on real `<table>`
1472
+ * semantics. Compound API:
1473
+ * `<Table><Table.Head><Table.Row><Table.HeaderCell/></Table.Row></Table.Head>
1474
+ * <Table.Body><Table.Row><Table.Cell/></Table.Row></Table.Body></Table>`.
1475
+ *
1476
+ * Sortable headers emit intent (you reorder the data); `selectionMode` adds a
1477
+ * tri-state checkbox column; `href`/`onClick` on a row make the whole row a
1478
+ * stretched, keyboard-accessible link/button.
1479
+ */
1480
+ export declare const Table: typeof TableRoot & {
1481
+ Caption: typeof TableCaption;
1482
+ Head: typeof TableHead;
1483
+ Body: typeof TableBody;
1484
+ Foot: typeof TableFoot;
1485
+ Row: typeof TableRow;
1486
+ HeaderCell: typeof TableHeaderCell;
1487
+ Cell: typeof TableCell;
1488
+ Empty: typeof TableEmpty;
1489
+ };
1490
+
1491
+ declare function TableBody({ className, children, ...rest }: TableSectionProps): JSX.Element;
1492
+
1493
+ declare function TableCaption({ className, children, ...rest }: TableCaptionProps): JSX.Element;
1494
+
1495
+ export declare type TableCaptionProps = HTMLAttributes<HTMLTableCaptionElement>;
1496
+
1497
+ declare function TableCell({ align, numeric, className, children, _primaryLink, ...rest }: TableCellProps): JSX.Element;
1498
+
1499
+ export declare interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'> {
1500
+ align?: CellAlign;
1501
+ /** Mono, tabular-nums, end-aligned — for figures. */
1502
+ numeric?: boolean;
1503
+ /* Excluded from this release type: _primaryLink */
1504
+ }
1505
+
1506
+ export declare type TableDensity = 'comfortable' | 'compact';
1507
+
1508
+ declare function TableEmpty({ colSpan, className, children, ...rest }: TableEmptyProps): JSX.Element;
1509
+
1510
+ export declare interface TableEmptyProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'colSpan'> {
1511
+ /** Number of data columns; the select column (if any) is added automatically. */
1512
+ colSpan: number;
1513
+ }
1514
+
1515
+ declare function TableFoot({ className, children, ...rest }: TableSectionProps): JSX.Element;
1516
+
1517
+ declare function TableHead({ className, children, ...rest }: TableSectionProps): JSX.Element;
1518
+
1519
+ declare function TableHeaderCell({ align, sortKey, className, children, ...rest }: TableHeaderCellProps): JSX.Element;
1520
+
1521
+ export declare interface TableHeaderCellProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'> {
1522
+ align?: CellAlign;
1523
+ /** Marks the column sortable; clicking emits `onSortChange({ column: sortKey, … })`. */
1524
+ sortKey?: string;
1525
+ }
1526
+
1527
+ export declare interface TableProps extends Omit<TableHTMLAttributes<HTMLTableElement>, 'onSelect'> {
1528
+ /** Row padding scale. `compact` also drops the body font to `--tcl-text-sm`. */
1529
+ density?: TableDensity;
1530
+ /** Zebra-stripe the body rows. */
1531
+ striped?: boolean;
1532
+ /** Pin the header row while the body scrolls (needs `maxHeight` to scroll vertically). */
1533
+ sticky?: boolean;
1534
+ /** Caps the scroll container height; pair with `sticky` for a pinned header. */
1535
+ maxHeight?: number | string;
1536
+ /** Controlled sort state — the active column + direction. The table reflects
1537
+ * `aria-sort`; YOU reorder the data in response to `onSortChange`. */
1538
+ sortDescriptor?: SortDescriptor | null;
1539
+ onSortChange?: (descriptor: SortDescriptor) => void;
1540
+ /** `multiple` adds a checkbox column with a tri-state select-all in the head. */
1541
+ selectionMode?: SelectionMode_2;
1542
+ /** Controlled selection. */
1543
+ selectedKeys?: Iterable<string>;
1544
+ /** Uncontrolled initial selection. */
1545
+ defaultSelectedKeys?: Iterable<string>;
1546
+ onSelectionChange?: (keys: Set<string>) => void;
1547
+ }
1548
+
1549
+ declare function TableRoot({ density, striped, sticky, maxHeight, sortDescriptor, onSortChange, selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange, className, style, children, ...rest }: TableProps): JSX.Element;
1550
+
1551
+ declare function TableRow({ rowKey, href, onClick, className, children, ...rest }: TableRowProps): JSX.Element;
1552
+
1553
+ export declare interface TableRowProps extends Omit<HTMLAttributes<HTMLTableRowElement>, 'onClick'> {
1554
+ /** Identifies the row for selection; required when `selectionMode="multiple"`. */
1555
+ rowKey?: string;
1556
+ /** Makes the whole row a link (stretched over the row, fully keyboard-accessible). */
1557
+ href?: string;
1558
+ /** Makes the whole row a button. Ignored when `href` is set. */
1559
+ onClick?: (e: MouseEvent_2<HTMLElement>) => void;
1560
+ }
1561
+
1562
+ export declare type TableSectionProps = HTMLAttributes<HTMLTableSectionElement>;
1563
+
1564
+ export declare interface TabProps {
1565
+ value: string;
1566
+ disabled?: boolean;
1567
+ children?: ReactNode;
1568
+ className?: string;
1569
+ }
1570
+
1571
+ /**
1572
+ * `Tabs` — accessible tabs with the ARIA tablist pattern, roving tabindex, and
1573
+ * Arrow/Home/End keyboard navigation (automatic activation). Compound API:
1574
+ * `<Tabs><Tabs.List><Tabs.Tab/></Tabs.List><Tabs.Panel/></Tabs>`.
1575
+ */
1576
+ export declare const Tabs: typeof TabsRoot & {
1577
+ List: typeof TabsList;
1578
+ Tab: typeof Tab;
1579
+ Panel: typeof TabsPanel;
1580
+ };
1581
+
1582
+ declare function TabsList({ children, className, ...rest }: TabsListProps): JSX.Element;
1583
+
1584
+ export declare interface TabsListProps {
1585
+ children?: ReactNode;
1586
+ className?: string;
1587
+ 'aria-label'?: string;
1588
+ 'aria-labelledby'?: string;
1589
+ }
1590
+
1591
+ declare function TabsPanel({ value, children, className }: TabsPanelProps): JSX.Element;
1592
+
1593
+ export declare interface TabsPanelProps {
1594
+ value: string;
1595
+ children?: ReactNode;
1596
+ className?: string;
1597
+ }
1598
+
1599
+ export declare interface TabsProps {
1600
+ /** Controlled active value. */
1601
+ value?: string;
1602
+ /** Uncontrolled initial value. */
1603
+ defaultValue?: string;
1604
+ onValueChange?: (value: string) => void;
1605
+ orientation?: Orientation;
1606
+ className?: string;
1607
+ style?: CSSProperties;
1608
+ children?: ReactNode;
1609
+ }
1610
+
1611
+ declare function TabsRoot({ value: valueProp, defaultValue, onValueChange, orientation, className, style, children, }: TabsProps): JSX.Element;
1612
+
1613
+ declare function Text_2<C extends ElementType = 'span'>(props: TextProps<C>): JSX.Element;
1614
+ export { Text_2 as Text }
1615
+
1616
+ export declare function Textarea({ label, description, error, id, className, containerClassName, disabled, required, rows, ref, ...rest }: TextareaProps): JSX.Element;
1617
+
1618
+ export declare interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
1619
+ label?: string;
1620
+ description?: string;
1621
+ /** Validation message — sets aria-invalid and is announced via role="alert". */
1622
+ error?: string;
1623
+ containerClassName?: string;
1624
+ ref?: Ref<HTMLTextAreaElement>;
1625
+ }
1626
+
1627
+ export declare interface TextOwnProps {
1628
+ size?: TypeToken;
1629
+ weight?: FontWeightToken;
1630
+ tone?: TextTone;
1631
+ mono?: boolean;
1632
+ truncate?: boolean;
1633
+ align?: 'start' | 'center' | 'end';
1634
+ className?: string;
1635
+ style?: CSSProperties;
1636
+ children?: ReactNode;
1637
+ }
1638
+
1639
+ export declare type TextProps<C extends ElementType = 'span'> = PolymorphicComponentPropsWithRef<C, TextOwnProps>;
1640
+
1641
+ export { TextTone }
1642
+
1643
+ export { ThemeName }
1644
+
1645
+ export declare function Timeline({ data, selectedId: selProp, defaultSelectedId, onSelect, className, }: TimelineProps): JSX.Element;
1646
+
1647
+ export declare interface TimelineCategory {
1648
+ /** Matches `TimelineEvent.category`. */
1649
+ key: string;
1650
+ /** Legend + accessible-name label (e.g. "Wars"). */
1651
+ label: string;
1652
+ /** Tone for this category's events (default `neutral`). */
1653
+ tone?: TimelineTone;
1654
+ }
1655
+
1656
+ export declare interface TimelineContract {
1657
+ view?: 'timeline';
1658
+ brand?: string;
1659
+ /** Chapter/volume mark (e.g. "III"), shown large + decorative in the header. */
1660
+ code?: string;
1661
+ title?: string;
1662
+ caption?: string;
1663
+ /** Right-aligned header meta (e.g. "1,204 YEARS · 7 EPOCHS"). */
1664
+ meta?: string;
1665
+ events: TimelineEvent[];
1666
+ /** Legend + tone mapping. */
1667
+ categories?: TimelineCategory[];
1668
+ /** `ordinal` (even columns, default) or `time` (proportional to `at`, de-overlapped). */
1669
+ scale?: 'ordinal' | 'time';
1670
+ /** Axis domain for the `time` scale (defaults to the event min/max). */
1671
+ range?: {
1672
+ min?: number;
1673
+ max?: number;
1674
+ };
1675
+ }
1676
+
1677
+ export declare interface TimelineEvent {
1678
+ /** Stable id for selection; falls back to the index (NEVER the label). */
1679
+ id?: string;
1680
+ /** Numeric position on the axis (year, epoch index, …). Drives ordering + the `time` scale. */
1681
+ at: number;
1682
+ /** Pretty date string shown on the card + announced (e.g. "CDLXXI A.V."). Defaults to `at`. */
1683
+ dateLabel?: string;
1684
+ /** Event title. */
1685
+ label: string;
1686
+ /** Category key → tone + legend (e.g. "war"). */
1687
+ category?: string;
1688
+ /** Explicit tone override (wins over the category tone). */
1689
+ tone?: TimelineTone;
1690
+ /** Secondary line on the card (e.g. "EPOCH · TIDES"). */
1691
+ sub?: string;
1692
+ /** Body text on the card. */
1693
+ detail?: string;
1694
+ /** Inspector detail revealed on selection. */
1695
+ note?: string;
1696
+ /** Force the card above/below the axis (default alternates by order). */
1697
+ side?: 'above' | 'below';
1698
+ }
1699
+
1700
+ export declare interface TimelineProps {
1701
+ data: TimelineContract;
1702
+ /** Controlled selected event id. */
1703
+ selectedId?: string;
1704
+ defaultSelectedId?: string;
1705
+ onSelect?: (id: string) => void;
1706
+ className?: string;
1707
+ }
1708
+
1709
+ /**
1710
+ * `Timeline` — a horizontal **chronicle**: discrete dated events placed on a
1711
+ * time axis, alternating above/below, tone-coded by category, with era markers
1712
+ * (nodes) on the axis. The "history timeline" idiom — release histories, project
1713
+ * roadmaps, biographies, geological eras — that the lane-based `Swimlane` and the
1714
+ * execution-log `RunHistory` don't cover.
1715
+ *
1716
+ * Deterministic layout (no engine) → it lives in the Tier-1 viz spine alongside
1717
+ * Swimlane/Funnel/Treemap. It IS that interaction spine: lead job reveal-state,
1718
+ * but afford/acknowledge are real — each event is a focusable `<button>` carrying
1719
+ * its accessible name (date · title · category), driven by controlled/uncontrolled
1720
+ * `selectedId` (+ `defaultSelectedId` + `onSelect`), with prev/next stepping the
1721
+ * selection chronologically and an `aria-live` inspector revealing the selected
1722
+ * event. The axis line, nodes, stems, and scrubber are decorative (`aria-hidden`).
1723
+ */
1724
+ export declare type TimelineTone = FillBarTone;
1725
+
1726
+ declare interface ToastContextValue {
1727
+ toast: (opts: ToastOptions) => string;
1728
+ dismiss: (id: string) => void;
1729
+ }
1730
+
1731
+ export declare interface ToastOptions {
1732
+ title: string;
1733
+ description?: string;
1734
+ tone?: ToastTone;
1735
+ /** Auto-dismiss after ms. 0 keeps it until dismissed. */
1736
+ duration?: number;
1737
+ }
1738
+
1739
+ export declare function ToastProvider({ children, duration, placement }: ToastProviderProps): JSX.Element;
1740
+
1741
+ export declare interface ToastProviderProps {
1742
+ children: ReactNode;
1743
+ /** Default auto-dismiss duration (ms). */
1744
+ duration?: number;
1745
+ placement?: 'top' | 'bottom';
1746
+ }
1747
+
1748
+ export declare type ToastTone = 'neutral' | StatusTone;
1749
+
1750
+ export { Tokens }
1751
+
1752
+ export { tokens }
1753
+
1754
+ export declare function Tooltip({ content, children, openDelay, side, className }: TooltipProps): JSX.Element;
1755
+
1756
+ export declare interface TooltipProps {
1757
+ content: ReactNode;
1758
+ /** A single interactive element to attach the tooltip to. */
1759
+ children: ReactElement;
1760
+ /** Delay before showing on hover (ms). Focus shows immediately. */
1761
+ openDelay?: number;
1762
+ side?: 'top' | 'bottom';
1763
+ className?: string;
1764
+ }
1765
+
1766
+ export declare function Treemap({ data, selectedId: selProp, defaultSelectedId, onSelect, className, }: TreemapProps): JSX.Element;
1767
+
1768
+ export declare interface TreemapContract {
1769
+ view?: 'treemap';
1770
+ brand?: string;
1771
+ code?: string;
1772
+ title?: string;
1773
+ caption?: string;
1774
+ /** Unit suffix appended to every value label (e.g. `h`, `k`). */
1775
+ unit?: string;
1776
+ nodes: TreemapNode[];
1777
+ }
1778
+
1779
+ export declare interface TreemapNode {
1780
+ /** Stable id for selection; falls back to the node index. */
1781
+ id?: string;
1782
+ /** Node label — shown in the cell when it is large enough. */
1783
+ label: string;
1784
+ /** Magnitude (non-negative); zero/negative nodes get no cell. */
1785
+ value: number;
1786
+ /** Color-coded tone (defaults cycle through the ontology by node order). */
1787
+ tone?: TreemapTone;
1788
+ /** Explicit cell color (hex) — overrides `tone`. */
1789
+ color?: string;
1790
+ /** Secondary label shown in the inspector. */
1791
+ sub?: string;
1792
+ /** Inspector detail shown when this node is selected. */
1793
+ note?: string;
1794
+ }
1795
+
1796
+ export declare interface TreemapProps {
1797
+ data: TreemapContract;
1798
+ selectedId?: string;
1799
+ defaultSelectedId?: string;
1800
+ onSelect?: (id: string) => void;
1801
+ className?: string;
1802
+ }
1803
+
1804
+ /**
1805
+ * `Treemap` — a space-filling chart that sizes each node's rectangle to its share
1806
+ * of the whole via a deterministic **squarified** layout (ported from the static
1807
+ * HTML PMO kit, so one authored contract draws in both places). The tiling is
1808
+ * computed in a fixed-aspect box; each cell is then an HTML `<button>` positioned
1809
+ * by percentage over that box (the LineChart overlay lesson) so selection stays
1810
+ * accessible — the Hub/BarChart interaction spine. Selecting a cell reveals its
1811
+ * value, share, and note in a live inspector.
1812
+ */
1813
+ export declare type TreemapTone = FillBarTone;
1814
+
1815
+ export { TypeToken }
1816
+
1817
+ export { UIJob }
1818
+
1819
+ export declare function useAffordanceState(options?: UseAffordanceStateOptions): UseAffordanceStateReturn;
1820
+
1821
+ export declare interface UseAffordanceStateOptions {
1822
+ disabled?: boolean;
1823
+ loading?: boolean;
1824
+ /** Activation callback — fires on click and native keyboard activation. */
1825
+ onPress?: (event: SyntheticEvent) => void;
1826
+ }
1827
+
1828
+ export declare interface UseAffordanceStateReturn {
1829
+ state: AffordanceState;
1830
+ handlers: AffordanceHandlers;
1831
+ dataAttrs: AffordanceDataAttrs;
1832
+ }
1833
+
1834
+ /** Memoized {@link composeRefs} for use inside components. */
1835
+ export declare function useComposedRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T>;
1836
+
1837
+ /** Calls `onDismiss` on Escape or an outside pointer-down. */
1838
+ export declare function useDismissable({ enabled, onDismiss, ref }: UseDismissableOptions): void;
1839
+
1840
+ export declare interface UseDismissableOptions {
1841
+ enabled?: boolean;
1842
+ /** Fires on Escape or a pointer press outside `ref`. */
1843
+ onDismiss: () => void;
1844
+ ref: RefObject<HTMLElement | null>;
1845
+ }
1846
+
1847
+ /**
1848
+ * Traps Tab focus within the returned container ref while `active`. On
1849
+ * activation, moves focus to the first focusable element (or the container).
1850
+ * The container should carry `tabIndex={-1}` so it can receive focus.
1851
+ */
1852
+ export declare function useFocusTrap<T extends HTMLElement = HTMLElement>(active: boolean): RefObject<T | null>;
1853
+
1854
+ /** Tracks the user's `prefers-reduced-motion` setting, reactively. */
1855
+ export declare function useReducedMotion(): boolean;
1856
+
1857
+ /**
1858
+ * When `active` becomes true, remembers the currently focused element and
1859
+ * restores focus to it when `active` goes false / the component unmounts.
1860
+ */
1861
+ export declare function useReturnFocus(active: boolean): void;
1862
+
1863
+ export declare function useToast(): ToastContextValue;
1864
+
1865
+ export { ZToken }
1866
+
1867
+ export { }