@aginies/ui 0.2.0 → 0.3.1

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.ts CHANGED
@@ -4,6 +4,16 @@ import * as React from 'react';
4
4
  import JSX = React.JSX;
5
5
 
6
6
  // --- core ---
7
+ /** Status tone shared by Tag, Badge, Alert, Stat deltas and widgets: neutral · signal · ok · warn · bad · info. Always paired with a word or icon. */
8
+ export type Tone = 'neutral' | 'signal' | 'ok' | 'warn' | 'bad' | 'info';
9
+ /** One of the seven product families (aginies.com). */
10
+ export type Product = 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
11
+ /** Control size: sm 28 · md 32 · lg 40 (compact density). */
12
+ export type ControlSize = 'sm' | 'md' | 'lg';
13
+ /** Avatar / display size scale. */
14
+ export type DataSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
15
+ /** @deprecated Use `DataSize`; kept because 0.1.0–0.3.0 exported this name. */
16
+ export type Size = DataSize;
7
17
  /** A Lucide glyph by name, inline, inheriting currentColor. Stroke 2 at ≤16px, 1.75 above. */
8
18
  export interface IconProps extends Omit<React.SVGAttributes<SVGSVGElement>, 'color' | 'name' | 'size' | 'title'> {
9
19
  /** Lucide name in kebab-case (circle-check, triangle-alert, loader-circle, sparkles) */
@@ -268,7 +278,6 @@ export declare function useTheme(defaultTheme?: Theme): [Theme, (t: Theme) => vo
268
278
  export declare function resolveTheme(t: Theme): 'light' | 'dark';
269
279
 
270
280
  // --- forms ---
271
- type FormsSize = 'sm' | 'md' | 'lg';
272
281
  /** Label + control + help/error wrapper for every field. Wires id, aria-describedby and aria-invalid onto a single child control; readOnly renders the record-view stacked value with an inline-edit pencil; inline renders a settings row with the label in the left column. */
273
282
  export interface FormElementProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'label' | 'value'> {
274
283
  label?: React.ReactNode;
@@ -311,7 +320,7 @@ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElem
311
320
  onClear?: () => void;
312
321
  invalid?: boolean;
313
322
  /** sm 28 · md 32 · lg 40 */
314
- size?: FormsSize;
323
+ size?: ControlSize;
315
324
  /** No border or background: inline editing in tables and headers */
316
325
  bare?: boolean;
317
326
  /** Props for the wrapping div */
@@ -324,7 +333,7 @@ export declare const Input: React.ForwardRefExoticComponent<InputProps & React.R
324
333
  /** Multi-line text field; autoGrow follows the content and maxLength shows a counter. */
325
334
  export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
326
335
  invalid?: boolean;
327
- size?: FormsSize;
336
+ size?: ControlSize;
328
337
  /** Height follows the content */
329
338
  autoGrow?: boolean;
330
339
  /** "{n} / {max}" counter; over the limit it turns bad and sets aria-invalid */
@@ -341,7 +350,7 @@ export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectE
341
350
  placeholder?: string;
342
351
  icon?: string;
343
352
  invalid?: boolean;
344
- size?: FormsSize;
353
+ size?: ControlSize;
345
354
  }
346
355
  export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
347
356
  /** Checkbox with label and description; indeterminate for a select-all that covers part of the set. */
@@ -436,7 +445,7 @@ export interface ComboboxProps extends Omit<React.HTMLAttributes<HTMLDivElement>
436
445
  placeholder?: string;
437
446
  disabled?: boolean;
438
447
  invalid?: boolean;
439
- size?: FormsSize;
448
+ size?: ControlSize;
440
449
  /** Leading icon in the field */
441
450
  icon?: string;
442
451
  /** Controlled open state (docs, custom triggers) */
@@ -469,7 +478,7 @@ export interface SecretFieldProps extends Omit<React.InputHTMLAttributes<HTMLInp
469
478
  onChange?: (value: string) => void;
470
479
  /** Characters left visible at the end (4) */
471
480
  revealLast?: number;
472
- size?: FormsSize;
481
+ size?: ControlSize;
473
482
  invalid?: boolean;
474
483
  labels?: { reveal?: string; hide?: string; copy?: string; copied?: string };
475
484
  }
@@ -493,7 +502,6 @@ export interface TagInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>
493
502
  export declare function TagInput(props: TagInputProps): JSX.Element;
494
503
 
495
504
  // --- pickers ---
496
- type PickersSize = 'sm' | 'md' | 'lg';
497
505
  /** Date field with a calendar popover; the value is a Date. Formats 15.10.2026 for tr and 15 Oct 2026 for en through locale. */
498
506
  export interface DatepickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'disabled' | 'max' | 'min' | 'onChange' | 'open' | 'placeholder' | 'size' | 'value'> {
499
507
  /** A date, or [from, to] with range */
@@ -508,7 +516,7 @@ export interface DatepickerProps extends Omit<React.HTMLAttributes<HTMLDivElemen
508
516
  locale?: string;
509
517
  disabled?: boolean;
510
518
  invalid?: boolean;
511
- size?: PickersSize;
519
+ size?: ControlSize;
512
520
  min?: Date;
513
521
  max?: Date;
514
522
  /** 0 Sunday · 1 Monday (default) */
@@ -553,7 +561,7 @@ export interface TimepickerProps extends Omit<React.HTMLAttributes<HTMLDivElemen
553
561
  placeholder?: string;
554
562
  disabled?: boolean;
555
563
  invalid?: boolean;
556
- size?: PickersSize;
564
+ size?: ControlSize;
557
565
  open?: boolean;
558
566
  labels?: { empty?: string; clear?: string };
559
567
  }
@@ -570,7 +578,7 @@ export interface DatetimePickerProps extends Omit<React.HTMLAttributes<HTMLDivEl
570
578
  max?: Date;
571
579
  disabled?: boolean;
572
580
  invalid?: boolean;
573
- size?: PickersSize;
581
+ size?: ControlSize;
574
582
  labels?: CalendarProps['labels'];
575
583
  }
576
584
  export declare function DatetimePicker(props: DatetimePickerProps): JSX.Element;
@@ -605,7 +613,7 @@ export interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivEleme
605
613
  swatches?: (string | Swatch)[];
606
614
  disabled?: boolean;
607
615
  invalid?: boolean;
608
- size?: PickersSize;
616
+ size?: ControlSize;
609
617
  open?: boolean;
610
618
  onOpenChange?: (open: boolean) => void;
611
619
  labels?: { open?: string; custom?: string; swatches?: string; hex?: string };
@@ -621,7 +629,7 @@ export interface CounterProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
621
629
  step?: number;
622
630
  disabled?: boolean;
623
631
  invalid?: boolean;
624
- size?: PickersSize;
632
+ size?: ControlSize;
625
633
  /** Mono unit after the value: "calls", "dk" */
626
634
  suffix?: React.ReactNode;
627
635
  /** Formats the displayed value while not editing */
@@ -748,9 +756,6 @@ export interface DockedFormFooterProps extends Omit<React.HTMLAttributes<HTMLDiv
748
756
  export declare function DockedFormFooter(props: DockedFormFooterProps): JSX.Element;
749
757
 
750
758
  // --- data ---
751
- export type Tone = 'neutral' | 'signal' | 'ok' | 'warn' | 'bad' | 'info';
752
- export type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
753
-
754
759
  /** One column of a DataTable or TreeGrid. */
755
760
  export interface DataColumn<T = any> {
756
761
  /** Field name on the row; also the sort key */
@@ -763,8 +768,12 @@ export interface DataColumn<T = any> {
763
768
  sortValue?: (row: T) => any;
764
769
  /** right for numbers and amounts */
765
770
  align?: 'left' | 'right' | 'center';
771
+ /** Column width; also the room it needs when `minWidth` is absent (px numbers count for priority hiding) */
766
772
  width?: number | string;
773
+ /** Narrowest width the column may take; priority hiding sums these (default 120px) */
767
774
  minWidth?: number | string;
775
+ /** DataTable only: 1 = always shown (default), higher numbers hide first when the table's own width cannot fit every column */
776
+ priority?: number;
768
777
  /** Custom cell; receives (value, row, index) */
769
778
  render?: (value: any, row: T, index: number) => React.ReactNode;
770
779
  /** Inline edit on double-click, F2 or the pencil (needs onCellEdit) */
@@ -778,8 +787,8 @@ export interface DataColumn<T = any> {
778
787
  className?: string;
779
788
  }
780
789
  /** Visible strings of a DataTable, overridable per locale. */
781
- export interface DataTableLabels { empty?: string; emptyHint?: string; loading?: string; error?: string; errorHint?: string; retry?: string; selectAll?: string; selectRow?: string; actions?: string; sortedAsc?: string; sortedDesc?: string; edit?: string; }
782
- /** Dense record grid for agents, runs, approvals and tenants: sortable columns, selection with select-all, inline cell edit, row actions, sticky header, and the states error → loading → empty → rows. Rows are 32px compact and 44px comfortable. */
790
+ export interface DataTableLabels { empty?: string; emptyHint?: string; loading?: string; error?: string; errorHint?: string; retry?: string; selectAll?: string; selectRow?: string; actions?: string; sortedAsc?: string; sortedDesc?: string; edit?: string; /** aria-label of the row-detail toggle while closed */ expandRow?: string; /** aria-label of the row-detail toggle while open */ collapseRow?: string; }
791
+ /** Dense record grid for agents, runs, approvals and tenants: sortable columns, selection with select-all, inline cell edit, row actions, sticky header, and the states error → loading → empty → rows. Rows are 32px compact and 44px comfortable. At narrow widths it hides columns by `priority` against its own measured width and can pin the first column (`stickyFirst`). */
783
792
  export interface DataTableProps<T = any> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'selected' | 'value'> {
784
793
  columns: DataColumn<T>[];
785
794
  rows: T[];
@@ -824,6 +833,10 @@ export interface DataTableProps<T = any> extends Omit<React.HTMLAttributes<HTMLD
824
833
  rowClassName?: (row: T, index: number) => string | false | undefined;
825
834
  /** Key of the row whose detail is open (side panel, split view): aria-current, --selection ground and a --signal edge. Independent of `selected` */
826
835
  activeKey?: string | number | null;
836
+ /** First data column (and the selection column) stays put while the table scrolls sideways, with a hairline shadow once scrolled */
837
+ stickyFirst?: boolean;
838
+ /** Called with the keys of the columns hidden by `priority` whenever that set changes ([] when all fit) */
839
+ onHiddenColumnsChange?: (keys: string[]) => void;
827
840
  }
828
841
  export declare function DataTable<T = any>(props: DataTableProps<T>): JSX.Element;
829
842
 
@@ -906,7 +919,7 @@ export interface AvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>,
906
919
  /** person = circle; agent and system = square */
907
920
  kind?: 'person' | 'agent' | 'system';
908
921
  /** xs 20 · sm 24 · md 32 · lg 40 · xl 56 */
909
- size?: Size;
922
+ size?: DataSize;
910
923
  /** Lucide icon instead of initials */
911
924
  icon?: string;
912
925
  /** Product glyph for a system avatar */
@@ -917,7 +930,7 @@ export interface AvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>,
917
930
  }
918
931
  export declare function Avatar(props: AvatarProps): JSX.Element;
919
932
  /** Overlapping avatars with a "+n" overflow. Items are names or Avatar props. */
920
- export interface AvatarGroupProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'size'> { items: Array<string | AvatarProps>; /** Shown before the overflow (default 4) */ max?: number; size?: Size; kind?: AvatarProps['kind']; }
933
+ export interface AvatarGroupProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'size'> { items: Array<string | AvatarProps>; /** Shown before the overflow (default 4) */ max?: number; size?: DataSize; kind?: AvatarProps['kind']; }
921
934
  export declare function AvatarGroup(props: AvatarGroupProps): JSX.Element;
922
935
 
923
936
  /** Count or one-word status on a pill. Solid signal for unread counts; soft tones for status words. */
@@ -1428,12 +1441,9 @@ export interface RoomProps extends React.HTMLAttributes<HTMLElement> {
1428
1441
  export declare function Room(props: RoomProps): JSX.Element;
1429
1442
 
1430
1443
  // --- navigation ---
1431
- type NavigationProduct = 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
1432
- type NavigationTone = 'neutral' | 'signal' | 'ok' | 'warn' | 'bad' | 'info';
1433
-
1434
1444
  /** 48px top bar: logo lockup with the product name, a search trigger with its shortcut, actions, the user's avatar. panel for consoles, ink for brand screens. */
1435
1445
  export interface GlobalHeaderProps extends React.HTMLAttributes<HTMLElement> {
1436
- /** NavigationProduct name after the wordmark ("Platform", "Dialog") */
1446
+ /** Product name after the wordmark ("Platform", "Dialog") */
1437
1447
  product?: string;
1438
1448
  /** panel (default) on --panel with a line below; ink on --text for brand screens */
1439
1449
  tone?: 'panel' | 'ink';
@@ -1460,7 +1470,7 @@ export interface GlobalHeaderProps extends React.HTMLAttributes<HTMLElement> {
1460
1470
  export declare function GlobalHeader(props: GlobalHeaderProps): JSX.Element;
1461
1471
 
1462
1472
  /** One sidebar item. */
1463
- export interface NavItem { id: string; label: string; icon?: string; href?: string; /** Count badge; a dot when collapsed */ count?: number; countTone?: NavigationTone; disabled?: boolean; }
1473
+ export interface NavItem { id: string; label: string; icon?: string; href?: string; /** Count badge; a dot when collapsed */ count?: number; countTone?: Tone; disabled?: boolean; }
1464
1474
  /** A sidebar group with its mono eyebrow (build, observe, organisation). */
1465
1475
  export interface NavGroup { id?: string; label?: string; items: NavItem[]; }
1466
1476
  /** The console sidebar: 232px (56 collapsed; `width` or `resizable`), logo top-left, search, an optional tree slot, groups under mono eyebrows, 32px items with icon, label and count; product switcher at the bottom. */
@@ -1471,7 +1481,7 @@ export interface VerticalNavigationProps extends Omit<React.HTMLAttributes<HTMLE
1471
1481
  collapsed?: boolean;
1472
1482
  /** Shows the collapse toggle */
1473
1483
  onCollapse?: (collapsed: boolean) => void;
1474
- /** NavigationProduct name in the logo lockup */
1484
+ /** Product name in the logo lockup */
1475
1485
  product?: string;
1476
1486
  /** Search trigger under the logo */
1477
1487
  search?: { onClick?: () => void; label?: string; placeholder?: string; shortcut?: string };
@@ -1522,7 +1532,7 @@ export interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'o
1522
1532
  export declare function Tabs(props: TabsProps): JSX.Element;
1523
1533
 
1524
1534
  /** One top-navigation item. */
1525
- export interface GlobalNavItem { id: string; label: React.ReactNode; icon?: string; href?: string; /** Count badge (signal on the active item unless countTone) */ count?: number; countTone?: NavigationTone; disabled?: boolean; }
1535
+ export interface GlobalNavItem { id: string; label: React.ReactNode; icon?: string; href?: string; /** Count badge (signal on the active item unless countTone) */ count?: number; countTone?: Tone; disabled?: boolean; }
1526
1536
  /** Horizontal top navigation for GlobalHeader shells: the product's sections in a row, the active one underlined in --signal, ←/→ between items, overflow into a More menu. Pages, not views of one object (that is Tabs). */
1527
1537
  export interface GlobalNavigationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {
1528
1538
  items: GlobalNavItem[];
@@ -1604,14 +1614,14 @@ export interface SplitViewProps extends Omit<React.HTMLAttributes<HTMLDivElement
1604
1614
  }
1605
1615
  export declare function SplitView(props: SplitViewProps): JSX.Element;
1606
1616
 
1607
- /** NavigationProduct switcher: the seven boxed product glyphs with their names, the current one marked. */
1617
+ /** Product switcher: the seven boxed product glyphs with their names, the current one marked. */
1608
1618
  export interface AppLauncherProps extends React.HTMLAttributes<HTMLDivElement> {
1609
1619
  /** Ids or { id, name, description, href } (default all seven) */
1610
- products?: Array<NavigationProduct | { id: NavigationProduct; name?: string; description?: string; href?: string }>;
1611
- current?: NavigationProduct;
1612
- onOpen?: (id: NavigationProduct, product: any) => void;
1613
- hrefs?: Partial<Record<NavigationProduct, string>>;
1614
- descriptions?: Partial<Record<NavigationProduct, string>>;
1620
+ products?: Array<Product | { id: Product; name?: string; description?: string; href?: string }>;
1621
+ current?: Product;
1622
+ onOpen?: (id: Product, product: any) => void;
1623
+ hrefs?: Partial<Record<Product, string>>;
1624
+ descriptions?: Partial<Record<Product, string>>;
1615
1625
  /** No popover frame (inside a sidebar footer) */
1616
1626
  inline?: boolean;
1617
1627
  labels?: { title?: string; current?: string };
@@ -1620,7 +1630,7 @@ export declare const AppLauncher: ((props: AppLauncherProps) => JSX.Element) & {
1620
1630
  /** The sidebar's product-switcher row: current product glyph, name and an up-down chevron, styled as a nav item; opens an AppLauncher in a Popover. Also AppLauncher.Trigger. */
1621
1631
  export interface AppLauncherTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'name' | 'open'> {
1622
1632
  /** Current product (default platform) */
1623
- product?: NavigationProduct;
1633
+ product?: Product;
1624
1634
  /** Overrides the product name */
1625
1635
  name?: string;
1626
1636
  /** Lucide icon instead of the product glyph, for a surface that has none (the data console: "database") */
@@ -1664,7 +1674,7 @@ export interface BuilderHeaderProps extends Omit<React.HTMLAttributes<HTMLElemen
1664
1674
  /** Version tag ("v8") */
1665
1675
  version?: string;
1666
1676
  /** Status Tag: a word or { label, tone, dot, icon } */
1667
- status?: string | { label: string; tone?: NavigationTone; dot?: boolean; icon?: string };
1677
+ status?: string | { label: string; tone?: Tone; dot?: boolean; icon?: string };
1668
1678
  onBack?: () => void;
1669
1679
  backHref?: string;
1670
1680
  onDeploy?: () => void;
@@ -1809,6 +1819,40 @@ export interface StepperProps extends Omit<React.HTMLAttributes<HTMLOListElement
1809
1819
  }
1810
1820
  export declare function Stepper(props: StepperProps): JSX.Element;
1811
1821
 
1822
+ /** One view in an ActivityBar. */
1823
+ export interface ActivityBarItem {
1824
+ /** Value passed to onSelect and matched against `active` */
1825
+ id: string;
1826
+ /** Lucide icon name (kebab-case), or a node such as <ProductIcon product="code" size={20} /> */
1827
+ icon: string | React.ReactNode;
1828
+ /** Accessible name and tooltip text */
1829
+ label: string;
1830
+ /** Small count Badge on the icon (a number, or a short word) */
1831
+ badge?: number | string;
1832
+ /** Shown dimmed, skipped by the arrow keys, not selectable */
1833
+ disabled?: boolean;
1834
+ /** id of the view panel this item opens (sets aria-controls) */
1835
+ controls?: string;
1836
+ /** id for the tab button, so the panel can point back with aria-labelledby */
1837
+ tabId?: string;
1838
+ }
1839
+ /** Vertical 48px icon strip that switches the view beside it, like VS Code's activity bar or IntelliJ's tool-window bar: use it in IDE mocks and the web build of the Code panel. A vertical tablist with roving focus (↑ ↓ Home End, Enter or Space selects), tooltips with each label, a 2px --signal bar on the edge facing the view. */
1840
+ export interface ActivityBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
1841
+ /** Top group of views */
1842
+ items: ActivityBarItem[];
1843
+ /** Bottom group (accounts, settings), pushed to the foot of the bar */
1844
+ footerItems?: ActivityBarItem[];
1845
+ /** id of the selected item */
1846
+ active?: string;
1847
+ /** Called with the id and item when an item is clicked or chosen with Enter / Space */
1848
+ onSelect?: (id: string, item: ActivityBarItem) => void;
1849
+ /** Which side of the view the bar sits on; the active bar and the --line edge face the view (default left) */
1850
+ side?: 'left' | 'right';
1851
+ /** aria-label of the tablist (default "Views") */
1852
+ labels?: { navigation?: string };
1853
+ }
1854
+ export declare function ActivityBar(props: ActivityBarProps): JSX.Element;
1855
+
1812
1856
  // --- feedback ---
1813
1857
  /** The brand loader: the Aginies mark animated with CSS keyframes only. Use it wherever the product itself is working (boot, page data, an agent run); use Spinner for a single control. */
1814
1858
  export interface AginiesLoaderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'label'> {
@@ -2620,9 +2664,6 @@ export declare function fmtInt(value: number, locale?: string): string;
2620
2664
  export declare function fmtClock(seconds: number): string;
2621
2665
 
2622
2666
  // --- dashboard ---
2623
- type DashboardProduct = 'platform' | 'hub' | 'dialog' | 'voice' | 'vision' | 'code' | 'workforce';
2624
- type DashboardTone = 'neutral' | 'signal' | 'ok' | 'warn' | 'bad' | 'info';
2625
-
2626
2667
  /** Dashboard KPI: a Stat (value, label, delta) with a Sparkline in a flat Card. Use plain (or KpiRow) when the KPIs are the page summary, which is never boxed. */
2627
2668
  export interface KpiWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'icon' | 'label' | 'size' | 'value'> {
2628
2669
  /** Mono uppercase label: "Runs this week" */
@@ -2802,10 +2843,10 @@ export interface RecordSummaryWidgetProps extends Omit<React.HTMLAttributes<HTML
2802
2843
  avatar?: string;
2803
2844
  /** Lucide icon for the BlockIcon (bot) */
2804
2845
  icon?: string;
2805
- /** DashboardProduct glyph for the BlockIcon */
2806
- product?: DashboardProduct;
2846
+ /** Product glyph for the BlockIcon */
2847
+ product?: Product;
2807
2848
  /** A word or { label, tone, dot, icon } */
2808
- status?: string | { label: React.ReactNode; tone?: DashboardTone; dot?: boolean; icon?: string };
2849
+ status?: string | { label: React.ReactNode; tone?: Tone; dot?: boolean; icon?: string };
2809
2850
  /** SummaryDetail fields (dense) */
2810
2851
  fields?: { key?: string; label: React.ReactNode; value?: React.ReactNode; mono?: boolean; tone?: 'ok' | 'warn' | 'bad' }[];
2811
2852
  /** Path steps; omit for records without stages */
@@ -2862,7 +2903,7 @@ export interface ActivityWidgetProps extends Omit<React.HTMLAttributes<HTMLEleme
2862
2903
  export declare function ActivityWidget(props: ActivityWidgetProps): JSX.Element;
2863
2904
 
2864
2905
  /** One action tile. */
2865
- export interface QuickAction { id?: string; label: string; icon?: string; product?: DashboardProduct; description?: string; /** Kbd hint: ["⌘", "N"] or "G L" (the consumer binds the keys) */ shortcut?: string | string[]; tone?: DashboardTone; badge?: number; disabled?: boolean; onClick?: (a: QuickAction) => void; }
2906
+ export interface QuickAction { id?: string; label: string; icon?: string; product?: Product; description?: string; /** Kbd hint: ["⌘", "N"] or "G L" (the consumer binds the keys) */ shortcut?: string | string[]; tone?: Tone; badge?: number; disabled?: boolean; onClick?: (a: QuickAction) => void; }
2866
2907
  /** A grid of action tiles (BlockIcon, label, optional line, Kbd hint, badge) for the shortcuts people take most; inside a Card when titled. */
2867
2908
  export interface QuickActionsProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
2868
2909
  actions: QuickAction[];
@@ -2895,7 +2936,7 @@ export interface NotificationsWidgetProps extends Omit<React.HTMLAttributes<HTML
2895
2936
  export declare function NotificationsWidget(props: NotificationsWidgetProps): JSX.Element;
2896
2937
 
2897
2938
  /** One step of the mini canvas. */
2898
- export interface FlowStep { id?: string; name: React.ReactNode; /** Block type in mono: "LLM · understand" */ kind?: React.ReactNode; icon?: string; product?: DashboardProduct; /** done · running (execution ring) · error · waiting (warn ring, human approval) · upcoming (dashed) */ state?: 'done' | 'running' | 'error' | 'waiting' | 'upcoming'; /** Runs at or through this step */ runs?: number; }
2939
+ export interface FlowStep { id?: string; name: React.ReactNode; /** Block type in mono: "LLM · understand" */ kind?: React.ReactNode; icon?: string; product?: Product; /** done · running (execution ring) · error · waiting (warn ring, human approval) · upcoming (dashed) */ state?: 'done' | 'running' | 'error' | 'waiting' | 'upcoming'; /** Runs at or through this step */ runs?: number; }
2899
2940
  /** A read-only mini canvas in a Card: three to six CanvasBlocks in a row joined by CanvasEdges, the running step ringed in execution, a caption per step saying where the live runs are. */
2900
2941
  export interface AgentFlowWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
2901
2942
  agent?: React.ReactNode;
@@ -2917,7 +2958,7 @@ export interface AgentFlowWidgetProps extends Omit<React.HTMLAttributes<HTMLElem
2917
2958
  export declare function AgentFlowWidget(props: AgentFlowWidgetProps): JSX.Element;
2918
2959
 
2919
2960
  /** One ranked row. */
2920
- export interface LeaderRow { id?: string; name: string; sub?: React.ReactNode; kind?: 'agent' | 'person' | 'system'; product?: DashboardProduct; icon?: string; value: number; /** Change since the last period, in the value's unit */ delta?: number; }
2961
+ export interface LeaderRow { id?: string; name: string; sub?: React.ReactNode; kind?: 'agent' | 'person' | 'system'; product?: Product; icon?: string; value: number; /** Change since the last period, in the value's unit */ delta?: number; }
2921
2962
  /** Ranked rows in a Card: an agent or a person, a bar against the leader, the value and the change since the last period; optional period switch. */
2922
2963
  export interface LeaderboardWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'format' | 'max' | 'title'> {
2923
2964
  rows: LeaderRow[];
@@ -2943,7 +2984,7 @@ export interface LeaderboardWidgetProps extends Omit<React.HTMLAttributes<HTMLEl
2943
2984
  export declare function LeaderboardWidget(props: LeaderboardWidgetProps): JSX.Element;
2944
2985
 
2945
2986
  /** A CalendarView event with the agenda's extra fields. */
2946
- export interface AgendaEvent { id?: string | number; title: string; start: Date | string; end?: Date | string; allDay?: boolean; tone?: DashboardTone; kind?: 'run' | 'review' | 'call' | 'maintenance' | 'deploy' | 'meeting' | string; tenant?: string; meta?: React.ReactNode; }
2987
+ export interface AgendaEvent { id?: string | number; title: string; start: Date | string; end?: Date | string; allDay?: boolean; tone?: Tone; kind?: 'run' | 'review' | 'call' | 'maintenance' | 'deploy' | 'meeting' | string; tenant?: string; meta?: React.ReactNode; }
2947
2988
  /** One day of CalendarView events in a Card: a time rail, a tone bar per event, done / live / in n min, and a now line. */
2948
2989
  export interface AgendaWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'max' | 'title'> {
2949
2990
  /** Events of any day; only the shown day's are listed */
@@ -2982,7 +3023,7 @@ export interface OnboardingWidgetProps extends Omit<React.HTMLAttributes<HTMLEle
2982
3023
  export declare function OnboardingWidget(props: OnboardingWidgetProps): JSX.Element;
2983
3024
 
2984
3025
  /** One comment: FeedPost fields plus resolved. */
2985
- export interface CommentItem { id?: string | number; author: string | { name: string; kind?: 'person' | 'agent' | 'system'; product?: DashboardProduct }; kind?: 'person' | 'agent' | 'system'; action?: React.ReactNode; target?: React.ReactNode; time?: string; /** @handles are picked out in link colour */ text: React.ReactNode; replies?: any[]; likes?: number; liked?: boolean; resolved?: boolean; /** warn wraps the body (an escalation) */ tone?: 'warn'; }
3026
+ export interface CommentItem { id?: string | number; author: string | { name: string; kind?: 'person' | 'agent' | 'system'; product?: Product }; kind?: 'person' | 'agent' | 'system'; action?: React.ReactNode; target?: React.ReactNode; time?: string; /** @handles are picked out in link colour */ text: React.ReactNode; replies?: any[]; likes?: number; liked?: boolean; resolved?: boolean; /** warn wraps the body (an escalation) */ tone?: 'warn'; }
2986
3027
  /** A comment thread in a Card: FeedPosts with @mentions picked out, replies and likes, and the Publisher docked under the list. */
2987
3028
  export interface CommentsWidgetProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSubmit' | 'title'> {
2988
3029
  comments: CommentItem[];