@tailor-platform/app-shell 1.18.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/app-shell-core.css +2 -2
  2. package/dist/app-shell.d.ts +1108 -190
  3. package/dist/app-shell.js +13090 -10783
  4. package/dist/{appshell-Y1AYCuVJ.js → appshell-B4QkQvXF.js} +519 -392
  5. package/dist/fonts/inter.css +7 -7
  6. package/dist/fonts/noto-sans-jp.css +116 -116
  7. package/dist/style-entry.d.ts +1 -656
  8. package/dist/testing.d.ts +132 -97
  9. package/dist/testing.js +1 -1
  10. package/dist/vite-plugin.d.ts +132 -97
  11. package/package.json +15 -10
  12. package/skills/app-shell-patterns/SKILL.md +38 -27
  13. package/skills/app-shell-patterns/references/api/aggregations.md +131 -0
  14. package/skills/app-shell-patterns/references/api/create-ai-gateway-client.md +32 -2
  15. package/skills/app-shell-patterns/references/api/define-module.md +5 -5
  16. package/skills/app-shell-patterns/references/api/router/use-params.md +2 -2
  17. package/skills/app-shell-patterns/references/api/use-ai-chat.md +46 -8
  18. package/skills/app-shell-patterns/references/api/use-app-shell-config.md +4 -4
  19. package/skills/app-shell-patterns/references/api/use-app-shell-data.md +5 -5
  20. package/skills/app-shell-patterns/references/api/use-app-shell.md +2 -2
  21. package/skills/app-shell-patterns/references/api/use-auth.md +3 -3
  22. package/skills/app-shell-patterns/references/api/use-route-error.md +12 -12
  23. package/skills/app-shell-patterns/references/components/action-panel.md +57 -23
  24. package/skills/app-shell-patterns/references/components/activity-card.md +3 -3
  25. package/skills/app-shell-patterns/references/components/ai-chat.md +37 -3
  26. package/skills/app-shell-patterns/references/components/app-shell.md +6 -5
  27. package/skills/app-shell-patterns/references/components/badge.md +7 -3
  28. package/skills/app-shell-patterns/references/components/card.md +2 -2
  29. package/skills/app-shell-patterns/references/components/data-table.md +514 -77
  30. package/skills/app-shell-patterns/references/components/date-picker.md +2 -2
  31. package/skills/app-shell-patterns/references/components/default-sidebar.md +2 -2
  32. package/skills/app-shell-patterns/references/components/dialog.md +8 -0
  33. package/skills/app-shell-patterns/references/components/filter-rail.md +10 -3
  34. package/skills/app-shell-patterns/references/components/form.md +19 -9
  35. package/skills/app-shell-patterns/references/components/global-header-layout.md +31 -8
  36. package/skills/app-shell-patterns/references/components/item-list.md +191 -0
  37. package/skills/app-shell-patterns/references/components/layout.md +24 -17
  38. package/skills/app-shell-patterns/references/components/select.md +18 -0
  39. package/skills/app-shell-patterns/references/components/sidebar-group.md +9 -7
  40. package/skills/app-shell-patterns/references/components/sidebar-layout.md +74 -11
  41. package/skills/app-shell-patterns/references/components/sidebar-section.md +8 -8
  42. package/skills/app-shell-patterns/references/components/tabs.md +32 -2
  43. package/skills/app-shell-patterns/references/components/text.md +75 -38
  44. package/skills/app-shell-patterns/references/components/tree.md +342 -0
  45. package/skills/app-shell-patterns/references/components/with-guard.md +5 -5
  46. package/skills/app-shell-patterns/references/concepts/authentication.md +1 -1
  47. package/skills/app-shell-patterns/references/concepts/routing-navigation.md +3 -3
  48. package/skills/app-shell-patterns/references/concepts/sidebar-navigation.md +16 -14
  49. package/skills/app-shell-patterns/references/concepts/styling-theming.md +28 -20
  50. package/skills/app-shell-patterns/references/migrations.md +22 -2
  51. package/skills/app-shell-patterns/references/pages/document-detail.md +32 -25
  52. package/skills/app-shell-patterns/references/patterns/form-modal.md +4 -1
  53. package/skills/app-shell-patterns/references/patterns/interaction-multi-select.md +1 -1
  54. package/dist/semantic-contrast.test.ts +0 -227
  55. package/dist/theme-bridge.test.ts +0 -182
@@ -49,6 +49,7 @@ import { ReactNode } from 'react';
49
49
  import { Ref } from 'react';
50
50
  import { RefObject } from 'react';
51
51
  import { Select as Select_2 } from '@base-ui/react/select';
52
+ import { StandardJSONSchemaV1 } from '@standard-schema/spec';
52
53
  import { StandardSchemaV1 } from '@standard-schema/spec';
53
54
  import { Tabs as Tabs_2 } from '@base-ui/react/tabs';
54
55
  import { Time } from '@internationalized/date';
@@ -124,7 +125,7 @@ declare interface ActionItem {
124
125
  * />
125
126
  * ```
126
127
  */
127
- export declare function ActionPanel({ title, actions, className }: ActionPanelProps): JSX.Element;
128
+ export declare function ActionPanel({ title, actions, emptyContent, className }: ActionPanelProps): JSX.Element;
128
129
 
129
130
  /**
130
131
  * Props for the ActionPanel component.
@@ -134,6 +135,12 @@ export declare interface ActionPanelProps {
134
135
  title: string;
135
136
  /** List of actions to render */
136
137
  actions: ActionItem[];
138
+ /**
139
+ * Content shown with consistent padding when actions is empty. Defaults to a localized "No actions available" message.
140
+ * Strings use the default body text styling; other React nodes render unchanged.
141
+ * Pass null to hide the empty content and its additional vertical spacing while keeping the card and title.
142
+ */
143
+ emptyContent?: ReactNode;
137
144
  /** Additional CSS classes for the card container */
138
145
  className?: string;
139
146
  }
@@ -148,10 +155,15 @@ declare function Actions({ className, ...props }: ActionsProps): JSX.Element;
148
155
 
149
156
  declare type ActionsProps = React_2.ComponentProps<"div">;
150
157
 
158
+ declare type ActiveToolCall = {
159
+ id: string;
160
+ name: string;
161
+ };
162
+
151
163
  export declare const ActivityCard: typeof ActivityCardStandalone & {
152
164
  Root: typeof Root_3;
153
165
  Items: typeof Items;
154
- Item: typeof Item;
166
+ Item: typeof Item_2;
155
167
  };
156
168
 
157
169
  /**
@@ -239,11 +251,55 @@ export declare interface ActivityCardRootProps<T extends ActivityCardBaseItem> {
239
251
  */
240
252
  declare function ActivityCardStandalone({ items, title, maxVisible, overflowLabel, groupBy, className, }: ActivityCardProps): JSX.Element;
241
253
 
254
+ /** A reusable aggregation over selected row values, optionally followed by a result transformation. */
255
+ export declare type Aggregation<TRow, TResult = number | null> = (context: {
256
+ rows: readonly TRow[];
257
+ }) => TResult;
258
+
259
+ /**
260
+ * Create reusable callbacks over `{ rows }`, independent of UI and column definitions.
261
+ * Selectors choose each row's value; an optional transformer receives the final
262
+ * result once, including empty or invalid results. Neither callback should mutate rows.
263
+ */
264
+ export declare const aggregations: {
265
+ /** Sum finite selected numbers. Empty input returns zero; invalid input returns null. */
266
+ sum: {
267
+ <TRow>(selector: (row: TRow) => NumericValue, transformer?: undefined): Aggregation<TRow, number | null>;
268
+ <TRow, TResult>(selector: (row: TRow) => NumericValue, transformer: (value: number | null) => TResult): Aggregation<TRow, TResult>;
269
+ };
270
+ /** Average non-nullish finite selected numbers; empty or invalid input returns null. */
271
+ avg: {
272
+ <TRow>(selector: (row: TRow) => NumericValue, transformer?: undefined): Aggregation<TRow, number | null>;
273
+ <TRow, TResult>(selector: (row: TRow) => NumericValue, transformer: (value: number | null) => TResult): Aggregation<TRow, TResult>;
274
+ };
275
+ /** Minimum finite selected number; empty or invalid input returns null. */
276
+ min: {
277
+ <TRow>(selector: (row: TRow) => NumericValue, transformer?: undefined): Aggregation<TRow, number | null>;
278
+ <TRow, TResult>(selector: (row: TRow) => NumericValue, transformer: (value: number | null) => TResult): Aggregation<TRow, TResult>;
279
+ };
280
+ /** Maximum finite selected number; empty or invalid input returns null. */
281
+ max: {
282
+ <TRow>(selector: (row: TRow) => NumericValue, transformer?: undefined): Aggregation<TRow, number | null>;
283
+ <TRow, TResult>(selector: (row: TRow) => NumericValue, transformer: (value: number | null) => TResult): Aggregation<TRow, TResult>;
284
+ };
285
+ /** Count non-nullish selected values, including zero, false, and empty strings. */
286
+ count: {
287
+ <TRow>(selector: (row: TRow) => unknown, transformer?: undefined): Aggregation<TRow, number>;
288
+ <TRow, TResult>(selector: (row: TRow) => unknown, transformer: (value: number) => TResult): Aggregation<TRow, TResult>;
289
+ };
290
+ };
291
+
242
292
  export declare const AIChat: AIChatComponent;
243
293
 
294
+ /** Low-level event stream consumed by `useAIChat()`. */
244
295
  export declare type AIChatCompletionEvent = {
245
296
  type: "text-delta";
246
297
  text: string;
298
+ } | {
299
+ type: "tool-call";
300
+ toolCallId: string;
301
+ toolName: string;
302
+ argumentsText: string;
247
303
  } | {
248
304
  type: "done";
249
305
  finishReason?: string;
@@ -270,6 +326,7 @@ declare type AIChatComponent = typeof AIChatRoot & {
270
326
  ChainOfThoughtSearchResults: typeof ChainOfThoughtSearchResults;
271
327
  ChainOfThoughtSearchResult: typeof ChainOfThoughtSearchResult;
272
328
  Tool: typeof Tool;
329
+ ToolCall: typeof ToolCall;
273
330
  ToolHeader: typeof ToolHeader;
274
331
  ToolContent: typeof ToolContent;
275
332
  ToolInput: typeof ToolInput;
@@ -325,6 +382,7 @@ export declare type AIChatHeaderProps = {
325
382
  className?: string;
326
383
  };
327
384
 
385
+ /** Public chat message shape exposed by `useAIChat()`. */
328
386
  export declare interface AIChatMessage {
329
387
  id: string;
330
388
  role: "user" | "assistant";
@@ -348,17 +406,56 @@ declare function AIChatRoot({ className, children, status, ...props }: AIChatPro
348
406
 
349
407
  export declare type AIChatStatus = "ready" | "submitted" | "streaming" | "error";
350
408
 
409
+ export declare type AIChatToolCallProps = {
410
+ /** A requested tool from useAIChat().toolCalls, not an execution success receipt. */
411
+ call: ReturnType<typeof useAIChat>["toolCalls"][number];
412
+ className?: string;
413
+ };
414
+
415
+ /** Context passed to local tool executors. */
416
+ export declare interface AIChatToolContext {
417
+ /** Abort signal for the in-flight chat request. */
418
+ signal: AbortSignal;
419
+ /** Public user/assistant transcript visible to the current chat turn. */
420
+ messages: AIChatMessage[];
421
+ }
422
+
423
+ /**
424
+ * Schema contract for local AI chat tools.
425
+ *
426
+ * A schema must validate runtime inputs and generate JSON Schema for the AI
427
+ * Gateway request. Zod 4 implements both Standard Schema contracts directly.
428
+ *
429
+ * @example
430
+ * ```ts
431
+ * import { z } from "zod/v4";
432
+ *
433
+ * const schema = z.object({
434
+ * customerId: z.string(),
435
+ * includeInactive: z.boolean().optional(),
436
+ * });
437
+ * ```
438
+ */
439
+ export declare type AIChatToolSchema<Input = unknown, Output = Input> = StandardSchemaV1<Input, Output> & StandardJSONSchemaV1<Input, Output>;
440
+
441
+ /** Internal transcript message shape sent to the AI Gateway transport layer. */
351
442
  export declare type AIGatewayChatMessage = {
352
443
  role: "system" | "user";
353
444
  content: string;
354
445
  } | {
355
446
  role: "assistant";
356
447
  content?: string;
448
+ toolCalls?: AIGatewayToolCall[];
449
+ } | {
450
+ role: "tool";
451
+ toolCallId: string;
452
+ content: string;
357
453
  };
358
454
 
359
455
  export declare interface AIGatewayChatRequest {
360
456
  model: string;
361
457
  messages: AIGatewayChatMessage[];
458
+ tools?: AIGatewayFunctionTool[];
362
459
  signal?: AbortSignal;
363
460
  }
364
461
 
@@ -369,6 +466,39 @@ export declare interface AIGatewayClient {
369
466
  streamChatCompletion(request: AIGatewayChatRequest): AsyncIterable<AIChatCompletionEvent>;
370
467
  }
371
468
 
469
+ /** Normalized local function tool definition understood by the AI Gateway. */
470
+ export declare interface AIGatewayFunctionTool {
471
+ type: "function";
472
+ function: {
473
+ name: string;
474
+ description?: string;
475
+ parameters: Record<string, unknown>;
476
+ };
477
+ }
478
+
479
+ /** Normalized local function tool call emitted by the AI Gateway transport. */
480
+ export declare interface AIGatewayToolCall {
481
+ id: string;
482
+ name: string;
483
+ argumentsText: string;
484
+ }
485
+
486
+ /**
487
+ * A tool executed locally inside AppShell.
488
+ *
489
+ * Local tools are validated with Standard Schema, executed in-process, and then
490
+ * written back into the internal AI Gateway transcript as `role: "tool"`
491
+ * messages for the next model round.
492
+ * Schema and executor are split so heterogeneous schemas compare structurally.
493
+ */
494
+ export declare type AILocalTool<TSchema extends AIChatToolSchema<any, any> = AIChatToolSchema<any, any>> = {
495
+ kind: "local";
496
+ description?: string;
497
+ schema: TSchema;
498
+ } & {
499
+ execute: (args: StandardSchemaV1.InferOutput<TSchema>, context: AIChatToolContext) => unknown | Promise<unknown>;
500
+ };
501
+
372
502
  export declare const Alert: {
373
503
  Root: typeof Root_2;
374
504
  Title: typeof Title;
@@ -537,9 +667,12 @@ export declare interface AppShellRegister {
537
667
  }
538
668
 
539
669
  export declare type AppShellSidebarState = {
670
+ /** Effective desktop operations after normalizing sidebarBehaviour or deprecated collapsible. */
671
+ sidebarBehaviour: SidebarBehaviour;
540
672
  /**
541
673
  * Whether the sidebar is expanded on desktop — the same signal the DOM
542
- * exposes as `[data-slot="sidebar"][data-state]`.
674
+ * exposes as `[data-slot="sidebar"][data-state]` when collapsing is enabled.
675
+ * Always `true` in "fixed" or "resize" mode, regardless of `defaultOpen`.
543
676
  *
544
677
  * On mobile the sidebar is an overlay sheet rather than an in-flow column,
545
678
  * so this does not describe how much room the content has; branch on
@@ -548,11 +681,13 @@ export declare type AppShellSidebarState = {
548
681
  open: boolean;
549
682
  /** Whether the viewport is below the mobile breakpoint (768px). */
550
683
  isMobile: boolean;
551
- /** Expand or collapse the sidebar. */
684
+ /** Expand or collapse the desktop sidebar. Inert in "fixed" or "resize" mode. */
552
685
  setOpen: (open: boolean) => void;
553
686
  /**
554
687
  * Toggle the sidebar — the same action as `<SidebarLayout.Trigger />` and the
555
688
  * ⌘B / Ctrl+B shortcut, including the mobile and tablet overlay behaviour.
689
+ * Desktop toggling is inert in "fixed" or "resize" mode. Mobile/tablet menu
690
+ * toggling remains available in every mode.
556
691
  */
557
692
  toggle: () => void;
558
693
  };
@@ -1060,7 +1195,7 @@ export declare interface BadgeProps extends React_2.HTMLAttributes<HTMLDivElemen
1060
1195
  export declare type BadgeVariant = NonNullable<BadgeProps["variant"]>;
1061
1196
 
1062
1197
  export declare const badgeVariants: (props?: ({
1063
- variant?: "default" | "error" | "success" | "warning" | "neutral" | "info" | "subtle-success" | "subtle-warning" | "subtle-error" | "subtle-info" | "outline-success" | "outline-warning" | "outline-error" | "outline-info" | "outline-neutral" | null | undefined;
1198
+ variant?: "default" | "error" | "success" | "warning" | "neutral" | "info" | "subtle-success" | "subtle-warning" | "subtle-error" | "subtle-info" | "subtle-neutral" | "outline-success" | "outline-warning" | "outline-error" | "outline-info" | "outline-neutral" | null | undefined;
1064
1199
  } & ClassProp) | undefined) => string;
1065
1200
 
1066
1201
  export { Blocker }
@@ -1215,16 +1350,45 @@ declare interface CellEditBase<TRow extends Record<string, unknown>, TValue, TDr
1215
1350
  * Observes editor drafts, including incomplete input and restored drafts on
1216
1351
  * cancellation. Direct inputs emit raw strings; choices emit selected values,
1217
1352
  * not search text or highlights. Updating `data` here is outside the supported
1218
- * coordination contract. The return value is ignored.
1353
+ * coordination contract. A failed change check retains its draft and blocks
1354
+ * confirmation; pending change checks finish before `onValueCommitted` runs.
1355
+ * Cancellation notifications cannot create a new cell error after discarding
1356
+ * the draft. Pass `error: false` for unobserved callback behavior.
1219
1357
  */
1220
1358
  onValueChange?: (row: TRow, draft: TDraft) => void;
1221
1359
  /**
1222
- * Notifies a changed, confirmed editor output, compared with current `data`.
1223
- * Empty cells confirm `null`. Confirmation does not imply business validation,
1224
- * adoption, or persistence; update `data` here to adopt it. Return values are
1225
- * ignored. Output types follow the editor, not the row field's runtime type.
1360
+ * Attempts to confirm a changed editor output, compared with current `data`.
1361
+ * Empty cells confirm `null`. A normal return or fulfilled Promise completes
1362
+ * the edit; throw/rejection retains the draft and error for correction or retry.
1363
+ * Focus may leave while pending. Update `data` here to adopt a successful value;
1364
+ * DataTable does not persist or roll back consumer state. Output types follow
1365
+ * the editor, not the row field's runtime type.
1226
1366
  */
1227
1367
  onValueCommitted: (row: TRow, value: TValue | null) => void;
1368
+ /**
1369
+ * Callback failures automatically open an error popover without moving focus.
1370
+ * Only non-empty `CellEditError` messages are displayed by the standard UI;
1371
+ * other failures use localized generic feedback. Translate messages before throwing.
1372
+ * Pass `false` to disable interception and retain eager edit completion, or
1373
+ * `render` to replace the popover's body. Closing the details retains the draft
1374
+ * and error; reopen with the error icon or Alt+ArrowDown. Esc closes open details
1375
+ * first, then restores current data and clears the error. The standard popover
1376
+ * adds no reset action; custom content may include consumer-owned actions.
1377
+ */
1378
+ error?: false | {
1379
+ render: (ctx: {
1380
+ row: TRow;
1381
+ error: unknown;
1382
+ }) => ReactNode;
1383
+ };
1384
+ }
1385
+
1386
+ /**
1387
+ * A cell-editing failure whose message is safe to display to the user.
1388
+ * Translate the message before throwing; other errors use generic feedback.
1389
+ */
1390
+ export declare class CellEditError extends globalThis.Error {
1391
+ name: string;
1228
1392
  }
1229
1393
 
1230
1394
  /** Row state passed to `edit.canEdit` alongside the row. */
@@ -1416,6 +1580,34 @@ declare type CheckboxSection<TField extends string = string> = FieldSectionBase<
1416
1580
  searchThreshold?: number | false;
1417
1581
  };
1418
1582
 
1583
+ /** `"checkbox"` mode's own props. */
1584
+ declare type CheckboxSelectionOwnProps<T> = {
1585
+ /** What clicking and Space do to a row. Default `"none"`. */
1586
+ selectionMode: "checkbox";
1587
+ /**
1588
+ * Names the hidden inputs that carry the value on native form submission,
1589
+ * one per key (read with `formData.getAll(name)`). Inside a `Field.Root`, the
1590
+ * field's `name` wins.
1591
+ */
1592
+ name?: string;
1593
+ /** `id` of the form that owns the hidden inputs, when the tree is rendered outside it. */
1594
+ form?: string;
1595
+ /** The string written into each hidden input. Defaults to the item's key. */
1596
+ itemToStringValue?: (item: T, context: TreeMapItemContext<T>) => string;
1597
+ /** At least one item must be ticked before the owning form can submit. */
1598
+ required?: boolean;
1599
+ /**
1600
+ * Id for the tree's form control (Field generates one otherwise). A native
1601
+ * `<label htmlFor>` focuses the tree but doesn't name it — name it with a
1602
+ * `Field.Label`, `aria-label` or `aria-labelledby`.
1603
+ */
1604
+ id?: string;
1605
+ /** Ref to the hidden proxy input that carries `required` and Field validation. */
1606
+ inputRef?: React_2.Ref<HTMLInputElement>;
1607
+ /** Fires when focus leaves the tree (not each row). */
1608
+ onBlur?: () => void;
1609
+ } & TreeValueProps<T> & TreeSelectionBehaviorProps;
1610
+
1419
1611
  /** Clears only the rail's own fields. Renders nothing while none are active. */
1420
1612
  declare function ClearAll({ children, className }: ClearAllProps): JSX.Element | null;
1421
1613
 
@@ -1673,6 +1865,17 @@ declare interface ColumnBase<TRow extends Record<string, unknown>> {
1673
1865
  * across spread-then-override patterns like `column({ ...inferred, render })`.
1674
1866
  */
1675
1867
  render?: (row: TRow) => ReactNode;
1868
+ /**
1869
+ * Sets `className`, `style`, and `title` on the data cell's `<td>`, including
1870
+ * its padding, based on the row. Return `undefined` to keep the defaults.
1871
+ * Classes are merged with the built-in classes; CSS specificity still applies.
1872
+ * An inline `style.backgroundColor` remains visible during row hover and
1873
+ * selection, including on pinned cells. Use an opaque background for pinned
1874
+ * cells to prevent content bleeding through. Column `width` and sticky
1875
+ * positioning take precedence over `style`. Content stays owned by `render`;
1876
+ * events, refs, and cell spanning are not configurable through this hook.
1877
+ */
1878
+ cellProps?: (row: TRow) => Pick<ComponentProps<"td">, "className" | "style" | "title"> | undefined;
1676
1879
  /**
1677
1880
  * Custom header renderer.
1678
1881
  *
@@ -1685,6 +1888,40 @@ declare interface ColumnBase<TRow extends Record<string, unknown>> {
1685
1888
  * still driven by `label`, `sort`, and other column metadata.
1686
1889
  */
1687
1890
  header?: (ctx: HeaderRenderContext) => ReactNode;
1891
+ /**
1892
+ * Sets `className`, `style`, and `title` on this column's header `<th>`.
1893
+ * Receives the same context as `header`; return `undefined` to keep the defaults.
1894
+ * Classes are merged with the built-in classes; column `width` and sticky
1895
+ * positioning take precedence over `style`. Use an opaque background for
1896
+ * pinned headers. Content stays owned by `header` or the default renderer;
1897
+ * sorting and context-menu behavior are unchanged. Built-in selection,
1898
+ * expansion, and action headers are not affected.
1899
+ */
1900
+ headerProps?: (ctx: HeaderRenderContext) => Pick<ComponentProps<"th">, "className" | "style" | "title"> | undefined;
1901
+ /**
1902
+ * Content for this column's cell in a sticky table footer: a static string
1903
+ * or a renderer receiving the current `data.rows` (the current page, not all
1904
+ * records or only selected rows). `type` and `typeOptions` do not apply.
1905
+ *
1906
+ * A footer row appears when any visible column defines a footer, including
1907
+ * an empty string. Columns without one leave a blank cell; hidden columns'
1908
+ * callbacks are not called.
1909
+ * Loading keeps the footer row with skeletons without calling renderers.
1910
+ * Hidden during errors; loaded empty data receives `rows: []`.
1911
+ * Separate from `DataTable.Footer`, the pagination / bulk-action container.
1912
+ */
1913
+ footer?: string | ((ctx: FooterRenderContext<TRow>) => ReactNode);
1914
+ /**
1915
+ * Sets `className`, `style`, and `title` on this column's footer `<td>`.
1916
+ * Receives the same context as `footer`; return `undefined` to keep the defaults.
1917
+ * Classes are merged with the built-in classes; column `width` and sticky
1918
+ * positioning take precedence over `style`. Use an opaque background for
1919
+ * pinned footer cells. Content stays owned by `footer`; events, refs, and
1920
+ * cell spanning are not configurable through this hook.
1921
+ * Does not create a footer row by itself. Not called while loading, on errors,
1922
+ * or for hidden columns. Built-in utility footer cells are not affected.
1923
+ */
1924
+ footerProps?: (ctx: FooterRenderContext<TRow>) => Pick<ComponentProps<"td">, "className" | "style" | "title"> | undefined;
1688
1925
  /**
1689
1926
  * Stable identifier used for column visibility toggling, persisted layout
1690
1927
  * state, raw-value fallback (`row[col.id]`), and as the React key. Falls
@@ -2305,7 +2542,7 @@ declare namespace Content_2 {
2305
2542
  }
2306
2543
 
2307
2544
  /** The main dialog panel that contains the dialog content. Automatically includes a close button and overlay. */
2308
- declare function Content_3({ className, children, ...props }: React_2.ComponentProps<typeof Dialog_2.Popup>): JSX.Element;
2545
+ declare function Content_3({ className, children, ref, initialFocus, ...props }: DialogContentProps): JSX.Element;
2309
2546
 
2310
2547
  declare namespace Content_3 {
2311
2548
  var displayName: string;
@@ -2359,11 +2596,15 @@ export declare type ContextData = AppShellRegister extends {
2359
2596
  } ? T : Record<string, unknown>;
2360
2597
 
2361
2598
  /**
2362
- * A styled input control for the field.
2599
+ * A styled text input for the field.
2363
2600
  *
2364
- * Can be omitted when using another Base UI-backed AppShell input component
2365
- * (e.g. Select, Combobox, Autocomplete) as a sibling — those components
2366
- * register themselves with the Field context automatically.
2601
+ * Use it for plain text-like inputs, or pass a native element to `render`
2602
+ * (e.g. `render={<textarea />}`). `Select`, `Combobox`, `Autocomplete`,
2603
+ * `Checkbox`, `Textarea`, `DateField`, `DatePicker`, `DateRangePicker` and
2604
+ * `Tree` go directly under `Field.Root` instead: each draws its own frame and
2605
+ * registers with the Field context itself. Passing one to `render` draws a second frame
2606
+ * and logs a warning. `Input` does not connect to `Field.Root` — use
2607
+ * `Field.Control` in its place inside a field.
2367
2608
  */
2368
2609
  declare function Control({ className, ...props }: React_2.ComponentProps<typeof Field_2.Control>): JSX.Element;
2369
2610
 
@@ -2684,7 +2925,8 @@ export declare const DataTable: {
2684
2925
  /** Built-in column visibility, ordering, and pinning controls. */
2685
2926
  readonly ColumnSettings: typeof DataTableColumnSettings;
2686
2927
  /**
2687
- * Renders `<table>` with built-in `Headers` and `Body`.
2928
+ * Renders `<table>` with built-in headers, body, and a sticky footer row
2929
+ * when a visible column defines `footer`.
2688
2930
  * Place inside `DataTable.Root`.
2689
2931
  */
2690
2932
  readonly Table: typeof DataTableTable;
@@ -2821,6 +3063,26 @@ export declare interface DataTableContextValue<TRow extends Record<string, unkno
2821
3063
  collapseAllRows?: () => void;
2822
3064
  /** Expansion config. Its presence enables the expand column and detail rows. */
2823
3065
  rowExpansion?: RowExpansionOptions<TRow>;
3066
+ /** Sub-rows config. Its presence turns the table into a tree. */
3067
+ subRows?: SubRowsOptions<TRow>;
3068
+ /** The rows to render with sub-rows: each page row followed by its open sub-rows. */
3069
+ visibleRows?: DataTableTreeRow<TRow>[];
3070
+ /** Key of the hierarchy column. */
3071
+ treeColumnKey?: string;
3072
+ /**
3073
+ * The hierarchy column. It's owned by `subRows`, so it's not in `columns`,
3074
+ * but it leads `visibleColumns`.
3075
+ */
3076
+ hierarchyColumn?: Column<TRow>;
3077
+ /** Ids of the rows whose sub-rows are open. */
3078
+ expandedSubRowIds?: string[];
3079
+ /** Opens or closes `row`'s sub-rows. */
3080
+ toggleSubRows?: (row: TRow) => void;
3081
+ /** A row's checkbox, derived as `rowSelection.selectionStrategy` says. */
3082
+ getRowCheckState?: (row: TRow) => {
3083
+ checked: boolean;
3084
+ indeterminate: boolean;
3085
+ };
2824
3086
  }
2825
3087
 
2826
3088
  /**
@@ -2836,6 +3098,38 @@ declare type DataTableDateFilterOperator = Extract<OperatorForFilterType["date"]
2836
3098
 
2837
3099
  declare type DataTableEnumFilterOperator = Extract<OperatorForFilterType["enum"], "in">;
2838
3100
 
3101
+ /**
3102
+ * `rowExpansion` and `subRows` are mutually exclusive. The `never` members reject
3103
+ * both even when options come from a typed variable or a spread.
3104
+ */
3105
+ declare type DataTableExpansionOptions<TRow extends Record<string, unknown>> = {
3106
+ /**
3107
+ * Expandable detail rows. Providing this enables the whole feature: a chevron
3108
+ * column is added at the left edge (auto-pinned left, after the selection
3109
+ * column) and `render`'s output appears in a full-width row beneath its parent.
3110
+ *
3111
+ * Grouped rather than flat so the parts can't be configured in a broken
3112
+ * combination — a label or predicate without a renderer, or `expandedIds`
3113
+ * without `onChange`, are all compile errors.
3114
+ *
3115
+ * **Requirement:** Each row must have a string or number `id` field.
3116
+ * Expansion is keyed by `id`, so rows without one render no chevron.
3117
+ *
3118
+ * **Note:** Expansion is **not** cleared on page change — ids of rows no
3119
+ * longer on the page simply do not render. Call `collapseAllRows()` to reset.
3120
+ */
3121
+ rowExpansion?: RowExpansionOptions<TRow>;
3122
+ subRows?: never;
3123
+ } | {
3124
+ rowExpansion?: never;
3125
+ /**
3126
+ * Nested rows under each row, opened from a caret in the hierarchy column.
3127
+ * See {@link SubRowsOptions}. Can't be combined with `rowExpansion`: a row
3128
+ * shows either its sub-rows or a detail panel, so passing both is a type error.
3129
+ */
3130
+ subRows: SubRowsOptions<TRow>;
3131
+ };
3132
+
2839
3133
  export declare type DataTableFilterConfig = (Extract<FilterConfig, {
2840
3134
  type: "string";
2841
3135
  }> & {
@@ -2970,6 +3264,19 @@ declare namespace DataTableToolbar {
2970
3264
  var displayName: string;
2971
3265
  }
2972
3266
 
3267
+ /** One rendered row of a table with `subRows`. */
3268
+ export declare interface DataTableTreeRow<TRow extends Record<string, unknown>> {
3269
+ row: TRow;
3270
+ /** 0 for the page's own rows. */
3271
+ depth: number;
3272
+ /** The row has sub-rows (and an id, so it can open). */
3273
+ hasSubRows: boolean;
3274
+ /** Its sub-rows are shown. */
3275
+ expanded: boolean;
3276
+ /** Unique render key, from the row's position in the tree. */
3277
+ key: string;
3278
+ }
3279
+
2973
3280
  declare type DataTableUiFilterOperatorByType = {
2974
3281
  string: DataTableStringFilterOperator;
2975
3282
  number: DataTableNumericTemporalFilterOperator;
@@ -3304,6 +3611,39 @@ export declare type DefaultSidebarProps = {
3304
3611
  iconRail?: boolean;
3305
3612
  };
3306
3613
 
3614
+ /**
3615
+ * Small typed helper for defining local AI chat tools.
3616
+ *
3617
+ * This is mostly an identity function, but it keeps `execute(args)` inferred
3618
+ * from the provided schema when tools are declared inline.
3619
+ *
3620
+ * @example
3621
+ * ```ts
3622
+ * import { defineAIChatTool } from "@tailor-platform/app-shell";
3623
+ * import { z } from "zod/v4";
3624
+ *
3625
+ * const lookupCustomer = defineAIChatTool({
3626
+ * description: "Look up a customer in the current workspace",
3627
+ * schema: z.object({
3628
+ * customerId: z.string(),
3629
+ * }),
3630
+ * async execute({ customerId }, { signal }) {
3631
+ * const customer = await fetchCustomer(customerId, { signal });
3632
+ * return {
3633
+ * id: customer.id,
3634
+ * name: customer.name,
3635
+ * status: customer.status,
3636
+ * };
3637
+ * },
3638
+ * });
3639
+ * ```
3640
+ */
3641
+ export declare function defineAIChatTool<const TSchema extends AIChatToolSchema<any, any>>(tool: {
3642
+ description?: string;
3643
+ schema: TSchema;
3644
+ execute: (args: StandardSchemaV1.InferOutput<TSchema>, context: AIChatToolContext) => unknown | Promise<unknown>;
3645
+ }): AILocalTool<TSchema>;
3646
+
3307
3647
  /**
3308
3648
  * Defines internationalization labels for multiple locales.
3309
3649
  *
@@ -3609,6 +3949,8 @@ export declare const Dialog: {
3609
3949
  Trigger: typeof Trigger_2;
3610
3950
  };
3611
3951
 
3952
+ declare type DialogContentProps = React_2.ComponentProps<typeof Dialog_2.Popup>;
3953
+
3612
3954
  declare type DialogRootProps = Pick<React_2.ComponentProps<typeof Dialog_2.Root>, "open" | "defaultOpen" | "onOpenChange" | "modal"> & {
3613
3955
  children: React_2.ReactNode;
3614
3956
  };
@@ -3706,6 +4048,23 @@ declare type DynamicLocales<Def extends Record<string, LabelValue>> = {
3706
4048
  [locale: string]: Partial<LabelDefinition<Def>> | undefined;
3707
4049
  };
3708
4050
 
4051
+ /**
4052
+ * The role each element component applies when no `variant` is given. They
4053
+ * follow `defaultTagNames`: body roles render `p`, label roles render `span`.
4054
+ * `div` is a block element like `p`, so it gets the default role of `Text`.
4055
+ */
4056
+ declare const elementDefaultVariants: {
4057
+ readonly h1: "heading-lg";
4058
+ readonly h2: "heading-md";
4059
+ readonly h3: "heading-sm";
4060
+ readonly h4: "heading-sm";
4061
+ readonly h5: "heading-sm";
4062
+ readonly h6: "heading-sm";
4063
+ readonly p: "body-md";
4064
+ readonly span: "label-md";
4065
+ readonly div: "body-md";
4066
+ };
4067
+
3709
4068
  /**
3710
4069
  * Behavior when a field value is empty/null/undefined
3711
4070
  */
@@ -3817,6 +4176,14 @@ declare type ErrorBoundaryProps = {
3817
4176
  errorBoundary?: ErrorBoundaryComponent;
3818
4177
  };
3819
4178
 
4179
+ /**
4180
+ * Rules out another mode's props, so that (say) `name` without
4181
+ * `selectionMode: "checkbox"` is a type error rather than silently ignored.
4182
+ */
4183
+ declare type Excluding<P> = {
4184
+ [K in Exclude<keyof P, "selectionMode">]?: never;
4185
+ };
4186
+
3820
4187
  /**
3821
4188
  * Type-safe path builder for file-based routing.
3822
4189
  *
@@ -4229,6 +4596,12 @@ declare namespace Footer_3 {
4229
4596
  var displayName: string;
4230
4597
  }
4231
4598
 
4599
+ /** Context passed to custom column `footer` renderers and `footerProps` callbacks. */
4600
+ export declare interface FooterRenderContext<TRow extends Record<string, unknown>> {
4601
+ /** Current `data.rows` (the current page, not all records or only selected rows). */
4602
+ rows: readonly TRow[];
4603
+ }
4604
+
4232
4605
  /**
4233
4606
  * A form element with consolidated error handling and validation.
4234
4607
  *
@@ -4432,7 +4805,7 @@ declare type GlobalHeaderLayoutBodyProps = GlobalHeaderLayoutCommonProps & {
4432
4805
  children?: never;
4433
4806
  };
4434
4807
 
4435
- declare type GlobalHeaderLayoutCommonProps = {
4808
+ declare type GlobalHeaderLayoutCommonProps = SidebarBehaviourProps & {
4436
4809
  /**
4437
4810
  * The app-wide top bar, spanning above the sidebar and content.
4438
4811
  *
@@ -4447,8 +4820,6 @@ declare type GlobalHeaderLayoutCommonProps = {
4447
4820
  sidebar?: React.ReactNode;
4448
4821
  /** Whether the sidebar is expanded by default on desktop. @default true */
4449
4822
  defaultOpen?: boolean;
4450
- /** Whether the sidebar can be collapsed. @default true */
4451
- collapsible?: boolean;
4452
4823
  };
4453
4824
 
4454
4825
  /** Default content layout — you render the page via the `Outlet` render prop. */
@@ -4553,17 +4924,20 @@ export declare interface GridProps extends React_2.ComponentProps<"div"> {
4553
4924
  justify?: "start" | "center" | "end" | "between" | "around" | "evenly";
4554
4925
  }
4555
4926
 
4927
+ /** An expandable group with optional separation of its heading action and expand control. */
4928
+ declare function Group({ title, icon, render, isActive, onClick, expandOnClick, defaultOpen, children, ...props }: GroupProps): JSX.Element;
4929
+
4556
4930
  /** Groups related menu items with the corresponding label. */
4557
- declare function Group({ ...props }: React_2.ComponentProps<typeof Menu_2.Group>): JSX.Element;
4931
+ declare function Group_2({ ...props }: React_2.ComponentProps<typeof Menu_2.Group>): JSX.Element;
4558
4932
 
4559
- declare namespace Group {
4933
+ declare namespace Group_2 {
4560
4934
  var displayName: string;
4561
4935
  }
4562
4936
 
4563
4937
  /** A related group of controls within a toolbar row. */
4564
- declare function Group_2({ className, ...props }: ToolbarGroupProps): JSX.Element;
4938
+ declare function Group_3({ className, ...props }: ToolbarGroupProps): JSX.Element;
4565
4939
 
4566
- declare namespace Group_2 {
4940
+ declare namespace Group_3 {
4567
4941
  var displayName: string;
4568
4942
  }
4569
4943
 
@@ -4574,6 +4948,23 @@ declare namespace GroupLabel {
4574
4948
  var displayName: string;
4575
4949
  }
4576
4950
 
4951
+ declare type GroupProps = Omit<React_2.ComponentProps<"li">, "title" | "onClick"> & {
4952
+ /** Group label with meaningful accessible text; do not nest interactive elements. */
4953
+ title: React_2.ReactNode;
4954
+ icon?: React_2.ReactNode;
4955
+ /** Replaces the main heading operation without changing expansion behavior. */
4956
+ render?: React_2.ReactElement;
4957
+ isActive?: boolean;
4958
+ /** Runs only for the heading operation, not children or a separate expand button. */
4959
+ onClick?: React_2.MouseEventHandler<HTMLButtonElement>;
4960
+ /** Whether clicking the heading toggles the child list; false requires an operation. @default true */
4961
+ expandOnClick?: boolean;
4962
+ /** Whether the child list starts expanded. @default true */
4963
+ defaultOpen?: boolean;
4964
+ } & ({
4965
+ expandOnClick?: true;
4966
+ } | RequiredOperation);
4967
+
4577
4968
  /**
4578
4969
  * Guard function type.
4579
4970
  * Guards are executed in order and stop on the first non-pass result.
@@ -4712,7 +5103,7 @@ declare type HeaderProps_2 = {
4712
5103
  };
4713
5104
 
4714
5105
  /**
4715
- * Context passed to custom `header` renderers.
5106
+ * Context passed to custom `header` renderers and `headerProps` callbacks.
4716
5107
  */
4717
5108
  export declare type HeaderRenderContext = NonSortableHeaderRenderContext | SortableHeaderRenderContext;
4718
5109
 
@@ -4735,6 +5126,29 @@ declare type HeadProps = React_2.ComponentProps<"th"> & {
4735
5126
  */
4736
5127
  export declare const hidden: () => GuardResult;
4737
5128
 
5129
+ /**
5130
+ * The column that carries the sub-rows hierarchy: the indent, the open / close
5131
+ * caret, the selection checkbox (except under `"independent"`), and the row's
5132
+ * label. It takes the display options of a regular {@link Column}, typed the
5133
+ * same way per `type`, but its layout belongs to `subRows`: it's always first
5134
+ * and pinned left, and it stays out of column settings and saved layout.
5135
+ *
5136
+ * `id`, `pin`, `align`, `edit`, `sort` and `filter` aren't available. `label`
5137
+ * and `accessor` are required: `accessor` also names each row's caret for
5138
+ * assistive tech ("Expand row Assets").
5139
+ */
5140
+ export declare type HierarchyColumn<TRow extends Record<string, unknown>> = Pick<ColumnBase<TRow>, "render" | "cellProps" | "header" | "headerProps" | "footer" | "footerProps" | "width" | "truncate"> & {
5141
+ /** Header text, and the caret's name prefix. */
5142
+ label: string;
5143
+ } & HierarchyColumnTypeBranch<TRow>;
5144
+
5145
+ /** Each `ColumnTypeBranch`, without `edit` and with `accessor` required. */
5146
+ declare type HierarchyColumnTypeBranch<TRow extends Record<string, unknown>> = ColumnTypeBranch<TRow> extends infer Branch ? Branch extends {
5147
+ accessor?: infer Accessor;
5148
+ } ? Omit<Branch, "edit" | "accessor"> & {
5149
+ accessor: NonNullable<Accessor>;
5150
+ } : never : never;
5151
+
4738
5152
  declare type HourCycle = 12 | 24;
4739
5153
 
4740
5154
  export declare type I18nLabels<Def extends Record<string, LabelValue> = Record<string, LabelValue>, L extends string = never> = {
@@ -4806,16 +5220,19 @@ declare namespace Interval {
4806
5220
  */
4807
5221
  declare type IsEmptyObject<T> = keyof T extends never ? true : false;
4808
5222
 
4809
- declare function Item({ indicator, children, className }: ActivityCardItemProps): JSX.Element;
5223
+ /** A compact link or action row. No AppShell, router, or Sidebar provider is required. */
5224
+ declare function Item({ icon, children, disabled, render, tabIndex, className, ...props }: ItemProps): JSX.Element;
5225
+
5226
+ declare function Item_2({ indicator, children, className }: ActivityCardItemProps): JSX.Element;
4810
5227
 
4811
- declare namespace Item {
5228
+ declare namespace Item_2 {
4812
5229
  var displayName: string;
4813
5230
  }
4814
5231
 
4815
5232
  /** An individual interactive item in the menu. */
4816
- declare function Item_2({ className, ...props }: React_2.ComponentProps<typeof Menu_2.Item>): JSX.Element;
5233
+ declare function Item_3({ className, ...props }: React_2.ComponentProps<typeof Menu_2.Item>): JSX.Element;
4817
5234
 
4818
- declare namespace Item_2 {
5235
+ declare namespace Item_3 {
4819
5236
  var displayName: string;
4820
5237
  }
4821
5238
 
@@ -4831,6 +5248,24 @@ export declare interface ItemGroup<T> {
4831
5248
  items: T[];
4832
5249
  }
4833
5250
 
5251
+ /** Compact icon-and-label lists with links, actions, groups, sections, and separators. */
5252
+ export declare const ItemList: {
5253
+ Root: typeof ListRoot;
5254
+ Item: typeof Item;
5255
+ Group: typeof Group;
5256
+ Section: typeof Section;
5257
+ Separator: typeof Separator;
5258
+ };
5259
+
5260
+ declare type ItemProps = React_2.ComponentProps<"button"> & {
5261
+ /** Optional decorative leading icon. */
5262
+ icon?: React_2.ReactNode;
5263
+ /** Visual emphasis only; aria-current="page" also supplies active styling. */
5264
+ isActive?: boolean;
5265
+ /** Replaces the inner button, not the containing list item. */
5266
+ render?: React_2.ReactElement;
5267
+ } & RequiredOperation;
5268
+
4834
5269
  declare function Items<T extends ActivityCardBaseItem>({ children }: ActivityCardItemsProps<T>): JSX.Element;
4835
5270
 
4836
5271
  declare namespace Items {
@@ -4907,7 +5342,7 @@ export declare const Layout: LayoutComponent;
4907
5342
 
4908
5343
  /**
4909
5344
  * Typed explicitly rather than assigning onto a `function Layout`: that form emits
4910
- * `var Header: typeof import("./Layout").Header`, which the declaration rollup
5345
+ * `var Header: typeof import("./layout").Header`, which the declaration rollup
4911
5346
  * rewrites to a bare `Header` — a namespace, not a type (TS2709). See `check-dts`.
4912
5347
  */
4913
5348
  declare type LayoutComponent = typeof LayoutRoot & {
@@ -5006,13 +5441,18 @@ declare namespace LinkItem {
5006
5441
 
5007
5442
  export { LinkProps }
5008
5443
 
5009
- /** Groups the individual tab buttons. */
5010
- declare function List({ className, children, ...props }: React_2.ComponentProps<typeof Tabs_2.List>): JSX.Element;
5444
+ /**
5445
+ * Groups the individual tab buttons. Tabs stay on one row and scroll sideways
5446
+ * when they do not fit. `className` applies to the inner track.
5447
+ */
5448
+ declare function List({ className, children, ...props }: Omit<React_2.ComponentProps<typeof Tabs_2.List>, "render">): JSX.Element;
5011
5449
 
5012
5450
  declare namespace List {
5013
5451
  var displayName: string;
5014
5452
  }
5015
5453
 
5454
+ declare function ListRoot({ className, ...props }: React_2.ComponentProps<"ul">): JSX.Element;
5455
+
5016
5456
  declare type LoaderHandler = (args: LoaderFunctionArgs) => Promise<unknown> | unknown;
5017
5457
 
5018
5458
  declare type LocalizedString = string | ((locale: string) => string);
@@ -5038,14 +5478,14 @@ export declare const Menu: {
5038
5478
  Root: typeof Root_10;
5039
5479
  Trigger: typeof Trigger_3;
5040
5480
  Content: typeof Content_4;
5041
- Item: typeof Item_2;
5481
+ Item: typeof Item_3;
5042
5482
  LinkItem: typeof LinkItem;
5043
5483
  CheckboxItem: typeof CheckboxItem;
5044
5484
  CheckboxItemIndicator: typeof CheckboxItemIndicator;
5045
5485
  RadioItem: typeof RadioItem;
5046
5486
  RadioItemIndicator: typeof RadioItemIndicator;
5047
5487
  RadioGroup: typeof RadioGroup;
5048
- Group: typeof Group;
5488
+ Group: typeof Group_2;
5049
5489
  GroupLabel: typeof GroupLabel;
5050
5490
  Separator: typeof MenuSeparator;
5051
5491
  SubmenuRoot: typeof SubmenuRoot;
@@ -5264,6 +5704,8 @@ declare type NumberRangeSection<TField extends string = string> = FieldSectionBa
5264
5704
  unit?: ReactNode;
5265
5705
  };
5266
5706
 
5707
+ declare type NumericValue = number | null | undefined;
5708
+
5267
5709
  export declare type OpenCommandPaletteOptions = {
5268
5710
  /** Optional initial text to prefill into the palette input. */
5269
5711
  search?: string;
@@ -5597,6 +6039,12 @@ declare type ReasoningTriggerProps = Omit<ComponentProps<typeof DisclosureTrigge
5597
6039
  */
5598
6040
  export declare const redirectTo: (to: string) => GuardResult;
5599
6041
 
6042
+ declare type RequiredOperation = {
6043
+ onClick: React_2.MouseEventHandler<HTMLButtonElement>;
6044
+ } | {
6045
+ render: React_2.ReactElement;
6046
+ };
6047
+
5600
6048
  /** Color theme after resolving `system` to a concrete value. */
5601
6049
  export declare type ResolvedColorTheme = "light" | "dark";
5602
6050
 
@@ -6101,8 +6549,16 @@ declare type RowExpansionOptions<TRow extends Record<string, unknown>> = {
6101
6549
  onChange?: (ids: string[]) => void;
6102
6550
  });
6103
6551
 
6104
- /** Controlled or uncontrolled row-selection configuration. Keep the mode stable while mounted. */
6105
- export declare type RowSelectionOptions = {
6552
+ /**
6553
+ * Controlled or uncontrolled row-selection configuration. Keep the mode stable while mounted.
6554
+ *
6555
+ * With `subRows`, `selectionStrategy` says how ticking spreads through the
6556
+ * hierarchy and what the selected ids list, exactly as on `Tree`. It defaults to
6557
+ * `"leaves"`: a parent row is a container, its checkbox is derived from the rows
6558
+ * beneath it, and the selection lists the leaf rows. Without `subRows` every row
6559
+ * is independent and it has no effect.
6560
+ */
6561
+ export declare type RowSelectionOptions = TreeSelectionBehaviorProps & {
6106
6562
  /**
6107
6563
  * Bulk actions for the selected IDs, shown in `DataTable.Footer` while at
6108
6564
  * least one row is selected. The bar includes the selection count, these
@@ -6157,6 +6613,9 @@ export declare type SearchSource = {
6157
6613
  }) => Promise<CommandPaletteSearchResult[]>;
6158
6614
  };
6159
6615
 
6616
+ /** A static heading and a flat list, without group indentation or an expand control. */
6617
+ declare function Section({ title, children, className, ...props }: SectionProps): JSX.Element;
6618
+
6160
6619
  declare type SectionBase = {
6161
6620
  /** Stable and unique within the rail. Keys the layout and a11y ids. */
6162
6621
  id: string;
@@ -6172,6 +6631,10 @@ declare type SectionBase = {
6172
6631
  defaultCollapsed?: boolean;
6173
6632
  };
6174
6633
 
6634
+ declare type SectionProps = Omit<React_2.ComponentProps<"li">, "title"> & {
6635
+ title: string;
6636
+ };
6637
+
6175
6638
  /** Every section, in the user's layout. Scrolls; the header stays put. */
6176
6639
  declare function Sections({ className }: SectionsProps): JSX.Element;
6177
6640
 
@@ -6462,10 +6925,13 @@ declare namespace SelectValue {
6462
6925
  var displayName: string;
6463
6926
  }
6464
6927
 
6928
+ /** A decorative divider that remains a valid child of a list. */
6929
+ declare function Separator({ className, ...props }: Omit<React_2.ComponentProps<"li">, "children">): JSX.Element;
6930
+
6465
6931
  /** A vertical separator for groups within a horizontal toolbar row. */
6466
- declare function Separator({ className, ...props }: ToolbarSeparatorProps): JSX.Element;
6932
+ declare function Separator_2({ className, ...props }: ToolbarSeparatorProps): JSX.Element;
6467
6933
 
6468
- declare namespace Separator {
6934
+ declare namespace Separator_2 {
6469
6935
  var displayName: string;
6470
6936
  }
6471
6937
 
@@ -6700,6 +7166,34 @@ declare type SheetRootProps = Pick<React_2.ComponentProps<typeof Drawer.Root>, "
6700
7166
 
6701
7167
  declare type Side = "top" | "right" | "bottom" | "left";
6702
7168
 
7169
+ /** Allowed desktop operations; every mode keeps normal mobile/tablet menu presentation. */
7170
+ declare type SidebarBehaviour =
7171
+ /** Always expanded at a fixed desktop width, with no collapse/resize controls; ignores defaultOpen. */
7172
+ "fixed"
7173
+ /** Desktop collapse/expand controls only, with a fixed width and no resize handle; respects defaultOpen. */
7174
+ | "collapse"
7175
+ /**
7176
+ * Desktop resizing only, while always expanded; ignores defaultOpen.
7177
+ * Width clamps to 192–480px, and double-click resets to 256px without collapsing.
7178
+ */
7179
+ | "resize"
7180
+ /**
7181
+ * Default: both desktop collapsing and resizing are enabled; respects defaultOpen.
7182
+ * Dragging can expand, resize, and collapse. Double-click resets to 256px or collapses from 256px.
7183
+ */
7184
+ | "collapse-and-resize";
7185
+
7186
+ /** New and deprecated configuration cannot be specified together. */
7187
+ declare type SidebarBehaviourProps = {
7188
+ /** Desktop operations to allow. @default "collapse-and-resize" */
7189
+ sidebarBehaviour?: SidebarBehaviour;
7190
+ collapsible?: never;
7191
+ } | {
7192
+ sidebarBehaviour?: never;
7193
+ /** @deprecated Use sidebarBehaviour. true maps to "collapse", false to "fixed". */
7194
+ collapsible?: boolean;
7195
+ };
7196
+
6703
7197
  /**
6704
7198
  * A collapsible group for sidebar navigation.
6705
7199
  *
@@ -6903,7 +7397,7 @@ declare type SidebarLayoutBodyProps = SidebarLayoutCommonProps & {
6903
7397
  children?: never;
6904
7398
  };
6905
7399
 
6906
- declare type SidebarLayoutCommonProps = {
7400
+ declare type SidebarLayoutCommonProps = SidebarBehaviourProps & {
6907
7401
  /**
6908
7402
  * Custom sidebar content. Replaces the whole sidebar region.
6909
7403
  *
@@ -6920,14 +7414,6 @@ declare type SidebarLayoutCommonProps = {
6920
7414
  * @default true
6921
7415
  */
6922
7416
  defaultOpen?: boolean;
6923
- /**
6924
- * Whether the sidebar can be collapsed.
6925
- * When set to `false`, the sidebar is always visible and cannot be toggled.
6926
- * `defaultOpen` is ignored when this is `false`.
6927
- *
6928
- * @default true
6929
- */
6930
- collapsible?: boolean;
6931
7417
  /**
6932
7418
  * A global top bar rendered above **everything** — spanning the full width
6933
7419
  * across the top of the primary sidebar and the content region alike. The
@@ -7067,6 +7553,24 @@ export declare type SidebarSectionProps = {
7067
7553
  */
7068
7554
  export declare const SidebarSeparator: () => JSX.Element;
7069
7555
 
7556
+ /** `"single"` mode's own props. */
7557
+ declare type SingleSelectionOwnProps<T> = {
7558
+ /** What clicking and Space do to a row. Default `"none"`. */
7559
+ selectionMode: "single";
7560
+ /** Controlled selection: the selected row's key, or `null` for none. */
7561
+ selectedKey?: string | null;
7562
+ /** Initial selection when uncontrolled. */
7563
+ defaultSelectedKey?: string | null;
7564
+ /** Fires when the user selects a row, with its key and your item. */
7565
+ onSelectedKeyChange?: (key: string, item: T) => void;
7566
+ /**
7567
+ * Opens the selected row's ancestors when it starts out hidden or
7568
+ * `selectedKey` changes from outside, so the selection is always on screen.
7569
+ * A group the user closes afterwards stays closed. Default `true`.
7570
+ */
7571
+ revealSelected?: boolean;
7572
+ };
7573
+
7070
7574
  declare type Size = "sm" | "md" | "lg" | "xl" | "full";
7071
7575
 
7072
7576
  /**
@@ -7177,6 +7681,39 @@ declare namespace SubmenuTrigger {
7177
7681
  var displayName: string;
7178
7682
  }
7179
7683
 
7684
+ /**
7685
+ * Nested rows, shown under their parent when it's opened. The page's rows are
7686
+ * the top level, so pagination counts them, and each parent's sub-rows stay on
7687
+ * its page.
7688
+ *
7689
+ * `hierarchyColumn` defines the column that carries the hierarchy. Like the
7690
+ * row-actions column, it's added by the feature rather than taken from
7691
+ * `columns`: it's always first and pinned left, can't be hidden or moved, and
7692
+ * leaves your other columns as you defined them.
7693
+ *
7694
+ * **Requirement:** Each row must have a string or number `id`, unique across
7695
+ * the whole tree. Expansion and selection are keyed by it; a row without one
7696
+ * shows its sub-rows nowhere and can't be selected.
7697
+ */
7698
+ export declare type SubRowsOptions<TRow extends Record<string, unknown>> = {
7699
+ /** A row's sub-rows. Omitted, `null` or empty means a leaf. */
7700
+ getSubRows: (row: TRow) => readonly TRow[] | null | undefined;
7701
+ /** The column that shows the hierarchy. See {@link HierarchyColumn}. */
7702
+ hierarchyColumn: HierarchyColumn<TRow>;
7703
+ } & ({
7704
+ /** Controlled: ids of the rows whose sub-rows are open. Update it from `onExpandedChange`. */
7705
+ expandedIds: string[];
7706
+ /** Called with every open id after the user opens or closes a row. */
7707
+ onExpandedChange: (ids: string[]) => void;
7708
+ defaultExpandedIds?: never;
7709
+ } | {
7710
+ expandedIds?: never;
7711
+ /** Ids open at first, when uncontrolled. */
7712
+ defaultExpandedIds?: string[];
7713
+ /** Notification in uncontrolled mode, with every open id. */
7714
+ onExpandedChange?: (ids: string[]) => void;
7715
+ });
7716
+
7180
7717
  /**
7181
7718
  * A starter-prompt chip. Submits `suggestion` as if the user had typed and
7182
7719
  * sent it — the fastest way to teach people what the assistant is good at.
@@ -7279,16 +7816,22 @@ declare type TabsVariant = "default" | "line" | "capsule";
7279
7816
  * Text with a typography role. The role sets the size, line height, weight,
7280
7817
  * and letter spacing. It does not set the color or choose the heading level.
7281
7818
  *
7819
+ * `Text.h1` to `Text.h6`, `Text.p`, `Text.span`, and `Text.div` always render
7820
+ * their named element, with a default role for that element. They take
7821
+ * `variant`, the element's own attributes, and a ref, but not `render`.
7822
+ *
7282
7823
  * @example
7283
7824
  * ```tsx
7284
7825
  * import { Text } from "@tailor-platform/app-shell";
7285
7826
  *
7286
- * <Text variant="heading-md" render={<h3 />}>Line items</Text>
7287
- * <Text variant="body-md" className="text-muted-foreground">Orders sent this month.</Text>
7288
- * <Text variant="label-md" className="tabular-nums">1,240</Text>
7827
+ * <Text.h1>Purchase orders</Text.h1>
7828
+ * <Text.h3 variant="heading-md">Line items</Text.h3>
7829
+ * <Text.p className="text-muted-foreground">Orders sent this month.</Text.p>
7830
+ * <Text.span className="tabular-nums">1,240</Text.span>
7831
+ * <Text variant="label-md" render={<CustomLabel />}>Quantity</Text>
7289
7832
  * ```
7290
7833
  */
7291
- declare function Text_2({ className, variant, render, children, ref, ...props }: TextProps): React_2.ReactElement<unknown, string | React_2.JSXElementConstructor<any>>;
7834
+ declare const Text_2: TextComponent;
7292
7835
  export { Text_2 as Text }
7293
7836
 
7294
7837
  /**
@@ -7368,13 +7911,34 @@ export declare interface TextCellEditOptions<TRow extends Record<string, unknown
7368
7911
  options?: readonly SelectOption[];
7369
7912
  }
7370
7913
 
7914
+ /**
7915
+ * Keep the exported static API type explicit instead of relying on
7916
+ * `Object.assign(...)` inference, as `Layout` and `Autocomplete` do.
7917
+ */
7918
+ declare type TextComponent = typeof TextRoot & {
7919
+ [T in TextTagName]: TextElementComponent<T>;
7920
+ };
7921
+
7922
+ declare type TextElementComponent<T extends TextTagName> = {
7923
+ (props: TextElementProps<T>): React_2.JSX.Element;
7924
+ displayName?: string;
7925
+ };
7926
+
7927
+ declare type TextElementProps<T extends TextTagName> = React_2.ComponentProps<T> & VariantProps<typeof textVariants>;
7928
+
7371
7929
  export declare type TextProps = React_2.HTMLAttributes<HTMLElement> & VariantProps<typeof textVariants> & {
7372
7930
  /** Ref to the rendered element. */
7373
7931
  ref?: React_2.Ref<HTMLElement>;
7374
- /** Custom element to render as (Base UI render prop). Use it to set the heading level, for example `render={<h3 />}`. */
7932
+ /** Custom element to render as (Base UI render prop). Use it to compose with another component. For a plain HTML element, use `Text.h1` to `Text.h6`, `Text.p`, `Text.span`, or `Text.div`. */
7375
7933
  render?: React_2.ReactElement;
7376
7934
  };
7377
7935
 
7936
+ declare function TextRoot({ className, variant, render, children, ref, ...props }: TextProps): React_2.ReactElement<unknown, string | React_2.JSXElementConstructor<any>>;
7937
+
7938
+ declare namespace TextRoot {
7939
+ var displayName: string;
7940
+ }
7941
+
7378
7942
  /** Free text with one fixed operator. */
7379
7943
  declare type TextSection<TField extends string = string> = FieldSectionBase<TField> & {
7380
7944
  control: "text";
@@ -7386,6 +7950,8 @@ declare type TextSection<TField extends string = string> = FieldSectionBase<TFie
7386
7950
  minLength?: number;
7387
7951
  };
7388
7952
 
7953
+ declare type TextTagName = keyof typeof elementDefaultVariants;
7954
+
7389
7955
  declare const textVariants: (props?: ({
7390
7956
  variant?: "heading-lg" | "heading-md" | "heading-sm" | "body-md" | "body-sm" | "label-md" | "label-sm" | "code-sm" | "body-md-relaxed" | "body-sm-relaxed" | null | undefined;
7391
7957
  } & ClassProp) | undefined) => string;
@@ -7796,8 +8362,8 @@ declare function Tool({ className, children, ...props }: ToolProps): JSX.Element
7796
8362
  export declare const Toolbar: {
7797
8363
  Root: typeof Root_13;
7798
8364
  Row: typeof Row_2;
7799
- Group: typeof Group_2;
7800
- Separator: typeof Separator;
8365
+ Group: typeof Group_3;
8366
+ Separator: typeof Separator_2;
7801
8367
  };
7802
8368
 
7803
8369
  declare type ToolbarGroupProps = React_2.ComponentProps<"div">;
@@ -7812,6 +8378,9 @@ declare type ToolbarRowProps = Omit<React_2.ComponentProps<"div">, "role" | "onK
7812
8378
 
7813
8379
  declare type ToolbarSeparatorProps = Omit<React_2.ComponentProps<"div">, "role" | "aria-orientation">;
7814
8380
 
8381
+ /** Compact tool-call label for the active flow, rendered as its own row. */
8382
+ declare function ToolCall({ call, className }: AIChatToolCallProps): JSX.Element;
8383
+
7815
8384
  declare function ToolContent({ className, ...props }: ToolContentProps): JSX.Element;
7816
8385
 
7817
8386
  declare type ToolContentProps = ComponentProps<typeof DisclosurePanel>;
@@ -7859,43 +8428,344 @@ export declare const Tooltip: {
7859
8428
  Provider: typeof Provider;
7860
8429
  };
7861
8430
 
7862
- declare type TooltipRootProps = Pick<React_2.ComponentProps<typeof Tooltip_2.Root>, "open" | "defaultOpen" | "onOpenChange"> & {
8431
+ declare type TooltipRootProps = Pick<React_2.ComponentProps<typeof Tooltip_2.Root>, "open" | "defaultOpen" | "onOpenChange" | "disabled"> & {
7863
8432
  children: React_2.ReactNode;
7864
8433
  };
7865
8434
 
7866
- /** The element that triggers the tooltip on hover or focus. */
7867
- declare function Trigger({ ...props }: React_2.ComponentProps<typeof Tooltip_2.Trigger>): JSX.Element;
8435
+ /**
8436
+ * A tree of your own items, for browsing hierarchies (accounts, locations,
8437
+ * categories), picking one node, or ticking many. It follows the ARIA tree
8438
+ * pattern: one tab stop, arrows to move and open, Space to select or tick, and
8439
+ * Enter for `onAction`.
8440
+ *
8441
+ * Pass your own items with `mapItem` (as with `Select` / `Combobox`). A key is
8442
+ * the item's identity across the whole tree: the same key in two places is one
8443
+ * item. When codes repeat with different meanings, compose a unique key from
8444
+ * the `parents` that `mapItem` receives.
8445
+ *
8446
+ * `selectionMode` sets what a row does:
8447
+ *
8448
+ * - `"none"` (default): browsing. Clicking a leaf runs `onAction`.
8449
+ * - `"single"`: one selected row (`selectedKey`), for master–detail views.
8450
+ * - `"checkbox"`: a multi-select form control (`value`). By default parents are
8451
+ * containers: ticking one ticks every enabled leaf beneath it, and the value
8452
+ * lists leaves. `selectionStrategy` changes that. `name`
8453
+ * submits one hidden input per value key, and inside a `Field.Root` it picks
8454
+ * up the label, description, error, `required` and invalid state.
8455
+ *
8456
+ * `filter` narrows the tree to matches and their ancestors. The tree has no
8457
+ * search box of its own; for the "search, pick, then add" flow in a dialog, use
8458
+ * {@link TreePicker}.
8459
+ *
8460
+ * The list scrolls inside the component, so give it a height (or a sized
8461
+ * container) for long trees.
8462
+ *
8463
+ * @example
8464
+ * ```tsx
8465
+ * // warehouses: (Warehouse | Bin)[], so `mapItem` can return either level.
8466
+ * const isWarehouse = (node: Warehouse | Bin): node is Warehouse => "bins" in node;
8467
+ * const [bins, setBins] = useState<string[]>([]);
8468
+ *
8469
+ * <Field.Root name="bins">
8470
+ * <Field.Label>Bins to count</Field.Label>
8471
+ * <Tree
8472
+ * className="astw:h-96"
8473
+ * items={warehouses}
8474
+ * mapItem={(item, { parents }) =>
8475
+ * isWarehouse(item)
8476
+ * ? { key: item.id, label: item.name, children: item.bins }
8477
+ * : // `parents` is the union too. A guard, unlike a cast, has TypeScript
8478
+ * // check there's a warehouse above (hence `?.`).
8479
+ * { key: `${parents.find(isWarehouse)?.id}/${item.code}`, label: item.code }
8480
+ * }
8481
+ * selectionMode="checkbox"
8482
+ * value={bins}
8483
+ * onValueChange={setBins}
8484
+ * />
8485
+ * </Field.Root>
8486
+ * ```
8487
+ */
8488
+ export declare function Tree<T>(props: TreeProps<T>): JSX.Element;
7868
8489
 
7869
- declare namespace Trigger {
8490
+ export declare namespace Tree {
7870
8491
  var displayName: string;
7871
8492
  }
7872
8493
 
7873
- /** The element that opens the dialog when clicked. */
7874
- declare function Trigger_2({ ...props }: React_2.ComponentProps<typeof Dialog_2.Trigger>): JSX.Element;
7875
-
7876
- declare namespace Trigger_2 {
7877
- var displayName: string;
7878
- }
8494
+ export declare type TreeChangeDetails<T> = {
8495
+ /** The value's items in tree order, one per key. Keys that aren't in the tree are left out. */
8496
+ selected: TreeSelectedItem<T>[];
8497
+ };
7879
8498
 
7880
- /** The element that opens the menu when clicked. */
7881
- declare function Trigger_3({ ...props }: React_2.ComponentProps<typeof Menu_2.Trigger>): JSX.Element;
8499
+ /** Props for {@link Tree} with `selectionMode: "checkbox"`: the value, how ticking works, and forms. */
8500
+ declare type TreeCheckboxSelectionProps<T> = CheckboxSelectionOwnProps<T> & Excluding<SingleSelectionOwnProps<T>>;
7882
8501
 
7883
- declare namespace Trigger_3 {
7884
- var displayName: string;
8502
+ /** What the tree shows — shared by `Tree` and `TreePicker`. */
8503
+ declare interface TreeContentProps<T> {
8504
+ /** Your top-level items. Children come from `mapItem`. */
8505
+ items: ReadonlyArray<T>;
8506
+ /** Reads an item's key, label, children and disabled state. */
8507
+ mapItem: (item: T, context: TreeMapItemContext<T>) => TreeMappedItem<T>;
8508
+ /** The row's content. Defaults to the item's `label`. */
8509
+ renderItem?: (row: TreeRowState<T>) => React_2.ReactNode;
8510
+ /** Shown when there's nothing to show. Defaults to "No items.", or "No matching items." while filtering. */
8511
+ emptyText?: React_2.ReactNode;
7885
8512
  }
7886
8513
 
7887
- /** The element that opens the sheet when clicked. */
7888
- declare function Trigger_4({ ...props }: React_2.ComponentProps<typeof Drawer.Trigger>): JSX.Element;
8514
+ /** What `filter` receives alongside each item. */
8515
+ declare type TreeFilterContext<T> = {
8516
+ /** The item's `label` from `mapItem`. */
8517
+ label: string;
8518
+ /** The item's ancestors, top level first. */
8519
+ parents: T[];
8520
+ };
7889
8521
 
7890
- declare namespace Trigger_4 {
7891
- var displayName: string;
7892
- }
8522
+ /** Props for {@link Tree}'s filtering. */
8523
+ declare type TreeFilterProps<T> = {
8524
+ /**
8525
+ * Shows only the items that match, plus their ancestors. Groups with a match
8526
+ * open on their own, and the user can still close them. A parent that matches
8527
+ * with no matching children keeps all its children, so it can still be opened.
8528
+ */
8529
+ filter?: (item: T, context: TreeFilterContext<T>) => boolean;
8530
+ };
8531
+
8532
+ /** What `mapItem` receives alongside each item. */
8533
+ declare type TreeMapItemContext<T> = {
8534
+ /** The item's ancestors, top level first. Empty for top-level items. */
8535
+ parents: T[];
8536
+ };
7893
8537
 
7894
8538
  /**
7895
- * Opens the rail on narrow screens, carrying the active filter count. Place it
7896
- * anywhere inside `FilterRail.Provider` — a table toolbar, a page header. It
7897
- * renders nothing on wide screens, where the rail is already visible, and while
7898
- * it is mounted `FilterRail.Root` skips its own fallback button.
8539
+ * How {@link Tree} reads one of your items. Mirrors `MappedItem` from
8540
+ * `Select` / `Combobox`, plus the tree's `children` and `disabled`.
8541
+ */
8542
+ export declare type TreeMappedItem<T> = {
8543
+ /**
8544
+ * Identifies the item across the whole tree. The same key in two places is
8545
+ * one item: ticking one ticks both. When codes repeat with different meanings
8546
+ * (bin `A1` in two warehouses), compose a unique key from `parents`.
8547
+ */
8548
+ key: string;
8549
+ /** Plain text: the default row content, the default search text, and the accessible name. */
8550
+ label: string;
8551
+ /** The item's children. Omitted or empty means a leaf, and only leaves are selectable values. */
8552
+ children?: ReadonlyArray<T>;
8553
+ /** Locks the item. A disabled parent locks everything beneath it. */
8554
+ disabled?: boolean;
8555
+ };
8556
+
8557
+ /** Props for {@link Tree} with `selectionMode: "none"` (the default). */
8558
+ declare type TreeNoSelectionProps<T> = {
8559
+ /** What clicking and Space do to a row. Default `"none"`. */
8560
+ selectionMode?: "none";
8561
+ } & Excluding<SingleSelectionOwnProps<T>> & Excluding<CheckboxSelectionOwnProps<T>>;
8562
+
8563
+ /**
8564
+ * A {@link Tree} in a dialog, for picking many items out of a
8565
+ * hierarchical catalog and committing them in one go — products with variants,
8566
+ * accounts with sub-accounts, warehouses with bins. It wraps `Tree` the
8567
+ * way `DatePicker` wraps `DateField`.
8568
+ *
8569
+ * The picker owns the dialog chrome, the search box, expand/collapse, and the
8570
+ * selection while it is open; each open starts empty. The consumer owns how
8571
+ * items are read (`mapItem`), how rows look (`renderItem`), how search matches
8572
+ * (`matchesSearch`) and what happens on commit (`onCommit`).
8573
+ *
8574
+ * By default parents are containers: ticking one ticks every enabled leaf
8575
+ * beneath it, and `onCommit` receives the ticked leaves in tree order with their
8576
+ * parents. `selectionStrategy` changes that, as on `Tree`.
8577
+ * Enter on a row or the "Add N items" button commits, then the picker closes
8578
+ * itself.
8579
+ *
8580
+ * The dialog has a fixed height and the list scrolls inside it, so opening or
8581
+ * closing a group never shifts what is on screen.
8582
+ *
8583
+ * @example
8584
+ * ### Bulk-adding catalog items
8585
+ * ```tsx
8586
+ * // catalog: (Category | Product)[], so `mapItem` can return either level.
8587
+ * const isProduct = (item: Category | Product): item is Product => "sku" in item;
8588
+ *
8589
+ * <TreePicker
8590
+ * open={open}
8591
+ * onOpenChange={setOpen}
8592
+ * title="Add items"
8593
+ * items={catalog}
8594
+ * mapItem={(item) =>
8595
+ * "products" in item
8596
+ * ? { key: item.id, label: item.name, children: item.products }
8597
+ * : { key: item.sku, label: item.name }
8598
+ * }
8599
+ * renderItem={({ item }) => (
8600
+ * <span className="flex w-full justify-between gap-3">
8601
+ * <span>{item.name}</span>
8602
+ * {"price" in item ? <span>{money(item.price)}</span> : null}
8603
+ * </span>
8604
+ * )}
8605
+ * // Items have the union type; a guard (not a cast) keeps categories out if
8606
+ * // the selection strategy ever returns parents.
8607
+ * onCommit={(picked) => addToOrder(picked.flatMap(({ item }) => (isProduct(item) ? [item] : [])))}
8608
+ * />
8609
+ * ```
8610
+ */
8611
+ export declare function TreePicker<T>({ open, onOpenChange, title, onCommit, ctaLabel, matchesSearch, filterSlot, searchPlaceholder, className, ...treeProps }: TreePickerProps<T>): JSX.Element;
8612
+
8613
+ export declare namespace TreePicker {
8614
+ var displayName: string;
8615
+ }
8616
+
8617
+ /** Props for {@link TreePicker}. */
8618
+ export declare type TreePickerProps<T> = TreeContentProps<T> & TreeSelectionBehaviorProps & {
8619
+ /** Controls dialog visibility. */
8620
+ open: boolean;
8621
+ /**
8622
+ * Fires on every user-driven open/close (Esc, backdrop, close button, Cancel,
8623
+ * and after a successful commit). The picker closes itself after `onCommit`,
8624
+ * so consumers should not also call this from their commit handler.
8625
+ */
8626
+ onOpenChange(open: boolean): void;
8627
+ /**
8628
+ * Search predicate. Defaults to a case-insensitive match on the item's
8629
+ * `label`. An item is kept when it or any descendant matches. Receives the
8630
+ * same `{ label, parents }` as `Tree`'s `filter`.
8631
+ */
8632
+ matchesSearch?: (item: T, query: string, context: TreeFilterContext<T>) => boolean;
8633
+ /** Rendered to the right of the search input (e.g. a category filter button). */
8634
+ filterSlot?: React_2.ReactNode;
8635
+ /** Search input placeholder. Default: `"Search"`. */
8636
+ searchPlaceholder?: string;
8637
+ /** Dialog title. Also labels the tree for assistive tech. Default: `"Select items"`. */
8638
+ title?: React_2.ReactNode;
8639
+ /**
8640
+ * Receives the value's items in tree order (see `selectionStrategy`). Items
8641
+ * ticked before `items` changed are included, even if they're no longer in it.
8642
+ */
8643
+ onCommit(selected: TreeSelectedItem<T>[]): void;
8644
+ /** Primary CTA label. Default: `"Add N items"`, or `"Add items"` when nothing is selected. */
8645
+ ctaLabel?(count: number): React_2.ReactNode;
8646
+ /** Merged onto the dialog panel. */
8647
+ className?: string;
8648
+ };
8649
+
8650
+ /** Props for {@link Tree}. */
8651
+ export declare type TreeProps<T> = TreeContentProps<T> & TreeFilterProps<T> & {
8652
+ /**
8653
+ * Enter on a row — the row's default action. In `"none"` mode a click on a
8654
+ * leaf runs it too. In `"checkbox"` mode without `onAction`, Enter inside a
8655
+ * `<form>` submits it (like Enter in a text input).
8656
+ */
8657
+ onAction?: (item: T, key: string) => void;
8658
+ /** Locks the whole tree, and in `"checkbox"` mode leaves it out of form submission. */
8659
+ disabled?: boolean;
8660
+ /** Accessible name for the tree. Use this, `aria-labelledby`, or a `Field.Label`. */
8661
+ "aria-label"?: string;
8662
+ /** Id of the element naming the tree (e.g. a card or dialog title). */
8663
+ "aria-labelledby"?: string;
8664
+ /**
8665
+ * Merged onto the root. The list scrolls inside it, so give it a height (or
8666
+ * place it in a sized container) for long trees.
8667
+ */
8668
+ className?: string;
8669
+ } & (TreeNoSelectionProps<T> | TreeSingleSelectionProps<T> | TreeCheckboxSelectionProps<T>);
8670
+
8671
+ /** What `renderItem` receives for each row. */
8672
+ export declare type TreeRowState<T> = {
8673
+ item: T;
8674
+ key: string;
8675
+ parents: T[];
8676
+ /** 0 for top-level rows. */
8677
+ depth: number;
8678
+ isLeaf: boolean;
8679
+ /** The row's checkbox is ticked. Under `"leaves"`, `"topmost"` and `"all"`, a parent is ticked when every enabled leaf beneath it is. */
8680
+ checked: boolean;
8681
+ /** Under `"leaves"`, `"topmost"` and `"all"`, a parent with some, but not all, enabled leaves ticked. */
8682
+ indeterminate: boolean;
8683
+ /** The row is the selected one, in `"single"` mode. */
8684
+ selected: boolean;
8685
+ expanded: boolean;
8686
+ disabled: boolean;
8687
+ };
8688
+
8689
+ /** One entry of the value, as reported by `onValueChange` and `TreePicker`'s `onCommit`. */
8690
+ export declare type TreeSelectedItem<T> = {
8691
+ key: string;
8692
+ /** Your original item. */
8693
+ item: T;
8694
+ /** The item's ancestors, top level first. */
8695
+ parents: T[];
8696
+ };
8697
+
8698
+ /** How ticking works and what the value lists. */
8699
+ declare type TreeSelectionBehaviorProps = {
8700
+ /** How ticking works and what the value lists. Default `"leaves"`. */
8701
+ selectionStrategy?: TreeSelectionStrategy;
8702
+ };
8703
+
8704
+ /**
8705
+ * How ticking works and what the value lists. Take a parent P with leaves A and B:
8706
+ *
8707
+ * | Strategy | Tick P | Tick A and B | P ticked on its own? |
8708
+ * | ---------------------- | ------------ | ------------ | -------------------- |
8709
+ * | `"leaves"` (default) | `[A, B]` | `[A, B]` | No |
8710
+ * | `"topmost"` | `[P]` | `[P]` | No |
8711
+ * | `"all"` | `[P, A, B]` | `[P, A, B]` | No |
8712
+ * | `"cascade"` | `[P, A, B]` | `[A, B]` | Yes |
8713
+ * | `"independent"` | `[P]` | `[A, B]` | Yes |
8714
+ *
8715
+ * - `"leaves"`, `"topmost"` and `"all"` treat parents as containers: a parent's
8716
+ * checkbox comes from its leaves, so unticking A after ticking P leaves P
8717
+ * indeterminate. With `"topmost"`, `P` stands for everything beneath it.
8718
+ * - `"cascade"` makes parents items in their own right. Ticking one also ticks
8719
+ * everything beneath it, but unticking A leaves `[P, B]`, with P still ticked.
8720
+ * - `"independent"` ticks every item on its own.
8721
+ */
8722
+ export declare type TreeSelectionStrategy = "leaves" | "topmost" | "all" | "cascade" | "independent";
8723
+
8724
+ /** Props for {@link Tree} with `selectionMode: "single"`. */
8725
+ declare type TreeSingleSelectionProps<T> = SingleSelectionOwnProps<T> & Excluding<CheckboxSelectionOwnProps<T>>;
8726
+
8727
+ /** The selection: a list of keys. Which keys depends on `selectionStrategy`. */
8728
+ declare type TreeValueProps<T> = {
8729
+ /** Controlled selection: the checked keys. */
8730
+ value?: readonly string[];
8731
+ /** Initial selection when uncontrolled. */
8732
+ defaultValue?: readonly string[];
8733
+ onValueChange?: (value: string[], details: TreeChangeDetails<T>) => void;
8734
+ };
8735
+
8736
+ /** The element that triggers the tooltip on hover or focus. */
8737
+ declare function Trigger({ ...props }: React_2.ComponentProps<typeof Tooltip_2.Trigger>): JSX.Element;
8738
+
8739
+ declare namespace Trigger {
8740
+ var displayName: string;
8741
+ }
8742
+
8743
+ /** The element that opens the dialog when clicked. */
8744
+ declare function Trigger_2({ ...props }: React_2.ComponentProps<typeof Dialog_2.Trigger>): JSX.Element;
8745
+
8746
+ declare namespace Trigger_2 {
8747
+ var displayName: string;
8748
+ }
8749
+
8750
+ /** The element that opens the menu when clicked. */
8751
+ declare function Trigger_3({ ...props }: React_2.ComponentProps<typeof Menu_2.Trigger>): JSX.Element;
8752
+
8753
+ declare namespace Trigger_3 {
8754
+ var displayName: string;
8755
+ }
8756
+
8757
+ /** The element that opens the sheet when clicked. */
8758
+ declare function Trigger_4({ ...props }: React_2.ComponentProps<typeof Drawer.Trigger>): JSX.Element;
8759
+
8760
+ declare namespace Trigger_4 {
8761
+ var displayName: string;
8762
+ }
8763
+
8764
+ /**
8765
+ * Opens the rail on narrow screens, carrying the active filter count. Place it
8766
+ * anywhere inside `FilterRail.Provider` — a table toolbar, a page header. It
8767
+ * renders nothing on wide screens, where the rail is already visible, and while
8768
+ * it is mounted `FilterRail.Root` skips its own fallback button.
7899
8769
  */
7900
8770
  declare function Trigger_5({ children, className }: TriggerProps_2): JSX.Element | null;
7901
8771
 
@@ -7960,11 +8830,20 @@ declare type TypedPaths<TRoutes extends Record<string, Record<string, string>>>
7960
8830
  for<T extends (keyof TRoutes & string) | `${keyof TRoutes & string}?${string}`>(path: T, ...params: ExtractBasePath<T> extends keyof TRoutes ? IsEmptyObject<TRoutes[ExtractBasePath<T>]> extends true ? [] : [TRoutes[ExtractBasePath<T>]] : never): string;
7961
8831
  };
7962
8832
 
8833
+ /**
8834
+ * React hook for AI Gateway chat with optional local tools.
8835
+ *
8836
+ * Messages stay text-first. Requested tool names are exposed only for the
8837
+ * active request; tool-call and tool-result protocol messages remain internal.
8838
+ */
7963
8839
  export declare function useAIChat(config: {
7964
8840
  client: AIGatewayClient;
7965
8841
  model: string;
8842
+ tools?: Record<string, AILocalTool>;
7966
8843
  }): {
7967
8844
  messages: AIChatMessage[];
8845
+ /** Requested tools in the active flow; cleared on completion, stop, or error. */
8846
+ toolCalls: ActiveToolCall[];
7968
8847
  status: AIChatStatus;
7969
8848
  error?: Error;
7970
8849
  /**
@@ -8691,22 +9570,6 @@ export declare type UseDataTableOptions<TRow extends Record<string, unknown>, TF
8691
9570
  * @deprecated Use `rowSelection.onChange` instead.
8692
9571
  */
8693
9572
  onSelectionChange?: (ids: string[]) => void;
8694
- /**
8695
- * Expandable detail rows. Providing this enables the whole feature: a chevron
8696
- * column is added at the left edge (auto-pinned left, after the selection
8697
- * column) and `render`'s output appears in a full-width row beneath its parent.
8698
- *
8699
- * Grouped rather than flat so the parts can't be configured in a broken
8700
- * combination — a label or predicate without a renderer, or `expandedIds`
8701
- * without `onChange`, are all compile errors.
8702
- *
8703
- * **Requirement:** Each row must have a string or number `id` field.
8704
- * Expansion is keyed by `id`, so rows without one render no chevron.
8705
- *
8706
- * **Note:** Expansion is **not** cleared on page change — ids of rows no
8707
- * longer on the page simply do not render. Call `collapseAllRows()` to reset.
8708
- */
8709
- rowExpansion?: RowExpansionOptions<TRow>;
8710
9573
  /**
8711
9574
  * Sort behaviour configuration.
8712
9575
  *
@@ -8717,7 +9580,7 @@ export declare type UseDataTableOptions<TRow extends Record<string, unknown>, TF
8717
9580
  sort?: false | {
8718
9581
  multiple?: boolean;
8719
9582
  };
8720
- };
9583
+ } & DataTableExpansionOptions<TRow>;
8721
9584
 
8722
9585
  /**
8723
9586
  * Return type of `useDataTable` hook.
@@ -8817,6 +9680,26 @@ export declare interface UseDataTableReturn<TRow extends Record<string, unknown>
8817
9680
  collapseAllRows?: () => void;
8818
9681
  /** Expansion config (passthrough for `DataTable.Root`). */
8819
9682
  rowExpansion?: RowExpansionOptions<TRow>;
9683
+ /** Sub-rows config (passthrough for `DataTable.Root`). */
9684
+ subRows?: SubRowsOptions<TRow>;
9685
+ /** The rows to render: each page row followed by its open sub-rows, with depth. */
9686
+ visibleRows?: DataTableTreeRow<TRow>[];
9687
+ /** Key of the hierarchy column. */
9688
+ treeColumnKey?: string;
9689
+ /** The hierarchy column, built from `subRows.hierarchyColumn`. Rendered first, pinned left. */
9690
+ hierarchyColumn?: Column<TRow>;
9691
+ /** Ids of the rows whose sub-rows are open. */
9692
+ expandedSubRowIds?: string[];
9693
+ /** Opens or closes `row`'s sub-rows. */
9694
+ toggleSubRows?: (row: TRow) => void;
9695
+ /**
9696
+ * A row's checkbox. With propagation a parent's state is derived from the rows
9697
+ * beneath it, so it can be indeterminate.
9698
+ */
9699
+ getRowCheckState?: (row: TRow) => {
9700
+ checked: boolean;
9701
+ indeterminate: boolean;
9702
+ };
8820
9703
  }
8821
9704
 
8822
9705
  /**
@@ -9212,46 +10095,6 @@ declare namespace Root {
9212
10095
  }
9213
10096
 
9214
10097
 
9215
- declare namespace Viewport {
9216
- var displayName: string;
9217
- }
9218
-
9219
-
9220
- declare namespace Row {
9221
- var displayName: string;
9222
- }
9223
-
9224
-
9225
- declare namespace Interval {
9226
- var displayName: string;
9227
- }
9228
-
9229
-
9230
- declare namespace TimelineLink {
9231
- var displayName: string;
9232
- }
9233
-
9234
-
9235
- declare namespace Root {
9236
- var displayName: string;
9237
- }
9238
-
9239
-
9240
- declare namespace Image {
9241
- var displayName: string;
9242
- }
9243
-
9244
-
9245
- declare namespace Fallback {
9246
- var displayName: string;
9247
- }
9248
-
9249
-
9250
- declare namespace Root {
9251
- var displayName: string;
9252
- }
9253
-
9254
-
9255
10098
  declare namespace Title {
9256
10099
  var displayName: string;
9257
10100
  }
@@ -9262,37 +10105,27 @@ declare namespace Description {
9262
10105
  }
9263
10106
 
9264
10107
 
9265
- declare namespace Provider {
9266
- var displayName: string;
9267
- }
9268
-
9269
-
9270
10108
  declare namespace Root {
9271
10109
  var displayName: string;
9272
10110
  }
9273
10111
 
9274
10112
 
9275
- declare namespace Header {
9276
- var displayName: string;
9277
- }
9278
-
9279
-
9280
- declare namespace ClearAll {
10113
+ declare namespace Row {
9281
10114
  var displayName: string;
9282
10115
  }
9283
10116
 
9284
10117
 
9285
- declare namespace Sections {
10118
+ declare namespace Group {
9286
10119
  var displayName: string;
9287
10120
  }
9288
10121
 
9289
10122
 
9290
- declare namespace Trigger {
10123
+ declare namespace Separator {
9291
10124
  var displayName: string;
9292
10125
  }
9293
10126
 
9294
10127
 
9295
- declare namespace Settings {
10128
+ declare namespace TextRoot {
9296
10129
  var displayName: string;
9297
10130
  }
9298
10131
 
@@ -9302,12 +10135,12 @@ declare namespace Root {
9302
10135
  }
9303
10136
 
9304
10137
 
9305
- declare namespace Header {
10138
+ declare namespace Image {
9306
10139
  var displayName: string;
9307
10140
  }
9308
10141
 
9309
10142
 
9310
- declare namespace Content {
10143
+ declare namespace Fallback {
9311
10144
  var displayName: string;
9312
10145
  }
9313
10146
 
@@ -9397,6 +10230,21 @@ declare namespace Root {
9397
10230
  }
9398
10231
 
9399
10232
 
10233
+ declare namespace Header {
10234
+ var displayName: string;
10235
+ }
10236
+
10237
+
10238
+ declare namespace Content {
10239
+ var displayName: string;
10240
+ }
10241
+
10242
+
10243
+ declare namespace Root {
10244
+ var displayName: string;
10245
+ }
10246
+
10247
+
9400
10248
  declare namespace Label {
9401
10249
  var displayName: string;
9402
10250
  }
@@ -9567,167 +10415,217 @@ declare namespace Panel {
9567
10415
  }
9568
10416
 
9569
10417
 
10418
+ declare namespace Trigger {
10419
+ var displayName: string;
10420
+ }
10421
+
10422
+
10423
+ declare namespace Provider {
10424
+ var displayName: string;
10425
+ }
10426
+
10427
+
9570
10428
  declare namespace Root {
9571
10429
  var displayName: string;
9572
10430
  }
9573
10431
 
9574
10432
 
9575
- declare namespace Row {
10433
+ declare namespace Header {
9576
10434
  var displayName: string;
9577
10435
  }
9578
10436
 
9579
10437
 
9580
- declare namespace Group {
10438
+ declare namespace ClearAll {
9581
10439
  var displayName: string;
9582
10440
  }
9583
10441
 
9584
10442
 
9585
- declare namespace Separator {
10443
+ declare namespace Sections {
9586
10444
  var displayName: string;
9587
10445
  }
9588
10446
 
9589
10447
 
9590
- declare namespace SelectRoot {
10448
+ declare namespace Settings {
9591
10449
  var displayName: string;
9592
10450
  }
9593
10451
 
9594
10452
 
9595
- declare namespace SelectTrigger {
10453
+ declare namespace ComboboxRoot {
9596
10454
  var displayName: string;
9597
10455
  }
9598
10456
 
9599
10457
 
9600
- declare namespace SelectValue {
10458
+ declare namespace ComboboxInput {
9601
10459
  var displayName: string;
9602
10460
  }
9603
10461
 
9604
10462
 
9605
- declare namespace SelectContent {
10463
+ declare namespace ComboboxTrigger {
9606
10464
  var displayName: string;
9607
10465
  }
9608
10466
 
9609
10467
 
9610
- declare namespace SelectItem {
10468
+ declare namespace ComboboxInputGroup {
9611
10469
  var displayName: string;
9612
10470
  }
9613
10471
 
9614
10472
 
9615
- declare namespace SelectGroup {
10473
+ declare namespace ComboboxContent {
9616
10474
  var displayName: string;
9617
10475
  }
9618
10476
 
9619
10477
 
9620
- declare namespace SelectGroupLabel {
10478
+ declare namespace ComboboxList {
9621
10479
  var displayName: string;
9622
10480
  }
9623
10481
 
9624
10482
 
9625
- declare namespace SelectSeparator {
10483
+ declare namespace ComboboxItem {
9626
10484
  var displayName: string;
9627
10485
  }
9628
10486
 
9629
10487
 
9630
- declare namespace Provider {
10488
+ declare namespace ComboboxEmpty {
9631
10489
  var displayName: string;
9632
10490
  }
9633
10491
 
9634
10492
 
9635
- declare namespace Root {
10493
+ declare namespace ComboboxGroup {
9636
10494
  var displayName: string;
9637
10495
  }
9638
10496
 
9639
10497
 
9640
- declare namespace Trigger {
10498
+ declare namespace ComboboxGroupLabel {
9641
10499
  var displayName: string;
9642
10500
  }
9643
10501
 
9644
10502
 
9645
- declare namespace Content {
10503
+ declare namespace ComboboxClear {
9646
10504
  var displayName: string;
9647
10505
  }
9648
10506
 
9649
10507
 
9650
- declare namespace ComboboxRoot {
10508
+ declare namespace ComboboxChips {
9651
10509
  var displayName: string;
9652
10510
  }
9653
10511
 
9654
10512
 
9655
- declare namespace ComboboxInput {
10513
+ declare namespace ComboboxChip {
9656
10514
  var displayName: string;
9657
10515
  }
9658
10516
 
9659
10517
 
9660
- declare namespace ComboboxTrigger {
10518
+ declare namespace ComboboxChipRemove {
9661
10519
  var displayName: string;
9662
10520
  }
9663
10521
 
9664
10522
 
9665
- declare namespace ComboboxInputGroup {
10523
+ declare namespace ComboboxValue {
9666
10524
  var displayName: string;
9667
10525
  }
9668
10526
 
9669
10527
 
9670
- declare namespace ComboboxContent {
10528
+ declare namespace ComboboxStatus {
9671
10529
  var displayName: string;
9672
10530
  }
9673
10531
 
9674
10532
 
9675
- declare namespace ComboboxList {
10533
+ declare namespace ComboboxCollection {
9676
10534
  var displayName: string;
9677
10535
  }
9678
10536
 
9679
10537
 
9680
- declare namespace ComboboxItem {
10538
+ declare namespace Provider {
9681
10539
  var displayName: string;
9682
10540
  }
9683
10541
 
9684
10542
 
9685
- declare namespace ComboboxEmpty {
10543
+ declare namespace Root {
9686
10544
  var displayName: string;
9687
10545
  }
9688
10546
 
9689
10547
 
9690
- declare namespace ComboboxGroup {
10548
+ declare namespace Trigger {
9691
10549
  var displayName: string;
9692
10550
  }
9693
10551
 
9694
10552
 
9695
- declare namespace ComboboxGroupLabel {
10553
+ declare namespace Content {
9696
10554
  var displayName: string;
9697
10555
  }
9698
10556
 
9699
10557
 
9700
- declare namespace ComboboxClear {
10558
+ declare namespace SelectRoot {
9701
10559
  var displayName: string;
9702
10560
  }
9703
10561
 
9704
10562
 
9705
- declare namespace ComboboxChips {
10563
+ declare namespace SelectTrigger {
9706
10564
  var displayName: string;
9707
10565
  }
9708
10566
 
9709
10567
 
9710
- declare namespace ComboboxChip {
10568
+ declare namespace SelectValue {
9711
10569
  var displayName: string;
9712
10570
  }
9713
10571
 
9714
10572
 
9715
- declare namespace ComboboxChipRemove {
10573
+ declare namespace SelectContent {
9716
10574
  var displayName: string;
9717
10575
  }
9718
10576
 
9719
10577
 
9720
- declare namespace ComboboxValue {
10578
+ declare namespace SelectItem {
9721
10579
  var displayName: string;
9722
10580
  }
9723
10581
 
9724
10582
 
9725
- declare namespace ComboboxStatus {
10583
+ declare namespace SelectGroup {
9726
10584
  var displayName: string;
9727
10585
  }
9728
10586
 
9729
10587
 
9730
- declare namespace ComboboxCollection {
10588
+ declare namespace SelectGroupLabel {
10589
+ var displayName: string;
10590
+ }
10591
+
10592
+
10593
+ declare namespace SelectSeparator {
10594
+ var displayName: string;
10595
+ }
10596
+
10597
+
10598
+ declare namespace Root {
10599
+ var displayName: string;
10600
+ }
10601
+
10602
+
10603
+ declare namespace Viewport {
10604
+ var displayName: string;
10605
+ }
10606
+
10607
+
10608
+ declare namespace Row {
10609
+ var displayName: string;
10610
+ }
10611
+
10612
+
10613
+ declare namespace Interval {
10614
+ var displayName: string;
10615
+ }
10616
+
10617
+
10618
+ declare namespace TimelineLink {
10619
+ var displayName: string;
10620
+ }
10621
+
10622
+
10623
+ declare namespace AutocompleteStandalone {
10624
+ var displayName: string;
10625
+ }
10626
+
10627
+
10628
+ declare namespace AutocompleteAsyncStandalone {
9731
10629
  var displayName: string;
9732
10630
  }
9733
10631
 
@@ -9802,12 +10700,22 @@ declare namespace AutocompleteStatus {
9802
10700
  }
9803
10701
 
9804
10702
 
9805
- declare namespace AutocompleteStandalone {
10703
+ declare namespace TreeRow {
9806
10704
  var displayName: string;
9807
10705
  }
9808
10706
 
9809
10707
 
9810
- declare namespace AutocompleteAsyncStandalone {
10708
+ declare namespace Root {
10709
+ var displayName: string;
10710
+ }
10711
+
10712
+
10713
+ declare namespace Items {
10714
+ var displayName: string;
10715
+ }
10716
+
10717
+
10718
+ declare namespace Item {
9811
10719
  var displayName: string;
9812
10720
  }
9813
10721
 
@@ -9822,37 +10730,37 @@ declare namespace DataTableTable {
9822
10730
  }
9823
10731
 
9824
10732
 
9825
- declare namespace DataTableFooter {
10733
+ declare namespace DataTableToolbar {
9826
10734
  var displayName: string;
9827
10735
  }
9828
10736
 
9829
10737
 
9830
- declare namespace Root {
10738
+ declare namespace DataTableColumnSettings {
9831
10739
  var displayName: string;
9832
10740
  }
9833
10741
 
9834
10742
 
9835
- declare namespace Items {
10743
+ declare namespace DataTableFooter {
9836
10744
  var displayName: string;
9837
10745
  }
9838
10746
 
9839
10747
 
9840
- declare namespace Item {
10748
+ declare namespace DataTableFilters {
9841
10749
  var displayName: string;
9842
10750
  }
9843
10751
 
9844
10752
 
9845
- declare namespace DataTableColumnSettings {
10753
+ declare namespace DataTableBody {
9846
10754
  var displayName: string;
9847
10755
  }
9848
10756
 
9849
10757
 
9850
- declare namespace DataTableToolbar {
10758
+ declare namespace DataTableHeaders {
9851
10759
  var displayName: string;
9852
10760
  }
9853
10761
 
9854
10762
 
9855
- declare namespace DataTableFilters {
10763
+ declare namespace AddFilterPanel {
9856
10764
  var displayName: string;
9857
10765
  }
9858
10766
 
@@ -9860,3 +10768,13 @@ declare namespace DataTableFilters {
9860
10768
  declare namespace AsyncErrorState {
9861
10769
  var displayName: string;
9862
10770
  }
10771
+
10772
+
10773
+ declare namespace DataTableHeaderContextMenu {
10774
+ var displayName: string;
10775
+ }
10776
+
10777
+
10778
+ declare namespace DataTableCellContextMenu {
10779
+ var displayName: string;
10780
+ }