@tailor-platform/app-shell 1.12.0 → 1.14.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 -1
  2. package/dist/app-shell-core.css +3 -1
  3. package/dist/app-shell.d.ts +1038 -46
  4. package/dist/app-shell.js +10700 -14287
  5. package/dist/appshell-CtS8Y3LW.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.css +29 -1
  129. package/dist/vite-plugin.d.ts +607 -1
  130. package/dist/vite-plugin.js +2 -4
  131. package/package.json +23 -15
  132. package/skills/app-shell-patterns/SKILL.md +14 -6
  133. package/skills/app-shell-patterns/references/fundamental/components.md +147 -4
  134. package/skills/app-shell-patterns/references/fundamental/design-system.md +1 -1
  135. package/skills/app-shell-patterns/references/fundamental/graphql.md +1 -1
  136. package/skills/app-shell-patterns/references/patterns/form-composer.md +142 -0
  137. package/skills/app-shell-patterns/references/patterns/form-modal.md +84 -30
  138. package/skills/app-shell-patterns/references/patterns/form-sectioned.md +136 -64
  139. package/skills/app-shell-patterns/references/patterns/form-single-page.md +58 -26
  140. package/skills/app-shell-patterns/references/patterns/form-wizard.md +157 -69
@@ -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,17 +21,25 @@ 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';
24
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';
25
38
  import { parseAbsolute } from '@internationalized/date';
26
39
  import { parseDate } from '@internationalized/date';
27
40
  import { parseDateTime } from '@internationalized/date';
28
41
  import { parseZonedDateTime } from '@internationalized/date';
42
+ import { PathMatch } from 'react-router';
29
43
  import * as React_2 from 'react';
30
44
  import { ReactElement } from 'react';
31
45
  import { ReactNode } from 'react';
@@ -35,11 +49,17 @@ import { Select as Select_2 } from '@base-ui/react/select';
35
49
  import { StandardSchemaV1 } from '@standard-schema/spec';
36
50
  import { Tabs as Tabs_2 } from '@base-ui/react/tabs';
37
51
  import { Time } from '@internationalized/date';
52
+ import { To } from 'react-router';
38
53
  import { toast } from 'sonner';
39
54
  import { Tooltip as Tooltip_2 } from '@base-ui/react/tooltip';
55
+ import { useBeforeUnload } from 'react-router';
56
+ import { useBlocker } from 'react-router';
40
57
  import { useLocation } from 'react-router';
58
+ import { useMatch } from 'react-router';
41
59
  import { useNavigate } from 'react-router';
60
+ import { useNavigation } from 'react-router';
42
61
  import { useParams } from 'react-router';
62
+ import { useResolvedPath } from 'react-router';
43
63
  import { useRouteError } from 'react-router';
44
64
  import { useSearchParams } from 'react-router';
45
65
  import { VariantProps } from 'class-variance-authority';
@@ -272,9 +292,8 @@ export declare type AppInfoEntry = {
272
292
  value: string | number | boolean | null | undefined;
273
293
  };
274
294
 
275
- export declare const AppShell: {
276
- (props: AppShellProps): JSX.Element | null;
277
- WithPages(pages: PageEntry[]): FC<AppShellProps>;
295
+ export declare const AppShell: ((props: AppShellProps) => React.ReactNode) & {
296
+ WithPages: (pages: PageEntry[]) => FC<AppShellProps>;
278
297
  };
279
298
 
280
299
  /**
@@ -718,7 +737,7 @@ declare const AutocompleteParts: {
718
737
 
719
738
  declare type AutocompleteParts = typeof AutocompleteParts;
720
739
 
721
- declare type AutocompletePickedRootProps<Value> = Pick<AutocompleteRootProps<Value>, "value" | "defaultValue" | "onValueChange" | "filter" | "disabled" | "children"> & {
740
+ declare type AutocompletePickedRootProps<Value> = Pick<AutocompleteRootProps<Value>, "value" | "defaultValue" | "onValueChange" | "filter" | "disabled" | "children" | "name" | "form" | "required" | "inputRef" | "id"> & {
722
741
  items?: readonly Value[];
723
742
  };
724
743
 
@@ -760,6 +779,29 @@ declare interface AutocompletePropsBase<T> {
760
779
  "aria-labelledby"?: string;
761
780
  /** ID applied to the combobox input element. */
762
781
  id?: string;
782
+ /**
783
+ * Identifies the field when a form is submitted, so the current text is
784
+ * picked up by **native** form submission (`new FormData(form)`, a plain
785
+ * `<form>`, server actions).
786
+ *
787
+ * Autocomplete's value is the raw input string, so no value-serialisation
788
+ * hook is needed (unlike `Select` and `Combobox`).
789
+ *
790
+ * **Inside a `Field.Root`, the field's `name` wins and this prop is ignored** —
791
+ * the hidden input is named after the field. Set it only when the control is
792
+ * used outside a `Field.Root` (or when it must differ from the field name,
793
+ * which it cannot).
794
+ */
795
+ name?: string;
796
+ /**
797
+ * `id` of the form that owns the input. Use when the autocomplete is
798
+ * rendered outside the `<form>` element it belongs to.
799
+ */
800
+ form?: string;
801
+ /** Whether a value must be entered before the owning form can be submitted. */
802
+ required?: boolean;
803
+ /** Ref to the underlying input element. */
804
+ inputRef?: React_2.Ref<HTMLInputElement>;
763
805
  }
764
806
 
765
807
  declare function AutocompleteRoot<Value>(props: AutocompletePickedRootProps<Value>): JSX.Element;
@@ -875,6 +917,10 @@ export declare const badgeVariants: (props?: ({
875
917
  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;
876
918
  } & ClassProp) | undefined) => string;
877
919
 
920
+ export { Blocker }
921
+
922
+ export { BlockerFunction }
923
+
878
924
  /** The table body section (`<tbody>`). */
879
925
  declare function Body_2({ className, ...props }: React_2.ComponentProps<"tbody">): JSX.Element;
880
926
 
@@ -968,8 +1014,14 @@ export declare interface CalendarProps<T extends DateValue = DateValue> {
968
1014
 
969
1015
  /**
970
1016
  * Internal type for tracking OAuth callback handling status.
1017
+ *
1018
+ * "denied" is distinct from "rejected": it means another automatic login round
1019
+ * trip will not help, so auto-login stays out of it. Two things land there —
1020
+ * the authorization server refusing outright (the user declined consent, the
1021
+ * client is not permitted), and a callback that keeps failing after its retry
1022
+ * budget is spent. "rejected" is a failure that is still worth one more attempt.
971
1023
  */
972
- declare type CallbackStatus = "idle" | "pending" | "resolved" | "rejected";
1024
+ declare type CallbackStatus = "idle" | "pending" | "resolved" | "rejected" | "denied";
973
1025
 
974
1026
  /** A table caption element. */
975
1027
  declare function Caption({ className, ...props }: React_2.ComponentProps<"caption">): JSX.Element;
@@ -1234,6 +1286,58 @@ export declare type ColorTheme = "light" | "dark" | "system";
1234
1286
  */
1235
1287
  export declare type Column<TRow extends Record<string, unknown>> = ColumnBase<TRow> & ColumnTypeBranch<TRow>;
1236
1288
 
1289
+ /**
1290
+ * Layout.Column — A single column within `<Layout>`.
1291
+ *
1292
+ * Wrap each logical section of the page in a `<Layout.Column>`.
1293
+ * The parent `<Layout>` sizes columns via CSS Grid `grid-template-columns`,
1294
+ * based on the number of children and, optionally, the `area` prop.
1295
+ * Column width is controlled entirely by the parent grid — the column
1296
+ * itself does not set its own width.
1297
+ *
1298
+ * ### Position-based mode (default)
1299
+ *
1300
+ * When no `area` prop is provided, columns are sized by their DOM position:
1301
+ *
1302
+ * - **2-column:** 1st = flexible (`1fr`), 2nd = fixed 280 px
1303
+ * - **3-column:** 1st = fixed 320 px, 2nd = flexible (`1fr`), 3rd = fixed 280 px
1304
+ * - **4+ columns:** all columns share equal width (`repeat(N, 1fr)`)
1305
+ *
1306
+ * ### Area mode
1307
+ *
1308
+ * Set the `area` prop on any column to opt into role-based widths.
1309
+ * Columns without an `area` prop default to `1fr`.
1310
+ * Visual ordering always follows DOM order, so place your columns in the
1311
+ * intended left-to-right sequence.
1312
+ *
1313
+ * | area | width |
1314
+ * | --------- | ----------------- |
1315
+ * | `"left"` | fixed 320 px |
1316
+ * | `"main"` | flexible (`1fr`) |
1317
+ * | `"right"` | fixed 280 px |
1318
+ *
1319
+ * ### Data attributes
1320
+ *
1321
+ * The rendered `<div>` always has `data-layout-column`.
1322
+ * When `area` is set, `data-area` is also added with the area value.
1323
+ *
1324
+ * @example
1325
+ * ```tsx
1326
+ * // Position-based (default)
1327
+ * <Layout>
1328
+ * <Layout.Column>Main content</Layout.Column>
1329
+ * <Layout.Column>Side panel</Layout.Column>
1330
+ * </Layout>
1331
+ *
1332
+ * // Area-based
1333
+ * <Layout>
1334
+ * <Layout.Column area="left">Sidebar</Layout.Column>
1335
+ * <Layout.Column area="main">Content</Layout.Column>
1336
+ * </Layout>
1337
+ * ```
1338
+ */
1339
+ declare const Column_2: React_2.ForwardRefExoticComponent<ColumnProps & React_2.RefAttributes<HTMLDivElement>>;
1340
+
1237
1341
  /**
1238
1342
  * Supported area values for Layout.Column
1239
1343
  */
@@ -1317,9 +1421,15 @@ declare interface ColumnBase<TRow extends Record<string, unknown>> {
1317
1421
  /**
1318
1422
  * Filter configuration. When set, this column appears as an option in
1319
1423
  * `DataTable.Filters`.
1424
+ *
1425
+ * `operators` optionally narrows the conditions exposed by the built-in
1426
+ * filter UI for this column. Order controls both the menu order and the
1427
+ * default operator. This affects the DataTable UI only — collection control
1428
+ * APIs and persisted filter state still accept the full backend operator set.
1429
+ *
1320
1430
  * Use `fieldTypeToFilterConfig` or `inferColumns` to derive this automatically.
1321
1431
  */
1322
- filter?: FilterConfig;
1432
+ filter?: DataTableFilterConfig;
1323
1433
  }
1324
1434
 
1325
1435
  /**
@@ -1372,13 +1482,13 @@ declare interface ColumnHelper<TRow extends Record<string, unknown>> {
1372
1482
  * Per-field column factory returned by `inferColumns(tableMetadata)`.
1373
1483
  *
1374
1484
  * Derives label, sort config, and filter config from the field's metadata.
1375
- * Sort and filter can be suppressed per call via `options`.
1485
+ * Sort can be suppressed and filter can be suppressed or narrowed per call via `options`.
1376
1486
  *
1377
1487
  * @param dataKey - A field name from the bound table metadata.
1378
1488
  * @param options - Optional per-column overrides (label, width, sort, filter).
1379
1489
  * @throws {Error} If `dataKey` is not found in the metadata passed to `inferColumns`.
1380
1490
  */
1381
- declare type ColumnInferFn<TRow extends Record<string, unknown>, TTable extends TableMetadata = TableMetadata> = (dataKey: TableFieldName<TTable>, options?: MetadataFieldOptions) => InferredColumn<TRow>;
1491
+ 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>;
1382
1492
 
1383
1493
  /**
1384
1494
  * Props for individual Layout.Column component
@@ -1455,7 +1565,7 @@ declare type ColumnTypeBranch<TRow extends Record<string, unknown>> = {
1455
1565
 
1456
1566
  export declare const Combobox: ComboboxComponent;
1457
1567
 
1458
- declare type ComboboxAsyncCreatableProps<T extends object> = (ComboboxAsyncOwnProps<T> & CreatableProps<T> & Omit<ComboboxPropsSingle<T>, "mapItem">) | (ComboboxAsyncOwnProps<T> & CreatableProps<T> & Omit<ComboboxPropsMultiple<T>, "mapItem">);
1568
+ declare type ComboboxAsyncCreatableProps<T extends object> = (ComboboxAsyncOwnProps<T> & CreatableProps<T> & Omit<ComboboxPropsSingle<T>, "mapItem" | "itemToStringValue">) | (ComboboxAsyncOwnProps<T> & CreatableProps<T> & Omit<ComboboxPropsMultiple<T>, "mapItem" | "itemToStringValue">);
1459
1569
 
1460
1570
  /** Fetcher type for `Combobox.Async`. */
1461
1571
  export declare type ComboboxAsyncFetcher<T> = AsyncFetcher<T>;
@@ -1632,6 +1742,37 @@ declare interface ComboboxPropsBase<T> {
1632
1742
  "aria-labelledby"?: string;
1633
1743
  /** ID applied to the combobox input element. */
1634
1744
  id?: string;
1745
+ /**
1746
+ * Identifies the field when a form is submitted. Base UI renders a hidden
1747
+ * input under this name, so the selected value is picked up by **native**
1748
+ * form submission (`new FormData(form)`, a plain `<form>`, server actions).
1749
+ *
1750
+ * For non-string items, pair this with `itemToStringValue` to control how
1751
+ * the value is serialised.
1752
+ *
1753
+ * **Inside a `Field.Root`, the field's `name` wins and this prop is ignored** —
1754
+ * the hidden input is named after the field. Set it only when the control is
1755
+ * used outside a `Field.Root` (or when it must differ from the field name,
1756
+ * which it cannot).
1757
+ */
1758
+ name?: string;
1759
+ /**
1760
+ * `id` of the form that owns the hidden input. Use when the combobox is
1761
+ * rendered outside the `<form>` element it belongs to.
1762
+ */
1763
+ form?: string;
1764
+ /** Whether a value must be chosen before the owning form can be submitted. */
1765
+ required?: boolean;
1766
+ /** Ref to the hidden input that carries the value during form submission. */
1767
+ inputRef?: React_2.Ref<HTMLInputElement>;
1768
+ /**
1769
+ * Converts a non-string item to the string written into the hidden input on
1770
+ * form submission. Items shaped `{ value, label }` use `value` automatically.
1771
+ *
1772
+ * Distinct from `mapItem`, which controls what the user sees. Not available
1773
+ * on the creatable variants, which own value serialisation.
1774
+ */
1775
+ itemToStringValue?: (item: T) => string;
1635
1776
  }
1636
1777
 
1637
1778
  declare interface ComboboxPropsMultiple<T> extends ComboboxPropsBase<T> {
@@ -1660,7 +1801,7 @@ declare namespace ComboboxRoot {
1660
1801
  var displayName: string;
1661
1802
  }
1662
1803
 
1663
- declare type ComboboxRootProps<Value, Multiple extends boolean | undefined = false> = Pick<React_2.ComponentProps<typeof Combobox_2.Root<Value, Multiple>>, "items" | "value" | "defaultValue" | "onValueChange" | "multiple" | "filter" | "inputValue" | "onInputValueChange" | "onOpenChange" | "itemToStringLabel" | "itemToStringValue" | "disabled" | "children">;
1804
+ declare type ComboboxRootProps<Value, Multiple extends boolean | undefined = false> = Pick<React_2.ComponentProps<typeof Combobox_2.Root<Value, Multiple>>, "items" | "value" | "defaultValue" | "onValueChange" | "multiple" | "filter" | "inputValue" | "onInputValueChange" | "onOpenChange" | "itemToStringLabel" | "itemToStringValue" | "disabled" | "children" | "name" | "form" | "required" | "inputRef" | "id">;
1664
1805
 
1665
1806
  declare function ComboboxStandalone<T extends object>(props: ComboboxStaticCreatableProps<T>): React_2.JSX.Element;
1666
1807
 
@@ -1668,9 +1809,9 @@ declare function ComboboxStandalone<I>(props: ComboboxStaticPlainProps<I>): Reac
1668
1809
 
1669
1810
  declare type ComboboxStaticCreatableProps<T extends object> = ({
1670
1811
  items: T[];
1671
- } & CreatableProps<T> & Omit<ComboboxPropsSingle<T>, "mapItem">) | ({
1812
+ } & CreatableProps<T> & Omit<ComboboxPropsSingle<T>, "mapItem" | "itemToStringValue">) | ({
1672
1813
  items: T[];
1673
- } & CreatableProps<T> & Omit<ComboboxPropsMultiple<T>, "mapItem">);
1814
+ } & CreatableProps<T> & Omit<ComboboxPropsMultiple<T>, "mapItem" | "itemToStringValue">);
1674
1815
 
1675
1816
  /**
1676
1817
  * @property items - Items to display. May be a flat array of `T` or an array of
@@ -2144,13 +2285,15 @@ export declare const DataTable: {
2144
2285
  * **Requires `control`** — `useDataTable()` must receive `control` from
2145
2286
  * `useCollectionVariables()`, otherwise this component throws at render time.
2146
2287
  *
2147
- * **Go-to-first / go-to-last buttons** — Rendered only when `totalPages` is
2148
- * non-null (i.e. the backend returns a total count). When `totalPages` is
2149
- * `null`, these buttons and the page counter are omitted.
2288
+ * **Go-to-first / go-to-last buttons** — The first-page button is always
2289
+ * rendered. The last-page button and page counter are rendered only when
2290
+ * `totalPages` is non-null (i.e. the backend returns a `total` count).
2150
2291
  */
2151
2292
  readonly Pagination: typeof DataTablePagination;
2152
2293
  };
2153
2294
 
2295
+ declare type DataTableBooleanFilterOperator = OperatorForFilterType["boolean"];
2296
+
2154
2297
  /**
2155
2298
  * Context value provided by `DataTable.Root`.
2156
2299
  *
@@ -2232,6 +2375,48 @@ export declare interface DataTableData<TRow> {
2232
2375
  total?: number | null;
2233
2376
  }
2234
2377
 
2378
+ declare type DataTableDateFilterOperator = Extract<OperatorForFilterType["date"], "eq" | "gte" | "lte" | "between">;
2379
+
2380
+ declare type DataTableEnumFilterOperator = Extract<OperatorForFilterType["enum"], "in">;
2381
+
2382
+ export declare type DataTableFilterConfig = (Extract<FilterConfig, {
2383
+ type: "string";
2384
+ }> & {
2385
+ /**
2386
+ * Allowlist of operators shown by `DataTable.Filters` for this column.
2387
+ * Order controls both the menu order and the default operator.
2388
+ */
2389
+ operators?: NonEmptyReadonlyArray<DataTableStringFilterOperator>;
2390
+ }) | (Extract<FilterConfig, {
2391
+ type: "number";
2392
+ }> & {
2393
+ operators?: NonEmptyReadonlyArray<DataTableNumericTemporalFilterOperator>;
2394
+ }) | (Extract<FilterConfig, {
2395
+ type: "datetime";
2396
+ }> & {
2397
+ operators?: NonEmptyReadonlyArray<DataTableNumericTemporalFilterOperator>;
2398
+ }) | (Extract<FilterConfig, {
2399
+ type: "date";
2400
+ }> & {
2401
+ operators?: NonEmptyReadonlyArray<DataTableDateFilterOperator>;
2402
+ }) | (Extract<FilterConfig, {
2403
+ type: "time";
2404
+ }> & {
2405
+ operators?: NonEmptyReadonlyArray<DataTableNumericTemporalFilterOperator>;
2406
+ }) | (Extract<FilterConfig, {
2407
+ type: "enum";
2408
+ }> & {
2409
+ operators?: NonEmptyReadonlyArray<DataTableEnumFilterOperator>;
2410
+ }) | (Extract<FilterConfig, {
2411
+ type: "boolean";
2412
+ }> & {
2413
+ operators?: NonEmptyReadonlyArray<DataTableBooleanFilterOperator>;
2414
+ }) | (Extract<FilterConfig, {
2415
+ type: "uuid";
2416
+ }> & {
2417
+ operators?: NonEmptyReadonlyArray<DataTableUuidFilterOperator>;
2418
+ });
2419
+
2235
2420
  /** Use `DataTable.Filters` instead of calling this directly. */
2236
2421
  declare function DataTableFilters({ className, slot, addIconOnly, }: {
2237
2422
  className?: string;
@@ -2266,6 +2451,8 @@ declare namespace DataTableFooter {
2266
2451
  var displayName: string;
2267
2452
  }
2268
2453
 
2454
+ declare type DataTableNumericTemporalFilterOperator = Extract<OperatorForFilterType["number"], "eq" | "ne" | "gt" | "gte" | "lt" | "lte" | "between">;
2455
+
2269
2456
  /** Use `DataTable.Pagination` instead of calling this directly. */
2270
2457
  declare function DataTablePagination({ pageSizeOptions }?: DataTablePaginationProps): JSX.Element;
2271
2458
 
@@ -2294,6 +2481,8 @@ export declare interface DataTableRootProps<TRow extends Record<string, unknown>
2294
2481
  className?: string;
2295
2482
  }
2296
2483
 
2484
+ declare type DataTableStringFilterOperator = Extract<OperatorForFilterType["string"], "eq" | "ne" | "contains" | "notContains" | "hasPrefix" | "hasSuffix">;
2485
+
2297
2486
  /** Use `DataTable.Table` instead of calling this directly. */
2298
2487
  declare function DataTableTable({ className }: {
2299
2488
  className?: string;
@@ -2320,6 +2509,19 @@ declare namespace DataTableToolbar {
2320
2509
  var displayName: string;
2321
2510
  }
2322
2511
 
2512
+ declare type DataTableUiFilterOperatorByType = {
2513
+ string: DataTableStringFilterOperator;
2514
+ number: DataTableNumericTemporalFilterOperator;
2515
+ datetime: DataTableNumericTemporalFilterOperator;
2516
+ date: DataTableDateFilterOperator;
2517
+ time: DataTableNumericTemporalFilterOperator;
2518
+ enum: DataTableEnumFilterOperator;
2519
+ boolean: DataTableBooleanFilterOperator;
2520
+ uuid: DataTableUuidFilterOperator;
2521
+ };
2522
+
2523
+ declare type DataTableUuidFilterOperator = Extract<OperatorForFilterType["uuid"], "eq">;
2524
+
2323
2525
  /** Options for `type: "date"` cells. */
2324
2526
  declare interface DateCellOptions {
2325
2527
  /**
@@ -3443,14 +3645,39 @@ declare namespace Footer_3 {
3443
3645
  * <button type="submit">Submit</button>
3444
3646
  * </Form>
3445
3647
  * ```
3648
+ *
3649
+ * @example
3650
+ * ### Submitting from outside the form
3651
+ * Give the form an `id` and point a detached submit button at it with the
3652
+ * native `form` attribute. Useful when the save action lives in a page
3653
+ * header or a dialog footer rather than beside the fields.
3654
+ * ```tsx
3655
+ * <Layout.Header
3656
+ * title="Create product"
3657
+ * actions={[
3658
+ * <Button key="save" type="submit" form="product-form">
3659
+ * Save
3660
+ * </Button>,
3661
+ * ]}
3662
+ * />
3663
+ * <Form id="product-form" onFormSubmit={(values) => save(values)}>
3664
+ * …
3665
+ * </Form>
3666
+ * ```
3446
3667
  */
3447
- export declare function Form<FormValues extends Record<string, any> = Record<string, any>>({ className, children, ...props }: FormProps<FormValues>): JSX.Element;
3668
+ export declare const Form: FormComponent;
3448
3669
 
3449
- export declare namespace Form {
3450
- var displayName: string;
3670
+ /**
3671
+ * Typed explicitly rather than as a `function` + `displayName` expando: that form is
3672
+ * emitted as a namespace merge, which the declaration rollup duplicates as a second,
3673
+ * non-exported `declare namespace Form` — TS2395 for consumers. See `check-dts`.
3674
+ */
3675
+ declare interface FormComponent {
3676
+ <FormValues extends Record<string, any> = Record<string, any>>(props: FormProps<FormValues>): React_2.JSX.Element;
3677
+ displayName?: string;
3451
3678
  }
3452
3679
 
3453
- 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"> & {
3680
+ 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" | "id"> & {
3454
3681
  children: React_2.ReactNode;
3455
3682
  /**
3456
3683
  * Low-level submit handler that receives the native `FormEvent`.
@@ -3737,6 +3964,12 @@ export declare type InferCsvRow<T extends CsvSchema> = {
3737
3964
  */
3738
3965
  declare type InferredColumn<TRow extends Record<string, unknown>> = ColumnBase<TRow>;
3739
3966
 
3967
+ declare type InferredFieldFilterType<TTable extends TableMetadata, TFieldName extends TableFieldName<TTable>> = Extract<TTable["fields"][number], {
3968
+ readonly name: TFieldName;
3969
+ }> extends {
3970
+ readonly type: infer TType;
3971
+ } ? TType extends keyof FieldTypeToFilterConfigType ? FieldTypeToFilterConfigType[TType] : never : never;
3972
+
3740
3973
  /**
3741
3974
  * A styled input component.
3742
3975
  *
@@ -3863,12 +4096,17 @@ declare type LabelValue = string | ((props: any) => string);
3863
4096
  * </Layout>
3864
4097
  * ```
3865
4098
  */
3866
- export declare function Layout({ columns, className, style, gap, title, actions, fill, children, }: LayoutProps): JSX.Element;
4099
+ export declare const Layout: LayoutComponent;
3867
4100
 
3868
- export declare namespace Layout {
3869
- var Column: React_2.ForwardRefExoticComponent<ColumnProps & React_2.RefAttributes<HTMLDivElement>>;
3870
- var Header: Header;
3871
- }
4101
+ /**
4102
+ * Typed explicitly rather than assigning onto a `function Layout`: that form emits
4103
+ * `var Header: typeof import("./Layout").Header`, which the declaration rollup
4104
+ * rewrites to a bare `Header` — a namespace, not a type (TS2709). See `check-dts`.
4105
+ */
4106
+ declare type LayoutComponent = typeof LayoutRoot & {
4107
+ Column: typeof Column_2;
4108
+ Header: typeof Header;
4109
+ };
3872
4110
 
3873
4111
  /**
3874
4112
  * Props for Layout.Header component
@@ -3936,6 +4174,9 @@ export declare interface LayoutProps {
3936
4174
  children: ReactNode;
3937
4175
  }
3938
4176
 
4177
+ /** Implementation for {@link Layout}; exported below with its sub-components attached. */
4178
+ declare function LayoutRoot({ columns, className, style, gap, title, actions, fill, children, }: LayoutProps): JSX.Element;
4179
+
3939
4180
  /** An accessible legend that is automatically associated with the fieldset. */
3940
4181
  declare function Legend({ className, ...props }: React_2.ComponentProps<typeof Fieldset_2.Legend>): JSX.Element;
3941
4182
 
@@ -3945,17 +4186,6 @@ declare namespace Legend {
3945
4186
 
3946
4187
  export { Link }
3947
4188
 
3948
- /**
3949
- * Draws an orthogonal connector between two row items.
3950
- *
3951
- * If either referenced `Timeline.Interval` id is unresolved, nothing is rendered.
3952
- */
3953
- declare function Link_2({ from, to, fromAnchor, toAnchor, arrow, gap, className, style, strokeWidth, }: TimelineLinkProps): React_2.ReactPortal | null;
3954
-
3955
- declare namespace Link_2 {
3956
- var displayName: string;
3957
- }
3958
-
3959
4189
  /** Options for `type: "link"` cells. `href` is required. */
3960
4190
  declare interface LinkCellOptions<TRow extends Record<string, unknown>> {
3961
4191
  /**
@@ -3972,6 +4202,8 @@ declare namespace LinkItem {
3972
4202
  var displayName: string;
3973
4203
  }
3974
4204
 
4205
+ export { LinkProps }
4206
+
3975
4207
  /** Groups the individual tab buttons. */
3976
4208
  declare function List({ className, children, ...props }: React_2.ComponentProps<typeof Tabs_2.List>): JSX.Element;
3977
4209
 
@@ -3983,6 +4215,8 @@ declare type LoaderHandler = (args: LoaderFunctionArgs) => Promise<unknown> | un
3983
4215
 
3984
4216
  declare type LocalizedString = string | ((locale: string) => string);
3985
4217
 
4218
+ export { Location_2 as Location }
4219
+
3986
4220
  /** Shape returned by `mapItem` to describe how an item appears in the dropdown. */
3987
4221
  export declare interface MappedItem {
3988
4222
  /** Display text — used for filtering, a11y, and fallback display. */
@@ -4022,10 +4256,14 @@ declare namespace MenuSeparator {
4022
4256
  var displayName: string;
4023
4257
  }
4024
4258
 
4259
+ declare type MetadataFieldFilterOptions<TType extends FilterConfig["type"] = FilterConfig["type"]> = {
4260
+ operators?: NonEmptyReadonlyArray<DataTableUiFilterOperatorByType[TType]>;
4261
+ };
4262
+
4025
4263
  /**
4026
4264
  * Options for metadata-based single field inference.
4027
4265
  */
4028
- export declare interface MetadataFieldOptions {
4266
+ export declare type MetadataFieldOptions<TType extends FilterConfig["type"] = FilterConfig["type"]> = {
4029
4267
  /** Override the column header text. Defaults to the field's `description` or `name` from metadata. */
4030
4268
  label?: string;
4031
4269
  /** Fixed column width in pixels. When omitted the column sizes naturally. */
@@ -4036,11 +4274,21 @@ export declare interface MetadataFieldOptions {
4036
4274
  */
4037
4275
  sort?: boolean;
4038
4276
  /**
4039
- * Set to `false` to suppress the auto-generated filter config for this field.
4040
- * Defaults to `true` (filter is enabled when the field type supports it).
4277
+ * Set to `false` to suppress the auto-generated filter config for this field,
4278
+ * or pass `operators` to narrow the DataTable filter conditions exposed for
4279
+ * this field.
4280
+ *
4281
+ * When used through `inferColumns()` with specific table metadata, operator
4282
+ * literals are narrowed to the inferred field type. If the metadata has
4283
+ * already widened to `TableMetadata`, mismatched operators are still filtered
4284
+ * out at runtime.
4041
4285
  */
4042
- filter?: boolean;
4043
- }
4286
+ filter?: boolean | MetadataFieldFilterOptions<TType>;
4287
+ };
4288
+
4289
+ declare type MetadataFieldOptionsForField<TTable extends TableMetadata, TFieldName extends TableFieldName<TTable>> = MetadataFieldOptions<[
4290
+ InferredFieldFilterType<TTable, TFieldName>
4291
+ ] extends [never] ? FilterConfig["type"] : InferredFieldFilterType<TTable, TFieldName>>;
4044
4292
 
4045
4293
  /**
4046
4294
  * MetricCard — Compact card for dashboard KPI display (title, value, optional trend and description).
@@ -4130,6 +4378,16 @@ declare interface MoneyCellOptions<TRow extends Record<string, unknown>> {
4130
4378
 
4131
4379
  export { Navigate }
4132
4380
 
4381
+ export { NavigateFunction }
4382
+
4383
+ export { NavigateOptions }
4384
+
4385
+ export { Navigation }
4386
+
4387
+ export { NavLink }
4388
+
4389
+ export { NavLinkProps }
4390
+
4133
4391
  /**
4134
4392
  * Extract the node type from a cursor connection result.
4135
4393
  */
@@ -4139,6 +4397,8 @@ export declare type NodeType<T extends {
4139
4397
  }[];
4140
4398
  } | null | undefined> = NonNullable<T>["edges"][number]["node"];
4141
4399
 
4400
+ declare type NonEmptyReadonlyArray<T> = readonly [T, ...T[]];
4401
+
4142
4402
  /**
4143
4403
  * Header render context for non-sortable columns.
4144
4404
  */
@@ -4259,6 +4519,8 @@ declare namespace Panel {
4259
4519
  var displayName: string;
4260
4520
  }
4261
4521
 
4522
+ export { Params }
4523
+
4262
4524
  export { parseAbsolute }
4263
4525
 
4264
4526
  export { parseDate }
@@ -4290,7 +4552,23 @@ export { parseZonedDateTime }
4290
4552
  */
4291
4553
  export declare const pass: () => GuardResult;
4292
4554
 
4293
- /* Excluded from this release type: PositionProps */
4555
+ export { PathMatch }
4556
+
4557
+ /**
4558
+ * Shared positioning props for components that wrap both a Base UI Popup and
4559
+ * Positioner internally (e.g. Menu.Content, Tooltip.Content).
4560
+ *
4561
+ * Grouping Positioner-specific props under a `position` namespace prevents
4562
+ * name collisions with the Popup's own props and keeps the type surface clean.
4563
+ */
4564
+ export declare interface PositionProps {
4565
+ /** Which side of the anchor element to position against. */
4566
+ side?: "top" | "right" | "bottom" | "left";
4567
+ /** How to align the popup relative to the anchor along the cross axis. */
4568
+ align?: "start" | "center" | "end";
4569
+ /** Distance (in px) between the popup and the anchor edge. */
4570
+ sideOffset?: number;
4571
+ }
4294
4572
 
4295
4573
  /** Provides shared delay configuration for nested tooltips. */
4296
4574
  declare function Provider({ delay, children, ...props }: ProviderProps): JSX.Element;
@@ -5012,6 +5290,36 @@ declare interface SelectPropsBase<T> {
5012
5290
  "aria-labelledby"?: string;
5013
5291
  /** ID applied to the combobox trigger element. */
5014
5292
  id?: string;
5293
+ /**
5294
+ * Identifies the field when a form is submitted. Base UI renders a hidden
5295
+ * input under this name, so the selected value is picked up by **native**
5296
+ * form submission (`new FormData(form)`, a plain `<form>`, server actions).
5297
+ *
5298
+ * For non-string items, pair this with `itemToStringValue` to control how
5299
+ * the value is serialised.
5300
+ *
5301
+ * **Inside a `Field.Root`, the field's `name` wins and this prop is ignored** —
5302
+ * the hidden input is named after the field. Set it only when the control is
5303
+ * used outside a `Field.Root` (or when it must differ from the field name,
5304
+ * which it cannot).
5305
+ */
5306
+ name?: string;
5307
+ /**
5308
+ * `id` of the form that owns the hidden input. Use when the select is
5309
+ * rendered outside the `<form>` element it belongs to.
5310
+ */
5311
+ form?: string;
5312
+ /** Whether a value must be chosen before the owning form can be submitted. */
5313
+ required?: boolean;
5314
+ /** Ref to the hidden input that carries the value during form submission. */
5315
+ inputRef?: React_2.Ref<HTMLInputElement>;
5316
+ /**
5317
+ * Converts a non-string item to the string written into the hidden input on
5318
+ * form submission. Items shaped `{ value, label }` use `value` automatically.
5319
+ *
5320
+ * Distinct from `mapItem`, which controls what the user sees.
5321
+ */
5322
+ itemToStringValue?: (item: T) => string;
5015
5323
  }
5016
5324
 
5017
5325
  declare interface SelectPropsMultiple<T> extends SelectPropsBase<T> {
@@ -5044,7 +5352,7 @@ declare namespace SelectRoot {
5044
5352
  var displayName: string;
5045
5353
  }
5046
5354
 
5047
- declare type SelectRootProps<Value, Multiple extends boolean | undefined = false> = Pick<React_2.ComponentProps<typeof Select_2.Root<Value, Multiple>>, "value" | "defaultValue" | "onValueChange" | "open" | "onOpenChange" | "modal" | "multiple" | "itemToStringLabel" | "disabled" | "children">;
5355
+ declare type SelectRootProps<Value, Multiple extends boolean | undefined = false> = Pick<React_2.ComponentProps<typeof Select_2.Root<Value, Multiple>>, "value" | "defaultValue" | "onValueChange" | "open" | "onOpenChange" | "modal" | "multiple" | "itemToStringLabel" | "itemToStringValue" | "disabled" | "children" | "name" | "form" | "required" | "inputRef" | "id">;
5048
5356
 
5049
5357
  declare function SelectSeparator({ className, ...props }: React_2.ComponentProps<"div">): JSX.Element;
5050
5358
 
@@ -5656,6 +5964,67 @@ declare type TabsSize = "xs" | "sm" | "default" | "lg";
5656
5964
 
5657
5965
  declare type TabsVariant = "default" | "line" | "capsule";
5658
5966
 
5967
+ /**
5968
+ * A styled multi-line text input.
5969
+ *
5970
+ * Wraps Base UI's `Field.Control` rendered as a `<textarea>`, so it works with
5971
+ * `Field` and React Hook Form the same way `Input`, `Checkbox`, and `Select`
5972
+ * do — placed inside a `Field.Root` it inherits label association,
5973
+ * `aria-describedby`, `disabled`, and the `data-invalid` error state
5974
+ * automatically (no `error` prop of its own). Outside a `Field.Root` it
5975
+ * renders as a plain standalone control.
5976
+ *
5977
+ * The box has no fixed height: `rows` sets the visible line count, and the user
5978
+ * can drag it taller. `min-h-16` is a hard floor, so `rows={1}` and `rows={2}`
5979
+ * both render at 64px — `rows` only starts moving the height from 3 up.
5980
+ *
5981
+ * @example
5982
+ * ### Standalone
5983
+ * ```tsx
5984
+ * const [note, setNote] = React.useState("");
5985
+ *
5986
+ * <Textarea value={note} onChange={(event) => setNote(event.target.value)} placeholder="Add a note…" />
5987
+ * ```
5988
+ *
5989
+ * @example
5990
+ * ### Taller
5991
+ * ```tsx
5992
+ * <Textarea rows={8} placeholder="Paste the incident log…" />
5993
+ * ```
5994
+ *
5995
+ * @example
5996
+ * ### Inside a Field
5997
+ * ```tsx
5998
+ * <Field.Root name="description">
5999
+ * <Field.Label>Description</Field.Label>
6000
+ * <Textarea rows={5} placeholder="What changed?" />
6001
+ * <Field.Description>Optional — visible to the whole team.</Field.Description>
6002
+ * </Field.Root>
6003
+ * ```
6004
+ *
6005
+ * @example
6006
+ * ### With React Hook Form
6007
+ * ```tsx
6008
+ * <Controller
6009
+ * name="description"
6010
+ * control={control}
6011
+ * rules={{ required: "Description is required." }}
6012
+ * render={({ field, fieldState }) => (
6013
+ * <Field.Root name={field.name} {...fieldState}>
6014
+ * <Field.Label>Description</Field.Label>
6015
+ * <Textarea {...field} rows={5} />
6016
+ * <Field.Error />
6017
+ * </Field.Root>
6018
+ * )}
6019
+ * />
6020
+ * ```
6021
+ */
6022
+ export declare function Textarea({ className, ...props }: TextareaProps): JSX.Element;
6023
+
6024
+ export declare type TextareaProps = Omit<React_2.ComponentProps<typeof Field_2.Control>, "render" | "onChange" | "className"> & Pick<React_2.ComponentProps<"textarea">, "onChange" | "rows"> & {
6025
+ className?: string;
6026
+ };
6027
+
5659
6028
  export { Time }
5660
6029
 
5661
6030
  /**
@@ -5678,7 +6047,7 @@ export declare const Timeline: {
5678
6047
  Viewport: typeof Viewport;
5679
6048
  Row: typeof Row_2;
5680
6049
  Interval: typeof Interval;
5681
- Link: typeof Link_2;
6050
+ Link: typeof TimelineLink;
5682
6051
  };
5683
6052
 
5684
6053
  /**
@@ -5858,6 +6227,17 @@ export declare type TimelineIntervalProps = {
5858
6227
  style?: React_2.CSSProperties;
5859
6228
  };
5860
6229
 
6230
+ /**
6231
+ * Draws an orthogonal connector between two row items.
6232
+ *
6233
+ * If either referenced `Timeline.Interval` id is unresolved, nothing is rendered.
6234
+ */
6235
+ declare function TimelineLink({ from, to, fromAnchor, toAnchor, arrow, gap, className, style, strokeWidth, }: TimelineLinkProps): React_2.ReactPortal | null;
6236
+
6237
+ declare namespace TimelineLink {
6238
+ var displayName: string;
6239
+ }
6240
+
5861
6241
  /**
5862
6242
  * Shared defaults for `Timeline.Link` instances inside one viewport.
5863
6243
  */
@@ -6028,6 +6408,8 @@ declare namespace Title_3 {
6028
6408
  var displayName: string;
6029
6409
  }
6030
6410
 
6411
+ export { To }
6412
+
6031
6413
  export declare const Tooltip: {
6032
6414
  Root: typeof Root_12;
6033
6415
  Trigger: typeof Trigger_4;
@@ -6478,6 +6860,10 @@ export declare const useAuthSuspense: () => {
6478
6860
  checkAuthStatus: () => Promise<AuthState>;
6479
6861
  };
6480
6862
 
6863
+ export { useBeforeUnload }
6864
+
6865
+ export { useBlocker }
6866
+
6481
6867
  /**
6482
6868
  * Hook to access collection control from the nearest `CollectionControlProvider`.
6483
6869
  *
@@ -6935,7 +7321,7 @@ export declare interface UseDataTableReturn<TRow extends Record<string, unknown>
6935
7321
  * </Combobox.Parts.Root>
6936
7322
  * ```
6937
7323
  */
6938
- declare const useFilter: typeof Combobox_2.useFilter;
7324
+ declare function useFilter(options?: ComboboxFilterOptions): ComboboxFilter;
6939
7325
 
6940
7326
  /**
6941
7327
  * Hook for robust string matching using `Intl.Collator`.
@@ -6956,12 +7342,16 @@ declare const useFilter: typeof Combobox_2.useFilter;
6956
7342
  * </Autocomplete.Parts.Root>
6957
7343
  * ```
6958
7344
  */
6959
- declare const useFilter_2: getFilter;
7345
+ declare function useFilter_2(options?: AutocompleteFilterOptions): AutocompleteFilter;
6960
7346
 
6961
7347
  export { useLocation }
6962
7348
 
7349
+ export { useMatch }
7350
+
6963
7351
  export { useNavigate }
6964
7352
 
7353
+ export { useNavigation }
7354
+
6965
7355
  /**
6966
7356
  * Returns a function that opens the CommandPalette.
6967
7357
  *
@@ -7041,6 +7431,8 @@ export declare const useResolvedLocale: () => {
7041
7431
  language: string;
7042
7432
  };
7043
7433
 
7434
+ export { useResolvedPath }
7435
+
7044
7436
  export { useRouteError }
7045
7437
 
7046
7438
  export { useSearchParams }
@@ -7270,3 +7662,603 @@ export declare function withURLCollectionState(options: UseCollectionOptions & {
7270
7662
  export { ZonedDateTime }
7271
7663
 
7272
7664
  export { }
7665
+
7666
+
7667
+ declare namespace AutocompleteStandalone {
7668
+ var displayName: string;
7669
+ }
7670
+
7671
+
7672
+ declare namespace AutocompleteAsyncStandalone {
7673
+ var displayName: string;
7674
+ }
7675
+
7676
+
7677
+ declare namespace AutocompleteRoot {
7678
+ var displayName: string;
7679
+ }
7680
+
7681
+
7682
+ declare namespace AutocompleteValue {
7683
+ var displayName: string;
7684
+ }
7685
+
7686
+
7687
+ declare namespace AutocompleteInput {
7688
+ var displayName: string;
7689
+ }
7690
+
7691
+
7692
+ declare namespace AutocompleteTrigger {
7693
+ var displayName: string;
7694
+ }
7695
+
7696
+
7697
+ declare namespace AutocompleteInputGroup {
7698
+ var displayName: string;
7699
+ }
7700
+
7701
+
7702
+ declare namespace AutocompleteContent {
7703
+ var displayName: string;
7704
+ }
7705
+
7706
+
7707
+ declare namespace AutocompleteList {
7708
+ var displayName: string;
7709
+ }
7710
+
7711
+
7712
+ declare namespace AutocompleteItem {
7713
+ var displayName: string;
7714
+ }
7715
+
7716
+
7717
+ declare namespace AutocompleteEmpty {
7718
+ var displayName: string;
7719
+ }
7720
+
7721
+
7722
+ declare namespace AutocompleteClear {
7723
+ var displayName: string;
7724
+ }
7725
+
7726
+
7727
+ declare namespace AutocompleteGroup {
7728
+ var displayName: string;
7729
+ }
7730
+
7731
+
7732
+ declare namespace AutocompleteGroupLabel {
7733
+ var displayName: string;
7734
+ }
7735
+
7736
+
7737
+ declare namespace AutocompleteCollection {
7738
+ var displayName: string;
7739
+ }
7740
+
7741
+
7742
+ declare namespace AutocompleteStatus {
7743
+ var displayName: string;
7744
+ }
7745
+
7746
+
7747
+ declare namespace Root {
7748
+ var displayName: string;
7749
+ }
7750
+
7751
+
7752
+ declare namespace Viewport {
7753
+ var displayName: string;
7754
+ }
7755
+
7756
+
7757
+ declare namespace Row {
7758
+ var displayName: string;
7759
+ }
7760
+
7761
+
7762
+ declare namespace Interval {
7763
+ var displayName: string;
7764
+ }
7765
+
7766
+
7767
+ declare namespace TimelineLink {
7768
+ var displayName: string;
7769
+ }
7770
+
7771
+
7772
+ declare namespace Provider {
7773
+ var displayName: string;
7774
+ }
7775
+
7776
+
7777
+ declare namespace Root {
7778
+ var displayName: string;
7779
+ }
7780
+
7781
+
7782
+ declare namespace Trigger {
7783
+ var displayName: string;
7784
+ }
7785
+
7786
+
7787
+ declare namespace Content {
7788
+ var displayName: string;
7789
+ }
7790
+
7791
+
7792
+ declare namespace SelectRoot {
7793
+ var displayName: string;
7794
+ }
7795
+
7796
+
7797
+ declare namespace SelectTrigger {
7798
+ var displayName: string;
7799
+ }
7800
+
7801
+
7802
+ declare namespace SelectValue {
7803
+ var displayName: string;
7804
+ }
7805
+
7806
+
7807
+ declare namespace SelectContent {
7808
+ var displayName: string;
7809
+ }
7810
+
7811
+
7812
+ declare namespace SelectItem {
7813
+ var displayName: string;
7814
+ }
7815
+
7816
+
7817
+ declare namespace SelectGroup {
7818
+ var displayName: string;
7819
+ }
7820
+
7821
+
7822
+ declare namespace SelectGroupLabel {
7823
+ var displayName: string;
7824
+ }
7825
+
7826
+
7827
+ declare namespace SelectSeparator {
7828
+ var displayName: string;
7829
+ }
7830
+
7831
+
7832
+ declare namespace Root {
7833
+ var displayName: string;
7834
+ }
7835
+
7836
+
7837
+ declare namespace Trigger {
7838
+ var displayName: string;
7839
+ }
7840
+
7841
+
7842
+ declare namespace Content {
7843
+ var displayName: string;
7844
+ }
7845
+
7846
+
7847
+ declare namespace Item {
7848
+ var displayName: string;
7849
+ }
7850
+
7851
+
7852
+ declare namespace LinkItem {
7853
+ var displayName: string;
7854
+ }
7855
+
7856
+
7857
+ declare namespace CheckboxItem {
7858
+ var displayName: string;
7859
+ }
7860
+
7861
+
7862
+ declare namespace CheckboxItemIndicator {
7863
+ var displayName: string;
7864
+ }
7865
+
7866
+
7867
+ declare namespace RadioItem {
7868
+ var displayName: string;
7869
+ }
7870
+
7871
+
7872
+ declare namespace RadioItemIndicator {
7873
+ var displayName: string;
7874
+ }
7875
+
7876
+
7877
+ declare namespace RadioGroup {
7878
+ var displayName: string;
7879
+ }
7880
+
7881
+
7882
+ declare namespace Group {
7883
+ var displayName: string;
7884
+ }
7885
+
7886
+
7887
+ declare namespace GroupLabel {
7888
+ var displayName: string;
7889
+ }
7890
+
7891
+
7892
+ declare namespace MenuSeparator {
7893
+ var displayName: string;
7894
+ }
7895
+
7896
+
7897
+ declare namespace SubmenuRoot {
7898
+ var displayName: string;
7899
+ }
7900
+
7901
+
7902
+ declare namespace SubmenuTrigger {
7903
+ var displayName: string;
7904
+ }
7905
+
7906
+
7907
+ declare namespace Root {
7908
+ var displayName: string;
7909
+ }
7910
+
7911
+
7912
+ declare namespace Image {
7913
+ var displayName: string;
7914
+ }
7915
+
7916
+
7917
+ declare namespace Fallback {
7918
+ var displayName: string;
7919
+ }
7920
+
7921
+
7922
+ declare namespace Root {
7923
+ var displayName: string;
7924
+ }
7925
+
7926
+
7927
+ declare namespace Title {
7928
+ var displayName: string;
7929
+ }
7930
+
7931
+
7932
+ declare namespace Description {
7933
+ var displayName: string;
7934
+ }
7935
+
7936
+
7937
+ declare namespace Root {
7938
+ var displayName: string;
7939
+ }
7940
+
7941
+
7942
+ declare namespace Trigger {
7943
+ var displayName: string;
7944
+ }
7945
+
7946
+
7947
+ declare namespace Close {
7948
+ var displayName: string;
7949
+ }
7950
+
7951
+
7952
+ declare namespace Content {
7953
+ var displayName: string;
7954
+ }
7955
+
7956
+
7957
+ declare namespace Header {
7958
+ var displayName: string;
7959
+ }
7960
+
7961
+
7962
+ declare namespace Footer {
7963
+ var displayName: string;
7964
+ }
7965
+
7966
+
7967
+ declare namespace Title {
7968
+ var displayName: string;
7969
+ }
7970
+
7971
+
7972
+ declare namespace Description {
7973
+ var displayName: string;
7974
+ }
7975
+
7976
+
7977
+ declare namespace Root {
7978
+ var displayName: string;
7979
+ }
7980
+
7981
+
7982
+ declare namespace Header {
7983
+ var displayName: string;
7984
+ }
7985
+
7986
+
7987
+ declare namespace Body {
7988
+ var displayName: string;
7989
+ }
7990
+
7991
+
7992
+ declare namespace Footer {
7993
+ var displayName: string;
7994
+ }
7995
+
7996
+
7997
+ declare namespace Row {
7998
+ var displayName: string;
7999
+ }
8000
+
8001
+
8002
+ declare namespace Head {
8003
+ var displayName: string;
8004
+ }
8005
+
8006
+
8007
+ declare namespace Cell {
8008
+ var displayName: string;
8009
+ }
8010
+
8011
+
8012
+ declare namespace Caption {
8013
+ var displayName: string;
8014
+ }
8015
+
8016
+
8017
+ declare namespace Root {
8018
+ var displayName: string;
8019
+ }
8020
+
8021
+
8022
+ declare namespace List {
8023
+ var displayName: string;
8024
+ }
8025
+
8026
+
8027
+ declare namespace Tab {
8028
+ var displayName: string;
8029
+ }
8030
+
8031
+
8032
+ declare namespace Panel {
8033
+ var displayName: string;
8034
+ }
8035
+
8036
+
8037
+ declare namespace ComboboxRoot {
8038
+ var displayName: string;
8039
+ }
8040
+
8041
+
8042
+ declare namespace ComboboxInput {
8043
+ var displayName: string;
8044
+ }
8045
+
8046
+
8047
+ declare namespace ComboboxTrigger {
8048
+ var displayName: string;
8049
+ }
8050
+
8051
+
8052
+ declare namespace ComboboxInputGroup {
8053
+ var displayName: string;
8054
+ }
8055
+
8056
+
8057
+ declare namespace ComboboxContent {
8058
+ var displayName: string;
8059
+ }
8060
+
8061
+
8062
+ declare namespace ComboboxList {
8063
+ var displayName: string;
8064
+ }
8065
+
8066
+
8067
+ declare namespace ComboboxItem {
8068
+ var displayName: string;
8069
+ }
8070
+
8071
+
8072
+ declare namespace ComboboxEmpty {
8073
+ var displayName: string;
8074
+ }
8075
+
8076
+
8077
+ declare namespace ComboboxGroup {
8078
+ var displayName: string;
8079
+ }
8080
+
8081
+
8082
+ declare namespace ComboboxGroupLabel {
8083
+ var displayName: string;
8084
+ }
8085
+
8086
+
8087
+ declare namespace ComboboxClear {
8088
+ var displayName: string;
8089
+ }
8090
+
8091
+
8092
+ declare namespace ComboboxChips {
8093
+ var displayName: string;
8094
+ }
8095
+
8096
+
8097
+ declare namespace ComboboxChip {
8098
+ var displayName: string;
8099
+ }
8100
+
8101
+
8102
+ declare namespace ComboboxChipRemove {
8103
+ var displayName: string;
8104
+ }
8105
+
8106
+
8107
+ declare namespace ComboboxValue {
8108
+ var displayName: string;
8109
+ }
8110
+
8111
+
8112
+ declare namespace ComboboxStatus {
8113
+ var displayName: string;
8114
+ }
8115
+
8116
+
8117
+ declare namespace ComboboxCollection {
8118
+ var displayName: string;
8119
+ }
8120
+
8121
+
8122
+ declare namespace DataTableRoot {
8123
+ var displayName: string;
8124
+ }
8125
+
8126
+
8127
+ declare namespace DataTableTable {
8128
+ var displayName: string;
8129
+ }
8130
+
8131
+
8132
+ declare namespace DataTableFooter {
8133
+ var displayName: string;
8134
+ }
8135
+
8136
+
8137
+ declare namespace Root {
8138
+ var displayName: string;
8139
+ }
8140
+
8141
+
8142
+ declare namespace Label {
8143
+ var displayName: string;
8144
+ }
8145
+
8146
+
8147
+ declare namespace Control {
8148
+ var displayName: string;
8149
+ }
8150
+
8151
+
8152
+ declare namespace Description {
8153
+ var displayName: string;
8154
+ }
8155
+
8156
+
8157
+ declare namespace Error {
8158
+ var displayName: string;
8159
+ }
8160
+
8161
+
8162
+ declare namespace Validity {
8163
+ var displayName: string;
8164
+ }
8165
+
8166
+
8167
+ declare namespace Root {
8168
+ var displayName: string;
8169
+ }
8170
+
8171
+
8172
+ declare namespace Legend {
8173
+ var displayName: string;
8174
+ }
8175
+
8176
+
8177
+ declare namespace Root {
8178
+ var displayName: string;
8179
+ }
8180
+
8181
+
8182
+ declare namespace Trigger {
8183
+ var displayName: string;
8184
+ }
8185
+
8186
+
8187
+ declare namespace Close {
8188
+ var displayName: string;
8189
+ }
8190
+
8191
+
8192
+ declare namespace Content {
8193
+ var displayName: string;
8194
+ }
8195
+
8196
+
8197
+ declare namespace Header {
8198
+ var displayName: string;
8199
+ }
8200
+
8201
+
8202
+ declare namespace Footer {
8203
+ var displayName: string;
8204
+ }
8205
+
8206
+
8207
+ declare namespace Title {
8208
+ var displayName: string;
8209
+ }
8210
+
8211
+
8212
+ declare namespace Description {
8213
+ var displayName: string;
8214
+ }
8215
+
8216
+
8217
+ declare namespace Root {
8218
+ var displayName: string;
8219
+ }
8220
+
8221
+
8222
+ declare namespace Header {
8223
+ var displayName: string;
8224
+ }
8225
+
8226
+
8227
+ declare namespace Content {
8228
+ var displayName: string;
8229
+ }
8230
+
8231
+
8232
+ declare namespace Root {
8233
+ var displayName: string;
8234
+ }
8235
+
8236
+
8237
+ declare namespace Items {
8238
+ var displayName: string;
8239
+ }
8240
+
8241
+
8242
+ declare namespace Item {
8243
+ var displayName: string;
8244
+ }
8245
+
8246
+
8247
+ declare namespace DataTableToolbar {
8248
+ var displayName: string;
8249
+ }
8250
+
8251
+
8252
+ declare namespace DataTableFilters {
8253
+ var displayName: string;
8254
+ }
8255
+
8256
+
8257
+ declare namespace AsyncErrorState {
8258
+ var displayName: string;
8259
+ }
8260
+
8261
+
8262
+ declare namespace DataTableColumnSettings {
8263
+ var displayName: string;
8264
+ }