@tailor-platform/app-shell 1.11.0 → 1.13.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 (140) hide show
  1. package/README.md +1 -0
  2. package/dist/app-shell-core.css +3 -1
  3. package/dist/app-shell.d.ts +1192 -88
  4. package/dist/app-shell.js +10669 -13117
  5. package/dist/appshell-CSQWUk6q.js +1823 -0
  6. package/dist/fonts/NOTO-SANS-JP-LICENSE.txt +93 -0
  7. package/dist/fonts/files/noto-sans-jp-0-wght-normal.woff2 +0 -0
  8. package/dist/fonts/files/noto-sans-jp-1-wght-normal.woff2 +0 -0
  9. package/dist/fonts/files/noto-sans-jp-10-wght-normal.woff2 +0 -0
  10. package/dist/fonts/files/noto-sans-jp-100-wght-normal.woff2 +0 -0
  11. package/dist/fonts/files/noto-sans-jp-101-wght-normal.woff2 +0 -0
  12. package/dist/fonts/files/noto-sans-jp-102-wght-normal.woff2 +0 -0
  13. package/dist/fonts/files/noto-sans-jp-103-wght-normal.woff2 +0 -0
  14. package/dist/fonts/files/noto-sans-jp-104-wght-normal.woff2 +0 -0
  15. package/dist/fonts/files/noto-sans-jp-105-wght-normal.woff2 +0 -0
  16. package/dist/fonts/files/noto-sans-jp-106-wght-normal.woff2 +0 -0
  17. package/dist/fonts/files/noto-sans-jp-107-wght-normal.woff2 +0 -0
  18. package/dist/fonts/files/noto-sans-jp-108-wght-normal.woff2 +0 -0
  19. package/dist/fonts/files/noto-sans-jp-109-wght-normal.woff2 +0 -0
  20. package/dist/fonts/files/noto-sans-jp-11-wght-normal.woff2 +0 -0
  21. package/dist/fonts/files/noto-sans-jp-110-wght-normal.woff2 +0 -0
  22. package/dist/fonts/files/noto-sans-jp-111-wght-normal.woff2 +0 -0
  23. package/dist/fonts/files/noto-sans-jp-112-wght-normal.woff2 +0 -0
  24. package/dist/fonts/files/noto-sans-jp-113-wght-normal.woff2 +0 -0
  25. package/dist/fonts/files/noto-sans-jp-114-wght-normal.woff2 +0 -0
  26. package/dist/fonts/files/noto-sans-jp-115-wght-normal.woff2 +0 -0
  27. package/dist/fonts/files/noto-sans-jp-116-wght-normal.woff2 +0 -0
  28. package/dist/fonts/files/noto-sans-jp-117-wght-normal.woff2 +0 -0
  29. package/dist/fonts/files/noto-sans-jp-118-wght-normal.woff2 +0 -0
  30. package/dist/fonts/files/noto-sans-jp-119-wght-normal.woff2 +0 -0
  31. package/dist/fonts/files/noto-sans-jp-12-wght-normal.woff2 +0 -0
  32. package/dist/fonts/files/noto-sans-jp-13-wght-normal.woff2 +0 -0
  33. package/dist/fonts/files/noto-sans-jp-14-wght-normal.woff2 +0 -0
  34. package/dist/fonts/files/noto-sans-jp-15-wght-normal.woff2 +0 -0
  35. package/dist/fonts/files/noto-sans-jp-16-wght-normal.woff2 +0 -0
  36. package/dist/fonts/files/noto-sans-jp-17-wght-normal.woff2 +0 -0
  37. package/dist/fonts/files/noto-sans-jp-18-wght-normal.woff2 +0 -0
  38. package/dist/fonts/files/noto-sans-jp-19-wght-normal.woff2 +0 -0
  39. package/dist/fonts/files/noto-sans-jp-2-wght-normal.woff2 +0 -0
  40. package/dist/fonts/files/noto-sans-jp-20-wght-normal.woff2 +0 -0
  41. package/dist/fonts/files/noto-sans-jp-21-wght-normal.woff2 +0 -0
  42. package/dist/fonts/files/noto-sans-jp-22-wght-normal.woff2 +0 -0
  43. package/dist/fonts/files/noto-sans-jp-23-wght-normal.woff2 +0 -0
  44. package/dist/fonts/files/noto-sans-jp-24-wght-normal.woff2 +0 -0
  45. package/dist/fonts/files/noto-sans-jp-25-wght-normal.woff2 +0 -0
  46. package/dist/fonts/files/noto-sans-jp-26-wght-normal.woff2 +0 -0
  47. package/dist/fonts/files/noto-sans-jp-27-wght-normal.woff2 +0 -0
  48. package/dist/fonts/files/noto-sans-jp-28-wght-normal.woff2 +0 -0
  49. package/dist/fonts/files/noto-sans-jp-29-wght-normal.woff2 +0 -0
  50. package/dist/fonts/files/noto-sans-jp-3-wght-normal.woff2 +0 -0
  51. package/dist/fonts/files/noto-sans-jp-30-wght-normal.woff2 +0 -0
  52. package/dist/fonts/files/noto-sans-jp-31-wght-normal.woff2 +0 -0
  53. package/dist/fonts/files/noto-sans-jp-32-wght-normal.woff2 +0 -0
  54. package/dist/fonts/files/noto-sans-jp-33-wght-normal.woff2 +0 -0
  55. package/dist/fonts/files/noto-sans-jp-34-wght-normal.woff2 +0 -0
  56. package/dist/fonts/files/noto-sans-jp-35-wght-normal.woff2 +0 -0
  57. package/dist/fonts/files/noto-sans-jp-36-wght-normal.woff2 +0 -0
  58. package/dist/fonts/files/noto-sans-jp-37-wght-normal.woff2 +0 -0
  59. package/dist/fonts/files/noto-sans-jp-38-wght-normal.woff2 +0 -0
  60. package/dist/fonts/files/noto-sans-jp-39-wght-normal.woff2 +0 -0
  61. package/dist/fonts/files/noto-sans-jp-4-wght-normal.woff2 +0 -0
  62. package/dist/fonts/files/noto-sans-jp-40-wght-normal.woff2 +0 -0
  63. package/dist/fonts/files/noto-sans-jp-41-wght-normal.woff2 +0 -0
  64. package/dist/fonts/files/noto-sans-jp-42-wght-normal.woff2 +0 -0
  65. package/dist/fonts/files/noto-sans-jp-43-wght-normal.woff2 +0 -0
  66. package/dist/fonts/files/noto-sans-jp-44-wght-normal.woff2 +0 -0
  67. package/dist/fonts/files/noto-sans-jp-45-wght-normal.woff2 +0 -0
  68. package/dist/fonts/files/noto-sans-jp-46-wght-normal.woff2 +0 -0
  69. package/dist/fonts/files/noto-sans-jp-47-wght-normal.woff2 +0 -0
  70. package/dist/fonts/files/noto-sans-jp-48-wght-normal.woff2 +0 -0
  71. package/dist/fonts/files/noto-sans-jp-49-wght-normal.woff2 +0 -0
  72. package/dist/fonts/files/noto-sans-jp-5-wght-normal.woff2 +0 -0
  73. package/dist/fonts/files/noto-sans-jp-50-wght-normal.woff2 +0 -0
  74. package/dist/fonts/files/noto-sans-jp-51-wght-normal.woff2 +0 -0
  75. package/dist/fonts/files/noto-sans-jp-52-wght-normal.woff2 +0 -0
  76. package/dist/fonts/files/noto-sans-jp-53-wght-normal.woff2 +0 -0
  77. package/dist/fonts/files/noto-sans-jp-54-wght-normal.woff2 +0 -0
  78. package/dist/fonts/files/noto-sans-jp-55-wght-normal.woff2 +0 -0
  79. package/dist/fonts/files/noto-sans-jp-6-wght-normal.woff2 +0 -0
  80. package/dist/fonts/files/noto-sans-jp-60-wght-normal.woff2 +0 -0
  81. package/dist/fonts/files/noto-sans-jp-61-wght-normal.woff2 +0 -0
  82. package/dist/fonts/files/noto-sans-jp-62-wght-normal.woff2 +0 -0
  83. package/dist/fonts/files/noto-sans-jp-63-wght-normal.woff2 +0 -0
  84. package/dist/fonts/files/noto-sans-jp-64-wght-normal.woff2 +0 -0
  85. package/dist/fonts/files/noto-sans-jp-65-wght-normal.woff2 +0 -0
  86. package/dist/fonts/files/noto-sans-jp-66-wght-normal.woff2 +0 -0
  87. package/dist/fonts/files/noto-sans-jp-67-wght-normal.woff2 +0 -0
  88. package/dist/fonts/files/noto-sans-jp-68-wght-normal.woff2 +0 -0
  89. package/dist/fonts/files/noto-sans-jp-69-wght-normal.woff2 +0 -0
  90. package/dist/fonts/files/noto-sans-jp-7-wght-normal.woff2 +0 -0
  91. package/dist/fonts/files/noto-sans-jp-70-wght-normal.woff2 +0 -0
  92. package/dist/fonts/files/noto-sans-jp-71-wght-normal.woff2 +0 -0
  93. package/dist/fonts/files/noto-sans-jp-72-wght-normal.woff2 +0 -0
  94. package/dist/fonts/files/noto-sans-jp-73-wght-normal.woff2 +0 -0
  95. package/dist/fonts/files/noto-sans-jp-74-wght-normal.woff2 +0 -0
  96. package/dist/fonts/files/noto-sans-jp-75-wght-normal.woff2 +0 -0
  97. package/dist/fonts/files/noto-sans-jp-76-wght-normal.woff2 +0 -0
  98. package/dist/fonts/files/noto-sans-jp-77-wght-normal.woff2 +0 -0
  99. package/dist/fonts/files/noto-sans-jp-78-wght-normal.woff2 +0 -0
  100. package/dist/fonts/files/noto-sans-jp-79-wght-normal.woff2 +0 -0
  101. package/dist/fonts/files/noto-sans-jp-8-wght-normal.woff2 +0 -0
  102. package/dist/fonts/files/noto-sans-jp-80-wght-normal.woff2 +0 -0
  103. package/dist/fonts/files/noto-sans-jp-81-wght-normal.woff2 +0 -0
  104. package/dist/fonts/files/noto-sans-jp-82-wght-normal.woff2 +0 -0
  105. package/dist/fonts/files/noto-sans-jp-83-wght-normal.woff2 +0 -0
  106. package/dist/fonts/files/noto-sans-jp-84-wght-normal.woff2 +0 -0
  107. package/dist/fonts/files/noto-sans-jp-85-wght-normal.woff2 +0 -0
  108. package/dist/fonts/files/noto-sans-jp-86-wght-normal.woff2 +0 -0
  109. package/dist/fonts/files/noto-sans-jp-87-wght-normal.woff2 +0 -0
  110. package/dist/fonts/files/noto-sans-jp-88-wght-normal.woff2 +0 -0
  111. package/dist/fonts/files/noto-sans-jp-89-wght-normal.woff2 +0 -0
  112. package/dist/fonts/files/noto-sans-jp-9-wght-normal.woff2 +0 -0
  113. package/dist/fonts/files/noto-sans-jp-90-wght-normal.woff2 +0 -0
  114. package/dist/fonts/files/noto-sans-jp-91-wght-normal.woff2 +0 -0
  115. package/dist/fonts/files/noto-sans-jp-92-wght-normal.woff2 +0 -0
  116. package/dist/fonts/files/noto-sans-jp-93-wght-normal.woff2 +0 -0
  117. package/dist/fonts/files/noto-sans-jp-94-wght-normal.woff2 +0 -0
  118. package/dist/fonts/files/noto-sans-jp-95-wght-normal.woff2 +0 -0
  119. package/dist/fonts/files/noto-sans-jp-96-wght-normal.woff2 +0 -0
  120. package/dist/fonts/files/noto-sans-jp-97-wght-normal.woff2 +0 -0
  121. package/dist/fonts/files/noto-sans-jp-98-wght-normal.woff2 +0 -0
  122. package/dist/fonts/files/noto-sans-jp-99-wght-normal.woff2 +0 -0
  123. package/dist/fonts/noto-sans-jp.css +2506 -0
  124. package/dist/style-entry.d.ts +600 -0
  125. package/dist/style-entry.js +0 -1
  126. package/dist/testing.d.ts +1140 -0
  127. package/dist/testing.js +14 -0
  128. package/dist/theme-bridge.test.ts +59 -0
  129. package/dist/theme.bridge.css +50 -1
  130. package/dist/vite-plugin.d.ts +600 -0
  131. package/dist/vite-plugin.js +2 -4
  132. package/package.json +27 -19
  133. package/skills/app-shell-patterns/SKILL.md +14 -7
  134. package/skills/app-shell-patterns/references/fundamental/components.md +56 -3
  135. package/skills/app-shell-patterns/references/fundamental/design-system.md +216 -162
  136. package/skills/app-shell-patterns/references/migrations.md +167 -0
  137. package/skills/app-shell-patterns/references/patterns/form-composer.md +142 -0
  138. package/skills/app-shell-patterns/references/patterns/form-single-page.md +3 -3
  139. package/skills/app-shell-patterns/references/patterns/form-wizard.md +5 -3
  140. package/skills/app-shell-patterns/references/patterns/interaction-multi-select.md +1 -1
@@ -1,12 +1,18 @@
1
1
  import { AuthClient } from '@tailor-platform/auth-public-client';
2
2
  import { Autocomplete as Autocomplete_2 } from '@base-ui/react/autocomplete';
3
+ import { AutocompleteFilter } from '@base-ui/react/autocomplete';
4
+ import { AutocompleteFilterOptions } from '@base-ui/react/autocomplete';
3
5
  import { AutocompleteRootProps } from '@base-ui/react/autocomplete';
4
6
  import { Avatar as Avatar_2 } from '@base-ui/react/avatar';
7
+ import { Blocker } from 'react-router';
8
+ import { BlockerFunction } from 'react-router';
5
9
  import { CalendarDate } from '@internationalized/date';
6
10
  import { CalendarDateTime } from '@internationalized/date';
7
11
  import { Checkbox as Checkbox_2 } from '@base-ui/react/checkbox';
8
12
  import { ClassProp } from 'class-variance-authority/types';
9
13
  import { Combobox as Combobox_2 } from '@base-ui/react/combobox';
14
+ import { ComboboxFilter } from '@base-ui/react/combobox';
15
+ import { ComboboxFilterOptions } from '@base-ui/react/combobox';
10
16
  import { CSSProperties } from 'react';
11
17
  import { DateValue } from '@internationalized/date';
12
18
  import { Dialog as Dialog_2 } from '@base-ui/react/dialog';
@@ -15,28 +21,45 @@ import { FC } from 'react';
15
21
  import { Field as Field_2 } from '@base-ui/react/field';
16
22
  import { Fieldset as Fieldset_2 } from '@base-ui/react/fieldset';
17
23
  import { Form as Form_2 } from '@base-ui/react/form';
18
- import { getFilter } from '@base-ui/react/internals/filter';
19
24
  import { getLocalTimeZone } from '@internationalized/date';
20
25
  import { JSX } from 'react/jsx-runtime';
21
26
  import { Link } from 'react-router';
27
+ import { LinkProps } from 'react-router';
22
28
  import { LoaderFunctionArgs } from 'react-router';
29
+ import { Location as Location_2 } from 'react-router';
23
30
  import { Menu as Menu_2 } from '@base-ui/react/menu';
31
+ import { Navigate } from 'react-router';
32
+ import { NavigateFunction } from 'react-router';
33
+ import { NavigateOptions } from 'react-router';
34
+ import { Navigation } from 'react-router';
35
+ import { NavLink } from 'react-router';
36
+ import { NavLinkProps } from 'react-router';
37
+ import { Params } from 'react-router';
24
38
  import { parseAbsolute } from '@internationalized/date';
25
39
  import { parseDate } from '@internationalized/date';
26
40
  import { parseDateTime } from '@internationalized/date';
27
41
  import { parseZonedDateTime } from '@internationalized/date';
42
+ import { PathMatch } from 'react-router';
28
43
  import * as React_2 from 'react';
44
+ import { ReactElement } from 'react';
29
45
  import { ReactNode } from 'react';
46
+ import { Ref } from 'react';
30
47
  import { RefObject } from 'react';
31
48
  import { Select as Select_2 } from '@base-ui/react/select';
32
49
  import { StandardSchemaV1 } from '@standard-schema/spec';
33
50
  import { Tabs as Tabs_2 } from '@base-ui/react/tabs';
34
51
  import { Time } from '@internationalized/date';
52
+ import { To } from 'react-router';
35
53
  import { toast } from 'sonner';
36
54
  import { Tooltip as Tooltip_2 } from '@base-ui/react/tooltip';
55
+ import { useBeforeUnload } from 'react-router';
56
+ import { useBlocker } from 'react-router';
37
57
  import { useLocation } from 'react-router';
58
+ import { useMatch } from 'react-router';
38
59
  import { useNavigate } from 'react-router';
60
+ import { useNavigation } from 'react-router';
39
61
  import { useParams } from 'react-router';
62
+ import { useResolvedPath } from 'react-router';
40
63
  import { useRouteError } from 'react-router';
41
64
  import { useSearchParams } from 'react-router';
42
65
  import { VariantProps } from 'class-variance-authority';
@@ -269,9 +292,8 @@ export declare type AppInfoEntry = {
269
292
  value: string | number | boolean | null | undefined;
270
293
  };
271
294
 
272
- export declare const AppShell: {
273
- (props: AppShellProps): JSX.Element | null;
274
- WithPages(pages: PageEntry[]): FC<AppShellProps>;
295
+ export declare const AppShell: ((props: AppShellProps) => React.ReactNode) & {
296
+ WithPages: (pages: PageEntry[]) => FC<AppShellProps>;
275
297
  };
276
298
 
277
299
  /**
@@ -872,6 +894,10 @@ export declare const badgeVariants: (props?: ({
872
894
  variant?: "default" | "error" | "neutral" | "success" | "warning" | "info" | "subtle-success" | "subtle-warning" | "subtle-error" | "subtle-info" | "outline-success" | "outline-warning" | "outline-error" | "outline-info" | "outline-neutral" | null | undefined;
873
895
  } & ClassProp) | undefined) => string;
874
896
 
897
+ export { Blocker }
898
+
899
+ export { BlockerFunction }
900
+
875
901
  /** The table body section (`<tbody>`). */
876
902
  declare function Body_2({ className, ...props }: React_2.ComponentProps<"tbody">): JSX.Element;
877
903
 
@@ -965,8 +991,14 @@ export declare interface CalendarProps<T extends DateValue = DateValue> {
965
991
 
966
992
  /**
967
993
  * Internal type for tracking OAuth callback handling status.
994
+ *
995
+ * "denied" is distinct from "rejected": it means another automatic login round
996
+ * trip will not help, so auto-login stays out of it. Two things land there —
997
+ * the authorization server refusing outright (the user declined consent, the
998
+ * client is not permitted), and a callback that keeps failing after its retry
999
+ * budget is spent. "rejected" is a failure that is still worth one more attempt.
968
1000
  */
969
- declare type CallbackStatus = "idle" | "pending" | "resolved" | "rejected";
1001
+ declare type CallbackStatus = "idle" | "pending" | "resolved" | "rejected" | "denied";
970
1002
 
971
1003
  /** A table caption element. */
972
1004
  declare function Caption({ className, ...props }: React_2.ComponentProps<"caption">): JSX.Element;
@@ -1231,6 +1263,58 @@ export declare type ColorTheme = "light" | "dark" | "system";
1231
1263
  */
1232
1264
  export declare type Column<TRow extends Record<string, unknown>> = ColumnBase<TRow> & ColumnTypeBranch<TRow>;
1233
1265
 
1266
+ /**
1267
+ * Layout.Column — A single column within `<Layout>`.
1268
+ *
1269
+ * Wrap each logical section of the page in a `<Layout.Column>`.
1270
+ * The parent `<Layout>` sizes columns via CSS Grid `grid-template-columns`,
1271
+ * based on the number of children and, optionally, the `area` prop.
1272
+ * Column width is controlled entirely by the parent grid — the column
1273
+ * itself does not set its own width.
1274
+ *
1275
+ * ### Position-based mode (default)
1276
+ *
1277
+ * When no `area` prop is provided, columns are sized by their DOM position:
1278
+ *
1279
+ * - **2-column:** 1st = flexible (`1fr`), 2nd = fixed 280 px
1280
+ * - **3-column:** 1st = fixed 320 px, 2nd = flexible (`1fr`), 3rd = fixed 280 px
1281
+ * - **4+ columns:** all columns share equal width (`repeat(N, 1fr)`)
1282
+ *
1283
+ * ### Area mode
1284
+ *
1285
+ * Set the `area` prop on any column to opt into role-based widths.
1286
+ * Columns without an `area` prop default to `1fr`.
1287
+ * Visual ordering always follows DOM order, so place your columns in the
1288
+ * intended left-to-right sequence.
1289
+ *
1290
+ * | area | width |
1291
+ * | --------- | ----------------- |
1292
+ * | `"left"` | fixed 320 px |
1293
+ * | `"main"` | flexible (`1fr`) |
1294
+ * | `"right"` | fixed 280 px |
1295
+ *
1296
+ * ### Data attributes
1297
+ *
1298
+ * The rendered `<div>` always has `data-layout-column`.
1299
+ * When `area` is set, `data-area` is also added with the area value.
1300
+ *
1301
+ * @example
1302
+ * ```tsx
1303
+ * // Position-based (default)
1304
+ * <Layout>
1305
+ * <Layout.Column>Main content</Layout.Column>
1306
+ * <Layout.Column>Side panel</Layout.Column>
1307
+ * </Layout>
1308
+ *
1309
+ * // Area-based
1310
+ * <Layout>
1311
+ * <Layout.Column area="left">Sidebar</Layout.Column>
1312
+ * <Layout.Column area="main">Content</Layout.Column>
1313
+ * </Layout>
1314
+ * ```
1315
+ */
1316
+ declare const Column_2: React_2.ForwardRefExoticComponent<ColumnProps & React_2.RefAttributes<HTMLDivElement>>;
1317
+
1234
1318
  /**
1235
1319
  * Supported area values for Layout.Column
1236
1320
  */
@@ -1314,9 +1398,15 @@ declare interface ColumnBase<TRow extends Record<string, unknown>> {
1314
1398
  /**
1315
1399
  * Filter configuration. When set, this column appears as an option in
1316
1400
  * `DataTable.Filters`.
1401
+ *
1402
+ * `operators` optionally narrows the conditions exposed by the built-in
1403
+ * filter UI for this column. Order controls both the menu order and the
1404
+ * default operator. This affects the DataTable UI only — collection control
1405
+ * APIs and persisted filter state still accept the full backend operator set.
1406
+ *
1317
1407
  * Use `fieldTypeToFilterConfig` or `inferColumns` to derive this automatically.
1318
1408
  */
1319
- filter?: FilterConfig;
1409
+ filter?: DataTableFilterConfig;
1320
1410
  }
1321
1411
 
1322
1412
  /**
@@ -1369,13 +1459,13 @@ declare interface ColumnHelper<TRow extends Record<string, unknown>> {
1369
1459
  * Per-field column factory returned by `inferColumns(tableMetadata)`.
1370
1460
  *
1371
1461
  * Derives label, sort config, and filter config from the field's metadata.
1372
- * Sort and filter can be suppressed per call via `options`.
1462
+ * Sort can be suppressed and filter can be suppressed or narrowed per call via `options`.
1373
1463
  *
1374
1464
  * @param dataKey - A field name from the bound table metadata.
1375
1465
  * @param options - Optional per-column overrides (label, width, sort, filter).
1376
1466
  * @throws {Error} If `dataKey` is not found in the metadata passed to `inferColumns`.
1377
1467
  */
1378
- declare type ColumnInferFn<TRow extends Record<string, unknown>, TTable extends TableMetadata = TableMetadata> = (dataKey: TableFieldName<TTable>, options?: MetadataFieldOptions) => InferredColumn<TRow>;
1468
+ declare type ColumnInferFn<TRow extends Record<string, unknown>, TTable extends TableMetadata = TableMetadata> = <TFieldName extends TableFieldName<TTable>>(dataKey: TFieldName, options?: MetadataFieldOptionsForField<TTable, NoInfer<TFieldName>>) => InferredColumn<TRow>;
1379
1469
 
1380
1470
  /**
1381
1471
  * Props for individual Layout.Column component
@@ -2148,6 +2238,8 @@ export declare const DataTable: {
2148
2238
  readonly Pagination: typeof DataTablePagination;
2149
2239
  };
2150
2240
 
2241
+ declare type DataTableBooleanFilterOperator = OperatorForFilterType["boolean"];
2242
+
2151
2243
  /**
2152
2244
  * Context value provided by `DataTable.Root`.
2153
2245
  *
@@ -2210,6 +2302,14 @@ export declare interface DataTableContextValue<TRow extends Record<string, unkno
2210
2302
  clearSelection?: () => void;
2211
2303
  isAllSelected: boolean;
2212
2304
  isIndeterminate: boolean;
2305
+ /** Ids of the currently expanded rows. */
2306
+ expandedIds?: string[];
2307
+ /** Whether `row` is currently expanded. Always `false` for rows without an `id`. */
2308
+ isRowExpanded?: (row: TRow) => boolean;
2309
+ toggleRowExpansion?: (row: TRow) => void;
2310
+ collapseAllRows?: () => void;
2311
+ /** Expansion config. Its presence enables the expand column and detail rows. */
2312
+ rowExpansion?: RowExpansionOptions<TRow>;
2213
2313
  }
2214
2314
 
2215
2315
  /**
@@ -2221,6 +2321,48 @@ export declare interface DataTableData<TRow> {
2221
2321
  total?: number | null;
2222
2322
  }
2223
2323
 
2324
+ declare type DataTableDateFilterOperator = Extract<OperatorForFilterType["date"], "eq" | "gte" | "lte" | "between">;
2325
+
2326
+ declare type DataTableEnumFilterOperator = Extract<OperatorForFilterType["enum"], "in">;
2327
+
2328
+ export declare type DataTableFilterConfig = (Extract<FilterConfig, {
2329
+ type: "string";
2330
+ }> & {
2331
+ /**
2332
+ * Allowlist of operators shown by `DataTable.Filters` for this column.
2333
+ * Order controls both the menu order and the default operator.
2334
+ */
2335
+ operators?: NonEmptyReadonlyArray<DataTableStringFilterOperator>;
2336
+ }) | (Extract<FilterConfig, {
2337
+ type: "number";
2338
+ }> & {
2339
+ operators?: NonEmptyReadonlyArray<DataTableNumericTemporalFilterOperator>;
2340
+ }) | (Extract<FilterConfig, {
2341
+ type: "datetime";
2342
+ }> & {
2343
+ operators?: NonEmptyReadonlyArray<DataTableNumericTemporalFilterOperator>;
2344
+ }) | (Extract<FilterConfig, {
2345
+ type: "date";
2346
+ }> & {
2347
+ operators?: NonEmptyReadonlyArray<DataTableDateFilterOperator>;
2348
+ }) | (Extract<FilterConfig, {
2349
+ type: "time";
2350
+ }> & {
2351
+ operators?: NonEmptyReadonlyArray<DataTableNumericTemporalFilterOperator>;
2352
+ }) | (Extract<FilterConfig, {
2353
+ type: "enum";
2354
+ }> & {
2355
+ operators?: NonEmptyReadonlyArray<DataTableEnumFilterOperator>;
2356
+ }) | (Extract<FilterConfig, {
2357
+ type: "boolean";
2358
+ }> & {
2359
+ operators?: NonEmptyReadonlyArray<DataTableBooleanFilterOperator>;
2360
+ }) | (Extract<FilterConfig, {
2361
+ type: "uuid";
2362
+ }> & {
2363
+ operators?: NonEmptyReadonlyArray<DataTableUuidFilterOperator>;
2364
+ });
2365
+
2224
2366
  /** Use `DataTable.Filters` instead of calling this directly. */
2225
2367
  declare function DataTableFilters({ className, slot, addIconOnly, }: {
2226
2368
  className?: string;
@@ -2255,6 +2397,8 @@ declare namespace DataTableFooter {
2255
2397
  var displayName: string;
2256
2398
  }
2257
2399
 
2400
+ declare type DataTableNumericTemporalFilterOperator = Extract<OperatorForFilterType["number"], "eq" | "ne" | "gt" | "gte" | "lt" | "lte" | "between">;
2401
+
2258
2402
  /** Use `DataTable.Pagination` instead of calling this directly. */
2259
2403
  declare function DataTablePagination({ pageSizeOptions }?: DataTablePaginationProps): JSX.Element;
2260
2404
 
@@ -2283,6 +2427,8 @@ export declare interface DataTableRootProps<TRow extends Record<string, unknown>
2283
2427
  className?: string;
2284
2428
  }
2285
2429
 
2430
+ declare type DataTableStringFilterOperator = Extract<OperatorForFilterType["string"], "eq" | "ne" | "contains" | "notContains" | "hasPrefix" | "hasSuffix">;
2431
+
2286
2432
  /** Use `DataTable.Table` instead of calling this directly. */
2287
2433
  declare function DataTableTable({ className }: {
2288
2434
  className?: string;
@@ -2309,10 +2455,43 @@ declare namespace DataTableToolbar {
2309
2455
  var displayName: string;
2310
2456
  }
2311
2457
 
2312
- declare interface DateBehaviorProps<T extends DateValue> {
2458
+ declare type DataTableUiFilterOperatorByType = {
2459
+ string: DataTableStringFilterOperator;
2460
+ number: DataTableNumericTemporalFilterOperator;
2461
+ datetime: DataTableNumericTemporalFilterOperator;
2462
+ date: DataTableDateFilterOperator;
2463
+ time: DataTableNumericTemporalFilterOperator;
2464
+ enum: DataTableEnumFilterOperator;
2465
+ boolean: DataTableBooleanFilterOperator;
2466
+ uuid: DataTableUuidFilterOperator;
2467
+ };
2468
+
2469
+ declare type DataTableUuidFilterOperator = Extract<OperatorForFilterType["uuid"], "eq">;
2470
+
2471
+ /** Options for `type: "date"` cells. */
2472
+ declare interface DateCellOptions {
2473
+ /**
2474
+ * Format style. `"short"` → `Apr 9, 2026`; `"long"` → `April 9, 2026`;
2475
+ * `"datetime"` → `Apr 9, 2026, 3:45 PM`. Default: `"short"`.
2476
+ */
2477
+ dateFormat?: "short" | "long" | "datetime";
2478
+ /** BCP 47 locale tag. Defaults to the runtime locale. */
2479
+ locale?: string;
2480
+ }
2481
+
2482
+ /**
2483
+ * Public date controls.
2484
+ *
2485
+ * These are standalone composite widgets built on plain accessible markup and a
2486
+ * proxy input for form value / native validity. Inside `Field.Root`, they also
2487
+ * register with Base UI's label, description, and validation plumbing. All of
2488
+ * that coupling lives in `useDateFieldFieldBridge` (see `./use-date-field-bridge`).
2489
+ */
2490
+ declare interface DateControlProps<T extends DateValue> {
2313
2491
  value?: T | null;
2314
2492
  defaultValue?: T | null;
2315
2493
  onChange?: (value: T | null) => void;
2494
+ onBlur?: () => void;
2316
2495
  granularity?: Granularity;
2317
2496
  minValue?: DateValue;
2318
2497
  maxValue?: DateValue;
@@ -2323,52 +2502,32 @@ declare interface DateBehaviorProps<T extends DateValue> {
2323
2502
  isInvalid?: boolean;
2324
2503
  autoFocus?: boolean;
2325
2504
  hourCycle?: HourCycle;
2326
- hideTimeZone?: boolean;
2327
2505
  placeholderValue?: DateValue;
2328
- /**
2329
- * First day of the week (0 = Sunday … 6 = Saturday); defaults to the locale.
2330
- * Only affects the `w`/`k` (start/end of week) keyboard shortcuts here.
2331
- */
2332
2506
  firstDayOfWeek?: FirstDayOfWeek;
2333
2507
  name?: string;
2334
- /** Accessible name when no visible `label` is provided (e.g. a compact filter input). */
2508
+ className?: string;
2509
+ id?: string;
2510
+ /** Accessible name when there is no visible label. */
2335
2511
  "aria-label"?: string;
2512
+ /** ID of the element(s) that label the control. */
2513
+ "aria-labelledby"?: string;
2514
+ /** ID of the element(s) that describe the control. */
2515
+ "aria-describedby"?: string;
2336
2516
  /** BCP-47 locale override; defaults to the AppShell formatting locale. */
2337
2517
  locale?: string;
2338
2518
  }
2339
2519
 
2340
- /** Options for `type: "date"` cells. */
2341
- declare interface DateCellOptions {
2342
- /**
2343
- * Format style. `"short"` → `Apr 9, 2026`; `"long"` → `April 9, 2026`;
2344
- * `"datetime"` → `Apr 9, 2026, 3:45 PM`. Default: `"short"`.
2345
- */
2346
- dateFormat?: "short" | "long" | "datetime";
2347
- /** BCP 47 locale tag. Defaults to the runtime locale. */
2348
- locale?: string;
2349
- }
2350
-
2351
2520
  /**
2352
2521
  * A segmented date/time input field with no popover.
2353
2522
  *
2354
- * @example
2355
- * ```tsx
2356
- * import { DateField } from "@tailor-platform/app-shell";
2357
- *
2358
- * <DateField label="Invoice date" />
2359
- * <DateField label="Created at" granularity="minute" />
2360
- * ```
2523
+ * Compose with `Field.Root` for label / description / error presentation, or
2524
+ * provide standalone ARIA wiring yourself.
2361
2525
  */
2362
- export declare function DateField<T extends DateValue = DateValue>({ label, description, errorMessage, className, locale: localeProp, value, defaultValue, onChange, granularity, hourCycle, placeholderValue, minValue, maxValue, isDateUnavailable, isDisabled, isReadOnly, isInvalid, isRequired, autoFocus, firstDayOfWeek, name, "aria-label": ariaLabel, }: DateFieldProps<T>): JSX.Element;
2526
+ export declare const DateField: <T extends DateValue = DateValue>(props: DateFieldProps<T> & {
2527
+ ref?: Ref<HTMLInputElement>;
2528
+ }) => ReactElement;
2363
2529
 
2364
- declare interface DateFieldMetaProps {
2365
- label?: LocalizedString;
2366
- description?: LocalizedString;
2367
- errorMessage?: LocalizedString;
2368
- className?: string;
2369
- }
2370
-
2371
- export declare type DateFieldProps<T extends DateValue = DateValue> = DateFieldMetaProps & DateBehaviorProps<T>;
2530
+ export declare type DateFieldProps<T extends DateValue = DateValue> = DateControlProps<T>;
2372
2531
 
2373
2532
  /**
2374
2533
  * Date format options
@@ -2378,21 +2537,92 @@ declare type DateFormat = "short" | "medium" | "long" | "relative";
2378
2537
  /**
2379
2538
  * A date/time input with a popover calendar.
2380
2539
  *
2381
- * Value type is driven by `granularity`:
2382
- * - `"day"` (default) → `CalendarDate`
2383
- * - `"hour" | "minute" | "second"` → `CalendarDateTime` (or `ZonedDateTime` when a `timeZone` is set)
2384
- *
2385
- * @example
2386
- * ```tsx
2387
- * import { DatePicker, today, getLocalTimeZone, type CalendarDate } from "@tailor-platform/app-shell";
2540
+ * Compose with `Field.Root` for label / description / error presentation, or
2541
+ * provide standalone ARIA wiring yourself.
2542
+ */
2543
+ export declare const DatePicker: <T extends DateValue = DateValue>(props: DatePickerProps<T> & {
2544
+ ref?: Ref<HTMLInputElement>;
2545
+ }) => ReactElement;
2546
+
2547
+ export declare type DatePickerProps<T extends DateValue = DateValue> = DateControlProps<T> & {
2548
+ /** IANA timezone; defaults to the AppShell `timeZone`. */
2549
+ timeZone?: string;
2550
+ };
2551
+
2552
+ /**
2553
+ * Range calendar state — the logic react-aria's `useRangeCalendarState` would
2554
+ * otherwise provide, on top of the shared `useCalendarGridState` engine.
2388
2555
  *
2389
- * const [date, setDate] = useState<CalendarDate | null>(null);
2390
- * <DatePicker label="Ship date" value={date} onChange={setDate} />
2391
- * ```
2556
+ * Selection is the react-aria two-click model: the first confirmed day sets an
2557
+ * *anchor*; while the anchor is set the highlighted range live-extends to the
2558
+ * focused day (keyboard nav and pointer hover both move it); the second
2559
+ * confirmed day commits `{ start, end }` in one `onChange`. Picking a day
2560
+ * before the anchor swaps the endpoints, so a committed range is always
2561
+ * ordered — a reversed range can only be produced by typing into the field.
2392
2562
  */
2393
- export declare function DatePicker<T extends DateValue = DateValue>({ label, description, errorMessage, className, locale: localeProp, timeZone: timeZoneProp, value, defaultValue, onChange, granularity, hourCycle, placeholderValue, minValue, maxValue, isDateUnavailable, isDisabled, isReadOnly, isInvalid, isRequired, autoFocus, firstDayOfWeek, name, "aria-label": ariaLabel, }: DatePickerProps<T>): JSX.Element;
2563
+ /** An inclusive date range. `start` and `end` may be the same day. */
2564
+ export declare interface DateRange<T extends DateValue = DateValue> {
2565
+ start: T;
2566
+ end: T;
2567
+ }
2394
2568
 
2395
- export declare type DatePickerProps<T extends DateValue = DateValue> = DateFieldProps<T> & {
2569
+ export declare const DateRangePicker: <T extends DateValue = DateValue>(props: DateRangePickerProps<T> & {
2570
+ ref?: Ref<HTMLInputElement>;
2571
+ }) => ReactElement;
2572
+
2573
+ /**
2574
+ * Public date-range control — the @internationalized/date + Base UI
2575
+ * implementation, mirroring react-aria's `DateRangePicker` interaction spec.
2576
+ *
2577
+ * Like `DateField`/`DatePicker`, it is a standalone composite widget that also
2578
+ * composes inside `Field.Root` (label / description / error / form validation).
2579
+ * A single combined proxy input is registered as the one Field control (its
2580
+ * value is empty until BOTH ends are complete, so `required` blocks a partial
2581
+ * range); two optional plain hidden inputs (`startName` / `endName`) provide
2582
+ * classic form-POST parity. A range typed in reverse is flagged invalid rather
2583
+ * than swapped — only the calendar normalizes endpoint order.
2584
+ */
2585
+ export declare type DateRangePickerProps<T extends DateValue = DateValue> = {
2586
+ value?: DateRange<T> | null;
2587
+ defaultValue?: DateRange<T> | null;
2588
+ /**
2589
+ * Fired with a complete `{ start, end }` range, or `null` when the range is
2590
+ * cleared or becomes incomplete. Never fired for half-typed intermediates.
2591
+ */
2592
+ onChange?: (value: DateRange<T> | null) => void;
2593
+ onBlur?: () => void;
2594
+ granularity?: Granularity;
2595
+ minValue?: DateValue;
2596
+ maxValue?: DateValue;
2597
+ isDateUnavailable?: (date: DateValue) => boolean;
2598
+ isDisabled?: boolean;
2599
+ isReadOnly?: boolean;
2600
+ isRequired?: boolean;
2601
+ isInvalid?: boolean;
2602
+ autoFocus?: boolean;
2603
+ hourCycle?: HourCycle;
2604
+ placeholderValue?: DateValue;
2605
+ firstDayOfWeek?: FirstDayOfWeek;
2606
+ /**
2607
+ * Name for the combined hidden proxy input — a single `name=start/end` field
2608
+ * for native form POST, mirroring `DateField` / `DatePicker`. Inside
2609
+ * `Field.Root`, the Field's `name` takes precedence. For two separate fields,
2610
+ * use `startName` / `endName` instead.
2611
+ */
2612
+ name?: string;
2613
+ /** Names for the two plain hidden start/end inputs (classic form POST). */
2614
+ startName?: string;
2615
+ endName?: string;
2616
+ className?: string;
2617
+ id?: string;
2618
+ /** Accessible name when there is no visible label. */
2619
+ "aria-label"?: string;
2620
+ /** ID of the element(s) that label the control. */
2621
+ "aria-labelledby"?: string;
2622
+ /** ID of the element(s) that describe the control. */
2623
+ "aria-describedby"?: string;
2624
+ /** BCP-47 locale override; defaults to the AppShell formatting locale. */
2625
+ locale?: string;
2396
2626
  /** IANA timezone; defaults to the AppShell `timeZone`. */
2397
2627
  timeZone?: string;
2398
2628
  };
@@ -2743,6 +2973,8 @@ declare namespace Description_4 {
2743
2973
  * Renders structured key-value information with automatic layout.
2744
2974
  * Use { type: "divider" } in the fields array to add dividers between sections.
2745
2975
  *
2976
+ * Pass `render` on a field to draw it yourself when no built-in `type` fits.
2977
+ *
2746
2978
  * @example
2747
2979
  * ```tsx
2748
2980
  * <DescriptionCard
@@ -2753,22 +2985,26 @@ declare namespace Description_4 {
2753
2985
  * { key: "orderNumber", label: "Order #", meta: { copyable: true } },
2754
2986
  * { type: "divider" },
2755
2987
  * { key: "total", label: "Total", type: "money" },
2988
+ * { key: "deliveryBreakdown", label: "Delivery", render: (d) => <PieChart data={d.deliveryBreakdown} /> },
2756
2989
  * ]}
2757
2990
  * />
2758
2991
  * ```
2759
2992
  */
2760
- export declare function DescriptionCard({ data, title, fields, columns, className, style, headerAction, }: DescriptionCardProps): JSX.Element;
2993
+ export declare function DescriptionCard<TData extends object = Record<string, unknown>>({ data, title, fields, columns, className, style, headerAction, }: DescriptionCardProps<TData>): JSX.Element;
2761
2994
 
2762
2995
  /**
2763
2996
  * Props for the DescriptionCard component
2997
+ *
2998
+ * `TData` is inferred from `data`; constrained to `object` rather than
2999
+ * `Record<string, unknown>` so interfaces are accepted.
2764
3000
  */
2765
- export declare interface DescriptionCardProps {
3001
+ export declare interface DescriptionCardProps<TData extends object = Record<string, unknown>> {
2766
3002
  /** Raw backend data object */
2767
- data: Record<string, unknown>;
3003
+ data: TData;
2768
3004
  /** Card title */
2769
3005
  title: string;
2770
3006
  /** Ordered list of field definitions (use { type: "divider" } for dividers) */
2771
- fields: FieldConfig[];
3007
+ fields: FieldConfig<TData>[];
2772
3008
  /** Number of columns on desktop (3 or 4) */
2773
3009
  columns?: Columns;
2774
3010
  /** Additional CSS classes */
@@ -3030,12 +3266,12 @@ export declare const Field: {
3030
3266
  /**
3031
3267
  * A field configuration - either a divider or a field definition
3032
3268
  */
3033
- declare type FieldConfig = FieldDivider | FieldDefinition;
3269
+ declare type FieldConfig<TData extends object = Record<string, unknown>> = FieldDivider | FieldDefinition<TData>;
3034
3270
 
3035
3271
  /**
3036
3272
  * Field definition - renders a key-value pair
3037
3273
  */
3038
- declare interface FieldDefinition {
3274
+ declare interface FieldDefinition<TData extends object = Record<string, unknown>> {
3039
3275
  /** Field type determines rendering (defaults to "text") */
3040
3276
  type?: FieldType_2;
3041
3277
  /** Path to the value in the data object (supports dot notation) */
@@ -3046,6 +3282,12 @@ declare interface FieldDefinition {
3046
3282
  meta?: FieldMeta;
3047
3283
  /** Behavior when value is empty (defaults to "dash") */
3048
3284
  emptyBehavior?: EmptyBehavior;
3285
+ /**
3286
+ * Draws the field from `data` instead of using `type`. Wins over `type` and
3287
+ * replaces the built-in output, so `meta` is not applied. Still runs when the
3288
+ * value at `key` is empty; `emptyBehavior: "hide"` is checked first.
3289
+ */
3290
+ render?: FieldRender<TData>;
3049
3291
  }
3050
3292
 
3051
3293
  /**
@@ -3108,6 +3350,9 @@ export declare interface FieldMetadata {
3108
3350
  };
3109
3351
  }
3110
3352
 
3353
+ /** Renders a field from the whole `data` object, like `render` on DataTable's `Column`. */
3354
+ declare type FieldRender<TData extends object = Record<string, unknown>> = (data: TData) => ReactNode;
3355
+
3111
3356
  declare type FieldRootProps = Pick<React_2.ComponentProps<typeof Field_2.Root>, "name" | "disabled" | "validate" | "validationMode" | "validationDebounceTime" | "className" | "style"> & {
3112
3357
  children: React_2.ReactNode;
3113
3358
  /** Whether the field has been blurred. Maps to Base UI's `touched`. */
@@ -3347,10 +3592,16 @@ declare namespace Footer_3 {
3347
3592
  * </Form>
3348
3593
  * ```
3349
3594
  */
3350
- export declare function Form<FormValues extends Record<string, any> = Record<string, any>>({ className, children, ...props }: FormProps<FormValues>): JSX.Element;
3595
+ export declare const Form: FormComponent;
3351
3596
 
3352
- export declare namespace Form {
3353
- var displayName: string;
3597
+ /**
3598
+ * Typed explicitly rather than as a `function` + `displayName` expando: that form is
3599
+ * emitted as a namespace merge, which the declaration rollup duplicates as a second,
3600
+ * non-exported `declare namespace Form` — TS2395 for consumers. See `check-dts`.
3601
+ */
3602
+ declare interface FormComponent {
3603
+ <FormValues extends Record<string, any> = Record<string, any>>(props: FormProps<FormValues>): React_2.JSX.Element;
3604
+ displayName?: string;
3354
3605
  }
3355
3606
 
3356
3607
  export declare type FormProps<FormValues extends Record<string, any> = Record<string, any>> = Pick<React_2.ComponentProps<typeof Form_2>, "errors" | "actionsRef" | "validationMode" | "noValidate" | "ref" | "className" | "style"> & {
@@ -3640,6 +3891,12 @@ export declare type InferCsvRow<T extends CsvSchema> = {
3640
3891
  */
3641
3892
  declare type InferredColumn<TRow extends Record<string, unknown>> = ColumnBase<TRow>;
3642
3893
 
3894
+ declare type InferredFieldFilterType<TTable extends TableMetadata, TFieldName extends TableFieldName<TTable>> = Extract<TTable["fields"][number], {
3895
+ readonly name: TFieldName;
3896
+ }> extends {
3897
+ readonly type: infer TType;
3898
+ } ? TType extends keyof FieldTypeToFilterConfigType ? FieldTypeToFilterConfigType[TType] : never : never;
3899
+
3643
3900
  /**
3644
3901
  * A styled input component.
3645
3902
  *
@@ -3766,12 +4023,17 @@ declare type LabelValue = string | ((props: any) => string);
3766
4023
  * </Layout>
3767
4024
  * ```
3768
4025
  */
3769
- export declare function Layout({ columns, className, style, gap, title, actions, fill, children, }: LayoutProps): JSX.Element;
4026
+ export declare const Layout: LayoutComponent;
3770
4027
 
3771
- export declare namespace Layout {
3772
- var Column: React_2.ForwardRefExoticComponent<ColumnProps & React_2.RefAttributes<HTMLDivElement>>;
3773
- var Header: Header;
3774
- }
4028
+ /**
4029
+ * Typed explicitly rather than assigning onto a `function Layout`: that form emits
4030
+ * `var Header: typeof import("./Layout").Header`, which the declaration rollup
4031
+ * rewrites to a bare `Header` — a namespace, not a type (TS2709). See `check-dts`.
4032
+ */
4033
+ declare type LayoutComponent = typeof LayoutRoot & {
4034
+ Column: typeof Column_2;
4035
+ Header: typeof Header;
4036
+ };
3775
4037
 
3776
4038
  /**
3777
4039
  * Props for Layout.Header component
@@ -3839,6 +4101,9 @@ export declare interface LayoutProps {
3839
4101
  children: ReactNode;
3840
4102
  }
3841
4103
 
4104
+ /** Implementation for {@link Layout}; exported below with its sub-components attached. */
4105
+ declare function LayoutRoot({ columns, className, style, gap, title, actions, fill, children, }: LayoutProps): JSX.Element;
4106
+
3842
4107
  /** An accessible legend that is automatically associated with the fieldset. */
3843
4108
  declare function Legend({ className, ...props }: React_2.ComponentProps<typeof Fieldset_2.Legend>): JSX.Element;
3844
4109
 
@@ -3848,17 +4113,6 @@ declare namespace Legend {
3848
4113
 
3849
4114
  export { Link }
3850
4115
 
3851
- /**
3852
- * Draws an orthogonal connector between two row items.
3853
- *
3854
- * If either referenced `Timeline.Interval` id is unresolved, nothing is rendered.
3855
- */
3856
- declare function Link_2({ from, to, fromAnchor, toAnchor, arrow, gap, className, style, strokeWidth, }: TimelineLinkProps): React_2.ReactPortal | null;
3857
-
3858
- declare namespace Link_2 {
3859
- var displayName: string;
3860
- }
3861
-
3862
4116
  /** Options for `type: "link"` cells. `href` is required. */
3863
4117
  declare interface LinkCellOptions<TRow extends Record<string, unknown>> {
3864
4118
  /**
@@ -3875,6 +4129,8 @@ declare namespace LinkItem {
3875
4129
  var displayName: string;
3876
4130
  }
3877
4131
 
4132
+ export { LinkProps }
4133
+
3878
4134
  /** Groups the individual tab buttons. */
3879
4135
  declare function List({ className, children, ...props }: React_2.ComponentProps<typeof Tabs_2.List>): JSX.Element;
3880
4136
 
@@ -3886,6 +4142,8 @@ declare type LoaderHandler = (args: LoaderFunctionArgs) => Promise<unknown> | un
3886
4142
 
3887
4143
  declare type LocalizedString = string | ((locale: string) => string);
3888
4144
 
4145
+ export { Location_2 as Location }
4146
+
3889
4147
  /** Shape returned by `mapItem` to describe how an item appears in the dropdown. */
3890
4148
  export declare interface MappedItem {
3891
4149
  /** Display text — used for filtering, a11y, and fallback display. */
@@ -3925,10 +4183,14 @@ declare namespace MenuSeparator {
3925
4183
  var displayName: string;
3926
4184
  }
3927
4185
 
4186
+ declare type MetadataFieldFilterOptions<TType extends FilterConfig["type"] = FilterConfig["type"]> = {
4187
+ operators?: NonEmptyReadonlyArray<DataTableUiFilterOperatorByType[TType]>;
4188
+ };
4189
+
3928
4190
  /**
3929
4191
  * Options for metadata-based single field inference.
3930
4192
  */
3931
- export declare interface MetadataFieldOptions {
4193
+ export declare type MetadataFieldOptions<TType extends FilterConfig["type"] = FilterConfig["type"]> = {
3932
4194
  /** Override the column header text. Defaults to the field's `description` or `name` from metadata. */
3933
4195
  label?: string;
3934
4196
  /** Fixed column width in pixels. When omitted the column sizes naturally. */
@@ -3939,11 +4201,21 @@ export declare interface MetadataFieldOptions {
3939
4201
  */
3940
4202
  sort?: boolean;
3941
4203
  /**
3942
- * Set to `false` to suppress the auto-generated filter config for this field.
3943
- * Defaults to `true` (filter is enabled when the field type supports it).
4204
+ * Set to `false` to suppress the auto-generated filter config for this field,
4205
+ * or pass `operators` to narrow the DataTable filter conditions exposed for
4206
+ * this field.
4207
+ *
4208
+ * When used through `inferColumns()` with specific table metadata, operator
4209
+ * literals are narrowed to the inferred field type. If the metadata has
4210
+ * already widened to `TableMetadata`, mismatched operators are still filtered
4211
+ * out at runtime.
3944
4212
  */
3945
- filter?: boolean;
3946
- }
4213
+ filter?: boolean | MetadataFieldFilterOptions<TType>;
4214
+ };
4215
+
4216
+ declare type MetadataFieldOptionsForField<TTable extends TableMetadata, TFieldName extends TableFieldName<TTable>> = MetadataFieldOptions<[
4217
+ InferredFieldFilterType<TTable, TFieldName>
4218
+ ] extends [never] ? FilterConfig["type"] : InferredFieldFilterType<TTable, TFieldName>>;
3947
4219
 
3948
4220
  /**
3949
4221
  * MetricCard — Compact card for dashboard KPI display (title, value, optional trend and description).
@@ -4031,6 +4303,18 @@ declare interface MoneyCellOptions<TRow extends Record<string, unknown>> {
4031
4303
  locale?: string;
4032
4304
  }
4033
4305
 
4306
+ export { Navigate }
4307
+
4308
+ export { NavigateFunction }
4309
+
4310
+ export { NavigateOptions }
4311
+
4312
+ export { Navigation }
4313
+
4314
+ export { NavLink }
4315
+
4316
+ export { NavLinkProps }
4317
+
4034
4318
  /**
4035
4319
  * Extract the node type from a cursor connection result.
4036
4320
  */
@@ -4040,6 +4324,8 @@ export declare type NodeType<T extends {
4040
4324
  }[];
4041
4325
  } | null | undefined> = NonNullable<T>["edges"][number]["node"];
4042
4326
 
4327
+ declare type NonEmptyReadonlyArray<T> = readonly [T, ...T[]];
4328
+
4043
4329
  /**
4044
4330
  * Header render context for non-sortable columns.
4045
4331
  */
@@ -4160,6 +4446,8 @@ declare namespace Panel {
4160
4446
  var displayName: string;
4161
4447
  }
4162
4448
 
4449
+ export { Params }
4450
+
4163
4451
  export { parseAbsolute }
4164
4452
 
4165
4453
  export { parseDate }
@@ -4191,7 +4479,23 @@ export { parseZonedDateTime }
4191
4479
  */
4192
4480
  export declare const pass: () => GuardResult;
4193
4481
 
4194
- /* Excluded from this release type: PositionProps */
4482
+ export { PathMatch }
4483
+
4484
+ /**
4485
+ * Shared positioning props for components that wrap both a Base UI Popup and
4486
+ * Positioner internally (e.g. Menu.Content, Tooltip.Content).
4487
+ *
4488
+ * Grouping Positioner-specific props under a `position` namespace prevents
4489
+ * name collisions with the Popup's own props and keeps the type surface clean.
4490
+ */
4491
+ export declare interface PositionProps {
4492
+ /** Which side of the anchor element to position against. */
4493
+ side?: "top" | "right" | "bottom" | "left";
4494
+ /** How to align the popup relative to the anchor along the cross axis. */
4495
+ align?: "start" | "center" | "end";
4496
+ /** Distance (in px) between the popup and the anchor edge. */
4497
+ sideOffset?: number;
4498
+ }
4195
4499
 
4196
4500
  /** Provides shared delay configuration for nested tooltips. */
4197
4501
  declare function Provider({ delay, children, ...props }: ProviderProps): JSX.Element;
@@ -4225,6 +4529,48 @@ declare namespace RadioItemIndicator {
4225
4529
  var displayName: string;
4226
4530
  }
4227
4531
 
4532
+ /**
4533
+ * A standalone inline range calendar. The first click sets one end of the
4534
+ * range, the highlight follows the pointer (or arrow keys), and the second
4535
+ * click completes it — picking a day before the first swaps the endpoints.
4536
+ *
4537
+ * @example
4538
+ * ```tsx
4539
+ * import { RangeCalendar, type DateRange } from "@tailor-platform/app-shell";
4540
+ *
4541
+ * const [range, setRange] = useState<DateRange | null>(null);
4542
+ * <RangeCalendar aria-label="Stay dates" value={range} onChange={setRange} />
4543
+ * ```
4544
+ */
4545
+ export declare function RangeCalendar<T extends DateValue = DateValue>({ value, defaultValue, onChange, minValue, maxValue, isDateUnavailable, isDisabled, isReadOnly, focusedValue, defaultFocusedValue, onFocusChange, firstDayOfWeek, timeZone: timeZoneProp, locale: localeProp, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, }: RangeCalendarProps<T>): JSX.Element;
4546
+
4547
+ /**
4548
+ * Public, closed-API standalone range calendar — the @internationalized/date +
4549
+ * Base UI implementation. Same surface as the react-aria variant; only the
4550
+ * internals differ. Consumers never see Base UI or the calendar engine.
4551
+ */
4552
+ export declare interface RangeCalendarProps<T extends DateValue = DateValue> {
4553
+ value?: DateRange<T> | null;
4554
+ defaultValue?: DateRange<T> | null;
4555
+ /** Fired once per selection, when the second date completes the range. */
4556
+ onChange?: (value: DateRange<T>) => void;
4557
+ minValue?: DateValue;
4558
+ maxValue?: DateValue;
4559
+ isDateUnavailable?: (date: DateValue) => boolean;
4560
+ isDisabled?: boolean;
4561
+ isReadOnly?: boolean;
4562
+ focusedValue?: DateValue;
4563
+ defaultFocusedValue?: DateValue;
4564
+ onFocusChange?: (date: CalendarDate) => void;
4565
+ firstDayOfWeek?: FirstDayOfWeek;
4566
+ "aria-label"?: string;
4567
+ "aria-labelledby"?: string;
4568
+ timeZone?: string;
4569
+ className?: string;
4570
+ /** BCP-47 locale override; defaults to the AppShell formatting locale. */
4571
+ locale?: string;
4572
+ }
4573
+
4228
4574
  /**
4229
4575
  * Redirect to another path.
4230
4576
  *
@@ -4642,6 +4988,54 @@ export declare interface RowAction<TRow extends Record<string, unknown>> {
4642
4988
  onClick: (row: TRow) => void;
4643
4989
  }
4644
4990
 
4991
+ /**
4992
+ * Expandable-row configuration for `useDataTable`.
4993
+ *
4994
+ * The union is what makes an invalid setup unrepresentable: pass `expandedIds`
4995
+ * and you must pass `onChange` with it (controlled), or pass neither and let
4996
+ * the hook own the state. `onChange` alone is still allowed — in uncontrolled
4997
+ * mode it is a notification.
4998
+ */
4999
+ declare type RowExpansionOptions<TRow extends Record<string, unknown>> = {
5000
+ /** Renders the detail panel for an expanded row. */
5001
+ render: (row: TRow) => ReactNode;
5002
+ /**
5003
+ * Decides whether a row can be expanded. Rows returning `false` render an
5004
+ * empty cell in place of the chevron. Defaults to `true` for rows with an
5005
+ * `id`. Gates the panel in both directions: an id in `expandedIds` never
5006
+ * opens a panel for a row this rejects.
5007
+ */
5008
+ canExpand?: (row: TRow) => boolean;
5009
+ /**
5010
+ * The row's record identity — a **bare identifier** such as `"INV-1001"`, not
5011
+ * a sentence. The built-in i18n labels compose it into the accessible names of
5012
+ * the chevron ("Expand row INV-1001") and the panel ("INV-1001 details").
5013
+ * Without it, the generic "Expand row" / "Row details" fallbacks are used.
5014
+ */
5015
+ getLabel?: (row: TRow) => string;
5016
+ } & ({
5017
+ /**
5018
+ * Ids of the expanded rows. Passing this switches expansion to
5019
+ * **controlled** mode: internal state is never written and you update this
5020
+ * array from `onChange`.
5021
+ *
5022
+ * **Batching caveat:** each toggle derives the next array from this
5023
+ * value, so two toggles dispatched before your state commits share a base
5024
+ * and the first is lost. Relevant behind an async store (a debounced URL
5025
+ * sync, `startTransition`) or when looping the toggle over many rows.
5026
+ */
5027
+ expandedIds: string[];
5028
+ /** Called with the full array of expanded ids. Fires once per toggle. */
5029
+ onChange: (ids: string[]) => void;
5030
+ } | {
5031
+ expandedIds?: never;
5032
+ /**
5033
+ * Optional notification in uncontrolled mode, called with the full array
5034
+ * of expanded ids. Fires once per toggle, including under StrictMode.
5035
+ */
5036
+ onChange?: (ids: string[]) => void;
5037
+ });
5038
+
4645
5039
  /**
4646
5040
  * Setter shape compatible with `useSearchParams()`.
4647
5041
  */
@@ -5467,6 +5861,67 @@ declare type TabsSize = "xs" | "sm" | "default" | "lg";
5467
5861
 
5468
5862
  declare type TabsVariant = "default" | "line" | "capsule";
5469
5863
 
5864
+ /**
5865
+ * A styled multi-line text input.
5866
+ *
5867
+ * Wraps Base UI's `Field.Control` rendered as a `<textarea>`, so it works with
5868
+ * `Field` and React Hook Form the same way `Input`, `Checkbox`, and `Select`
5869
+ * do — placed inside a `Field.Root` it inherits label association,
5870
+ * `aria-describedby`, `disabled`, and the `data-invalid` error state
5871
+ * automatically (no `error` prop of its own). Outside a `Field.Root` it
5872
+ * renders as a plain standalone control.
5873
+ *
5874
+ * The box has no fixed height: `rows` sets the visible line count, and the user
5875
+ * can drag it taller. `min-h-16` is a hard floor, so `rows={1}` and `rows={2}`
5876
+ * both render at 64px — `rows` only starts moving the height from 3 up.
5877
+ *
5878
+ * @example
5879
+ * ### Standalone
5880
+ * ```tsx
5881
+ * const [note, setNote] = React.useState("");
5882
+ *
5883
+ * <Textarea value={note} onChange={(event) => setNote(event.target.value)} placeholder="Add a note…" />
5884
+ * ```
5885
+ *
5886
+ * @example
5887
+ * ### Taller
5888
+ * ```tsx
5889
+ * <Textarea rows={8} placeholder="Paste the incident log…" />
5890
+ * ```
5891
+ *
5892
+ * @example
5893
+ * ### Inside a Field
5894
+ * ```tsx
5895
+ * <Field.Root name="description">
5896
+ * <Field.Label>Description</Field.Label>
5897
+ * <Textarea rows={5} placeholder="What changed?" />
5898
+ * <Field.Description>Optional — visible to the whole team.</Field.Description>
5899
+ * </Field.Root>
5900
+ * ```
5901
+ *
5902
+ * @example
5903
+ * ### With React Hook Form
5904
+ * ```tsx
5905
+ * <Controller
5906
+ * name="description"
5907
+ * control={control}
5908
+ * rules={{ required: "Description is required." }}
5909
+ * render={({ field, fieldState }) => (
5910
+ * <Field.Root name={field.name} {...fieldState}>
5911
+ * <Field.Label>Description</Field.Label>
5912
+ * <Textarea {...field} rows={5} />
5913
+ * <Field.Error />
5914
+ * </Field.Root>
5915
+ * )}
5916
+ * />
5917
+ * ```
5918
+ */
5919
+ export declare function Textarea({ className, ...props }: TextareaProps): JSX.Element;
5920
+
5921
+ export declare type TextareaProps = Omit<React_2.ComponentProps<typeof Field_2.Control>, "render" | "onChange" | "className"> & Pick<React_2.ComponentProps<"textarea">, "onChange" | "rows"> & {
5922
+ className?: string;
5923
+ };
5924
+
5470
5925
  export { Time }
5471
5926
 
5472
5927
  /**
@@ -5489,7 +5944,7 @@ export declare const Timeline: {
5489
5944
  Viewport: typeof Viewport;
5490
5945
  Row: typeof Row_2;
5491
5946
  Interval: typeof Interval;
5492
- Link: typeof Link_2;
5947
+ Link: typeof TimelineLink;
5493
5948
  };
5494
5949
 
5495
5950
  /**
@@ -5669,6 +6124,17 @@ export declare type TimelineIntervalProps = {
5669
6124
  style?: React_2.CSSProperties;
5670
6125
  };
5671
6126
 
6127
+ /**
6128
+ * Draws an orthogonal connector between two row items.
6129
+ *
6130
+ * If either referenced `Timeline.Interval` id is unresolved, nothing is rendered.
6131
+ */
6132
+ declare function TimelineLink({ from, to, fromAnchor, toAnchor, arrow, gap, className, style, strokeWidth, }: TimelineLinkProps): React_2.ReactPortal | null;
6133
+
6134
+ declare namespace TimelineLink {
6135
+ var displayName: string;
6136
+ }
6137
+
5672
6138
  /**
5673
6139
  * Shared defaults for `Timeline.Link` instances inside one viewport.
5674
6140
  */
@@ -5839,6 +6305,8 @@ declare namespace Title_3 {
5839
6305
  var displayName: string;
5840
6306
  }
5841
6307
 
6308
+ export { To }
6309
+
5842
6310
  export declare const Tooltip: {
5843
6311
  Root: typeof Root_12;
5844
6312
  Trigger: typeof Trigger_4;
@@ -6289,6 +6757,10 @@ export declare const useAuthSuspense: () => {
6289
6757
  checkAuthStatus: () => Promise<AuthState>;
6290
6758
  };
6291
6759
 
6760
+ export { useBeforeUnload }
6761
+
6762
+ export { useBlocker }
6763
+
6292
6764
  /**
6293
6765
  * Hook to access collection control from the nearest `CollectionControlProvider`.
6294
6766
  *
@@ -6615,6 +7087,22 @@ export declare type UseDataTableOptions<TRow extends Record<string, unknown>, TF
6615
7087
  * the rows on the **current page**, not all pages.
6616
7088
  */
6617
7089
  onSelectionChange?: (ids: string[]) => void;
7090
+ /**
7091
+ * Expandable detail rows. Providing this enables the whole feature: a chevron
7092
+ * column is added at the left edge (auto-pinned left, after the selection
7093
+ * column) and `render`'s output appears in a full-width row beneath its parent.
7094
+ *
7095
+ * Grouped rather than flat so the parts can't be configured in a broken
7096
+ * combination — a label or predicate without a renderer, or `expandedIds`
7097
+ * without `onChange`, are all compile errors.
7098
+ *
7099
+ * **Requirement:** Each row must have a string or number `id` field.
7100
+ * Expansion is keyed by `id`, so rows without one render no chevron.
7101
+ *
7102
+ * **Note:** Expansion is **not** cleared on page change — ids of rows no
7103
+ * longer on the page simply do not render. Call `collapseAllRows()` to reset.
7104
+ */
7105
+ rowExpansion?: RowExpansionOptions<TRow>;
6618
7106
  /**
6619
7107
  * Sort behaviour configuration.
6620
7108
  *
@@ -6699,6 +7187,16 @@ export declare interface UseDataTableReturn<TRow extends Record<string, unknown>
6699
7187
  clearSelection?: () => void;
6700
7188
  isAllSelected: boolean;
6701
7189
  isIndeterminate: boolean;
7190
+ /** Ids of the currently expanded rows. */
7191
+ expandedIds: string[];
7192
+ /** Whether `row` is currently expanded. Always `false` for rows without an `id`. */
7193
+ isRowExpanded: (row: TRow) => boolean;
7194
+ /** Toggle `row`'s detail panel. Undefined when `rowExpansion` is not provided. */
7195
+ toggleRowExpansion?: (row: TRow) => void;
7196
+ /** Collapse every expanded row. Undefined when `rowExpansion` is not provided. */
7197
+ collapseAllRows?: () => void;
7198
+ /** Expansion config (passthrough for `DataTable.Root`). */
7199
+ rowExpansion?: RowExpansionOptions<TRow>;
6702
7200
  }
6703
7201
 
6704
7202
  /**
@@ -6720,7 +7218,7 @@ export declare interface UseDataTableReturn<TRow extends Record<string, unknown>
6720
7218
  * </Combobox.Parts.Root>
6721
7219
  * ```
6722
7220
  */
6723
- declare const useFilter: typeof Combobox_2.useFilter;
7221
+ declare function useFilter(options?: ComboboxFilterOptions): ComboboxFilter;
6724
7222
 
6725
7223
  /**
6726
7224
  * Hook for robust string matching using `Intl.Collator`.
@@ -6741,12 +7239,16 @@ declare const useFilter: typeof Combobox_2.useFilter;
6741
7239
  * </Autocomplete.Parts.Root>
6742
7240
  * ```
6743
7241
  */
6744
- declare const useFilter_2: getFilter;
7242
+ declare function useFilter_2(options?: AutocompleteFilterOptions): AutocompleteFilter;
6745
7243
 
6746
7244
  export { useLocation }
6747
7245
 
7246
+ export { useMatch }
7247
+
6748
7248
  export { useNavigate }
6749
7249
 
7250
+ export { useNavigation }
7251
+
6750
7252
  /**
6751
7253
  * Returns a function that opens the CommandPalette.
6752
7254
  *
@@ -6826,6 +7328,8 @@ export declare const useResolvedLocale: () => {
6826
7328
  language: string;
6827
7329
  };
6828
7330
 
7331
+ export { useResolvedPath }
7332
+
6829
7333
  export { useRouteError }
6830
7334
 
6831
7335
  export { useSearchParams }
@@ -7055,3 +7559,603 @@ export declare function withURLCollectionState(options: UseCollectionOptions & {
7055
7559
  export { ZonedDateTime }
7056
7560
 
7057
7561
  export { }
7562
+
7563
+
7564
+ declare namespace Root {
7565
+ var displayName: string;
7566
+ }
7567
+
7568
+
7569
+ declare namespace Title {
7570
+ var displayName: string;
7571
+ }
7572
+
7573
+
7574
+ declare namespace Description {
7575
+ var displayName: string;
7576
+ }
7577
+
7578
+
7579
+ declare namespace Root {
7580
+ var displayName: string;
7581
+ }
7582
+
7583
+
7584
+ declare namespace Image {
7585
+ var displayName: string;
7586
+ }
7587
+
7588
+
7589
+ declare namespace Fallback {
7590
+ var displayName: string;
7591
+ }
7592
+
7593
+
7594
+ declare namespace Root {
7595
+ var displayName: string;
7596
+ }
7597
+
7598
+
7599
+ declare namespace Viewport {
7600
+ var displayName: string;
7601
+ }
7602
+
7603
+
7604
+ declare namespace Row {
7605
+ var displayName: string;
7606
+ }
7607
+
7608
+
7609
+ declare namespace Interval {
7610
+ var displayName: string;
7611
+ }
7612
+
7613
+
7614
+ declare namespace TimelineLink {
7615
+ var displayName: string;
7616
+ }
7617
+
7618
+
7619
+ declare namespace Root {
7620
+ var displayName: string;
7621
+ }
7622
+
7623
+
7624
+ declare namespace Trigger {
7625
+ var displayName: string;
7626
+ }
7627
+
7628
+
7629
+ declare namespace Content {
7630
+ var displayName: string;
7631
+ }
7632
+
7633
+
7634
+ declare namespace Item {
7635
+ var displayName: string;
7636
+ }
7637
+
7638
+
7639
+ declare namespace LinkItem {
7640
+ var displayName: string;
7641
+ }
7642
+
7643
+
7644
+ declare namespace CheckboxItem {
7645
+ var displayName: string;
7646
+ }
7647
+
7648
+
7649
+ declare namespace CheckboxItemIndicator {
7650
+ var displayName: string;
7651
+ }
7652
+
7653
+
7654
+ declare namespace RadioItem {
7655
+ var displayName: string;
7656
+ }
7657
+
7658
+
7659
+ declare namespace RadioItemIndicator {
7660
+ var displayName: string;
7661
+ }
7662
+
7663
+
7664
+ declare namespace RadioGroup {
7665
+ var displayName: string;
7666
+ }
7667
+
7668
+
7669
+ declare namespace Group {
7670
+ var displayName: string;
7671
+ }
7672
+
7673
+
7674
+ declare namespace GroupLabel {
7675
+ var displayName: string;
7676
+ }
7677
+
7678
+
7679
+ declare namespace MenuSeparator {
7680
+ var displayName: string;
7681
+ }
7682
+
7683
+
7684
+ declare namespace SubmenuRoot {
7685
+ var displayName: string;
7686
+ }
7687
+
7688
+
7689
+ declare namespace SubmenuTrigger {
7690
+ var displayName: string;
7691
+ }
7692
+
7693
+
7694
+ declare namespace Root {
7695
+ var displayName: string;
7696
+ }
7697
+
7698
+
7699
+ declare namespace List {
7700
+ var displayName: string;
7701
+ }
7702
+
7703
+
7704
+ declare namespace Tab {
7705
+ var displayName: string;
7706
+ }
7707
+
7708
+
7709
+ declare namespace Panel {
7710
+ var displayName: string;
7711
+ }
7712
+
7713
+
7714
+ declare namespace Root {
7715
+ var displayName: string;
7716
+ }
7717
+
7718
+
7719
+ declare namespace Trigger {
7720
+ var displayName: string;
7721
+ }
7722
+
7723
+
7724
+ declare namespace Close {
7725
+ var displayName: string;
7726
+ }
7727
+
7728
+
7729
+ declare namespace Content {
7730
+ var displayName: string;
7731
+ }
7732
+
7733
+
7734
+ declare namespace Header {
7735
+ var displayName: string;
7736
+ }
7737
+
7738
+
7739
+ declare namespace Footer {
7740
+ var displayName: string;
7741
+ }
7742
+
7743
+
7744
+ declare namespace Title {
7745
+ var displayName: string;
7746
+ }
7747
+
7748
+
7749
+ declare namespace Description {
7750
+ var displayName: string;
7751
+ }
7752
+
7753
+
7754
+ declare namespace Root {
7755
+ var displayName: string;
7756
+ }
7757
+
7758
+
7759
+ declare namespace Header {
7760
+ var displayName: string;
7761
+ }
7762
+
7763
+
7764
+ declare namespace Body {
7765
+ var displayName: string;
7766
+ }
7767
+
7768
+
7769
+ declare namespace Footer {
7770
+ var displayName: string;
7771
+ }
7772
+
7773
+
7774
+ declare namespace Row {
7775
+ var displayName: string;
7776
+ }
7777
+
7778
+
7779
+ declare namespace Head {
7780
+ var displayName: string;
7781
+ }
7782
+
7783
+
7784
+ declare namespace Cell {
7785
+ var displayName: string;
7786
+ }
7787
+
7788
+
7789
+ declare namespace Caption {
7790
+ var displayName: string;
7791
+ }
7792
+
7793
+
7794
+ declare namespace Provider {
7795
+ var displayName: string;
7796
+ }
7797
+
7798
+
7799
+ declare namespace Root {
7800
+ var displayName: string;
7801
+ }
7802
+
7803
+
7804
+ declare namespace Trigger {
7805
+ var displayName: string;
7806
+ }
7807
+
7808
+
7809
+ declare namespace Content {
7810
+ var displayName: string;
7811
+ }
7812
+
7813
+
7814
+ declare namespace Root {
7815
+ var displayName: string;
7816
+ }
7817
+
7818
+
7819
+ declare namespace Header {
7820
+ var displayName: string;
7821
+ }
7822
+
7823
+
7824
+ declare namespace Content {
7825
+ var displayName: string;
7826
+ }
7827
+
7828
+
7829
+ declare namespace SelectRoot {
7830
+ var displayName: string;
7831
+ }
7832
+
7833
+
7834
+ declare namespace SelectTrigger {
7835
+ var displayName: string;
7836
+ }
7837
+
7838
+
7839
+ declare namespace SelectValue {
7840
+ var displayName: string;
7841
+ }
7842
+
7843
+
7844
+ declare namespace SelectContent {
7845
+ var displayName: string;
7846
+ }
7847
+
7848
+
7849
+ declare namespace SelectItem {
7850
+ var displayName: string;
7851
+ }
7852
+
7853
+
7854
+ declare namespace SelectGroup {
7855
+ var displayName: string;
7856
+ }
7857
+
7858
+
7859
+ declare namespace SelectGroupLabel {
7860
+ var displayName: string;
7861
+ }
7862
+
7863
+
7864
+ declare namespace SelectSeparator {
7865
+ var displayName: string;
7866
+ }
7867
+
7868
+
7869
+ declare namespace Root {
7870
+ var displayName: string;
7871
+ }
7872
+
7873
+
7874
+ declare namespace Trigger {
7875
+ var displayName: string;
7876
+ }
7877
+
7878
+
7879
+ declare namespace Close {
7880
+ var displayName: string;
7881
+ }
7882
+
7883
+
7884
+ declare namespace Content {
7885
+ var displayName: string;
7886
+ }
7887
+
7888
+
7889
+ declare namespace Header {
7890
+ var displayName: string;
7891
+ }
7892
+
7893
+
7894
+ declare namespace Footer {
7895
+ var displayName: string;
7896
+ }
7897
+
7898
+
7899
+ declare namespace Title {
7900
+ var displayName: string;
7901
+ }
7902
+
7903
+
7904
+ declare namespace Description {
7905
+ var displayName: string;
7906
+ }
7907
+
7908
+
7909
+ declare namespace ComboboxRoot {
7910
+ var displayName: string;
7911
+ }
7912
+
7913
+
7914
+ declare namespace ComboboxInput {
7915
+ var displayName: string;
7916
+ }
7917
+
7918
+
7919
+ declare namespace ComboboxTrigger {
7920
+ var displayName: string;
7921
+ }
7922
+
7923
+
7924
+ declare namespace ComboboxInputGroup {
7925
+ var displayName: string;
7926
+ }
7927
+
7928
+
7929
+ declare namespace ComboboxContent {
7930
+ var displayName: string;
7931
+ }
7932
+
7933
+
7934
+ declare namespace ComboboxList {
7935
+ var displayName: string;
7936
+ }
7937
+
7938
+
7939
+ declare namespace ComboboxItem {
7940
+ var displayName: string;
7941
+ }
7942
+
7943
+
7944
+ declare namespace ComboboxEmpty {
7945
+ var displayName: string;
7946
+ }
7947
+
7948
+
7949
+ declare namespace ComboboxGroup {
7950
+ var displayName: string;
7951
+ }
7952
+
7953
+
7954
+ declare namespace ComboboxGroupLabel {
7955
+ var displayName: string;
7956
+ }
7957
+
7958
+
7959
+ declare namespace ComboboxClear {
7960
+ var displayName: string;
7961
+ }
7962
+
7963
+
7964
+ declare namespace ComboboxChips {
7965
+ var displayName: string;
7966
+ }
7967
+
7968
+
7969
+ declare namespace ComboboxChip {
7970
+ var displayName: string;
7971
+ }
7972
+
7973
+
7974
+ declare namespace ComboboxChipRemove {
7975
+ var displayName: string;
7976
+ }
7977
+
7978
+
7979
+ declare namespace ComboboxValue {
7980
+ var displayName: string;
7981
+ }
7982
+
7983
+
7984
+ declare namespace ComboboxStatus {
7985
+ var displayName: string;
7986
+ }
7987
+
7988
+
7989
+ declare namespace ComboboxCollection {
7990
+ var displayName: string;
7991
+ }
7992
+
7993
+
7994
+ declare namespace Root {
7995
+ var displayName: string;
7996
+ }
7997
+
7998
+
7999
+ declare namespace Label {
8000
+ var displayName: string;
8001
+ }
8002
+
8003
+
8004
+ declare namespace Control {
8005
+ var displayName: string;
8006
+ }
8007
+
8008
+
8009
+ declare namespace Description {
8010
+ var displayName: string;
8011
+ }
8012
+
8013
+
8014
+ declare namespace Error {
8015
+ var displayName: string;
8016
+ }
8017
+
8018
+
8019
+ declare namespace Validity {
8020
+ var displayName: string;
8021
+ }
8022
+
8023
+
8024
+ declare namespace AutocompleteRoot {
8025
+ var displayName: string;
8026
+ }
8027
+
8028
+
8029
+ declare namespace AutocompleteValue {
8030
+ var displayName: string;
8031
+ }
8032
+
8033
+
8034
+ declare namespace AutocompleteInput {
8035
+ var displayName: string;
8036
+ }
8037
+
8038
+
8039
+ declare namespace AutocompleteTrigger {
8040
+ var displayName: string;
8041
+ }
8042
+
8043
+
8044
+ declare namespace AutocompleteInputGroup {
8045
+ var displayName: string;
8046
+ }
8047
+
8048
+
8049
+ declare namespace AutocompleteContent {
8050
+ var displayName: string;
8051
+ }
8052
+
8053
+
8054
+ declare namespace AutocompleteList {
8055
+ var displayName: string;
8056
+ }
8057
+
8058
+
8059
+ declare namespace AutocompleteItem {
8060
+ var displayName: string;
8061
+ }
8062
+
8063
+
8064
+ declare namespace AutocompleteEmpty {
8065
+ var displayName: string;
8066
+ }
8067
+
8068
+
8069
+ declare namespace AutocompleteClear {
8070
+ var displayName: string;
8071
+ }
8072
+
8073
+
8074
+ declare namespace AutocompleteGroup {
8075
+ var displayName: string;
8076
+ }
8077
+
8078
+
8079
+ declare namespace AutocompleteGroupLabel {
8080
+ var displayName: string;
8081
+ }
8082
+
8083
+
8084
+ declare namespace AutocompleteCollection {
8085
+ var displayName: string;
8086
+ }
8087
+
8088
+
8089
+ declare namespace AutocompleteStatus {
8090
+ var displayName: string;
8091
+ }
8092
+
8093
+
8094
+ declare namespace AutocompleteStandalone {
8095
+ var displayName: string;
8096
+ }
8097
+
8098
+
8099
+ declare namespace AutocompleteAsyncStandalone {
8100
+ var displayName: string;
8101
+ }
8102
+
8103
+
8104
+ declare namespace Root {
8105
+ var displayName: string;
8106
+ }
8107
+
8108
+
8109
+ declare namespace Legend {
8110
+ var displayName: string;
8111
+ }
8112
+
8113
+
8114
+ declare namespace DataTableRoot {
8115
+ var displayName: string;
8116
+ }
8117
+
8118
+
8119
+ declare namespace DataTableTable {
8120
+ var displayName: string;
8121
+ }
8122
+
8123
+
8124
+ declare namespace DataTableFooter {
8125
+ var displayName: string;
8126
+ }
8127
+
8128
+
8129
+ declare namespace Root {
8130
+ var displayName: string;
8131
+ }
8132
+
8133
+
8134
+ declare namespace Items {
8135
+ var displayName: string;
8136
+ }
8137
+
8138
+
8139
+ declare namespace Item {
8140
+ var displayName: string;
8141
+ }
8142
+
8143
+
8144
+ declare namespace DataTableToolbar {
8145
+ var displayName: string;
8146
+ }
8147
+
8148
+
8149
+ declare namespace DataTableFilters {
8150
+ var displayName: string;
8151
+ }
8152
+
8153
+
8154
+ declare namespace AsyncErrorState {
8155
+ var displayName: string;
8156
+ }
8157
+
8158
+
8159
+ declare namespace DataTableColumnSettings {
8160
+ var displayName: string;
8161
+ }