@sequenceholdings/atlas-ui 0.1.3 → 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
@@ -5,8 +5,10 @@ import { ClassValue } from 'clsx';
5
5
  import { ColumnDef } from '@tanstack/react-table';
6
6
  import { ColumnFiltersState } from '@tanstack/react-table';
7
7
  import { Command as Command_2 } from 'cmdk';
8
+ import { ComponentProps } from 'react';
8
9
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
9
10
  import { DayPicker } from 'react-day-picker';
11
+ import { default as default_2 } from 'react';
10
12
  import * as DialogPrimitive from '@radix-ui/react-dialog';
11
13
  import { Dispatch } from 'react';
12
14
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
@@ -16,8 +18,10 @@ import { JSX } from 'react/jsx-runtime';
16
18
  import * as LabelPrimitive from '@radix-ui/react-label';
17
19
  import * as PopoverPrimitive from '@radix-ui/react-popover';
18
20
  import { QueryKey } from '@tanstack/react-query';
21
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
19
22
  import * as React_2 from 'react';
20
23
  import { ReactNode } from 'react';
24
+ import * as RechartsPrimitive from 'recharts';
21
25
  import { Row } from '@tanstack/react-table';
22
26
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
23
27
  import * as SelectPrimitive from '@radix-ui/react-select';
@@ -36,62 +40,42 @@ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
36
40
  import { UseMutationResult } from '@tanstack/react-query';
37
41
  import { VariantProps } from 'class-variance-authority';
38
42
 
39
- export declare function AckBadges({ ack1, ack2, currentUserId, requiredAcks, onAck, onUnack, disabled, disabledReason, className, }: AckBadgesProps): JSX.Element;
40
-
41
- export declare interface AckBadgesProps {
42
- ack1?: AckUser;
43
- ack2?: AckUser;
44
- currentUserId: string;
45
- requiredAcks: 1 | 2;
46
- onAck?: () => void;
47
- onUnack?: () => void;
48
- disabled?: boolean;
49
- disabledReason?: string;
50
- className?: string;
51
- }
52
-
53
- export declare interface AckUser {
54
- userId: string;
55
- displayName: string;
56
- at: string;
57
- }
58
-
59
43
  export declare const AGENT_TINTS: {
60
- readonly teal: {
61
- readonly bg: "bg-teal-50";
62
- readonly fg: "text-teal-700";
44
+ readonly 'identity-1': {
45
+ readonly bg: "bg-identity-1";
46
+ readonly fg: "text-identity-1-text";
63
47
  };
64
- readonly violet: {
65
- readonly bg: "bg-violet-50";
66
- readonly fg: "text-violet-700";
48
+ readonly 'identity-2': {
49
+ readonly bg: "bg-identity-2";
50
+ readonly fg: "text-identity-2-text";
67
51
  };
68
- readonly amber: {
69
- readonly bg: "bg-amber-50";
70
- readonly fg: "text-amber-700";
52
+ readonly 'identity-3': {
53
+ readonly bg: "bg-identity-3";
54
+ readonly fg: "text-identity-3-text";
71
55
  };
72
- readonly rose: {
73
- readonly bg: "bg-rose-50";
74
- readonly fg: "text-rose-700";
56
+ readonly 'identity-4': {
57
+ readonly bg: "bg-identity-4";
58
+ readonly fg: "text-identity-4-text";
75
59
  };
76
- readonly sky: {
77
- readonly bg: "bg-sky-50";
78
- readonly fg: "text-sky-700";
60
+ readonly 'identity-5': {
61
+ readonly bg: "bg-identity-5";
62
+ readonly fg: "text-identity-5-text";
79
63
  };
80
- readonly emerald: {
81
- readonly bg: "bg-emerald-50";
82
- readonly fg: "text-emerald-700";
64
+ readonly 'identity-6': {
65
+ readonly bg: "bg-identity-6";
66
+ readonly fg: "text-identity-6-text";
83
67
  };
84
- readonly orange: {
85
- readonly bg: "bg-orange-50";
86
- readonly fg: "text-orange-700";
68
+ readonly 'identity-7': {
69
+ readonly bg: "bg-identity-7";
70
+ readonly fg: "text-identity-7-text";
87
71
  };
88
- readonly indigo: {
89
- readonly bg: "bg-indigo-50";
90
- readonly fg: "text-indigo-700";
72
+ readonly 'identity-8': {
73
+ readonly bg: "bg-identity-8";
74
+ readonly fg: "text-identity-8-text";
91
75
  };
92
- readonly graphite: {
93
- readonly bg: "bg-black-6";
94
- readonly fg: "text-black-80";
76
+ readonly neutral: {
77
+ readonly bg: "bg-muted";
78
+ readonly fg: "text-foreground";
95
79
  };
96
80
  };
97
81
 
@@ -103,7 +87,14 @@ export declare const AlertDialogAction: React_2.ForwardRefExoticComponent<Omit<A
103
87
 
104
88
  export declare const AlertDialogCancel: React_2.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React_2.RefAttributes<HTMLButtonElement>, "ref"> & React_2.RefAttributes<HTMLButtonElement>>;
105
89
 
106
- export declare const AlertDialogContent: React_2.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
90
+ export declare const AlertDialogContent: React_2.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & {
91
+ /**
92
+ * Classes for the scrim behind the dialog. Pair with `className` when
93
+ * raising z-index — a lone `className="z-modal"` lifts only the panel and
94
+ * leaves the overlay at `z-50` (DES-315). Additive; defaults unchanged.
95
+ */
96
+ overlayClassName?: string;
97
+ } & React_2.RefAttributes<HTMLDivElement>>;
107
98
 
108
99
  export declare const AlertDialogDescription: React_2.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React_2.RefAttributes<HTMLParagraphElement>, "ref"> & React_2.RefAttributes<HTMLParagraphElement>>;
109
100
 
@@ -194,24 +185,113 @@ declare interface BadgeProps extends React_2.HTMLAttributes<HTMLSpanElement>, Va
194
185
  }
195
186
 
196
187
  export declare const badgeVariants: (props?: ({
197
- variant?: "success" | "default" | "secondary" | "destructive" | "outline" | "ghost" | "alpha" | "beta" | null | undefined;
188
+ variant?: "default" | "success" | "secondary" | "neutral" | "destructive" | "outline" | "warning" | "info" | "danger" | "identity" | "ghost" | "alpha" | "beta" | null | undefined;
189
+ size?: "default" | "sm" | null | undefined;
198
190
  } & ClassProp) | undefined) => string;
199
191
 
200
- export declare function Breadcrumb({ ...props }: React_2.ComponentProps<"nav">): JSX.Element;
192
+ export declare function Breadcrumb({ items, interactive, maxItems, variant, renderLink, ariaLabel, className, }: BreadcrumbProps): JSX.Element | null;
193
+
194
+ declare function Breadcrumb_2({ ...props }: React_2.ComponentProps<"nav">): JSX.Element;
195
+
196
+ /**
197
+ * Breadcrumb — the app-facing, presentational breadcrumb.
198
+ *
199
+ * App-agnostic on purpose so it ships in the published `atlas-ui` package and
200
+ * artifacts can use it: it takes the full `items` trail as a prop and does NOT
201
+ * touch any app registry, router, or `next/navigation`. Navigation defaults to
202
+ * plain `<a href>`; inject `renderLink` (e.g. a SPA `Link`) for client routing,
203
+ * or mount `BreadcrumbLinkProvider` once to supply it to a whole subtree (the
204
+ * Atlas shell does this). For the app-root crumb, prepend `useAppRootCrumb()`
205
+ * (`@platform/hooks/useAppRootCrumb`).
206
+ *
207
+ * Depth drives the affordance (`variant='auto'`): 0 ancestors → nothing, 1 →
208
+ * back button, 2+ → breadcrumb. Long trails collapse into an ellipsis dropdown
209
+ * (`maxItems`); every crumb truncates with a tooltip; `loading` crumbs show a
210
+ * pulsing skeleton.
211
+ */
212
+ export declare interface BreadcrumbCrumb {
213
+ label: React_2.ReactNode;
214
+ /** Navigation target for an ancestor crumb. Ignored on the last crumb (it
215
+ * renders as the current page). Prefer `href`; use `onClick` for custom nav. */
216
+ href?: string;
217
+ onClick?: () => void;
218
+ /** Render a pulsing skeleton in place of the label while its value loads. */
219
+ loading?: boolean;
220
+ }
201
221
 
202
- export declare function BreadcrumbEllipsis({ className, ...props }: React_2.ComponentProps<"span">): JSX.Element;
222
+ declare function BreadcrumbEllipsis({ className, ...props }: React_2.ComponentProps<"span">): JSX.Element;
203
223
 
204
- export declare function BreadcrumbItem({ className, ...props }: React_2.ComponentProps<"li">): JSX.Element;
224
+ declare function BreadcrumbItem({ className, ...props }: React_2.ComponentProps<"li">): JSX.Element;
205
225
 
206
- export declare function BreadcrumbLink({ asChild, className, ...props }: React_2.ComponentProps<"a"> & {
226
+ declare function BreadcrumbLink({ asChild, className, ...props }: React_2.ComponentProps<"a"> & {
207
227
  asChild?: boolean;
208
228
  }): JSX.Element;
209
229
 
210
- export declare function BreadcrumbList({ className, ...props }: React_2.ComponentProps<"ol">): JSX.Element;
230
+ /**
231
+ * Supplies the router link that `Breadcrumb` uses for ancestor crumbs. Mount it
232
+ * once in the app shell with your SPA `Link` so every breadcrumb navigates
233
+ * client-side; without it (e.g. in a standalone artifact) breadcrumbs fall back
234
+ * to plain `<a href>`. A `renderLink` prop on an individual `Breadcrumb` still
235
+ * wins over this.
236
+ */
237
+ export declare function BreadcrumbLinkProvider({ renderLink, children, }: {
238
+ renderLink: BreadcrumbLinkRenderer;
239
+ children: React_2.ReactNode;
240
+ }): JSX.Element;
211
241
 
212
- export declare function BreadcrumbPage({ className, ...props }: React_2.ComponentProps<"span">): JSX.Element;
242
+ /** Renders a navigable crumb. Default is a plain `<a href>`; a host injects its
243
+ * router link (e.g. `<Link to={href}>`) so SPA nav works without coupling the
244
+ * shared component to any router. */
245
+ export declare type BreadcrumbLinkRenderer = (props: {
246
+ href: string;
247
+ onClick?: () => void;
248
+ className?: string;
249
+ children: React_2.ReactNode;
250
+ }) => React_2.ReactElement;
251
+
252
+ declare function BreadcrumbList({ className, ...props }: React_2.ComponentProps<"ol">): JSX.Element;
213
253
 
214
- export declare function BreadcrumbSeparator({ children, className, ...props }: React_2.ComponentProps<"li">): JSX.Element;
254
+ declare function BreadcrumbPage({ className, ...props }: React_2.ComponentProps<"span">): JSX.Element;
255
+
256
+ /**
257
+ * shadcn breadcrumb primitives, grouped under one namespace so the bare name
258
+ * `Breadcrumb` names the app-facing smart component (`./breadcrumb-nav`).
259
+ * Compose these directly only when building a bespoke trail; almost all code
260
+ * should use the smart `Breadcrumb` instead.
261
+ */
262
+ export declare const BreadcrumbPrimitive: {
263
+ Root: typeof Breadcrumb_2;
264
+ List: typeof BreadcrumbList;
265
+ Item: typeof BreadcrumbItem;
266
+ Link: typeof BreadcrumbLink;
267
+ Page: typeof BreadcrumbPage;
268
+ Separator: typeof BreadcrumbSeparator;
269
+ Ellipsis: typeof BreadcrumbEllipsis;
270
+ };
271
+
272
+ export declare interface BreadcrumbProps {
273
+ /** The full trail; the last item renders as the current page. */
274
+ items: BreadcrumbCrumb[];
275
+ /** When false, ancestor crumbs render as static text (e.g. loading states). */
276
+ interactive?: boolean;
277
+ /** Collapse the middle of long trails to an ellipsis-dropdown once the count
278
+ * exceeds this (clamped to >= 2 so the root + current page always show). */
279
+ maxItems?: number;
280
+ /**
281
+ * Which affordance to render. Defaults to `'auto'`, which picks by depth so
282
+ * callers never decide: **0 ancestors** → nothing; **1 ancestor** → a back
283
+ * button (a full breadcrumb is overkill one level deep); **2+ ancestors** →
284
+ * the breadcrumb trail. Force `'breadcrumb'` / `'back'` for a deliberate
285
+ * exception.
286
+ */
287
+ variant?: "auto" | "breadcrumb" | "back";
288
+ /** Injected router link. Defaults to a plain `<a href>`. */
289
+ renderLink?: BreadcrumbLinkRenderer;
290
+ ariaLabel?: string;
291
+ className?: string;
292
+ }
293
+
294
+ declare function BreadcrumbSeparator({ children, className, ...props }: React_2.ComponentProps<"li">): JSX.Element;
215
295
 
216
296
  /**
217
297
  * Generate heat-colored columns for time-period keys (dates, weeks, months).
@@ -242,12 +322,26 @@ export declare interface ButtonProps extends React_2.ButtonHTMLAttributes<HTMLBu
242
322
  }
243
323
 
244
324
  export declare const buttonVariants: (props?: ({
245
- variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
246
- size?: "default" | "icon" | "sm" | "lg" | "xs" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
325
+ variant?: "default" | "link" | "secondary" | "destructive" | "outline" | "ghost" | "submit" | null | undefined;
326
+ size?: "default" | "sm" | "icon" | "lg" | "xs" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
247
327
  } & ClassProp) | undefined) => string;
248
328
 
249
329
  export declare function Calendar({ className, classNames, showOutsideDays, ...props }: React_2.ComponentProps<typeof DayPicker>): JSX.Element;
250
330
 
331
+ export declare function CalendarGrid({ startHour, endHour, hourHeight, maxHeight, initialScrollHour, dayHeaders, children, loading, loadingText, }: CalendarGridProps): JSX.Element;
332
+
333
+ export declare interface CalendarGridProps {
334
+ startHour?: number;
335
+ endHour?: number;
336
+ hourHeight?: number;
337
+ maxHeight?: number;
338
+ initialScrollHour?: number;
339
+ dayHeaders?: default_2.ReactNode[];
340
+ children: (dayIdx: number) => default_2.ReactNode;
341
+ loading?: boolean;
342
+ loadingText?: string;
343
+ }
344
+
251
345
  /**
252
346
  * Card — the foundational surface for grouped content (dashboards,
253
347
  * metrics, forms, lists, detail pages).
@@ -266,11 +360,11 @@ export declare function Calendar({ className, classNames, showOutsideDays, ...pr
266
360
  * Drop shadows on cards quickly compound against each other in
267
361
  * dense dashboards (card-inside-card, kpi-tile-inside-card, etc.)
268
362
  * and visually muddy the hierarchy.
269
- * - Radius: `rounded-xl` via the design system — 12px at default
270
- * scale; per-app themes can tighten/loosen via `--radius`.
363
+ * - Radius: `rounded-surface` (DES-313) — the top-level-container
364
+ * radius role. Cards own their radius; call sites never pass one.
271
365
  *
272
366
  * When a card genuinely needs elevation (modal/popover-adjacent lifts,
273
- * drag affordances), opt in explicitly with `shadow-sm` / `shadow-md`
367
+ * drag affordances), opt in explicitly with `shadow-resting`
274
368
  * at the call site rather than baking it into the base.
275
369
  */
276
370
  export declare const Card: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLDivElement> & React_2.RefAttributes<HTMLDivElement>>;
@@ -283,19 +377,66 @@ export declare const CardHeader: React_2.ForwardRefExoticComponent<React_2.HTMLA
283
377
 
284
378
  export declare const CardTitle: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLDivElement> & React_2.RefAttributes<HTMLDivElement>>;
285
379
 
286
- declare interface CellCoord {
287
- rowId: string;
288
- columnId: string;
289
- }
380
+ export declare type ChartConfig = {
381
+ [key: string]: {
382
+ label?: React_2.ReactNode;
383
+ icon?: React_2.ComponentType;
384
+ } & ({
385
+ color?: string;
386
+ theme?: never;
387
+ } | {
388
+ color?: never;
389
+ theme: Record<keyof typeof THEMES, string>;
390
+ });
391
+ };
392
+
393
+ export declare function ChartContainer({ id, className, children, config, ...props }: React_2.ComponentProps<'div'> & {
394
+ config: ChartConfig;
395
+ children: React_2.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];
396
+ }): JSX.Element;
397
+
398
+ export declare const ChartLegend: typeof RechartsPrimitive.Legend;
399
+
400
+ export declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, }: {
401
+ className?: string;
402
+ hideIcon?: boolean;
403
+ payload?: LegendPayloadItem[];
404
+ verticalAlign?: 'top' | 'bottom';
405
+ nameKey?: string;
406
+ }): JSX.Element | null;
407
+
408
+ export declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
409
+
410
+ export declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey, footer, }: {
411
+ active?: boolean;
412
+ payload?: TooltipPayloadItem[];
413
+ className?: string;
414
+ indicator?: 'line' | 'dot' | 'dashed';
415
+ hideLabel?: boolean;
416
+ hideIndicator?: boolean;
417
+ label?: React_2.ReactNode;
418
+ labelFormatter?: (value: React_2.ReactNode, payload: TooltipPayloadItem[]) => React_2.ReactNode;
419
+ labelClassName?: string;
420
+ formatter?: (value: number | string, name: string | number, item: TooltipPayloadItem, index: number, payloadItem: Record<string, unknown> | undefined) => React_2.ReactNode;
421
+ color?: string;
422
+ nameKey?: string;
423
+ labelKey?: string;
424
+ footer?: (visible: TooltipPayloadItem[]) => React_2.ReactNode;
425
+ }): JSX.Element | null;
290
426
 
291
427
  /**
292
428
  * Checkbox — matches shadcn's canonical 16×16 design:
293
429
  *
294
430
  * - `size-4` (16px)
295
- * - `rounded-xs` (4px, `--radius-xs`) — a square with softened corners,
296
- * NOT a circle. Atlas's scale shifted `--radius-sm` up to 8px, which
297
- * would render a 16px checkbox as a 50% pill. `--radius-xs` closes
298
- * the gap at the tight end specifically for cases like this.
431
+ * - `rounded-badge` (4px) — a square with softened corners, NOT a
432
+ * circle. This is chosen for its VALUE, not its name: a checkbox is
433
+ * not a label about something, but `badge` is the only radius role
434
+ * that stays 4px in both flag states, and 4px is the only step that
435
+ * keeps a 16px box reading as a square. `rounded-control` would make
436
+ * it a full circle — that is a radio button, not a checkbox — and
437
+ * `rounded-surface-nested` (8px) would render it as a 50% pill.
438
+ * Kept off the legacy `rounded-xs` so it survives the DES-324
439
+ * deletion of the legacy scale (DES-379).
299
440
  * - Neutral `border-input` when unchecked; flips to `border-primary`
300
441
  * when checked/indeterminate so the outline blends with the fill.
301
442
  * - No drop shadow — consistent with the rest of Atlas's form
@@ -337,10 +478,10 @@ export declare interface CheckboxOption<T extends string> {
337
478
  }
338
479
 
339
480
  declare const CHIP_TONES: {
340
- readonly default: "border-black-10 bg-black-2 text-black-70";
341
- readonly danger: "border-red-200 bg-red-50 text-red-700";
342
- readonly warning: "border-amber-200 bg-amber-50 text-amber-700";
343
- readonly success: "border-emerald-200 bg-emerald-50 text-emerald-700";
481
+ readonly default: "border-border bg-accent text-muted-foreground";
482
+ readonly danger: "border-danger/30 bg-danger-tint text-danger-text";
483
+ readonly warning: "border-warning/30 bg-warning-tint text-warning-text";
484
+ readonly success: "border-success/30 bg-success-tint text-success-text";
344
485
  };
345
486
 
346
487
  export declare const ChoiceCard: React_2.ForwardRefExoticComponent<ChoiceCardProps & React_2.RefAttributes<HTMLLabelElement>>;
@@ -472,6 +613,26 @@ declare interface ChoiceCardProps {
472
613
  className?: string;
473
614
  }
474
615
 
616
+ export declare function CitationChip({ fileName, url, kind, resolved, className, }: CitationChipProps): JSX.Element;
617
+
618
+ /**
619
+ * Inline citation chip — the rendered form of a resolved `[[cite:...]]` anchor.
620
+ * A `document` chip shows the source filename; a `web` chip shows the site (or
621
+ * host) and links out; an unresolved anchor renders a muted "source" pill so a
622
+ * fabricated/dropped citation is still visible rather than a raw token.
623
+ *
624
+ * The label truncates and reveals its full value on hover (via `TruncatedText`).
625
+ * When a `url` is present the chip is an anchor that opens in a new tab.
626
+ */
627
+ export declare interface CitationChipProps {
628
+ fileName?: string | null;
629
+ url?: string | null;
630
+ kind?: 'web' | 'document';
631
+ /** False renders the muted unresolved state. Defaults to true. */
632
+ resolved?: boolean;
633
+ className?: string;
634
+ }
635
+
475
636
  export declare function cn(...inputs: ClassValue[]): string;
476
637
 
477
638
  export declare const CodeBadge: React_2.ForwardRefExoticComponent<CodeBadgeProps & React_2.RefAttributes<HTMLSpanElement>>;
@@ -638,7 +799,7 @@ export declare function DashboardShell({ title, range, actions, children, classN
638
799
  * >
639
800
  * <KpiTileGrid columns={4}>…</KpiTileGrid>
640
801
  * <ChartCard />
641
- * <ProDataTable … />
802
+ * <Table … />
642
803
  * </DashboardShell>
643
804
  * ```
644
805
  *
@@ -646,7 +807,7 @@ export declare function DashboardShell({ title, range, actions, children, classN
646
807
  * - Don't render a page subtitle (e.g. "N total") under the title — those
647
808
  * belong in section headers or on the table itself.
648
809
  * - Don't nest a `<DashboardShell>` inside another scroll container.
649
- * - Title renders at 16px (`--font-size-md` / `text-base`).
810
+ * - Title renders at 16px (`text-base`).
650
811
  */
651
812
  declare interface DashboardShellProps {
652
813
  /** Page title — 16px, semibold. Usually a short noun ("Agents", "Schedules"). */
@@ -661,96 +822,6 @@ declare interface DashboardShellProps {
661
822
  bodyClassName?: string;
662
823
  }
663
824
 
664
- export declare function DataReviewTable<T extends {
665
- id: string;
666
- _version?: number;
667
- }>({ columns, data, selectedRows: controlledSelected, onSelectionChange, defaultSort, emptyMessage, className, maxHeight, highlightedRowIds, enableSorting, selectionDisabled, enableCellSelection, selectedCells: controlledCells, onCellSelectionChange, }: DataReviewTableProps<T>): JSX.Element;
668
-
669
- export declare interface DataReviewTableProps<T extends {
670
- id: string;
671
- _version?: number;
672
- }> {
673
- columns: ColumnDef<T, unknown>[];
674
- data: T[];
675
- /**
676
- * Controlled selection. When provided, the table reflects this value and
677
- * fires `onSelectionChange` on user interaction without mutating internal
678
- * state. When omitted, the table manages selection itself (uncontrolled
679
- * mode) — useful when the caller only needs the callback or no callback
680
- * at all. Mixing controlled/uncontrolled across renders is undefined
681
- * behavior (standard React convention).
682
- */
683
- selectedRows?: string[];
684
- onSelectionChange?: (rowIds: string[]) => void;
685
- defaultSort?: SortingState;
686
- emptyMessage?: string;
687
- className?: string;
688
- /**
689
- * Height cap on the internal scroll container. Required for the virtualized
690
- * path (rows >= VIRTUALIZATION_THRESHOLD) — without a bounded scroll
691
- * element, `useVirtualizer` only sees the initial viewport and rows below
692
- * the fold stay unreachable. Accepts any CSS length (`'70vh'`, `'600px'`,
693
- * `'calc(100vh - 12rem)'`) or a pixel `number`. Default is `'70vh'`.
694
- */
695
- maxHeight?: string | number;
696
- /**
697
- * Row IDs to highlight with a transient amber background — typically used
698
- * to flash rows that conflicted during a batch mutation so the user can
699
- * see which rows changed underneath them. The caller owns the lifecycle
700
- * (populate on conflict, clear on timer).
701
- */
702
- highlightedRowIds?: Set<string>;
703
- /**
704
- * When false, column headers do not respond to clicks and rows are
705
- * rendered in `data` order. Use this when sorting is implemented server-
706
- * side or when sorting a paginated subset would produce cross-page
707
- * inconsistencies. Default `true` preserves the previous client-side
708
- * sort behavior.
709
- */
710
- enableSorting?: boolean;
711
- /**
712
- * When true, the leading checkbox column is removed entirely AND any
713
- * internal/uncontrolled selection state is dropped. Use this for
714
- * read-only views (e.g. a LOCKED migration table) where ack actions
715
- * are forbidden — without this prop the table would silently keep its
716
- * own selection in uncontrolled mode even when the parent thinks
717
- * selection is disabled, surfacing a checkbox column the user can
718
- * tick but never act on.
719
- */
720
- selectionDisabled?: boolean;
721
- /**
722
- * When true, switches the table into Excel-grade cell selection mode.
723
- * The leading checkbox column is NOT rendered and row-selection plumbing
724
- * is disabled; users interact with individual cells instead. Supports
725
- * click, shift-click (rectangular range), cmd/ctrl-click (additive),
726
- * mouse drag, Escape to clear, and Cmd/Ctrl+A to select all visible
727
- * cells. The caller can observe or drive selection via
728
- * `selectedCells` / `onCellSelectionChange`.
729
- */
730
- enableCellSelection?: boolean;
731
- /**
732
- * Controlled cell selection. When provided, the table reflects this
733
- * value and fires `onCellSelectionChange` on user interaction without
734
- * mutating internal state. Only applies when `enableCellSelection` is
735
- * true.
736
- */
737
- selectedCells?: CellCoord[];
738
- onCellSelectionChange?: (cells: CellCoord[]) => void;
739
- }
740
-
741
- export declare function DataTable<T>({ columns, data, pageSize, defaultSort, emptyMessage, onRowClick, rowClassName, className, }: DataTableProps<T>): JSX.Element;
742
-
743
- declare interface DataTableProps<T> {
744
- columns: ColumnDef<T, unknown>[];
745
- data: T[];
746
- pageSize?: number;
747
- defaultSort?: SortingState;
748
- emptyMessage?: string;
749
- onRowClick?: (row: T) => void;
750
- rowClassName?: (row: Row<T>) => string | undefined;
751
- className?: string;
752
- }
753
-
754
825
  /**
755
826
  * Date picker working in `Date | null` (or `DateRange | null` in `mode="range"`).
756
827
  * Radix popover + react-day-picker calendar + free-text parsing + presets.
@@ -851,15 +922,6 @@ declare interface DateFieldSingleProps extends DateFieldCommonProps {
851
922
  onChange: (next: Date | null) => void;
852
923
  }
853
924
 
854
- export declare function DatePicker({ value, onChange, placeholder, className }: DatePickerProps): JSX.Element;
855
-
856
- declare interface DatePickerProps {
857
- value: string | null;
858
- onChange: (date: string | null) => void;
859
- placeholder?: string;
860
- className?: string;
861
- }
862
-
863
925
  export declare interface DateRange {
864
926
  from: Date;
865
927
  to: Date;
@@ -941,8 +1003,11 @@ export declare type DefaultTaskStatus = 'todo' | 'in_progress' | 'blocked' | 'do
941
1003
  * `aria-hidden` bookkeeping for nested layers.
942
1004
  * - Title renders at `text-base` (16px) semibold — NOT `text-lg`
943
1005
  * (which in Atlas's token scale is 26px / hero size).
944
- * - Overlay is `bg-foreground/50` with a light backdrop blur.
945
- * - Content rounds to `rounded-md` (10px, `--radius-md`).
1006
+ * - Overlay is `bg-overlay` with a light backdrop blur — a
1007
+ * mode-independent dark scrim, NOT an alpha of `--foreground`
1008
+ * (see `DialogOverlay`).
1009
+ * - Content rounds to `rounded-surface` (DES-313) — the top-level
1010
+ * container radius role shared with Card.
946
1011
  */
947
1012
  export declare const Dialog: React_2.FC<DialogPrimitive.DialogProps>;
948
1013
 
@@ -973,6 +1038,12 @@ export declare const DialogContent: React_2.ForwardRefExoticComponent<Omit<Dialo
973
1038
  * controlled `open` + an `onOpenChange` guard for full lockout.
974
1039
  */
975
1040
  showCloseButton?: boolean;
1041
+ /**
1042
+ * Classes for the scrim behind the dialog. Pair with `className` when
1043
+ * raising z-index — a lone `className="z-modal"` lifts only the panel and
1044
+ * leaves the overlay at `z-50` (DES-315). Additive; defaults unchanged.
1045
+ */
1046
+ overlayClassName?: string;
976
1047
  } & React_2.RefAttributes<HTMLDivElement>>;
977
1048
 
978
1049
  export declare const DialogDescription: React_2.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React_2.RefAttributes<HTMLParagraphElement>, "ref"> & React_2.RefAttributes<HTMLParagraphElement>>;
@@ -997,25 +1068,6 @@ export declare const DialogTitle: React_2.ForwardRefExoticComponent<Omit<DialogP
997
1068
 
998
1069
  export declare const DialogTrigger: React_2.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React_2.RefAttributes<HTMLButtonElement>>;
999
1070
 
1000
- export declare function DiffCell({ before, after, editable, onChange, className, }: DiffCellProps): JSX.Element;
1001
-
1002
- export declare interface DiffCellProps {
1003
- before: string | number | null;
1004
- after: string | number | null;
1005
- editable?: boolean;
1006
- onChange?: (newValue: string) => void;
1007
- className?: string;
1008
- }
1009
-
1010
- export declare function DotLabel({ color, children, bold, className }: DotLabelProps): JSX.Element;
1011
-
1012
- declare interface DotLabelProps {
1013
- color: string;
1014
- children: string;
1015
- bold?: boolean;
1016
- className?: string;
1017
- }
1018
-
1019
1071
  export declare const DropdownMenu: React_2.FC<DropdownMenuPrimitive.DropdownMenuProps>;
1020
1072
 
1021
1073
  export declare const DropdownMenuCheckboxItem: React_2.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
@@ -1254,6 +1306,10 @@ export declare function EditorTopBarStatusBadge({ tone, label, }: {
1254
1306
 
1255
1307
  /**
1256
1308
  * Consistent empty-state placeholder for tables and content areas.
1309
+ *
1310
+ * For a full-route / full-panel "instead of content" screen (404, access
1311
+ * denied, page error), use {@link PageState} from `./page-state` instead —
1312
+ * this component is the small inline placeholder, not the page template.
1257
1313
  */
1258
1314
  export declare function EmptyState({ icon, message, detail, className }: EmptyStateProps): JSX.Element;
1259
1315
 
@@ -1264,6 +1320,14 @@ export declare interface EmptyStateProps {
1264
1320
  className?: string;
1265
1321
  }
1266
1322
 
1323
+ /**
1324
+ * The canonical inline failure banner — one treatment for "this panel could not
1325
+ * load", used across apps so a failure reads the same everywhere.
1326
+ *
1327
+ * Status roles (`danger-tint` / `danger-text` / `danger`) carry the hue and
1328
+ * flip under dark mode — no hand-rolled `dark:` pairs needed here. Distinct
1329
+ * from {@link PageState}, which is the full-surface utility layout.
1330
+ */
1267
1331
  export declare function ErrorState({ message, className }: ErrorStateProps): JSX.Element;
1268
1332
 
1269
1333
  declare interface ErrorStateProps {
@@ -1426,6 +1490,7 @@ export declare interface FileRejection {
1426
1490
  message: string;
1427
1491
  }
1428
1492
 
1493
+ /** @deprecated Use `MultiSelectOption` from `./multi-select`. */
1429
1494
  export declare interface FilterOption<T extends string> {
1430
1495
  value: T;
1431
1496
  label: string;
@@ -1454,9 +1519,15 @@ export declare function FilterPill({ label, options, selected, onChange }: Filte
1454
1519
  * grab-bag of visual treatments:
1455
1520
  *
1456
1521
  * - Height: h-9 (36px)
1457
- * - Radius: rounded-sm (8px, `--radius-sm`)
1458
- * - Border/bg: `border bg-background` — `--input` color, white
1459
- * surface — same palette as Select/Input
1522
+ * - Radius: `rounded-control` — operable and one line tall
1523
+ * - Border/bg: `border bg-card` — `--input` border, raised surface,
1524
+ * same palette as Select/Input. NOT `background`: that is
1525
+ * the PAGE role (ds-neutral-50 under v2, not white), which
1526
+ * rendered the pill as a grey chip next to the white
1527
+ * outline controls beside it. `Button variant="outline"`
1528
+ * carries the same note and the same `dark:bg-input/30`
1529
+ * lift, since in dark the resting fill matches the darkest
1530
+ * surface and vanishes.
1460
1531
  * - Padding: px-3 py-1
1461
1532
  * - Text: text-base md:text-sm (14px on desktop)
1462
1533
  * - Focus ring: focus:ring-1 focus:ring-ring (keyboard-visible)
@@ -1483,6 +1554,13 @@ declare interface FilterPillProps {
1483
1554
  }
1484
1555
 
1485
1556
  /**
1557
+ * @deprecated Do not use in new code, and migrate existing usages off it.
1558
+ * `FilterSelect` is retired in favor of `MultiSelect` (searchable cmdk list,
1559
+ * always-visible checkboxes, stacked trigger icons). It is still exported from
1560
+ * `@sequenceholdings/atlas-ui` (deprecated) so remaining consumers keep
1561
+ * compiling — remove only after the blast-radius scan is clean (FilterPill /
1562
+ * DES-261 deprecate-before-delete pattern).
1563
+ *
1486
1564
  * A compact multi-select filter for a table/list toolbar: a trigger with a count
1487
1565
  * chip when active, and a popover of swatch + label rows with a check on the
1488
1566
  * selected ones. Reusable for any short enum filter (status, health, type, …).
@@ -1493,6 +1571,7 @@ declare interface FilterPillProps {
1493
1571
  */
1494
1572
  export declare function FilterSelect<T extends string>({ label, options, selected, onChange, }: FilterSelectProps<T>): JSX.Element;
1495
1573
 
1574
+ /** @deprecated Use `MultiSelect` props instead. */
1496
1575
  export declare interface FilterSelectProps<T extends string> {
1497
1576
  label: string;
1498
1577
  options: FilterOption<T>[];
@@ -1571,7 +1650,7 @@ export declare interface FormDialogProps {
1571
1650
  * FormField does is still reachable as individual primitives. Use FormField
1572
1651
  * when you want the 90% case in one line.
1573
1652
  */
1574
- export declare function FormField({ label, required, error, description, id: providedId, children, className, }: FormFieldProps): JSX.Element;
1653
+ export declare function FormField({ label, required, error, description, descriptionPlacement, id: providedId, children, className, }: FormFieldProps): JSX.Element;
1575
1654
 
1576
1655
  export declare interface FormFieldProps {
1577
1656
  /**
@@ -1593,11 +1672,19 @@ export declare interface FormFieldProps {
1593
1672
  */
1594
1673
  error?: string;
1595
1674
  /**
1596
- * Helper text rendered below the control in muted color (field hint,
1597
- * input format, etc). Hidden when `error` is set — the error message
1598
- * takes the same slot.
1675
+ * Helper text rendered in muted color (field hint, input format, etc).
1676
+ * Placement is controlled by {@link descriptionPlacement}. When placed
1677
+ * `below` (default), an `error` takes the same slot and hides it.
1599
1678
  */
1600
1679
  description?: React_2.ReactNode;
1680
+ /**
1681
+ * Where the {@link description} sits relative to the control:
1682
+ * - `below` (default) — the classic helper-text slot beneath the control.
1683
+ * - `above` — a caption between the label and the control, for fields
1684
+ * where the description explains what to pick before you pick it
1685
+ * (e.g. a multi-select of capabilities). An `error` still renders below.
1686
+ */
1687
+ descriptionPlacement?: 'above' | 'below';
1601
1688
  /**
1602
1689
  * DOM id for the control. If omitted, `useId()` generates one so
1603
1690
  * `<label htmlFor>` and `aria-describedby` wire up automatically.
@@ -1633,7 +1720,7 @@ export declare function heatColor(value: number, min: number, max: number): stri
1633
1720
  * Pair with `buildPeriodColumns` and `buildTotalColumn` for time-series
1634
1721
  * data, or supply your own `ColumnDef` array for any tabular layout.
1635
1722
  */
1636
- export declare function HeatmapTable<T>({ data, columns, pageSize, defaultSort, onRowClick, entityLabel, className, }: HeatmapTableProps<T>): JSX.Element;
1723
+ export declare function HeatmapTable<T>({ data, columns, pageSize, defaultSort, onRowClick, entityLabel, density, className, }: HeatmapTableProps<T>): JSX.Element;
1637
1724
 
1638
1725
  export declare interface HeatmapTableProps<T> {
1639
1726
  data: T[];
@@ -1643,6 +1730,8 @@ export declare interface HeatmapTableProps<T> {
1643
1730
  onRowClick?: (row: T) => void;
1644
1731
  /** Label used in pagination ("1–10 of 42 {entityLabel}") and empty state. */
1645
1732
  entityLabel?: string;
1733
+ /** Tightens cell padding for dense, many-column matrices. */
1734
+ density?: 'default' | 'compact' | 'dense';
1646
1735
  className?: string;
1647
1736
  }
1648
1737
 
@@ -1652,24 +1741,6 @@ export declare const HoverCardContent: React_2.ForwardRefExoticComponent<Omit<Ho
1652
1741
 
1653
1742
  export declare const HoverCardTrigger: React_2.ForwardRefExoticComponent<HoverCardPrimitive.HoverCardTriggerProps & React_2.RefAttributes<HTMLAnchorElement>>;
1654
1743
 
1655
- /**
1656
- * Click-to-edit date cell. Shows a custom (or default) display until clicked,
1657
- * then a native date input that commits on change/blur. The closed display is a
1658
- * render prop so callers can style it (e.g. a due-date heat pill).
1659
- */
1660
- export declare function InlineDateCell({ value, onCommit, renderDisplay, placeholder, title, className, }: InlineDateCellProps): JSX.Element;
1661
-
1662
- export declare interface InlineDateCellProps {
1663
- /** ISO date string (YYYY-MM-DD) or null. */
1664
- value: string | null;
1665
- onCommit: (value: string | null) => void | Promise<void>;
1666
- /** Closed-state display for the value; defaults to the raw date or a dash. */
1667
- renderDisplay?: (value: string | null) => ReactNode;
1668
- placeholder?: string;
1669
- title?: string;
1670
- className?: string;
1671
- }
1672
-
1673
1744
  /**
1674
1745
  * Click-to-edit text cell. Reads as plain text until clicked, then becomes a
1675
1746
  * borderless auto-growing textarea that commits on blur / Enter (⌘/Ctrl+Enter
@@ -1778,32 +1849,6 @@ declare type KpiTone = 'neutral' | 'warn' | 'info';
1778
1849
 
1779
1850
  export declare const Label: React_2.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React_2.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: ClassProp | undefined) => string> & LabelOwnProps & React_2.RefAttributes<HTMLLabelElement>>;
1780
1851
 
1781
- export declare function LabeledSelect({ label, icon, value, options, onChange, ariaLabel, prefixHiddenValues, className, }: LabeledSelectProps): JSX.Element;
1782
-
1783
- export declare interface LabeledSelectOption {
1784
- value: string;
1785
- label: string;
1786
- }
1787
-
1788
- export declare interface LabeledSelectProps {
1789
- /** Muted prefix shown before the value, e.g. `"Group by"` / `"Sorted by"`. */
1790
- label: string;
1791
- /** Leading glyph (kept small + muted by the pill). */
1792
- icon?: React_2.ReactNode;
1793
- value: string;
1794
- options: LabeledSelectOption[];
1795
- onChange: (value: string) => void;
1796
- /** Accessible name for the trigger. Defaults to `label`. */
1797
- ariaLabel?: string;
1798
- /**
1799
- * Values for which the muted prefix is hidden — the pill shows just the
1800
- * value. Use for "off"/"none" states where the prefix reads awkwardly
1801
- * (e.g. `'none'` → "No grouping", not "Group by No grouping").
1802
- */
1803
- prefixHiddenValues?: readonly string[];
1804
- className?: string;
1805
- }
1806
-
1807
1852
  declare interface LabelOwnProps {
1808
1853
  /**
1809
1854
  * When true, appends a red `*` marker after the label text. Prefer this
@@ -1815,6 +1860,12 @@ declare interface LabelOwnProps {
1815
1860
  required?: boolean;
1816
1861
  }
1817
1862
 
1863
+ declare type LegendPayloadItem = {
1864
+ value?: string | number;
1865
+ dataKey?: string | number;
1866
+ color?: string;
1867
+ };
1868
+
1818
1869
  export declare function LineSparklineCell({ values, width, height, scaleMax, color, label, className, }: LineSparklineCellProps): JSX.Element;
1819
1870
 
1820
1871
  declare interface LineSparklineCellProps {
@@ -1844,7 +1895,7 @@ export declare interface MetricAreaChartPoint {
1844
1895
 
1845
1896
  export declare interface MetricAreaChartProps {
1846
1897
  points: MetricAreaChartPoint[];
1847
- /** Stroke / fill color for the area. Defaults to emerald. */
1898
+ /** Stroke / fill color for the area. Defaults to the semantic "positive series" token. */
1848
1899
  color?: string;
1849
1900
  height?: number;
1850
1901
  /** `spark` = compact, axis-less (cards); `full` = axes + grid + tooltip. */
@@ -1921,8 +1972,8 @@ declare interface MultiSelectListProps extends MultiSelectCoreProps {
1921
1972
  * - Command (cmdk) for the searchable list and keyboard nav.
1922
1973
  * - Checkbox (Radix) for per-row selection state.
1923
1974
  *
1924
- * Visual contract for the trigger mirrors `SelectTrigger` (h-9, rounded-sm,
1925
- * border + bg-background) so a toolbar of MultiSelect + Input + Select reads
1975
+ * Visual contract for the trigger mirrors `SelectTrigger` (h-9, rounded-field,
1976
+ * border + bg-field) so a toolbar of MultiSelect + Input + Select reads
1926
1977
  * as one coherent control row. Active state stacks up to `maxStackedIcons`
1927
1978
  * selected-row icons (with a generic silhouette for icon-less rows) and
1928
1979
  * shows "{count} {countLabel}" alongside.
@@ -2013,25 +2064,30 @@ export declare interface OptimisticResourceContext<TData> {
2013
2064
  }
2014
2065
 
2015
2066
  /**
2016
- * A small, reusable inline picker: the current value renders as a clickable
2017
- * badge/dot that opens a popover of the actual options (each shown with its own
2018
- * swatch + a check on the active one). A nicer, on-brand replacement for a
2019
- * native <select> for short, visual enum fields like status and health.
2067
+ * Overlay scope (DES-368) — how far an overlay's scrim and panel reach.
2068
+ *
2069
+ * "viewport" — covers the whole shell, chrome included. A modal is a
2070
+ * platform-level interruption: it blocks everything, so it dims
2071
+ * everything. This is Dialog / AlertDialog, and it is why they stay
2072
+ * `fixed`.
2073
+ *
2074
+ * "surface" — covers only the app it belongs to. A slide-out panel is
2075
+ * an extension of the current app, not an interruption of the
2076
+ * platform, so it must not black out the sidebar and header. This is
2077
+ * Sheet's default.
2078
+ *
2079
+ * Surface scope is plain `absolute` — it bounds itself against the nearest
2080
+ * positioned ancestor, which is each app's own root (`.atlas-shell-routes`
2081
+ * for most apps, `#chat-container` in Chat). No portal retargeting and no
2082
+ * app-surface context: overlays already portal in-tree at the app layout
2083
+ * root, so the app box is the containing block on offer.
2084
+ *
2085
+ * The attribute is stamped into the DOM as well as driving the classes.
2086
+ * It is the seam other layers key off — chat.css rebinds surface-scoped
2087
+ * overlays, and the artifact sandbox bridge reads it to decide whether a
2088
+ * scrim should elevate to the host shell.
2020
2089
  */
2021
- export declare function OptionPicker<T extends string>({ value, options, onChange, children, ariaLabel, align, triggerClassName, contentClassName, }: OptionPickerProps<T>): JSX.Element;
2022
-
2023
- export declare interface OptionPickerProps<T extends string> {
2024
- value: T;
2025
- options: PickerOption<T>[];
2026
- onChange: (value: T) => void;
2027
- /** Closed-state trigger content (the badge / dot shown in the row). */
2028
- children: ReactNode;
2029
- ariaLabel?: string;
2030
- align?: 'start' | 'center' | 'end';
2031
- /** Extra classes for the trigger button (e.g. padding around a small dot). */
2032
- triggerClassName?: string;
2033
- contentClassName?: string;
2034
- }
2090
+ declare type OverlayScope = "viewport" | "surface";
2035
2091
 
2036
2092
  export declare function PageSkeleton({ variant, className }: PageSkeletonProps): JSX.Element;
2037
2093
 
@@ -2042,6 +2098,28 @@ export declare interface PageSkeletonProps {
2042
2098
 
2043
2099
  export declare type PageSkeletonVariant = 'default' | 'list' | 'detail' | 'dashboard';
2044
2100
 
2101
+ export declare function PageState({ icon, tone, title, description, actions, details, detailsLabel, size, className, align, }: PageStateProps): JSX.Element;
2102
+
2103
+ export declare interface PageStateProps {
2104
+ /** Tabler (or other) icon element — never an emoji. The template owns the medallion. */
2105
+ icon: ReactNode;
2106
+ tone?: PageStateTone;
2107
+ title: string;
2108
+ description?: ReactNode;
2109
+ /** Shared `Button`s (primary + optional secondary). */
2110
+ actions?: ReactNode;
2111
+ /** Optional disclosure body (stack trace / error digest). Uses Collapsible + Button — never a native `<button>`. */
2112
+ details?: ReactNode;
2113
+ detailsLabel?: string;
2114
+ size?: PageStateSize;
2115
+ className?: string;
2116
+ align?: 'start' | 'center';
2117
+ }
2118
+
2119
+ export declare type PageStateSize = NonNullable<VariantProps<typeof sizeShell>['size']>;
2120
+
2121
+ export declare type PageStateTone = NonNullable<VariantProps<typeof toneMedallion>['tone']>;
2122
+
2045
2123
  export declare function pctChange(current: number, previous: number): number | null;
2046
2124
 
2047
2125
  export declare function PercentCell({ value, dangerBelow, className, }: {
@@ -2050,14 +2128,6 @@ export declare function PercentCell({ value, dangerBelow, className, }: {
2050
2128
  className?: string;
2051
2129
  }): JSX.Element;
2052
2130
 
2053
- export declare interface PickerOption<T extends string> {
2054
- value: T;
2055
- /** Optional text label; omit when the swatch already reads as the option. */
2056
- label?: string;
2057
- /** The option's visual — a colored badge, dot, etc. */
2058
- swatch: ReactNode;
2059
- }
2060
-
2061
2131
  export declare const Popover: React_2.FC<PopoverPrimitive.PopoverProps>;
2062
2132
 
2063
2133
  export declare const PopoverAnchor: React_2.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React_2.RefAttributes<HTMLDivElement>>;
@@ -2083,8 +2153,9 @@ export declare type ProColumnDef<T> = ColumnDef<T, unknown> & {
2083
2153
  };
2084
2154
 
2085
2155
  /**
2086
- * ProDataTable — opinionated extension of the shadcn table for dashboard-style
2087
- * lists. Layered on top of `DataTable` so apps can opt into richer chrome:
2156
+ * Table — opinionated data table for dashboard-style lists (DES-267 canonical).
2157
+ * Formerly `ProDataTable`; that name remains as a temporary alias (DES-262).
2158
+ * Layered on the shadcn `TablePrimitive` parts for richer chrome:
2088
2159
  * - toolbar slot (search + filters + extras) above the header row
2089
2160
  * - uppercase, compact header cells with sort arrows (stateful)
2090
2161
  * - sticky-left columns for "name" identity (horizontal-scroll safe)
@@ -2256,8 +2327,6 @@ declare interface ProColumnMetaSticky extends ProColumnMetaBase {
2256
2327
  grow?: never;
2257
2328
  }
2258
2329
 
2259
- export declare function ProDataTable<T>({ columns, data, searchable, filters, toolbar, actions, footer, pageSize, disablePagination, resizableColumns, columnSizingStorageKey, defaultSort, manualPagination, rowCount, pageIndex, onPageChange, manualSorting, sorting: controlledSorting, onSortingChange, manualFiltering, columnFilters: controlledColumnFilters, onColumnFiltersChange, loading, emptyMessage, onRowClick, rowHref, rowClassName, minWidth, height, bordered, variant, ariaLabel, className, }: ProDataTableProps<T>): JSX.Element;
2260
-
2261
2330
  /**
2262
2331
  * Native segmented filter for the toolbar (e.g. All / Groups / People). The
2263
2332
  * table renders the pills; the caller owns the active value and the actual
@@ -2295,6 +2364,40 @@ declare interface ProDataTablePaginationProps<T> {
2295
2364
  declare interface ProDataTableProps<T> {
2296
2365
  columns: ProColumnDef<T>[];
2297
2366
  data: T[];
2367
+ /**
2368
+ * Render a leading, left-pinned selection checkbox column (with a select-all
2369
+ * header), backed by TanStack's row-selection model. The table owns the
2370
+ * column and the state — pass `getRowId` for stable keys and read the result
2371
+ * via `onSelectionChange`, or drive it with `selectedRowIds`. Prefer this
2372
+ * over hand-rolling a checkbox column + selection `Set`.
2373
+ */
2374
+ selectable?: boolean;
2375
+ /**
2376
+ * Stable id per row. Strongly recommended with `selectable` — without it
2377
+ * selection is keyed by row index and won't survive sort/filter/paging.
2378
+ */
2379
+ getRowId?: (row: T) => string;
2380
+ /** Controlled selection (row ids). Omit for uncontrolled; read via `onSelectionChange`. */
2381
+ selectedRowIds?: string[];
2382
+ /** Called with the selected row ids whenever selection changes. */
2383
+ onSelectionChange?: (ids: string[]) => void;
2384
+ /** Gate which rows can be selected. Defaults to all rows selectable. */
2385
+ enableRowSelection?: (row: T) => boolean;
2386
+ /**
2387
+ * Render a trailing, right-pinned overflow (⋯) menu, resolved per row. Return
2388
+ * the actions for that row — an empty array (or all `hidden`) renders no
2389
+ * button. Destructive actions automatically drop below a divider. Prefer this
2390
+ * over hand-rolling an end-of-row action button + `DropdownMenu`.
2391
+ */
2392
+ rowActions?: (row: T) => RowAction[];
2393
+ /**
2394
+ * Human-readable per-row label for accessibility. When set, the injected
2395
+ * selection checkbox and row-actions (⋯) trigger get row-specific aria-labels
2396
+ * ("Select <label>" / "Actions for <label>") instead of generic repeated ones,
2397
+ * so screen-reader users can tell which record they're acting on. Recommended
2398
+ * whenever `selectable` or `rowActions` is used.
2399
+ */
2400
+ getRowLabel?: (row: T) => string;
2298
2401
  /**
2299
2402
  * Enable a client-side search input in the table header. Filters rows by
2300
2403
  * concatenating every cell's accessor value (default) or via a custom
@@ -2423,7 +2526,7 @@ declare interface ProDataTableProps<T> {
2423
2526
  bordered?: boolean;
2424
2527
  /**
2425
2528
  * `table` (default) renders column headers (sortable). `list` hides the
2426
- * header row for a clean borderless list — rows still carry the `black-6`
2529
+ * header row for a clean borderless list — rows still carry the `border`
2427
2530
  * inset dividers. Use for identity lists (people / groups) where column
2428
2531
  * labels are noise. Sorting via header click isn't available in `list`;
2429
2532
  * pass `defaultSort` for a fixed order.
@@ -2431,6 +2534,11 @@ declare interface ProDataTableProps<T> {
2431
2534
  variant?: 'table' | 'list';
2432
2535
  /** Shown when the table is selected in a multi-table shell (optional). */
2433
2536
  ariaLabel?: string;
2537
+ /**
2538
+ * Layout only (`h-auto`, `flex-none`, width). Card fill (`bg-card`) and
2539
+ * toolbar/header chrome colors/sizes are owned by the component — do not
2540
+ * pass `bg-*` here expecting it to restyle the table surface.
2541
+ */
2434
2542
  className?: string;
2435
2543
  }
2436
2544
 
@@ -2452,13 +2560,30 @@ declare interface ProDataTableSearchable<T> {
2452
2560
  /**
2453
2561
  * Controlled (server-side) search. When `onChange` is provided the table
2454
2562
  * stops filtering client-side and hands the debounced query to the parent,
2455
- * which refetches — pair with `manualPagination`. `value` is the current
2456
- * query (keeps the input in sync if the parent resets it). Omit both for the
2457
- * default client-side filter over the loaded `data`.
2563
+ * which refetches — pair with `manualPagination`. Omit both for the default
2564
+ * client-side filter over the loaded `data`.
2565
+ *
2566
+ * Once `value` is provided it is the source of truth for the input:
2567
+ * keystrokes show instantly, but as soon as the debounce emits, the field
2568
+ * renders `value` again. So rejecting or rewriting the query in `onChange` is
2569
+ * reflected in the box rather than leaving a stale private copy behind, and a
2570
+ * `value` the parent changes on its own cancels any unsent keystroke.
2571
+ *
2572
+ * Set your state to the emitted value synchronously inside `onChange` — the
2573
+ * normal controlled-input contract. A `value` that only catches up after a
2574
+ * round-trip leaves the field showing the pre-emit query until it does, and
2575
+ * anything typed while that update is in flight is dropped when it lands.
2458
2576
  */
2459
2577
  value?: string;
2460
2578
  onChange?: (value: string) => void;
2461
- /** Debounce before a controlled `onChange` fires, in ms. Default 300. */
2579
+ /**
2580
+ * Debounce before a controlled `onChange` fires, in ms. Default 300.
2581
+ *
2582
+ * `0` (or negative) means no debounce at all — `onChange` fires inline on the
2583
+ * keystroke, with no timer. Use it for search that filters rows already in
2584
+ * memory: a debounce only adds keystroke lag there, and emitting inline also
2585
+ * means the field is never showing a query the parent has not been handed.
2586
+ */
2462
2587
  debounceMs?: number;
2463
2588
  }
2464
2589
 
@@ -2487,51 +2612,33 @@ declare interface ProgressBarProps {
2487
2612
  className?: string;
2488
2613
  }
2489
2614
 
2490
- export declare function ProgressCard({ title, description, total, counts, assignees, footer, onClick, locked, className, }: ProgressCardProps): JSX.Element;
2491
-
2492
- export declare interface ProgressCardAssignee {
2493
- id: string;
2494
- displayName: string;
2495
- avatarUrl?: string;
2496
- }
2497
-
2498
- export declare interface ProgressCardCounts {
2499
- todo: number;
2500
- pending: number;
2501
- done: number;
2502
- }
2503
-
2504
- export declare interface ProgressCardProps {
2505
- title: string;
2506
- description?: string;
2507
- total: number;
2508
- counts: ProgressCardCounts;
2509
- assignees?: ProgressCardAssignee[];
2510
- footer?: React_2.ReactNode;
2511
- onClick?: () => void;
2512
- locked?: boolean;
2513
- className?: string;
2514
- }
2515
-
2516
2615
  /**
2517
- * A quiet live/refresh indicator: a small green dot (muted when paused) that
2518
- * pulses subtly while a refresh is in flight, doubling as a manual-refresh
2519
- * button. Deliberately text-free — the freshness detail lives in the tooltip so
2520
- * the UI doesn't churn a ticking label.
2616
+ * Radio group — sibling of `checkbox.tsx`, sized + tokened to match.
2617
+ *
2618
+ * - 16×16 (`size-4`) so the controls align next to the same line-height
2619
+ * body text the existing Checkbox does.
2620
+ * - `rounded-full` (radios are circles).
2621
+ * - `border-input` when unchecked; flips to `border-primary` when checked
2622
+ * so the outline blends with the fill, same pattern as `checkbox.tsx`.
2623
+ * - Inner dot is a `RadioGroupPrimitive.Indicator` filled `bg-primary`,
2624
+ * sized to leave a 3px gap to the outer ring — the canonical shadcn
2625
+ * radio look.
2626
+ * - No drop shadow; matches Input/Select/Button/Checkbox primitives.
2627
+ *
2628
+ * Usage:
2629
+ *
2630
+ * <RadioGroup value={selected} onValueChange={setSelected}>
2631
+ * <RadioGroupItem value="a" id="a" />
2632
+ * <Label htmlFor="a">Option A</Label>
2633
+ * ...
2634
+ * </RadioGroup>
2635
+ *
2636
+ * Each item must have a stable `value` — that's what Radix uses for the
2637
+ * controlled group state.
2521
2638
  */
2522
- export declare function RefreshIndicator({ onRefresh, isFetching, isPaused, updatedAt, className, }: RefreshIndicatorProps): JSX.Element;
2639
+ export declare const RadioGroup: React_2.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
2523
2640
 
2524
- export declare interface RefreshIndicatorProps {
2525
- /** Manually trigger a refresh. */
2526
- onRefresh: () => void;
2527
- /** A background refresh is in flight — shows a subtle pulse. */
2528
- isFetching?: boolean;
2529
- /** Auto-refresh is paused (e.g. while editing) — shows a muted dot. */
2530
- isPaused?: boolean;
2531
- /** Last successful refresh time (ms epoch) — surfaced in the tooltip only. */
2532
- updatedAt?: number;
2533
- className?: string;
2534
- }
2641
+ export declare const RadioGroupItem: React_2.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React_2.RefAttributes<HTMLButtonElement>, "ref"> & React_2.RefAttributes<HTMLButtonElement>>;
2535
2642
 
2536
2643
  export declare function RelativeTimeCell({ primary, secondary, className, }: {
2537
2644
  primary: React_2.ReactNode;
@@ -2560,6 +2667,23 @@ export declare interface RouteLoadingProps {
2560
2667
 
2561
2668
  export { Row }
2562
2669
 
2670
+ /**
2671
+ * A single entry in a row's overflow (⋯) menu. The consumer resolves these
2672
+ * per-row via `rowActions`, so `onSelect` closes over the row itself — no row
2673
+ * argument needed here.
2674
+ */
2675
+ declare interface RowAction {
2676
+ label: React_2.ReactNode;
2677
+ onSelect: () => void;
2678
+ /** Optional leading icon (e.g. `<IconPencil />`). */
2679
+ icon?: React_2.ReactNode;
2680
+ /** Render below a divider with destructive styling (Delete, Remove, …). */
2681
+ destructive?: boolean;
2682
+ disabled?: boolean;
2683
+ /** Omit this action for this row entirely. */
2684
+ hidden?: boolean;
2685
+ }
2686
+
2563
2687
  export declare function scoreBand(value: number): 'green' | 'amber' | 'red';
2564
2688
 
2565
2689
  export declare function ScoreBarCell({ value, className, }: {
@@ -2691,6 +2815,20 @@ export declare const SheetContent: React_2.ForwardRefExoticComponent<SheetConten
2691
2815
 
2692
2816
  declare interface SheetContentProps extends React_2.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
2693
2817
  hideCloseButton?: boolean;
2818
+ /**
2819
+ * How far the panel and its scrim reach. Defaults to `"surface"` — a
2820
+ * slide-out belongs to the app that opened it and should leave the
2821
+ * shell's sidebar and header reachable and undimmed.
2822
+ *
2823
+ * Use `"viewport"` only for a panel that genuinely speaks for the
2824
+ * platform rather than the current app (a shell-level nav drawer, say).
2825
+ * If you are reaching for it to escape a clipping ancestor, fix the
2826
+ * ancestor instead — covering the whole shell to dodge `overflow:hidden`
2827
+ * is the bug DES-368 was filed about.
2828
+ */
2829
+ scope?: OverlayScope;
2830
+ /** Classes for the scrim, mirroring `DialogContent`'s `overlayClassName`. */
2831
+ overlayClassName?: string;
2694
2832
  }
2695
2833
 
2696
2834
  export declare const SheetDescription: React_2.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React_2.RefAttributes<HTMLParagraphElement>, "ref"> & React_2.RefAttributes<HTMLParagraphElement>>;
@@ -2705,7 +2843,9 @@ export declare const SheetHeader: {
2705
2843
  displayName: string;
2706
2844
  };
2707
2845
 
2708
- export declare const SheetOverlay: React_2.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
2846
+ export declare const SheetOverlay: React_2.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & {
2847
+ scope?: OverlayScope;
2848
+ } & React_2.RefAttributes<HTMLDivElement>>;
2709
2849
 
2710
2850
  export declare function SheetPortal({ container, ...props }: React_2.ComponentProps<typeof DialogPrimitive.Portal>): JSX.Element;
2711
2851
 
@@ -2714,7 +2854,8 @@ export declare const SheetTitle: React_2.ForwardRefExoticComponent<Omit<DialogPr
2714
2854
  export declare const SheetTrigger: React_2.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React_2.RefAttributes<HTMLButtonElement>>;
2715
2855
 
2716
2856
  declare const sheetVariants: (props?: ({
2717
- side?: "left" | "right" | "bottom" | "top" | null | undefined;
2857
+ scope?: "surface" | "viewport" | null | undefined;
2858
+ side?: "bottom" | "left" | "right" | "top" | null | undefined;
2718
2859
  } & ClassProp) | undefined) => string;
2719
2860
 
2720
2861
  /**
@@ -2727,78 +2868,6 @@ export declare function showFieldInline({ show, hasValue, }: {
2727
2868
  hasValue: boolean;
2728
2869
  }): boolean;
2729
2870
 
2730
- /**
2731
- * SidebarNav — shared primitives for app-sidebar navigation.
2732
- *
2733
- * Two levels:
2734
- * - `SidebarNavItem` — the top-level row with icon + label (app entry)
2735
- * - `SidebarNavSubList` — the indented, rail-connected secondary nav
2736
- * rendered directly beneath a parent SidebarNavItem
2737
- *
2738
- * The pattern mirrors what Atlas's shell sidebar has been rendering
2739
- * inline for a long time, but extracted here so every consumer
2740
- * (Atlas, embedded MFEs, the design system gallery) gets the same
2741
- * visual treatment and spacing rules for free.
2742
- *
2743
- * Spacing contract
2744
- * ----------------
2745
- * Parent item label x-position = `itemPaddingX + iconSize + iconGap`.
2746
- * The sub-list is designed so its labels land at the SAME x-position
2747
- * by default — with defaults of `itemPaddingX=8`, `iconSize=24`,
2748
- * `iconGap=12` the sub-list labels indent by 44px. A rail sits at the
2749
- * horizontal center of the parent icon (x = 8 + 24/2 = 20).
2750
- *
2751
- * If a consumer uses a different parent item geometry, pass
2752
- * `labelIndent` / `railIndent` to match.
2753
- */
2754
- export declare interface SidebarNavSubItem {
2755
- id: string;
2756
- label: string;
2757
- /** Link href. Omit when using `onSelect` with a custom navigator. */
2758
- href?: string;
2759
- /** True for the currently-selected item — gets weight + color emphasis. */
2760
- active?: boolean;
2761
- /** Optional tail counter (e.g., "12"). Rendered right-aligned. */
2762
- count?: number | string;
2763
- /** Optional uppercase chip (e.g., "NEW", "BETA"). Rendered right-aligned. */
2764
- tag?: string;
2765
- /**
2766
- * Render as visible but non-interactive. Use for placeholder items that
2767
- * will become clickable later (feature gating, coming-soon, etc.).
2768
- */
2769
- parked?: boolean;
2770
- }
2771
-
2772
- /**
2773
- * Indented secondary navigation with a vertical connector rail. Renders
2774
- * nothing when `items` is empty.
2775
- */
2776
- export declare function SidebarNavSubList({ items, onSelect, labelIndent, railIndent, className, ariaLabel, }: SidebarNavSubListProps): JSX.Element | null;
2777
-
2778
- export declare interface SidebarNavSubListProps {
2779
- items: SidebarNavSubItem[];
2780
- /**
2781
- * Called when the user activates an item (click, keyboard enter).
2782
- * Use this to route with your SPA router; if omitted, the `<a href>`
2783
- * does a full navigation. Parked items never fire this.
2784
- */
2785
- onSelect?: (item: SidebarNavSubItem, event: React_2.MouseEvent<HTMLAnchorElement>) => void;
2786
- /**
2787
- * Horizontal distance (px) from the list's left edge at which item
2788
- * labels begin. Should equal the parent item's label x-position so
2789
- * the two stacks visually line up. Default 44.
2790
- */
2791
- labelIndent?: number;
2792
- /**
2793
- * X-position (px) of the vertical connector rail. Usually the center
2794
- * of the parent item's icon. Default 20.
2795
- */
2796
- railIndent?: number;
2797
- className?: string;
2798
- /** Accessible name for the list (e.g., "Agent Builder pages"). */
2799
- ariaLabel?: string;
2800
- }
2801
-
2802
2871
  /**
2803
2872
  * SingleSelectList — the single-select sibling of `MultiSelectList`. Same
2804
2873
  * searchable cmdk body, pinned grouping, and icon column, but rows carry a
@@ -2837,6 +2906,10 @@ declare interface SingleSelectListProps {
2837
2906
  searchable?: boolean;
2838
2907
  }
2839
2908
 
2909
+ declare const sizeShell: (props?: ({
2910
+ size?: "page" | "panel" | null | undefined;
2911
+ } & ClassProp) | undefined) => string;
2912
+
2840
2913
  export declare function Skeleton({ className, ...props }: React.ComponentProps<'div'>): JSX.Element;
2841
2914
 
2842
2915
  export declare function SkeletonBlock({ className, style }: {
@@ -2876,74 +2949,74 @@ export declare const spinnerVariants: (props?: ({
2876
2949
 
2877
2950
  export declare const STATUS_TONES: {
2878
2951
  readonly healthy: {
2879
- readonly bg: "bg-emerald-50";
2880
- readonly fg: "text-emerald-700";
2881
- readonly dot: "bg-emerald-500";
2952
+ readonly bg: "bg-success-tint";
2953
+ readonly fg: "text-success-text";
2954
+ readonly dot: "bg-success";
2882
2955
  };
2883
2956
  readonly active: {
2884
- readonly bg: "bg-emerald-50";
2885
- readonly fg: "text-emerald-700";
2886
- readonly dot: "bg-emerald-500";
2957
+ readonly bg: "bg-success-tint";
2958
+ readonly fg: "text-success-text";
2959
+ readonly dot: "bg-success";
2887
2960
  };
2888
2961
  readonly completed: {
2889
- readonly bg: "bg-emerald-50";
2890
- readonly fg: "text-emerald-700";
2891
- readonly dot: "bg-emerald-500";
2962
+ readonly bg: "bg-success-tint";
2963
+ readonly fg: "text-success-text";
2964
+ readonly dot: "bg-success";
2892
2965
  };
2893
2966
  readonly success: {
2894
- readonly bg: "bg-emerald-50";
2895
- readonly fg: "text-emerald-700";
2896
- readonly dot: "bg-emerald-500";
2967
+ readonly bg: "bg-success-tint";
2968
+ readonly fg: "text-success-text";
2969
+ readonly dot: "bg-success";
2897
2970
  };
2898
2971
  readonly running: {
2899
- readonly bg: "bg-sky-50";
2900
- readonly fg: "text-sky-700";
2901
- readonly dot: "bg-sky-500";
2972
+ readonly bg: "bg-info-tint";
2973
+ readonly fg: "text-info-text";
2974
+ readonly dot: "bg-info";
2902
2975
  };
2903
2976
  readonly info: {
2904
- readonly bg: "bg-sky-50";
2905
- readonly fg: "text-sky-700";
2906
- readonly dot: "bg-sky-500";
2977
+ readonly bg: "bg-info-tint";
2978
+ readonly fg: "text-info-text";
2979
+ readonly dot: "bg-info";
2907
2980
  };
2908
2981
  readonly queued: {
2909
- readonly bg: "bg-sky-50";
2910
- readonly fg: "text-sky-700";
2911
- readonly dot: "bg-sky-500";
2982
+ readonly bg: "bg-info-tint";
2983
+ readonly fg: "text-info-text";
2984
+ readonly dot: "bg-info";
2912
2985
  };
2913
2986
  readonly drift: {
2914
- readonly bg: "bg-amber-50";
2915
- readonly fg: "text-amber-700";
2916
- readonly dot: "bg-amber-500";
2987
+ readonly bg: "bg-warning-tint";
2988
+ readonly fg: "text-warning-text";
2989
+ readonly dot: "bg-warning";
2917
2990
  };
2918
2991
  readonly warn: {
2919
- readonly bg: "bg-amber-50";
2920
- readonly fg: "text-amber-700";
2921
- readonly dot: "bg-amber-500";
2992
+ readonly bg: "bg-warning-tint";
2993
+ readonly fg: "text-warning-text";
2994
+ readonly dot: "bg-warning";
2922
2995
  };
2923
2996
  readonly failing: {
2924
- readonly bg: "bg-rose-50";
2925
- readonly fg: "text-rose-700";
2926
- readonly dot: "bg-rose-500";
2997
+ readonly bg: "bg-danger-tint";
2998
+ readonly fg: "text-danger-text";
2999
+ readonly dot: "bg-danger";
2927
3000
  };
2928
3001
  readonly failed: {
2929
- readonly bg: "bg-rose-50";
2930
- readonly fg: "text-rose-700";
2931
- readonly dot: "bg-rose-500";
3002
+ readonly bg: "bg-danger-tint";
3003
+ readonly fg: "text-danger-text";
3004
+ readonly dot: "bg-danger";
2932
3005
  };
2933
3006
  readonly error: {
2934
- readonly bg: "bg-rose-50";
2935
- readonly fg: "text-rose-700";
2936
- readonly dot: "bg-rose-500";
3007
+ readonly bg: "bg-danger-tint";
3008
+ readonly fg: "text-danger-text";
3009
+ readonly dot: "bg-danger";
2937
3010
  };
2938
3011
  readonly paused: {
2939
- readonly bg: "bg-black-6";
2940
- readonly fg: "text-black-60";
2941
- readonly dot: "bg-black-30";
3012
+ readonly bg: "bg-muted";
3013
+ readonly fg: "text-muted-foreground";
3014
+ readonly dot: "bg-muted-foreground";
2942
3015
  };
2943
3016
  readonly neutral: {
2944
- readonly bg: "bg-black-6";
2945
- readonly fg: "text-black-60";
2946
- readonly dot: "bg-black-30";
3017
+ readonly bg: "bg-muted";
3018
+ readonly fg: "text-muted-foreground";
3019
+ readonly dot: "bg-muted-foreground";
2947
3020
  };
2948
3021
  };
2949
3022
 
@@ -2976,7 +3049,10 @@ export declare type StatusTone = keyof typeof STATUS_TONES;
2976
3049
  */
2977
3050
  export declare const Switch: React_2.ForwardRefExoticComponent<Omit<SwitchPrimitives.SwitchProps & React_2.RefAttributes<HTMLButtonElement>, "ref"> & React_2.RefAttributes<HTMLButtonElement>>;
2978
3051
 
2979
- export declare const Table: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableElement> & React_2.RefAttributes<HTMLTableElement>>;
3052
+ declare function Table<T>({ columns, data, selectable, getRowId, selectedRowIds, onSelectionChange, enableRowSelection, rowActions, getRowLabel, searchable, filters, toolbar, actions, footer, pageSize, disablePagination, resizableColumns, columnSizingStorageKey, defaultSort, manualPagination, rowCount, pageIndex, onPageChange, manualSorting, sorting: controlledSorting, onSortingChange, manualFiltering, columnFilters: controlledColumnFilters, onColumnFiltersChange, loading, emptyMessage, onRowClick, rowHref, rowClassName, minWidth, height, bordered, variant, ariaLabel, className, }: ProDataTableProps<T>): JSX.Element;
3053
+ export { Table as DataTable }
3054
+ export { Table as ProDataTable }
3055
+ export { Table }
2980
3056
 
2981
3057
  export declare const TableBody: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableSectionElement> & React_2.RefAttributes<HTMLTableSectionElement>>;
2982
3058
 
@@ -2990,15 +3066,18 @@ export declare const TableHead: React_2.ForwardRefExoticComponent<React_2.ThHTML
2990
3066
 
2991
3067
  export declare const TableHeader: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableSectionElement> & React_2.RefAttributes<HTMLTableSectionElement>>;
2992
3068
 
2993
- export declare const TableRow: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableRowElement> & React_2.RefAttributes<HTMLTableRowElement>>;
2994
-
2995
- export declare function TabPage({ children, maxWidth, className }: TabPageProps): JSX.Element;
3069
+ export declare const TablePrimitive: {
3070
+ Root: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableElement> & React_2.RefAttributes<HTMLTableElement>>;
3071
+ Header: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableSectionElement> & React_2.RefAttributes<HTMLTableSectionElement>>;
3072
+ Body: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableSectionElement> & React_2.RefAttributes<HTMLTableSectionElement>>;
3073
+ Footer: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableSectionElement> & React_2.RefAttributes<HTMLTableSectionElement>>;
3074
+ Head: React_2.ForwardRefExoticComponent<React_2.ThHTMLAttributes<HTMLTableCellElement> & React_2.RefAttributes<HTMLTableCellElement>>;
3075
+ Row: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableRowElement> & React_2.RefAttributes<HTMLTableRowElement>>;
3076
+ Cell: React_2.ForwardRefExoticComponent<React_2.TdHTMLAttributes<HTMLTableCellElement> & React_2.RefAttributes<HTMLTableCellElement>>;
3077
+ Caption: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableCaptionElement> & React_2.RefAttributes<HTMLTableCaptionElement>>;
3078
+ };
2996
3079
 
2997
- declare interface TabPageProps {
2998
- children: ReactNode;
2999
- maxWidth?: 'md' | 'lg' | 'xl' | '2xl' | '4xl' | '6xl' | '7xl' | 'full';
3000
- className?: string;
3001
- }
3080
+ export declare const TableRow: React_2.ForwardRefExoticComponent<React_2.HTMLAttributes<HTMLTableRowElement> & React_2.RefAttributes<HTMLTableRowElement>>;
3002
3081
 
3003
3082
  export declare const Tabs: React_2.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React_2.RefAttributes<HTMLDivElement>>;
3004
3083
 
@@ -3493,6 +3572,22 @@ declare interface TextareaOwnProps {
3493
3572
 
3494
3573
  export declare type TextareaProps = React_2.ComponentProps<"textarea"> & TextareaOwnProps;
3495
3574
 
3575
+ /**
3576
+ * shadcn/ui chart primitive (recharts-based).
3577
+ *
3578
+ * Provides a themeable container + tooltip/legend chrome so charts across
3579
+ * Atlas share one styling contract instead of each app hand-rolling recharts
3580
+ * markup. New charts should compose `ChartContainer` + a `ChartConfig` and let
3581
+ * this primitive resolve colors from the `--chart-*` design tokens.
3582
+ *
3583
+ * Jarvis is migrating its bespoke recharts usage onto this primitive — prefer
3584
+ * it over importing recharts directly in new code.
3585
+ */
3586
+ declare const THEMES: {
3587
+ readonly light: "";
3588
+ readonly dark: ".dark";
3589
+ };
3590
+
3496
3591
  export declare function tintForString(seed: string): AgentTint;
3497
3592
 
3498
3593
  export { toast }
@@ -3514,7 +3609,7 @@ export { toast }
3514
3609
  * the same without re-specifying options at the call site.
3515
3610
  * 2. Binds Sonner's internal classes to Atlas design tokens via
3516
3611
  * `toastOptions.classNames` — `bg-card`, `border-border`,
3517
- * `shadow-lg`, `rounded-md`, and the `--destructive` /
3612
+ * `shadow-popover`, `rounded-surface`, and the `--destructive` /
3518
3613
  * `--primary` / `--muted` pairs. Matches Dialog / Popover /
3519
3614
  * DropdownMenu so all floating UI reads as one visual family.
3520
3615
  * 3. Uses `richColors` for the semantic variants
@@ -3568,6 +3663,21 @@ export declare const toggleVariants: (props?: ({
3568
3663
  size?: "default" | "sm" | "lg" | null | undefined;
3569
3664
  } & ClassProp) | undefined) => string;
3570
3665
 
3666
+ /**
3667
+ * Full-surface utility layout for "instead of content" screens — 404, access
3668
+ * denied, page error, empty route. Distinct from {@link EmptyState} in
3669
+ * `loading-state.tsx`, which is the small inline placeholder for tables and
3670
+ * section panels. Reach for `PageState` when the whole content area (or a
3671
+ * bounded panel) is the message; reach for `EmptyState` when a table/list
3672
+ * inside an otherwise-loaded page has no rows.
3673
+ *
3674
+ * Tone → status-role mapping lives **once** here. Call sites pass a Tabler
3675
+ * glyph via `icon` and never write medallion colors themselves.
3676
+ */
3677
+ declare const toneMedallion: (props?: ({
3678
+ tone?: "neutral" | "warning" | "danger" | "restricted" | null | undefined;
3679
+ } & ClassProp) | undefined) => string;
3680
+
3571
3681
  export declare const Tooltip: React_2.FC<TooltipPrimitive.TooltipProps>;
3572
3682
 
3573
3683
  /**
@@ -3602,6 +3712,15 @@ export declare const TooltipContent: React_2.ForwardRefExoticComponent<Omit<Tool
3602
3712
  container?: HTMLElement | null;
3603
3713
  } & React_2.RefAttributes<HTMLDivElement>>;
3604
3714
 
3715
+ declare type TooltipPayloadItem = {
3716
+ name?: string | number;
3717
+ dataKey?: string | number;
3718
+ value?: number | string;
3719
+ color?: string;
3720
+ payload?: Record<string, unknown>;
3721
+ fill?: string;
3722
+ };
3723
+
3605
3724
  /**
3606
3725
  * Tooltip — contextual helper text anchored to a trigger.
3607
3726
  *
@@ -3651,6 +3770,41 @@ declare interface TrendBadgeProps {
3651
3770
  invertColors?: boolean;
3652
3771
  }
3653
3772
 
3773
+ /**
3774
+ * Text that truncates with an ellipsis and reveals its full value in a tooltip —
3775
+ * **but only when actually clipped**. The one place the overflow-detection +
3776
+ * tooltip pattern lives, so every truncating title/label gets it for free.
3777
+ *
3778
+ * Use for **titles and labels** (page/tab titles, table cells, breadcrumbs, list
3779
+ * rows) — anything single-line that must fit a bounded width. Do **not** use for
3780
+ * body or long-form copy: that should wrap, not truncate.
3781
+ *
3782
+ * ```tsx
3783
+ * <TruncatedText className="max-w-[16rem]">{customer.name}</TruncatedText>
3784
+ *
3785
+ * // asChild — the link itself truncates; pass the text as `tooltip`:
3786
+ * <TruncatedText asChild tooltip={repo.name}>
3787
+ * <a href={href} className="max-w-[14rem]">{repo.name}</a>
3788
+ * </TruncatedText>
3789
+ * ```
3790
+ */
3791
+ export declare function TruncatedText({ asChild, tooltip, side, className, children, ref: forwardedRef, ...props }: TruncatedTextProps): JSX.Element;
3792
+
3793
+ declare type TruncatedTextProps = ComponentProps<'span'> & {
3794
+ /**
3795
+ * Merge the truncation + tooltip onto the child element instead of rendering a
3796
+ * `<span>` (shadcn `asChild`). Use when the truncating element must be a link,
3797
+ * button, or heading. When set, pass `tooltip` explicitly — `children` is an
3798
+ * element, not the text.
3799
+ */
3800
+ asChild?: boolean;
3801
+ /** Tooltip content. Defaults to `children` (correct only when they're the raw
3802
+ * text — i.e. not `asChild`). */
3803
+ tooltip?: ReactNode;
3804
+ /** Tooltip side; forwarded to `TooltipContent`. */
3805
+ side?: ComponentProps<typeof TooltipContent>['side'];
3806
+ };
3807
+
3654
3808
  export declare function useAppClassName(): string | undefined;
3655
3809
 
3656
3810
  /**
@@ -3909,23 +4063,6 @@ export declare interface UserChipUser {
3909
4063
  initials?: string;
3910
4064
  }
3911
4065
 
3912
- /**
3913
- * A person rendered as one inline unit: a neutral avatar icon followed by their
3914
- * full name. For lightweight person references (a lead, an assignee label) where
3915
- * you only have a name. When you have full identity (email/org) and want the
3916
- * hover card, use `UserChip` instead.
3917
- *
3918
- * Inherits font size/color from its container so it drops into any context.
3919
- */
3920
- export declare function UserLabel({ name, size, className }: UserLabelProps): JSX.Element;
3921
-
3922
- export declare interface UserLabelProps {
3923
- name: string;
3924
- /** Avatar size in px. Defaults to 18. */
3925
- size?: number;
3926
- className?: string;
3927
- }
3928
-
3929
4066
  /**
3930
4067
  * Resolve a `ParsedDate` (year/month/day, any of which may be null)
3931
4068
  * into a concrete `Date`, using the reference date and `dayDefault`
@@ -3952,10 +4089,3 @@ export declare interface UserLabelProps {
3952
4089
  declare type YearBias = 'past' | 'future';
3953
4090
 
3954
4091
  export { }
3955
-
3956
-
3957
- declare module 'chart.js' {
3958
- interface TooltipPositionerMap {
3959
- cursor: TooltipPositionerFunction<ChartType>;
3960
- }
3961
- }