@hjmds/design-contracts 0.8.2

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 (353) hide show
  1. package/README.md +208 -0
  2. package/dist/alert-dialog.d.ts +102 -0
  3. package/dist/alert-dialog.d.ts.map +1 -0
  4. package/dist/alert-dialog.js +136 -0
  5. package/dist/alert-dialog.js.map +1 -0
  6. package/dist/base-recipes.d.ts +184 -0
  7. package/dist/base-recipes.d.ts.map +1 -0
  8. package/dist/base-recipes.js +129 -0
  9. package/dist/base-recipes.js.map +1 -0
  10. package/dist/behaviors.d.ts +1254 -0
  11. package/dist/behaviors.d.ts.map +1 -0
  12. package/dist/behaviors.js +972 -0
  13. package/dist/behaviors.js.map +1 -0
  14. package/dist/bottom-navigation-defaults.d.ts +13 -0
  15. package/dist/bottom-navigation-defaults.d.ts.map +1 -0
  16. package/dist/bottom-navigation-defaults.js +10 -0
  17. package/dist/bottom-navigation-defaults.js.map +1 -0
  18. package/dist/bottom-navigation.d.ts +114 -0
  19. package/dist/bottom-navigation.d.ts.map +1 -0
  20. package/dist/bottom-navigation.js +223 -0
  21. package/dist/bottom-navigation.js.map +1 -0
  22. package/dist/breadcrumb.d.ts +97 -0
  23. package/dist/breadcrumb.d.ts.map +1 -0
  24. package/dist/breadcrumb.js +99 -0
  25. package/dist/breadcrumb.js.map +1 -0
  26. package/dist/calendar.d.ts +285 -0
  27. package/dist/calendar.d.ts.map +1 -0
  28. package/dist/calendar.js +297 -0
  29. package/dist/calendar.js.map +1 -0
  30. package/dist/card.d.ts +39 -0
  31. package/dist/card.d.ts.map +1 -0
  32. package/dist/card.js +50 -0
  33. package/dist/card.js.map +1 -0
  34. package/dist/carousel.d.ts +180 -0
  35. package/dist/carousel.d.ts.map +1 -0
  36. package/dist/carousel.js +172 -0
  37. package/dist/carousel.js.map +1 -0
  38. package/dist/catalog.d.ts +7158 -0
  39. package/dist/catalog.d.ts.map +1 -0
  40. package/dist/catalog.js +220 -0
  41. package/dist/catalog.js.map +1 -0
  42. package/dist/collection.d.ts +123 -0
  43. package/dist/collection.d.ts.map +1 -0
  44. package/dist/collection.js +211 -0
  45. package/dist/collection.js.map +1 -0
  46. package/dist/color-references.d.ts +46 -0
  47. package/dist/color-references.d.ts.map +1 -0
  48. package/dist/color-references.js +39 -0
  49. package/dist/color-references.js.map +1 -0
  50. package/dist/colors.d.ts +56 -0
  51. package/dist/colors.d.ts.map +1 -0
  52. package/dist/colors.js +90 -0
  53. package/dist/colors.js.map +1 -0
  54. package/dist/command-palette.d.ts +240 -0
  55. package/dist/command-palette.d.ts.map +1 -0
  56. package/dist/command-palette.js +97 -0
  57. package/dist/command-palette.js.map +1 -0
  58. package/dist/component-contracts.d.ts +137 -0
  59. package/dist/component-contracts.d.ts.map +1 -0
  60. package/dist/component-contracts.js +53 -0
  61. package/dist/component-contracts.js.map +1 -0
  62. package/dist/component-definitions.d.ts +135 -0
  63. package/dist/component-definitions.d.ts.map +1 -0
  64. package/dist/component-definitions.js +142 -0
  65. package/dist/component-definitions.js.map +1 -0
  66. package/dist/component-recipes.d.ts +3583 -0
  67. package/dist/component-recipes.d.ts.map +1 -0
  68. package/dist/component-recipes.js +1503 -0
  69. package/dist/component-recipes.js.map +1 -0
  70. package/dist/component-references.d.ts +416 -0
  71. package/dist/component-references.d.ts.map +1 -0
  72. package/dist/component-references.js +140 -0
  73. package/dist/component-references.js.map +1 -0
  74. package/dist/content-state.d.ts +104 -0
  75. package/dist/content-state.d.ts.map +1 -0
  76. package/dist/content-state.js +116 -0
  77. package/dist/content-state.js.map +1 -0
  78. package/dist/counter-badge-recipe.d.ts +80 -0
  79. package/dist/counter-badge-recipe.d.ts.map +1 -0
  80. package/dist/counter-badge-recipe.js +44 -0
  81. package/dist/counter-badge-recipe.js.map +1 -0
  82. package/dist/counter-badge.d.ts +12 -0
  83. package/dist/counter-badge.d.ts.map +1 -0
  84. package/dist/counter-badge.js +21 -0
  85. package/dist/counter-badge.js.map +1 -0
  86. package/dist/data-table.d.ts +203 -0
  87. package/dist/data-table.d.ts.map +1 -0
  88. package/dist/data-table.js +182 -0
  89. package/dist/data-table.js.map +1 -0
  90. package/dist/date-picker.d.ts +268 -0
  91. package/dist/date-picker.d.ts.map +1 -0
  92. package/dist/date-picker.js +168 -0
  93. package/dist/date-picker.js.map +1 -0
  94. package/dist/description-list.d.ts +68 -0
  95. package/dist/description-list.d.ts.map +1 -0
  96. package/dist/description-list.js +85 -0
  97. package/dist/description-list.js.map +1 -0
  98. package/dist/design-system-provider.d.ts +80 -0
  99. package/dist/design-system-provider.d.ts.map +1 -0
  100. package/dist/design-system-provider.js +147 -0
  101. package/dist/design-system-provider.js.map +1 -0
  102. package/dist/evidence.d.ts +49 -0
  103. package/dist/evidence.d.ts.map +1 -0
  104. package/dist/evidence.js +133 -0
  105. package/dist/evidence.js.map +1 -0
  106. package/dist/file-picker.d.ts +183 -0
  107. package/dist/file-picker.d.ts.map +1 -0
  108. package/dist/file-picker.js +224 -0
  109. package/dist/file-picker.js.map +1 -0
  110. package/dist/floating-action-button.d.ts +143 -0
  111. package/dist/floating-action-button.d.ts.map +1 -0
  112. package/dist/floating-action-button.js +149 -0
  113. package/dist/floating-action-button.js.map +1 -0
  114. package/dist/form.d.ts +143 -0
  115. package/dist/form.d.ts.map +1 -0
  116. package/dist/form.js +206 -0
  117. package/dist/form.js.map +1 -0
  118. package/dist/foundations.d.ts +300 -0
  119. package/dist/foundations.d.ts.map +1 -0
  120. package/dist/foundations.js +238 -0
  121. package/dist/foundations.js.map +1 -0
  122. package/dist/grid.d.ts +75 -0
  123. package/dist/grid.d.ts.map +1 -0
  124. package/dist/grid.js +133 -0
  125. package/dist/grid.js.map +1 -0
  126. package/dist/icon-button-recipe.d.ts +99 -0
  127. package/dist/icon-button-recipe.d.ts.map +1 -0
  128. package/dist/icon-button-recipe.js +53 -0
  129. package/dist/icon-button-recipe.js.map +1 -0
  130. package/dist/icon.d.ts +41 -0
  131. package/dist/icon.d.ts.map +1 -0
  132. package/dist/icon.js +147 -0
  133. package/dist/icon.js.map +1 -0
  134. package/dist/image.d.ts +82 -0
  135. package/dist/image.d.ts.map +1 -0
  136. package/dist/image.js +100 -0
  137. package/dist/image.js.map +1 -0
  138. package/dist/index.d.ts +58 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +66 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/layout.d.ts +118 -0
  143. package/dist/layout.d.ts.map +1 -0
  144. package/dist/layout.js +118 -0
  145. package/dist/layout.js.map +1 -0
  146. package/dist/link.d.ts +57 -0
  147. package/dist/link.d.ts.map +1 -0
  148. package/dist/link.js +142 -0
  149. package/dist/link.js.map +1 -0
  150. package/dist/load-more.d.ts +64 -0
  151. package/dist/load-more.d.ts.map +1 -0
  152. package/dist/load-more.js +124 -0
  153. package/dist/load-more.js.map +1 -0
  154. package/dist/mentions.d.ts +67 -0
  155. package/dist/mentions.d.ts.map +1 -0
  156. package/dist/mentions.js +107 -0
  157. package/dist/mentions.js.map +1 -0
  158. package/dist/number-field.d.ts +208 -0
  159. package/dist/number-field.d.ts.map +1 -0
  160. package/dist/number-field.js +247 -0
  161. package/dist/number-field.js.map +1 -0
  162. package/dist/otp-field.d.ts +152 -0
  163. package/dist/otp-field.d.ts.map +1 -0
  164. package/dist/otp-field.js +117 -0
  165. package/dist/otp-field.js.map +1 -0
  166. package/dist/pagination.d.ts +181 -0
  167. package/dist/pagination.d.ts.map +1 -0
  168. package/dist/pagination.js +226 -0
  169. package/dist/pagination.js.map +1 -0
  170. package/dist/password-field.d.ts +187 -0
  171. package/dist/password-field.d.ts.map +1 -0
  172. package/dist/password-field.js +120 -0
  173. package/dist/password-field.js.map +1 -0
  174. package/dist/popover.d.ts +152 -0
  175. package/dist/popover.d.ts.map +1 -0
  176. package/dist/popover.js +137 -0
  177. package/dist/popover.js.map +1 -0
  178. package/dist/progress-recipe.d.ts +43 -0
  179. package/dist/progress-recipe.d.ts.map +1 -0
  180. package/dist/progress-recipe.js +16 -0
  181. package/dist/progress-recipe.js.map +1 -0
  182. package/dist/recipes.d.ts +31 -0
  183. package/dist/recipes.d.ts.map +1 -0
  184. package/dist/recipes.js +46 -0
  185. package/dist/recipes.js.map +1 -0
  186. package/dist/responsive.d.ts +27 -0
  187. package/dist/responsive.d.ts.map +1 -0
  188. package/dist/responsive.js +66 -0
  189. package/dist/responsive.js.map +1 -0
  190. package/dist/result.d.ts +111 -0
  191. package/dist/result.d.ts.map +1 -0
  192. package/dist/result.js +97 -0
  193. package/dist/result.js.map +1 -0
  194. package/dist/selection-helpers.d.ts +16 -0
  195. package/dist/selection-helpers.d.ts.map +1 -0
  196. package/dist/selection-helpers.js +52 -0
  197. package/dist/selection-helpers.js.map +1 -0
  198. package/dist/semantic-colors.d.ts +275 -0
  199. package/dist/semantic-colors.d.ts.map +1 -0
  200. package/dist/semantic-colors.js +84 -0
  201. package/dist/semantic-colors.js.map +1 -0
  202. package/dist/sheet.d.ts +51 -0
  203. package/dist/sheet.d.ts.map +1 -0
  204. package/dist/sheet.js +69 -0
  205. package/dist/sheet.js.map +1 -0
  206. package/dist/showcase.d.ts +153 -0
  207. package/dist/showcase.d.ts.map +1 -0
  208. package/dist/showcase.js +210 -0
  209. package/dist/showcase.js.map +1 -0
  210. package/dist/side-panel.d.ts +199 -0
  211. package/dist/side-panel.d.ts.map +1 -0
  212. package/dist/side-panel.js +111 -0
  213. package/dist/side-panel.js.map +1 -0
  214. package/dist/slider.d.ts +138 -0
  215. package/dist/slider.d.ts.map +1 -0
  216. package/dist/slider.js +150 -0
  217. package/dist/slider.js.map +1 -0
  218. package/dist/splitter.d.ts +113 -0
  219. package/dist/splitter.d.ts.map +1 -0
  220. package/dist/splitter.js +99 -0
  221. package/dist/splitter.js.map +1 -0
  222. package/dist/statistic.d.ts +41 -0
  223. package/dist/statistic.d.ts.map +1 -0
  224. package/dist/statistic.js +76 -0
  225. package/dist/statistic.js.map +1 -0
  226. package/dist/steps.d.ts +196 -0
  227. package/dist/steps.d.ts.map +1 -0
  228. package/dist/steps.js +160 -0
  229. package/dist/steps.js.map +1 -0
  230. package/dist/tag.d.ts +128 -0
  231. package/dist/tag.d.ts.map +1 -0
  232. package/dist/tag.js +93 -0
  233. package/dist/tag.js.map +1 -0
  234. package/dist/timeline.d.ts +147 -0
  235. package/dist/timeline.d.ts.map +1 -0
  236. package/dist/timeline.js +127 -0
  237. package/dist/timeline.js.map +1 -0
  238. package/dist/toast.d.ts +164 -0
  239. package/dist/toast.d.ts.map +1 -0
  240. package/dist/toast.js +529 -0
  241. package/dist/toast.js.map +1 -0
  242. package/dist/tokens.d.ts +9 -0
  243. package/dist/tokens.d.ts.map +1 -0
  244. package/dist/tokens.js +9 -0
  245. package/dist/tokens.js.map +1 -0
  246. package/dist/tooltip.d.ts +44 -0
  247. package/dist/tooltip.d.ts.map +1 -0
  248. package/dist/tooltip.js +88 -0
  249. package/dist/tooltip.js.map +1 -0
  250. package/dist/tour.d.ts +218 -0
  251. package/dist/tour.d.ts.map +1 -0
  252. package/dist/tour.js +211 -0
  253. package/dist/tour.js.map +1 -0
  254. package/dist/transfer-list.d.ts +207 -0
  255. package/dist/transfer-list.d.ts.map +1 -0
  256. package/dist/transfer-list.js +193 -0
  257. package/dist/transfer-list.js.map +1 -0
  258. package/dist/tree-select.d.ts +78 -0
  259. package/dist/tree-select.d.ts.map +1 -0
  260. package/dist/tree-select.js +132 -0
  261. package/dist/tree-select.js.map +1 -0
  262. package/dist/tree.d.ts +206 -0
  263. package/dist/tree.d.ts.map +1 -0
  264. package/dist/tree.js +223 -0
  265. package/dist/tree.js.map +1 -0
  266. package/dist/upload-item.d.ts +173 -0
  267. package/dist/upload-item.d.ts.map +1 -0
  268. package/dist/upload-item.js +156 -0
  269. package/dist/upload-item.js.map +1 -0
  270. package/dist/version.d.ts +3 -0
  271. package/dist/version.d.ts.map +1 -0
  272. package/dist/version.js +3 -0
  273. package/dist/version.js.map +1 -0
  274. package/docs/affix.md +63 -0
  275. package/docs/anchor.md +59 -0
  276. package/docs/ant-design-coverage.md +119 -0
  277. package/docs/app-provider.md +50 -0
  278. package/docs/app-rn-adoption.md +227 -0
  279. package/docs/architecture.md +320 -0
  280. package/docs/authoring-brief.md +87 -0
  281. package/docs/border-beam.md +66 -0
  282. package/docs/bottom-navigation.md +127 -0
  283. package/docs/breadcrumb.md +82 -0
  284. package/docs/calendar.md +154 -0
  285. package/docs/carousel.md +130 -0
  286. package/docs/cascader.md +93 -0
  287. package/docs/catalog-decision-status.md +306 -0
  288. package/docs/color-picker.md +72 -0
  289. package/docs/command-palette.md +116 -0
  290. package/docs/confirm-popover.md +93 -0
  291. package/docs/consistency-audit.md +383 -0
  292. package/docs/consumer-release-gate.md +90 -0
  293. package/docs/content-state.md +156 -0
  294. package/docs/context-panel.md +88 -0
  295. package/docs/cross-platform-core-normalization.md +118 -0
  296. package/docs/data-table.md +79 -0
  297. package/docs/date-picker.md +84 -0
  298. package/docs/description-list.md +75 -0
  299. package/docs/design-system-provider.md +139 -0
  300. package/docs/dropdown.md +78 -0
  301. package/docs/expansion-roadmap.md +285 -0
  302. package/docs/file-picker.md +59 -0
  303. package/docs/floating-action-button.md +111 -0
  304. package/docs/form.md +134 -0
  305. package/docs/generated/component-maturity.md +103 -0
  306. package/docs/generated/renderer-evidence.json +5597 -0
  307. package/docs/generated/renderer-evidence.md +132 -0
  308. package/docs/generated/showcase-manifest.json +3732 -0
  309. package/docs/icon.md +22 -0
  310. package/docs/identity.md +121 -0
  311. package/docs/image.md +84 -0
  312. package/docs/implementation-0.5.md +85 -0
  313. package/docs/layout-primitives.md +107 -0
  314. package/docs/layout.md +83 -0
  315. package/docs/library-reference-decisions.md +123 -0
  316. package/docs/link.md +67 -0
  317. package/docs/load-more.md +31 -0
  318. package/docs/mentions.md +82 -0
  319. package/docs/migration-0.2.md +108 -0
  320. package/docs/migration-0.3.md +72 -0
  321. package/docs/migration-0.5.md +82 -0
  322. package/docs/migration-0.6.md +197 -0
  323. package/docs/notification.md +54 -0
  324. package/docs/number-field.md +82 -0
  325. package/docs/otp-field.md +103 -0
  326. package/docs/pagination.md +139 -0
  327. package/docs/password-field.md +98 -0
  328. package/docs/popover.md +124 -0
  329. package/docs/promotion-candidates.md +169 -0
  330. package/docs/qr-code.md +69 -0
  331. package/docs/rating.md +58 -0
  332. package/docs/responsive-grid.md +90 -0
  333. package/docs/result.md +96 -0
  334. package/docs/showcase.md +97 -0
  335. package/docs/side-panel.md +71 -0
  336. package/docs/slider.md +79 -0
  337. package/docs/splitter.md +55 -0
  338. package/docs/statistic.md +16 -0
  339. package/docs/steps.md +115 -0
  340. package/docs/tag.md +57 -0
  341. package/docs/time-picker.md +88 -0
  342. package/docs/timeline.md +146 -0
  343. package/docs/toast.md +127 -0
  344. package/docs/tooltip.md +58 -0
  345. package/docs/tour.md +136 -0
  346. package/docs/transfer-list.md +94 -0
  347. package/docs/tree-select.md +101 -0
  348. package/docs/tree.md +123 -0
  349. package/docs/upload-item.md +68 -0
  350. package/docs/utility.md +53 -0
  351. package/docs/virtual-list.md +70 -0
  352. package/docs/watermark.md +58 -0
  353. package/package.json +402 -0
@@ -0,0 +1,1254 @@
1
+ import type { DesignSystemDirection } from "./design-system-provider.js";
2
+ import { type CheckboxState } from "./selection-helpers.js";
3
+ export { checkboxBehaviorDefaults, getCheckboxNextState, reconcileCheckboxSelection, toggleCheckboxSelection, type CheckboxState, type MixedCheckboxActivation, } from "./selection-helpers.js";
4
+ /** Platform-neutral behavior vocabulary shared by renderer acceptance tests. */
5
+ export type InteractionState = "idle" | "hover" | "focusVisible" | "pressed" | "dragged";
6
+ export type AvailabilityState = "enabled" | "disabled" | "readOnly" | "busy";
7
+ export type ValueState = "empty" | "filled" | "checked" | "mixed" | "selected" | "open" | "expanded";
8
+ export type ValidationState = "valid" | "invalid";
9
+ export type ContentState = "idle" | "loading" | "loadingMore" | "empty" | "error" | "complete";
10
+ export type TabsActivationMode = "automatic" | "manual";
11
+ export type TabsMountPolicy = "active" | "visited" | "always";
12
+ export type TabsPanelMode = "keyed" | "dynamic";
13
+ export type TabsOrientation = "horizontal" | "vertical";
14
+ export type TabsDirection = DesignSystemDirection;
15
+ export type SelectionOrientation = "horizontal" | "vertical";
16
+ export type SelectionDirection = DesignSystemDirection;
17
+ /** Stable option anatomy shared by CheckboxGroup and RadioGroup renderers. */
18
+ export type SelectionItemDescriptor<Key extends string = string> = Readonly<{
19
+ id: Key;
20
+ label: string;
21
+ description?: string;
22
+ disabled?: boolean;
23
+ }>;
24
+ /** A group needs either visible copy or an explicit accessible name. */
25
+ export type SelectionGroupLabel = Readonly<{
26
+ label: string;
27
+ accessibilityLabel?: string;
28
+ }> | Readonly<{
29
+ label?: never;
30
+ accessibilityLabel: string;
31
+ }>;
32
+ export type ControlledCheckboxState = Readonly<{
33
+ checked: CheckboxState;
34
+ defaultChecked?: never;
35
+ onCheckedChange(checked: boolean): void;
36
+ }>;
37
+ export type UncontrolledCheckboxState = Readonly<{
38
+ checked?: never;
39
+ defaultChecked?: CheckboxState;
40
+ onCheckedChange?: (checked: boolean) => void;
41
+ }>;
42
+ export type CheckboxSelection = ControlledCheckboxState | UncontrolledCheckboxState;
43
+ export type ControlledCheckboxGroupSelection<Key extends string = string> = Readonly<{
44
+ value: ReadonlySet<Key>;
45
+ defaultValue?: never;
46
+ onValueChange(value: ReadonlySet<Key>): void;
47
+ }>;
48
+ export type UncontrolledCheckboxGroupSelection<Key extends string = string> = Readonly<{
49
+ value?: never;
50
+ defaultValue?: ReadonlySet<Key>;
51
+ onValueChange?: (value: ReadonlySet<Key>) => void;
52
+ }>;
53
+ export type CheckboxGroupSelection<Key extends string = string> = ControlledCheckboxGroupSelection<Key> | UncontrolledCheckboxGroupSelection<Key>;
54
+ export type ControlledRadioGroupSelection<Key extends string = string> = Readonly<{
55
+ value: Key | null;
56
+ defaultValue?: never;
57
+ onValueChange(value: Key): void;
58
+ }>;
59
+ export type UncontrolledRadioGroupSelection<Key extends string = string> = Readonly<{
60
+ value?: never;
61
+ defaultValue?: Key | null;
62
+ onValueChange?: (value: Key) => void;
63
+ }>;
64
+ export type RadioGroupSelection<Key extends string = string> = ControlledRadioGroupSelection<Key> | UncontrolledRadioGroupSelection<Key>;
65
+ export type SelectionNavigationIntent = "next" | "previous" | "first" | "last";
66
+ /** Resolves a renderer's required name while rejecting type-valid blank copy. */
67
+ export declare function resolveControlAccessibleName(label: string | undefined, accessibilityLabel: string | undefined, controlName?: string): string;
68
+ export declare const selectionGroupBehaviorDefaults: {
69
+ readonly orientation: "vertical";
70
+ readonly direction: "ltr";
71
+ };
72
+ export declare const radioGroupBehaviorDefaults: {
73
+ readonly loop: true;
74
+ readonly orientation: "vertical";
75
+ readonly direction: "ltr";
76
+ };
77
+ export declare const selectBehaviorDefaults: {
78
+ readonly disallowEmptySelection: false;
79
+ readonly loop: false;
80
+ };
81
+ export declare const comboboxBehaviorDefaults: {
82
+ readonly filtering: "local";
83
+ readonly loop: false;
84
+ };
85
+ /** Throws before a renderer can expose ambiguous or unreachable selection state. */
86
+ export declare function validateSelectionItems<Key extends string>(items: readonly SelectionItemDescriptor<Key>[]): void;
87
+ export declare function validateCheckboxSelection<Key extends string>(items: readonly SelectionItemDescriptor<Key>[], current: ReadonlySet<Key>): void;
88
+ export declare function resolveInitialRadioValue<Key extends string>(items: readonly SelectionItemDescriptor<Key>[], requestedValue: Key | null | undefined, required?: boolean): Key | null;
89
+ export declare function validateRadioSelection<Key extends string>(items: readonly SelectionItemDescriptor<Key>[], current: Key | null): void;
90
+ /** Returns the only enabled radio that may enter the Web tab order. */
91
+ export declare function resolveRadioTabStop<Key extends string>(items: readonly SelectionItemDescriptor<Key>[], selectedValue: Key | null): Key | undefined;
92
+ /** Reconciles an uncontrolled radio when its selected item leaves the collection. */
93
+ export declare function reconcileRadioSelection<Key extends string>(items: readonly SelectionItemDescriptor<Key>[], current: Key | null, required?: boolean): Key | null;
94
+ export declare function getSelectionNavigationIntent(key: WebKeyboardKey, orientation: SelectionOrientation, direction: SelectionDirection): SelectionNavigationIntent | undefined;
95
+ export declare function getRadioNavigationTarget<Key extends string>(items: readonly SelectionItemDescriptor<Key>[], currentId: Key | null | undefined, intent: SelectionNavigationIntent, loop?: boolean): Key | undefined;
96
+ /** Platform-neutral item anatomy shared by Web and native Tabs renderers. */
97
+ export type TabDescriptor<Key extends string = string> = Readonly<{
98
+ id: Key;
99
+ label: string;
100
+ disabled?: boolean;
101
+ }>;
102
+ export type ControlledTabsSelection<Key extends string = string> = Readonly<{
103
+ value: Key;
104
+ defaultValue?: never;
105
+ onValueChange(value: Key): void;
106
+ }>;
107
+ export type UncontrolledTabsSelection<Key extends string = string> = Readonly<{
108
+ value?: never;
109
+ defaultValue?: Key;
110
+ onValueChange?: (value: Key) => void;
111
+ }>;
112
+ export type TabsSelection<Key extends string = string> = ControlledTabsSelection<Key> | UncontrolledTabsSelection<Key>;
113
+ export type TabNavigationIntent = "next" | "previous" | "first" | "last";
114
+ export declare function getTabNavigationIntent(key: WebKeyboardKey, orientation: TabsOrientation, direction: TabsDirection): TabNavigationIntent | undefined;
115
+ /** Validates collection identity and resolves the only safe initial selection. */
116
+ export declare function resolveInitialTabValue<Key extends string>(items: readonly TabDescriptor<Key>[], requestedValue?: Key): Key | undefined;
117
+ /** Shared roving-focus math; renderers still own DOM/native focus APIs. */
118
+ export declare function getTabNavigationTarget<Key extends string>(items: readonly TabDescriptor<Key>[], currentId: Key, intent: TabNavigationIntent, loop?: boolean): Key | undefined;
119
+ export type BehaviorStateAxis = "interaction" | "availability" | "value" | "validation" | "content";
120
+ export type WebKeyboardKey = "Tab" | "Enter" | "Space" | "Escape" | "ArrowUp" | "ArrowDown" | "ArrowLeft" | "ArrowRight" | "Home" | "End" | "PageUp" | "PageDown" | "F8" | "Typeahead";
121
+ export type NativeAccessibilityState = "disabled" | "selected" | "checked" | "busy" | "expanded";
122
+ export type BehaviorContract = Readonly<{
123
+ /** Controlled/uncontrolled state triplets only. */
124
+ controlled: readonly string[];
125
+ /** Read-only inputs which do not form a controlled state axis. */
126
+ inputs?: readonly string[];
127
+ /** Emitted events which do not themselves own state. */
128
+ events?: readonly string[];
129
+ configuration?: Readonly<Record<string, readonly string[]>>;
130
+ defaults?: Readonly<Record<string, string | number | boolean>>;
131
+ stateAxes: Readonly<Partial<Record<BehaviorStateAxis, readonly string[]>>>;
132
+ web: Readonly<{
133
+ roles: readonly string[];
134
+ keyboard: readonly WebKeyboardKey[];
135
+ focus: "native" | "roving" | "activeDescendant" | "trap" | "restore" | "none";
136
+ dismiss?: readonly ("escape" | "outside" | "selection" | "blur" | "timeout" | "action" | "close-action" | "swipe" | "programmatic")[];
137
+ }>;
138
+ native: Readonly<{
139
+ roles: readonly string[];
140
+ states: readonly NativeAccessibilityState[];
141
+ actions: readonly string[];
142
+ dismiss?: readonly ("back" | "swipe" | "outside" | "selection" | "timeout" | "action" | "close-action" | "programmatic")[];
143
+ }>;
144
+ scenarios: readonly string[];
145
+ }>;
146
+ /** Safe behavior defaults: automatic activation is opt-in for instant panels. */
147
+ export declare const tabsBehaviorDefaults: {
148
+ readonly activationMode: "manual";
149
+ readonly mountPolicy: "active";
150
+ readonly panelMode: "keyed";
151
+ readonly orientation: "horizontal";
152
+ readonly direction: "ltr";
153
+ readonly loop: true;
154
+ };
155
+ /**
156
+ * Behavior is data, not a React implementation. Web/RN renderers can use any
157
+ * suitable primitive while running the same scenarios and exposing the same
158
+ * controlled state names.
159
+ */
160
+ export declare const behaviorRegistry: {
161
+ readonly link: {
162
+ readonly controlled: readonly [];
163
+ readonly inputs: readonly ["destination", "label"];
164
+ readonly stateAxes: {
165
+ readonly interaction: readonly ["idle", "hover", "focusVisible", "pressed"];
166
+ };
167
+ readonly web: {
168
+ readonly roles: readonly ["link"];
169
+ readonly keyboard: readonly ["Tab", "Enter"];
170
+ readonly focus: "native";
171
+ };
172
+ readonly native: {
173
+ readonly roles: readonly ["link"];
174
+ readonly states: readonly [];
175
+ readonly actions: readonly ["activate"];
176
+ };
177
+ readonly scenarios: readonly ["href-is-the-destination-source-of-truth", "web-renders-a-real-anchor-and-preserves-modifier-context-navigation", "native-internal-destination-uses-router-link-semantics", "native-external-destination-uses-platform-linking-and-reports-failure", "link-never-exposes-disabled-action-or-visited-application-state", "download-remains-a-separate-platform-workflow", "visible-label-owns-one-accessible-name", "leading-and-trailing-icons-are-decorative-semantic-icons", "logical-icon-direction-follows-rtl", "inline-link-has-a-persistent-non-color-cue", "standalone-link-target-is-at-least-forty-four-units", "destination-link-never-contains-another-interactive-descendant"];
178
+ };
179
+ readonly field: {
180
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
181
+ readonly stateAxes: {
182
+ readonly availability: readonly ["enabled", "disabled", "readOnly"];
183
+ readonly validation: readonly ["valid", "invalid"];
184
+ readonly content: readonly ["idle", "loading", "error"];
185
+ };
186
+ readonly web: {
187
+ readonly roles: readonly ["textbox"];
188
+ readonly keyboard: readonly ["Tab"];
189
+ readonly focus: "native";
190
+ };
191
+ readonly native: {
192
+ readonly roles: readonly ["text"];
193
+ readonly states: readonly ["disabled"];
194
+ readonly actions: readonly ["focus", "setText"];
195
+ };
196
+ readonly scenarios: readonly ["label-description-error-linkage", "invalid-plus-focus", "disabled-suppresses-edit"];
197
+ };
198
+ readonly searchField: {
199
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange", "onClear"];
200
+ readonly stateAxes: {
201
+ readonly availability: readonly ["enabled", "disabled", "busy"];
202
+ readonly value: readonly ["empty", "filled"];
203
+ readonly validation: readonly ["valid", "invalid"];
204
+ readonly content: readonly ["idle", "loading", "error"];
205
+ };
206
+ readonly web: {
207
+ readonly roles: readonly ["searchbox", "button"];
208
+ readonly keyboard: readonly ["Tab", "Enter"];
209
+ readonly focus: "native";
210
+ };
211
+ readonly native: {
212
+ readonly roles: readonly ["text", "button"];
213
+ readonly states: readonly ["disabled", "busy"];
214
+ readonly actions: readonly ["focus", "setText", "clear"];
215
+ };
216
+ readonly scenarios: readonly ["clear-has-name", "empty-hides-clear", "invalid-plus-focus", "busy-preserves-query"];
217
+ };
218
+ readonly checkbox: {
219
+ readonly controlled: readonly ["checked", "defaultChecked", "onCheckedChange"];
220
+ readonly configuration: {
221
+ readonly mixedActivation: readonly ["check", "uncheck"];
222
+ };
223
+ readonly defaults: {
224
+ readonly mixedActivation: "check";
225
+ };
226
+ readonly stateAxes: {
227
+ readonly availability: readonly ["enabled", "disabled", "readOnly"];
228
+ readonly value: readonly ["checked", "mixed"];
229
+ readonly validation: readonly ["valid", "invalid"];
230
+ };
231
+ readonly web: {
232
+ readonly roles: readonly ["checkbox"];
233
+ readonly keyboard: readonly ["Tab", "Space"];
234
+ readonly focus: "native";
235
+ };
236
+ readonly native: {
237
+ readonly roles: readonly ["checkbox"];
238
+ readonly states: readonly ["disabled", "checked"];
239
+ readonly actions: readonly ["activate"];
240
+ };
241
+ readonly scenarios: readonly ["visible-label-is-accessible-name", "mixed-is-announced-and-activates-to-default", "disabled-and-read-only-suppress-change", "controlled-value-never-mutates-internally", "required-and-invalid-support-are-linked"];
242
+ };
243
+ readonly checkboxGroup: {
244
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
245
+ readonly configuration: {
246
+ readonly orientation: readonly ["horizontal", "vertical"];
247
+ readonly direction: readonly ["ltr", "rtl"];
248
+ };
249
+ readonly defaults: {
250
+ readonly orientation: "vertical";
251
+ readonly direction: "ltr";
252
+ };
253
+ readonly stateAxes: {
254
+ readonly availability: readonly ["enabled", "disabled", "readOnly"];
255
+ readonly value: readonly ["checked"];
256
+ readonly validation: readonly ["valid", "invalid"];
257
+ };
258
+ readonly web: {
259
+ readonly roles: readonly ["group", "checkbox"];
260
+ readonly keyboard: readonly ["Tab", "Space"];
261
+ readonly focus: "native";
262
+ };
263
+ readonly native: {
264
+ readonly roles: readonly ["checkbox"];
265
+ readonly states: readonly ["disabled", "checked"];
266
+ readonly actions: readonly ["activate"];
267
+ };
268
+ readonly scenarios: readonly ["each-enabled-checkbox-is-a-tab-stop", "space-toggles-only-focused-checkbox", "group-label-description-and-error-are-linked", "disabled-selected-item-is-retained-but-not-activated", "change-emits-a-fresh-set", "duplicate-and-unknown-ids-are-rejected", "uncontrolled-selection-reconciles-collection-mutation", "required-and-invalid-are-announced", "no-nested-interactive-descendants"];
269
+ };
270
+ readonly radioGroup: {
271
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
272
+ readonly configuration: {
273
+ readonly orientation: readonly ["horizontal", "vertical"];
274
+ readonly direction: readonly ["ltr", "rtl"];
275
+ readonly loop: readonly ["true", "false"];
276
+ };
277
+ readonly defaults: {
278
+ readonly loop: true;
279
+ readonly orientation: "vertical";
280
+ readonly direction: "ltr";
281
+ };
282
+ readonly stateAxes: {
283
+ readonly availability: readonly ["enabled", "disabled", "readOnly"];
284
+ readonly value: readonly ["checked", "selected"];
285
+ readonly validation: readonly ["valid", "invalid"];
286
+ };
287
+ readonly web: {
288
+ readonly roles: readonly ["radiogroup", "radio"];
289
+ readonly keyboard: readonly ["Tab", "Space", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"];
290
+ readonly focus: "roving";
291
+ };
292
+ readonly native: {
293
+ readonly roles: readonly ["radio"];
294
+ readonly states: readonly ["disabled", "checked"];
295
+ readonly actions: readonly ["activate"];
296
+ };
297
+ readonly scenarios: readonly ["at-most-one-selection-and-nullable-initial-value", "checked-or-first-enabled-is-the-only-tab-stop", "arrow-focuses-and-selects-while-skipping-disabled", "orientation-direction-and-loop-control-navigation", "space-selects-focused-radio", "group-label-description-and-error-are-linked", "disabled-selected-item-is-retained-with-enabled-tab-stop", "required-invalid-and-read-only-are-announced", "controlled-value-never-mutates-internally", "duplicate-and-unknown-ids-are-rejected"];
298
+ };
299
+ readonly switch: {
300
+ readonly controlled: readonly ["checked", "defaultChecked", "onCheckedChange"];
301
+ readonly stateAxes: {
302
+ readonly availability: readonly ["enabled", "disabled"];
303
+ readonly value: readonly ["checked"];
304
+ };
305
+ readonly web: {
306
+ readonly roles: readonly ["switch"];
307
+ readonly keyboard: readonly ["Tab", "Space"];
308
+ readonly focus: "native";
309
+ };
310
+ readonly native: {
311
+ readonly roles: readonly ["switch"];
312
+ readonly states: readonly ["disabled", "checked"];
313
+ readonly actions: readonly ["activate"];
314
+ };
315
+ readonly scenarios: readonly ["row-and-control-are-one-target", "checked-announced", "disabled-suppresses-change"];
316
+ };
317
+ readonly segmentedControl: {
318
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
319
+ readonly stateAxes: {
320
+ readonly availability: readonly ["enabled", "disabled"];
321
+ readonly value: readonly ["selected"];
322
+ };
323
+ readonly web: {
324
+ readonly roles: readonly ["radiogroup", "radio"];
325
+ readonly keyboard: readonly ["Tab", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End"];
326
+ readonly focus: "roving";
327
+ };
328
+ readonly native: {
329
+ readonly roles: readonly ["radio"];
330
+ readonly states: readonly ["disabled", "checked"];
331
+ readonly actions: readonly ["activate"];
332
+ };
333
+ readonly scenarios: readonly ["exactly-one-selected", "one-tab-stop", "arrow-selection", "selected-plus-focus"];
334
+ };
335
+ readonly chip: {
336
+ readonly controlled: readonly ["selected", "onPress"];
337
+ readonly stateAxes: {
338
+ readonly availability: readonly ["enabled", "disabled"];
339
+ readonly value: readonly ["selected"];
340
+ };
341
+ readonly web: {
342
+ readonly roles: readonly ["button", "radio", "checkbox"];
343
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
344
+ readonly focus: "native";
345
+ };
346
+ readonly native: {
347
+ readonly roles: readonly ["button", "radio", "checkbox"];
348
+ readonly states: readonly ["disabled", "checked"];
349
+ readonly actions: readonly ["activate"];
350
+ };
351
+ readonly scenarios: readonly ["action-never-exposes-selection", "single-selection-uses-radio-checked", "multiple-selection-uses-checkbox-checked", "selected-plus-focus", "selection-indicator-is-not-color-only", "single-mode-composes-radio-group-behavior", "multiple-mode-composes-checkbox-group-behavior"];
352
+ };
353
+ readonly tabs: {
354
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
355
+ readonly configuration: {
356
+ readonly activationMode: readonly ["automatic", "manual"];
357
+ readonly mountPolicy: readonly ["active", "visited", "always"];
358
+ readonly panelMode: readonly ["keyed", "dynamic"];
359
+ readonly orientation: readonly ["horizontal", "vertical"];
360
+ readonly direction: readonly ["ltr", "rtl"];
361
+ readonly loop: readonly ["true", "false"];
362
+ };
363
+ readonly defaults: {
364
+ readonly activationMode: "manual";
365
+ readonly mountPolicy: "active";
366
+ readonly panelMode: "keyed";
367
+ readonly orientation: "horizontal";
368
+ readonly direction: "ltr";
369
+ readonly loop: true;
370
+ };
371
+ readonly stateAxes: {
372
+ readonly availability: readonly ["enabled", "disabled"];
373
+ readonly value: readonly ["selected"];
374
+ };
375
+ readonly web: {
376
+ readonly roles: readonly ["tablist", "tab", "tabpanel"];
377
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"];
378
+ readonly focus: "roving";
379
+ };
380
+ readonly native: {
381
+ readonly roles: readonly ["tab"];
382
+ readonly states: readonly ["disabled", "selected"];
383
+ readonly actions: readonly ["activate"];
384
+ };
385
+ readonly scenarios: readonly ["tab-controls-panel", "one-tab-stop", "disabled-tab-skipped", "selected-plus-focus", "automatic-activation-only-for-instant-panels", "manual-activation-keeps-focus-and-selection-distinct", "active-mount-removes-inactive-panel", "always-mount-makes-inactive-panels-inert", "visited-mount-preserves-visited-panel-state", "horizontal-arrows-do-not-consume-up-down", "vertical-arrows-and-aria-orientation", "web-tablist-has-accessible-name", "every-tab-controls-an-existing-panel", "active-panel-labelled-by-selected-tab", "manual-focus-does-not-relabel-dynamic-panel", "dynamic-panel-preserves-host-instance", "dynamic-panel-requires-active-mount", "panel-enters-tab-order-when-content-has-no-focus-target", "rtl-navigation-follows-logical-direction", "first-enabled-tab-is-uncontrolled-default", "duplicate-and-disabled-selection-are-rejected", "controlled-selection-never-mutates-internally", "native-focus-does-not-select-without-activate", "inactive-mounted-panels-are-hidden-and-inert", "uncontrolled-selection-reconciles-collection-mutation"];
386
+ };
387
+ readonly bottomNavigation: {
388
+ readonly controlled: readonly [];
389
+ readonly inputs: readonly ["items", "selectedKey", "accessibilityLabel"];
390
+ readonly events: readonly ["onActivate", "onLongPress"];
391
+ readonly configuration: {
392
+ readonly direction: readonly ["ltr", "rtl"];
393
+ readonly keyboardBehavior: readonly ["hide", "remain"];
394
+ };
395
+ readonly defaults: {
396
+ readonly direction: "ltr";
397
+ readonly keyboardBehavior: "hide";
398
+ readonly minItems: 2;
399
+ readonly maxItems: 6;
400
+ };
401
+ readonly stateAxes: {
402
+ readonly interaction: readonly ["idle", "hover", "focusVisible", "pressed"];
403
+ readonly availability: readonly ["enabled", "disabled"];
404
+ readonly value: readonly ["selected"];
405
+ };
406
+ readonly web: {
407
+ readonly roles: readonly ["navigation", "list", "link"];
408
+ readonly keyboard: readonly ["Tab", "Enter"];
409
+ readonly focus: "native";
410
+ };
411
+ readonly native: {
412
+ readonly roles: readonly ["tab", "button"];
413
+ readonly states: readonly ["disabled", "selected"];
414
+ readonly actions: readonly ["activate", "longpress"];
415
+ };
416
+ readonly scenarios: readonly ["two-to-five-stable-top-level-destinations", "router-selected-key-is-read-only-input", "activation-does-not-select-before-router-commit", "prevented-or-failed-navigation-keeps-current-selection", "reselect-is-distinct-from-navigation", "navigator-preserves-each-destination-state", "disabled-destination-suppresses-activation", "visible-label-always-names-a-decorative-icon", "selected-state-uses-icon-emphasis-and-label-weight-not-color-alone", "selected-content-and-focus-indicator-remain-simultaneously-visible", "centered-sibling-action-is-excluded-from-destination-collection", "badge-zero-is-hidden-and-visible-count-is-bounded", "badge-subtree-is-hidden-and-item-uses-one-resolved-accessibility-name", "badge-update-does-not-change-focus-selection-or-live-announce", "web-uses-a-labelled-navigation-landmark-and-real-links", "web-current-link-uses-aria-current-page", "web-preserves-modifier-click-and-does-not-use-tab-roles-or-roving-focus", "native-emits-tab-press-and-respects-default-prevented-before-navigation", "native-forwards-tab-long-press", "native-ios-may-use-button-plus-selected-when-tab-role-is-not-reliably-supported", "safe-area-padding-is-additive", "software-keyboard-hides-instead-of-lifting-the-navigation", "two-hundred-percent-text-wraps-without-fixed-item-height", "rtl-order-and-badge-anchor-follow-logical-direction", "targets-are-at-least-forty-four-units", "reduced-motion-removes-transform-without-changing-state"];
417
+ };
418
+ readonly disclosureGroup: {
419
+ readonly controlled: readonly ["expandedKeys", "defaultExpandedKeys", "onExpandedChange"];
420
+ readonly stateAxes: {
421
+ readonly availability: readonly ["enabled", "disabled"];
422
+ readonly value: readonly ["expanded"];
423
+ };
424
+ readonly web: {
425
+ readonly roles: readonly ["heading", "button", "region"];
426
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "ArrowUp", "ArrowDown", "Home", "End"];
427
+ readonly focus: "native";
428
+ };
429
+ readonly native: {
430
+ readonly roles: readonly ["button"];
431
+ readonly states: readonly ["disabled", "expanded"];
432
+ readonly actions: readonly ["activate"];
433
+ };
434
+ readonly scenarios: readonly ["single-and-multiple-invariants", "each-enabled-trigger-is-a-tab-stop", "toggle-keeps-trigger-focus", "panel-removed-when-collapsed", "disabled-trigger-suppresses-change", "reduced-motion"];
435
+ };
436
+ readonly menu: {
437
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange", "onAction", "onActionAfterDismiss", "selection", "asyncState"];
438
+ readonly stateAxes: {
439
+ readonly availability: readonly ["enabled", "disabled"];
440
+ readonly value: readonly ["open", "selected"];
441
+ readonly content: readonly ["idle", "loading", "loadingMore", "empty", "error"];
442
+ };
443
+ readonly web: {
444
+ readonly roles: readonly ["menu", "menuitem", "menuitemradio", "menuitemcheckbox"];
445
+ readonly keyboard: readonly ["Enter", "Space", "Escape", "ArrowUp", "ArrowDown", "Home", "End", "Typeahead"];
446
+ readonly focus: "restore";
447
+ readonly dismiss: readonly ["escape", "outside", "selection"];
448
+ };
449
+ readonly native: {
450
+ readonly roles: readonly ["menu", "menuitem"];
451
+ readonly states: readonly ["disabled", "selected", "checked"];
452
+ readonly actions: readonly ["activate"];
453
+ readonly dismiss: readonly ["back", "outside", "selection"];
454
+ };
455
+ readonly scenarios: readonly ["action-and-single-close-after-selection", "on-action-does-not-depend-on-controlled-close", "after-dismiss-action-sequences-next-surface", "multiple-selection-keeps-menu-open", "disabled-item-skipped", "escape-or-back-restores-trigger", "danger-item-not-color-only", "loading-more-preserves-items-and-selection"];
456
+ };
457
+ readonly dialog: {
458
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange"];
459
+ readonly stateAxes: {
460
+ readonly availability: readonly ["enabled", "busy"];
461
+ readonly value: readonly ["open"];
462
+ };
463
+ readonly web: {
464
+ readonly roles: readonly ["dialog"];
465
+ readonly keyboard: readonly ["Tab", "Escape"];
466
+ readonly focus: "trap";
467
+ readonly dismiss: readonly ["escape", "outside"];
468
+ };
469
+ readonly native: {
470
+ readonly roles: readonly ["dialog"];
471
+ readonly states: readonly ["busy"];
472
+ readonly actions: readonly ["dismiss"];
473
+ readonly dismiss: readonly ["back", "outside"];
474
+ };
475
+ readonly scenarios: readonly ["title-description-linkage", "focus-trap-and-restore", "modal-isolation", "single-dismiss-callback"];
476
+ };
477
+ readonly alertDialog: {
478
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange"];
479
+ readonly stateAxes: {
480
+ readonly availability: readonly ["enabled", "busy"];
481
+ readonly value: readonly ["open"];
482
+ readonly content: readonly ["idle", "loading", "error"];
483
+ };
484
+ readonly web: {
485
+ readonly roles: readonly ["alertdialog"];
486
+ readonly keyboard: readonly ["Tab", "Escape"];
487
+ readonly focus: "trap";
488
+ readonly dismiss: readonly ["escape"];
489
+ };
490
+ readonly native: {
491
+ readonly roles: readonly ["alertdialog"];
492
+ readonly states: readonly ["busy"];
493
+ readonly actions: readonly ["confirm", "cancel"];
494
+ readonly dismiss: readonly ["back"];
495
+ };
496
+ readonly scenarios: readonly ["visible-title-and-description-are-announced", "modal-isolation-and-tab-trap", "confirm-mode-cancel-is-initial-focus", "alert-mode-confirm-is-initial-focus", "outside-attempt-is-ignored-without-callback", "escape-or-back-cancels-when-idle", "busy-blocks-every-dismiss-and-duplicate-confirm", "confirm-action-runs-once", "error-is-announced-and-dialog-stays-open", "controlled-close-settles-programmatic-cancel", "unmount-settles-interrupted", "result-settles-once-after-exit", "focus-restores-after-every-close-path", "reduced-motion-still-completes-exit"];
497
+ };
498
+ readonly sheet: {
499
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange", "dismissPolicy"];
500
+ readonly defaults: {
501
+ readonly dismissible: true;
502
+ readonly dismissWhileBusy: false;
503
+ readonly outsideDismiss: true;
504
+ readonly escapeOrBackDismiss: true;
505
+ readonly swipeDismiss: false;
506
+ };
507
+ readonly stateAxes: {
508
+ readonly availability: readonly ["enabled", "busy"];
509
+ readonly value: readonly ["open"];
510
+ };
511
+ readonly web: {
512
+ readonly roles: readonly ["dialog"];
513
+ readonly keyboard: readonly ["Tab", "Escape"];
514
+ readonly focus: "trap";
515
+ readonly dismiss: readonly ["escape", "outside"];
516
+ };
517
+ readonly native: {
518
+ readonly roles: readonly ["dialog"];
519
+ readonly states: readonly ["busy"];
520
+ readonly actions: readonly ["dismiss"];
521
+ readonly dismiss: readonly ["back", "outside"];
522
+ };
523
+ readonly scenarios: readonly ["focus-or-modal-isolation", "scroll-lock", "safe-area", "single-dismiss-callback", "busy-blocks-dismiss", "dismiss-reason-is-reported", "programmatic-owner-close-is-always-allowed", "swipe-requires-enabled-policy-and-gesture-capability", "successor-surface-opens-after-exit", "nested-modal-surfaces-are-forbidden", "reduced-motion-still-completes-dismiss"];
524
+ };
525
+ readonly select: {
526
+ readonly controlled: readonly ["selectedKey", "defaultSelectedKey", "onSelectionChange", "open", "defaultOpen", "onOpenChange"];
527
+ readonly inputs: readonly ["asyncState", "selectedItem"];
528
+ readonly configuration: {
529
+ readonly disallowEmptySelection: readonly ["true", "false"];
530
+ readonly loop: readonly ["true", "false"];
531
+ };
532
+ readonly defaults: {
533
+ readonly disallowEmptySelection: false;
534
+ readonly loop: false;
535
+ };
536
+ readonly stateAxes: {
537
+ readonly availability: readonly ["enabled", "disabled", "readOnly", "busy"];
538
+ readonly value: readonly ["empty", "selected", "open"];
539
+ readonly validation: readonly ["valid", "invalid"];
540
+ readonly content: readonly ["idle", "loading", "loadingMore", "empty", "error"];
541
+ };
542
+ readonly web: {
543
+ readonly roles: readonly ["combobox", "listbox", "option"];
544
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "Escape", "ArrowUp", "ArrowDown", "Home", "End", "Typeahead"];
545
+ readonly focus: "activeDescendant";
546
+ readonly dismiss: readonly ["selection", "escape", "outside", "blur"];
547
+ };
548
+ readonly native: {
549
+ readonly roles: readonly ["button", "dialog", "radio"];
550
+ readonly states: readonly ["disabled", "checked", "busy", "expanded"];
551
+ readonly actions: readonly ["activate", "dismiss"];
552
+ readonly dismiss: readonly ["selection", "back", "outside"];
553
+ };
554
+ readonly scenarios: readonly ["visible-label-or-accessibility-label-names-trigger", "collection-ids-and-text-values-are-validated", "highlighted-option-is-distinct-from-committed-selection", "trigger-controls-the-mounted-listbox", "active-descendant-references-a-mounted-option", "active-option-scrolls-into-view", "disabled-options-are-skipped", "escape-closes-without-commit", "selection-requests-close-and-restores-trigger-focus", "controlled-owner-may-defer-a-selection-close-request", "removed-selection-is-reconciled", "loading-more-preserves-options-and-selection", "transient-async-pages-preserve-committed-key-and-copy", "empty-error-and-loading-are-announced", "options-have-no-nested-interactive-descendants"];
555
+ };
556
+ readonly combobox: {
557
+ readonly controlled: readonly ["selectedKey", "defaultSelectedKey", "onSelectionChange", "inputValue", "defaultInputValue", "onInputValueChange", "open", "defaultOpen", "onOpenChange"];
558
+ readonly inputs: readonly ["asyncState", "queryValue", "resultQuery", "selectedItem"];
559
+ readonly events: readonly ["onCommit"];
560
+ readonly configuration: {
561
+ readonly filtering: readonly ["local", "external"];
562
+ readonly loop: readonly ["true", "false"];
563
+ };
564
+ readonly defaults: {
565
+ readonly filtering: "local";
566
+ readonly loop: false;
567
+ };
568
+ readonly stateAxes: {
569
+ readonly availability: readonly ["enabled", "disabled", "readOnly", "busy"];
570
+ readonly value: readonly ["empty", "filled", "selected", "open"];
571
+ readonly validation: readonly ["valid", "invalid"];
572
+ readonly content: readonly ["idle", "loading", "loadingMore", "empty", "error"];
573
+ };
574
+ readonly web: {
575
+ readonly roles: readonly ["combobox", "listbox", "option"];
576
+ readonly keyboard: readonly ["Tab", "Enter", "Escape", "ArrowUp", "ArrowDown", "Home", "End"];
577
+ readonly focus: "activeDescendant";
578
+ readonly dismiss: readonly ["selection", "escape", "outside", "blur"];
579
+ };
580
+ readonly native: {
581
+ readonly roles: readonly ["button", "text", "dialog", "radio"];
582
+ readonly states: readonly ["disabled", "checked", "busy", "expanded"];
583
+ readonly actions: readonly ["focus", "setText", "activate", "dismiss"];
584
+ readonly dismiss: readonly ["selection", "back", "outside"];
585
+ };
586
+ readonly scenarios: readonly ["selected-key-and-input-value-are-independent", "input-focus-and-active-option-are-distinct", "input-controls-the-mounted-listbox", "active-descendant-references-a-mounted-option", "active-option-scrolls-into-view", "ime-composition-does-not-prematurely-filter-or-commit", "escape-restores-the-committed-label", "query-edit-never-commits-a-stale-selection", "external-results-do-not-implicitly-commit", "committed-item-survives-transient-result-pages", "stale-external-results-do-not-replace-current-query", "loading-more-preserves-options-and-active-descendant", "empty-error-and-loading-are-announced", "custom-values-are-rejected-without-an-explicit-policy", "selection-state-updates-before-commit-event-and-close-request", "options-have-no-nested-interactive-descendants"];
587
+ };
588
+ readonly toast: {
589
+ readonly controlled: readonly [];
590
+ readonly inputs: readonly ["descriptor", "queueSnapshot", "visibleSnapshot"];
591
+ readonly events: readonly ["onAction", "onDismiss"];
592
+ readonly configuration: {
593
+ readonly priority: readonly ["normal", "high"];
594
+ readonly duplicatePolicy: readonly ["update", "ignore"];
595
+ readonly timerUpdatePolicy: readonly ["preserve", "restart"];
596
+ readonly overflowPolicy: readonly ["discard-oldest", "discard-newest"];
597
+ };
598
+ readonly defaults: {
599
+ readonly durationMs: 5000;
600
+ readonly minimumDurationMs: 5000;
601
+ readonly priority: "normal";
602
+ readonly dismissOnAction: true;
603
+ readonly maxVisible: 1;
604
+ readonly maxQueued: 20;
605
+ readonly duplicatePolicy: "update";
606
+ readonly timerUpdatePolicy: "preserve";
607
+ readonly overflowPolicy: "discard-oldest";
608
+ };
609
+ readonly stateAxes: {
610
+ readonly value: readonly ["open"];
611
+ readonly content: readonly ["idle"];
612
+ };
613
+ readonly web: {
614
+ readonly roles: readonly ["region", "status", "alert", "button"];
615
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "Escape", "F8"];
616
+ readonly focus: "native";
617
+ readonly dismiss: readonly ["timeout", "action", "close-action", "escape", "swipe", "programmatic"];
618
+ };
619
+ readonly native: {
620
+ readonly roles: readonly ["alert", "button"];
621
+ readonly states: readonly [];
622
+ readonly actions: readonly ["announce", "activate", "dismiss"];
623
+ readonly dismiss: readonly ["timeout", "action", "close-action", "swipe", "programmatic"];
624
+ };
625
+ readonly scenarios: readonly ["stable-id-duplicate-updates-in-place-without-reordering", "bounded-queue-promotes-items-in-fifo-order", "queued-time-never-consumes-auto-dismiss-duration", "visible-timer-pauses-for-pointer-focus-window-and-gesture", "actionable-toast-is-persistent-unless-duration-is-explicit", "auto-dismiss-duration-is-never-shorter-than-five-seconds", "action-and-dismiss-callbacks-run-exactly-once", "programmatic-close-reports-its-own-dismiss-reason", "normal-and-high-announcements-use-the-visible-copy-or-explicit-override", "tone-is-always-paired-with-a-non-color-mark", "web-hotkey-focuses-the-labelled-viewport-and-last-close-restores-focus", "exit-completes-once-with-and-without-reduced-motion", "provider-teardown-interrupts-every-session-without-leaking-a-timer"];
626
+ };
627
+ readonly loadMore: {
628
+ readonly controlled: readonly [];
629
+ readonly inputs: readonly ["state", "labels"];
630
+ readonly events: readonly ["onLoadMore"];
631
+ readonly configuration: {
632
+ readonly mode: readonly ["automatic", "manual"];
633
+ };
634
+ readonly defaults: {
635
+ readonly mode: "automatic";
636
+ };
637
+ readonly stateAxes: {
638
+ readonly availability: readonly ["enabled", "busy"];
639
+ readonly content: readonly ["idle", "loadingMore", "error", "complete"];
640
+ };
641
+ readonly web: {
642
+ readonly roles: readonly ["status", "alert", "button"];
643
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
644
+ readonly focus: "native";
645
+ };
646
+ readonly native: {
647
+ readonly roles: readonly ["progressbar", "alert", "button"];
648
+ readonly states: readonly ["busy", "disabled"];
649
+ readonly actions: readonly ["activate"];
650
+ };
651
+ readonly scenarios: readonly ["existing-items-remain-mounted-in-every-footer-state", "automatic-viewport-request-has-an-accessible-manual-fallback", "one-request-is-in-flight-per-controller", "same-request-key-is-never-issued-twice-concurrently", "loading-and-complete-states-block-new-requests", "error-state-retries-only-with-retry-reason", "loading-status-and-error-alert-announce-once", "retry-and-manual-targets-are-at-least-forty-four-units"];
652
+ };
653
+ readonly tooltip: {
654
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange"];
655
+ readonly inputs: readonly ["content"];
656
+ readonly configuration: {
657
+ readonly placement: readonly ["top", "bottom", "start", "end"];
658
+ readonly align: readonly ["start", "center", "end"];
659
+ };
660
+ readonly defaults: {
661
+ readonly pointerOpenDelayMs: 500;
662
+ readonly focusOpenDelayMs: 0;
663
+ readonly skipDelayMs: 300;
664
+ readonly hoverable: true;
665
+ readonly touchHover: false;
666
+ readonly oneVisiblePerProvider: true;
667
+ };
668
+ readonly stateAxes: {
669
+ readonly interaction: readonly ["idle", "hover", "focusVisible"];
670
+ readonly value: readonly ["open"];
671
+ };
672
+ readonly web: {
673
+ readonly roles: readonly ["tooltip"];
674
+ readonly keyboard: readonly ["Tab", "Escape"];
675
+ readonly focus: "none";
676
+ readonly dismiss: readonly ["escape", "blur"];
677
+ };
678
+ readonly native: {
679
+ readonly roles: readonly [];
680
+ readonly states: readonly [];
681
+ readonly actions: readonly [];
682
+ };
683
+ readonly scenarios: readonly ["plain-localized-copy-never-contains-interaction", "keyboard-focus-opens-immediately-and-pointer-respects-delay", "recent-sibling-tooltip-uses-skip-delay", "one-tooltip-is-visible-per-provider", "trigger-content-hover-and-pointer-corridor-keep-open", "escape-dismisses-and-suppresses-reopen-until-input-reset", "blur-or-pointer-leave-closes-only-after-all-active-inputs-end", "trigger-activation-closes-without-cancelling-trigger-action", "trigger-keeps-focus-and-tooltip-has-no-tab-stop", "existing-aria-describedby-is-preserved", "touch-pointer-hover-is-ignored", "controlled-close-rejection-never-exposes-two-tooltips", "timer-and-global-listener-cleanup-on-unmount", "reduced-motion-exit-completes-exactly-once"];
684
+ };
685
+ readonly breadcrumb: {
686
+ readonly controlled: readonly [];
687
+ readonly inputs: readonly ["items"];
688
+ readonly stateAxes: {};
689
+ readonly web: {
690
+ readonly roles: readonly ["navigation", "list", "listitem", "link"];
691
+ readonly keyboard: readonly ["Tab", "Enter"];
692
+ readonly focus: "native";
693
+ };
694
+ readonly native: {
695
+ readonly roles: readonly [];
696
+ readonly states: readonly [];
697
+ readonly actions: readonly [];
698
+ };
699
+ readonly scenarios: readonly ["only-the-last-item-is-current-and-has-no-destination", "every-ancestor-item-reuses-the-link-destination-contract", "current-item-is-marked-aria-current-page-and-is-not-a-tab-stop", "separators-are-decorative-and-excluded-from-the-accessibility-tree", "duplicate-or-empty-item-identity-is-rejected-before-render", "no-automatic-truncation-collapses-items"];
700
+ };
701
+ readonly calendar: {
702
+ readonly controlled: readonly ["selectedDate", "defaultSelectedDate", "onSelectionChange", "focusedMonth", "defaultFocusedMonth", "onFocusedMonthChange"];
703
+ readonly inputs: readonly ["grid", "monthLabel"];
704
+ readonly stateAxes: {
705
+ readonly availability: readonly ["enabled", "disabled"];
706
+ readonly value: readonly ["selected"];
707
+ };
708
+ readonly web: {
709
+ readonly roles: readonly ["grid", "row", "gridcell", "button"];
710
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"];
711
+ readonly focus: "roving";
712
+ };
713
+ readonly native: {
714
+ readonly roles: readonly ["button"];
715
+ readonly states: readonly ["disabled", "selected"];
716
+ readonly actions: readonly ["activate"];
717
+ };
718
+ readonly scenarios: readonly ["today-and-selected-are-independent-and-both-non-color-marked", "disabled-dates-remain-focusable-but-never-activate", "arrow-keys-move-by-day-and-week-inside-the-visible-month-page", "home-and-end-move-to-the-first-and-last-dated-cell-of-the-focused-row", "moving-past-the-visible-grid-edge-requests-a-month-change-instead-of-wrapping", "filler-cells-carry-no-accessible-name-and-are-hidden-from-assistive-tech", "every-dated-cell-accessible-name-is-composed-by-the-product", "changing-the-focused-month-never-changes-or-clears-the-selection", "range-selection-is-not-part-of-the-contract"];
719
+ };
720
+ readonly carousel: {
721
+ readonly controlled: readonly ["currentKey", "defaultCurrentKey", "onCurrentKeyChange"];
722
+ readonly inputs: readonly ["autoplay", "reducedMotion", "dragged"];
723
+ readonly defaults: {
724
+ readonly autoplay: false;
725
+ };
726
+ readonly stateAxes: {
727
+ readonly interaction: readonly ["idle", "dragged"];
728
+ readonly value: readonly ["selected"];
729
+ };
730
+ readonly web: {
731
+ readonly roles: readonly ["region", "group"];
732
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "ArrowLeft", "ArrowRight"];
733
+ readonly focus: "roving";
734
+ };
735
+ readonly native: {
736
+ readonly roles: readonly ["adjustable"];
737
+ readonly states: readonly ["selected"];
738
+ readonly actions: readonly ["increment", "decrement"];
739
+ };
740
+ readonly scenarios: readonly ["current-position-is-announced-with-a-readable-name-not-dots-alone", "inactive-slide-content-is-excluded-from-focus-and-the-accessibility-tree", "previous-next-and-dot-controls-stay-in-tab-order-regardless-of-current-slide", "arrow-keys-move-one-slide-on-web-swipe-moves-one-slide-on-native", "boundary-slides-clamp-instead-of-wrapping-because-loop-is-out-of-scope", "autoplay-is-opt-in-and-off-by-default", "autoplay-never-runs-when-reduced-motion-is-active", "autoplay-pauses-on-hover-focus-or-drag-and-does-not-announce-automatic-transitions"];
741
+ };
742
+ readonly commandPalette: {
743
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange", "inputValue", "defaultInputValue", "onInputValueChange"];
744
+ readonly inputs: readonly ["queryValue", "resultQuery", "asyncState", "accessibilityLabel", "searchPlaceholder"];
745
+ readonly events: readonly ["onActivate", "onActivateAfterDismiss"];
746
+ readonly stateAxes: {
747
+ readonly value: readonly ["open"];
748
+ readonly content: readonly ["idle", "loading", "loadingMore", "empty", "error"];
749
+ };
750
+ readonly web: {
751
+ readonly roles: readonly ["dialog", "listbox", "option"];
752
+ readonly keyboard: readonly ["Tab", "Enter", "Escape", "ArrowUp", "ArrowDown"];
753
+ readonly focus: "trap";
754
+ readonly dismiss: readonly ["escape", "outside", "action"];
755
+ };
756
+ readonly native: {
757
+ readonly roles: readonly [];
758
+ readonly states: readonly [];
759
+ readonly actions: readonly [];
760
+ };
761
+ readonly scenarios: readonly ["activating-a-result-always-closes-the-palette-regardless-of-dismiss-policy", "escape-and-outside-close-without-running-any-command", "sections-merge-recents-static-commands-and-search-results-without-a-new-data-model", "keyboard-navigation-and-typeahead-reuse-the-shared-collection-helpers-unchanged", "local-vs-external-filtering-reuses-comboboxcollectionstate-staleness-guard-unchanged", "empty-result-state-is-announced-once-not-per-section", "no-global-shortcut-binding-is-owned-here-the-product-decides-the-trigger-key", "activate-after-dismiss-lets-a-command-open-the-next-overlay-only-once-exit-completes"];
762
+ };
763
+ readonly floatingActionButton: {
764
+ readonly controlled: readonly [];
765
+ readonly inputs: readonly ["label", "icon", "layoutMode", "scrollSignal", "safeAreaInset"];
766
+ readonly events: readonly ["onPress"];
767
+ readonly stateAxes: {
768
+ readonly interaction: readonly ["idle", "hover", "pressed", "focusVisible"];
769
+ };
770
+ readonly web: {
771
+ readonly roles: readonly ["button"];
772
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
773
+ readonly focus: "native";
774
+ };
775
+ readonly native: {
776
+ readonly roles: readonly ["button"];
777
+ readonly states: readonly [];
778
+ readonly actions: readonly ["activate"];
779
+ };
780
+ readonly scenarios: readonly ["collapses-on-scroll-away-from-start-without-losing-the-44-unit-target", "expands-on-scroll-toward-start", "idle-scroll-signal-does-not-change-the-current-mode", "accessible-name-is-the-full-label-in-both-layout-modes", "content-clearance-accounts-for-the-safe-area-inset-additively", "root-sits-after-scrollable-content-in-reading-and-tab-order", "reduced-motion-crossfades-icon-and-label-without-a-shape-tween"];
781
+ };
782
+ readonly transferList: {
783
+ readonly controlled: readonly ["targetKeys", "defaultTargetKeys", "onTargetKeysChange"];
784
+ readonly inputs: readonly ["items"];
785
+ readonly events: readonly ["onMove"];
786
+ readonly stateAxes: {
787
+ readonly availability: readonly ["enabled", "disabled"];
788
+ readonly value: readonly ["empty", "filled", "selected", "mixed"];
789
+ };
790
+ readonly web: {
791
+ readonly roles: readonly ["group", "listbox", "option", "checkbox", "button"];
792
+ readonly keyboard: readonly ["Tab", "Space", "Enter", "ArrowUp", "ArrowDown", "Home", "End"];
793
+ readonly focus: "roving";
794
+ };
795
+ readonly native: {
796
+ readonly roles: readonly ["list", "checkbox", "button"];
797
+ readonly states: readonly ["disabled", "selected", "checked"];
798
+ readonly actions: readonly ["toggle", "toggleSelectAll", "moveSelection", "moveItem"];
799
+ };
800
+ readonly scenarios: readonly ["moving-is-reachable-entirely-by-keyboard-select-with-space-then-activate-the-move-button", "moving-a-single-focused-row-does-not-require-first-opening-multi-select", "focus-after-a-move-lands-on-the-item-that-slid-into-the-removed-rows-position", "focus-after-emptying-a-panel-falls-back-to-its-empty-state-never-lost-to-the-document", "every-move-emits-which-ids-moved-so-the-product-can-announce-a-formatted-sentence", "disabled-items-are-never-selectable-and-never-move", "moved-items-are-cleared-from-the-origin-panels-selection-and-left-unselected-at-the-destination", "select-all-in-a-panel-excludes-disabled-items-from-both-the-denominator-and-the-count", "an-item-with-nothing-selected-in-its-panel-still-supports-direct-single-item-move", "search-and-pagination-inside-a-panel-are-product-composition-not-this-contract"];
801
+ };
802
+ readonly dataTable: {
803
+ readonly controlled: readonly ["selection"];
804
+ readonly inputs: readonly ["columns", "rows", "sortState", "asyncState"];
805
+ readonly events: readonly ["onSortChange"];
806
+ readonly configuration: {
807
+ readonly sortCycle: readonly ["two-state", "three-state"];
808
+ };
809
+ readonly defaults: {
810
+ readonly sortCycle: "three-state";
811
+ };
812
+ readonly stateAxes: {
813
+ readonly value: readonly ["selected"];
814
+ readonly content: readonly ["idle", "loading", "loadingMore", "empty", "error"];
815
+ };
816
+ readonly web: {
817
+ readonly roles: readonly ["table", "row", "columnheader", "cell", "button", "checkbox", "radio"];
818
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
819
+ readonly focus: "native";
820
+ };
821
+ readonly native: {
822
+ readonly roles: readonly [];
823
+ readonly states: readonly [];
824
+ readonly actions: readonly [];
825
+ };
826
+ readonly scenarios: readonly ["row-selection-reuses-the-shared-collection-selection-model-unchanged", "select-all-reuses-the-shared-tri-state-checkbox-value", "async-state-reuses-the-shared-collection-async-state-unchanged", "sortable-header-is-a-button-inside-the-columnheader-not-the-header-itself", "sort-direction-values-pass-through-to-aria-sort-without-translation", "disabled-rows-are-excluded-from-select-all-accounting", "pagination-or-load-more-is-composed-beneath-the-table-not-owned-by-it", "row-expansion-is-not-owned-here-compose-the-disclosure-group-contract-per-row", "a-data-cell-exposes-at-most-one-focusable-control", "no-roving-tabindex-grid-navigation-is-implied"];
827
+ };
828
+ readonly tour: {
829
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange", "currentStepId", "defaultCurrentStepId", "onStepChange"];
830
+ readonly inputs: readonly ["steps", "labels", "anchorId"];
831
+ readonly events: readonly ["onClose"];
832
+ readonly stateAxes: {
833
+ readonly value: readonly ["open", "currentStep"];
834
+ };
835
+ readonly web: {
836
+ readonly roles: readonly ["dialog"];
837
+ readonly keyboard: readonly ["Tab", "Enter", "Escape", "ArrowLeft", "ArrowRight"];
838
+ readonly focus: "trap";
839
+ readonly dismiss: readonly ["escape", "close-action", "programmatic"];
840
+ };
841
+ readonly native: {
842
+ readonly roles: readonly [];
843
+ readonly states: readonly [];
844
+ readonly actions: readonly [];
845
+ };
846
+ readonly scenarios: readonly ["focus-moves-to-the-step-card-on-every-step-change-not-the-anchor", "background-is-inert-while-a-tour-is-open", "escape-and-skip-always-exit-regardless-of-step", "outside-pointer-does-not-dismiss", "next-on-the-last-step-closes-with-reason-complete", "previous-on-the-first-step-is-a-no-op", "controlled-owner-programmatic-close-always-wins", "unmount-or-route-change-settles-as-interrupted-exactly-once", "reduced-motion-crossfades-the-card-without-traveling-between-anchors"];
847
+ };
848
+ readonly layout: {
849
+ readonly controlled: readonly [];
850
+ readonly inputs: readonly ["hasHeader", "hasFooter", "sidebar", "skipLinkLabel"];
851
+ readonly configuration: {
852
+ readonly "sidebar.mode": readonly ["persistent", "overlay"];
853
+ readonly "sidebar.role": readonly ["navigation", "complementary"];
854
+ };
855
+ readonly stateAxes: {};
856
+ readonly web: {
857
+ readonly roles: readonly ["banner", "navigation", "complementary", "main", "contentinfo"];
858
+ readonly keyboard: readonly ["Tab"];
859
+ readonly focus: "native";
860
+ };
861
+ readonly native: {
862
+ readonly roles: readonly [];
863
+ readonly states: readonly [];
864
+ readonly actions: readonly [];
865
+ };
866
+ readonly scenarios: readonly ["exactly-one-main-landmark-exists-per-layout", "web-skip-link-is-required-whenever-a-header-or-sidebar-precedes-main", "sidebar-role-navigation-or-complementary-is-chosen-independent-of-persistent-or-overlay-mode", "overlay-sidebar-reuses-sidepanel-open-state-and-dismiss-policy-unchanged", "header-and-footer-content-is-not-owned-here-compose-topbar-and-bottomnavigation", "skip-link-is-visually-hidden-until-keyboard-focus-reaches-it", "native-has-no-landmark-role-equivalent-translation-relies-on-order-and-accessibilityviewismodal"];
867
+ };
868
+ readonly otpField: {
869
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
870
+ readonly stateAxes: {
871
+ readonly availability: readonly ["enabled", "disabled", "readOnly", "busy"];
872
+ readonly value: readonly ["empty", "filled"];
873
+ readonly validation: readonly ["valid", "invalid"];
874
+ };
875
+ readonly web: {
876
+ readonly roles: readonly ["textbox"];
877
+ readonly keyboard: readonly ["Tab", "ArrowLeft", "ArrowRight", "Home", "End"];
878
+ readonly focus: "native";
879
+ };
880
+ readonly native: {
881
+ readonly roles: readonly ["text"];
882
+ readonly states: readonly ["disabled", "busy"];
883
+ readonly actions: readonly ["focus", "setText"];
884
+ };
885
+ readonly scenarios: readonly ["one-accessible-name-and-value-for-the-whole-field-never-per-slot-announcement", "one-tab-stop-native-text-editing-owns-typing-backspacing-and-paste", "paste-anywhere-in-the-value-is-sanitized-to-digits-and-clamped-to-length", "non-digit-characters-are-stripped-not-rejected-outright", "resolveOtpFieldValue-truncates-typed-or-pasted-overflow-instead-of-throwing", "a-too-long-committed-descriptor-still-throws-as-malformed-state", "alphanumeric-otp-is-out-of-scope-until-a-real-product-need-exists"];
886
+ };
887
+ readonly passwordField: {
888
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange", "revealed", "defaultRevealed", "onRevealedChange"];
889
+ readonly inputs: readonly ["autofillHint"];
890
+ readonly stateAxes: {
891
+ readonly availability: readonly ["enabled", "disabled", "readOnly"];
892
+ readonly value: readonly ["empty", "filled"];
893
+ readonly validation: readonly ["valid", "invalid"];
894
+ };
895
+ readonly web: {
896
+ readonly roles: readonly ["textbox", "button"];
897
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
898
+ readonly focus: "native";
899
+ };
900
+ readonly native: {
901
+ readonly roles: readonly ["text", "button"];
902
+ readonly states: readonly ["disabled"];
903
+ readonly actions: readonly ["focus", "setText", "toggleReveal"];
904
+ };
905
+ readonly scenarios: readonly ["toggle-never-changes-the-controlled-value", "toggle-and-value-are-independent-controlled-axes", "toggle-accessible-name-describes-the-action-not-the-current-state", "toggle-icon-mirrors-the-same-action-not-state-judgment", "toggle-is-its-own-tab-stop-after-the-field-like-searchfields-clear-button", "autofill-hint-is-a-required-product-decision-not-a-renderer-guess", "strength-meter-is-out-of-scope-product-policy"];
906
+ };
907
+ readonly splitter: {
908
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
909
+ readonly inputs: readonly ["min", "max", "step", "label", "valueText"];
910
+ readonly stateAxes: {
911
+ readonly interaction: readonly ["idle", "hover", "focusVisible", "pressed", "dragged"];
912
+ readonly availability: readonly ["enabled", "disabled"];
913
+ };
914
+ readonly web: {
915
+ readonly roles: readonly ["separator"];
916
+ readonly keyboard: readonly ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End"];
917
+ readonly focus: "native";
918
+ };
919
+ readonly native: {
920
+ readonly roles: readonly [];
921
+ readonly states: readonly [];
922
+ readonly actions: readonly [];
923
+ };
924
+ readonly scenarios: readonly ["separator-role-carries-aria-valuenow-min-max-and-optional-valuetext", "separator-orientation-is-perpendicular-to-the-splitter-axis-not-equal-to-it", "keyboard-arrow-keys-step-like-numberfield-home-and-end-jump-to-the-boundary", "drag-and-keyboard-resize-produce-the-same-snapped-value", "reuses-number-field-range-judgment-instead-of-a-new-numeric-domain", "no-collapse-to-hidden-pane-or-multi-separator-layout-in-this-contract"];
925
+ };
926
+ readonly datePicker: {
927
+ readonly controlled: readonly ["selectedDate", "defaultSelectedDate", "onSelectionChange", "open", "defaultOpen", "onOpenChange"];
928
+ readonly inputs: readonly ["grid", "displayValue", "focusedMonth", "defaultFocusedMonth"];
929
+ readonly stateAxes: {
930
+ readonly availability: readonly ["enabled", "disabled", "readOnly", "busy"];
931
+ readonly value: readonly ["empty", "selected", "open"];
932
+ readonly validation: readonly ["valid", "invalid"];
933
+ };
934
+ readonly web: {
935
+ readonly roles: readonly ["button", "dialog", "grid", "row", "gridcell"];
936
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "Escape", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"];
937
+ readonly focus: "roving";
938
+ readonly dismiss: readonly ["selection", "escape", "outside", "blur"];
939
+ };
940
+ readonly native: {
941
+ readonly roles: readonly ["button", "dialog"];
942
+ readonly states: readonly ["disabled", "expanded"];
943
+ readonly actions: readonly ["activate", "dismiss"];
944
+ readonly dismiss: readonly ["selection", "back", "outside"];
945
+ };
946
+ readonly scenarios: readonly ["visible-label-or-accessibility-label-names-trigger", "trigger-shows-the-product-formatted-display-value-or-placeholder", "popover-and-sheet-content-reuse-the-calendar-grid-contract-unchanged", "activating-an-enabled-date-commits-selection-and-closes", "disabled-dates-remain-focusable-but-never-commit-or-close", "clear-commits-null-and-closes-without-reopening", "escape-closes-without-commit-and-restores-trigger-focus", "outside-press-closes-without-commit", "controlled-owner-may-defer-a-selection-close-request", "changing-the-focused-month-never-changes-or-clears-the-selection", "range-selection-is-not-part-of-the-contract"];
947
+ };
948
+ readonly sidePanel: {
949
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange", "dismissPolicy"];
950
+ readonly defaults: {
951
+ readonly modal: true;
952
+ readonly dismissible: true;
953
+ readonly dismissWhileBusy: false;
954
+ readonly escapeDismiss: true;
955
+ readonly outsideDismiss: true;
956
+ };
957
+ readonly configuration: {
958
+ readonly edge: readonly ["start", "end"];
959
+ readonly modal: readonly ["true", "false"];
960
+ };
961
+ readonly stateAxes: {
962
+ readonly availability: readonly ["enabled", "busy"];
963
+ readonly value: readonly ["open"];
964
+ };
965
+ readonly web: {
966
+ readonly roles: readonly ["dialog"];
967
+ readonly keyboard: readonly ["Tab", "Escape"];
968
+ readonly focus: "trap";
969
+ readonly dismiss: readonly ["escape", "outside"];
970
+ };
971
+ readonly native: {
972
+ readonly roles: readonly [];
973
+ readonly states: readonly [];
974
+ readonly actions: readonly [];
975
+ };
976
+ readonly scenarios: readonly ["edge-is-a-logical-start-or-end-direction-never-left-or-right", "modal-panels-trap-focus-and-lock-scroll-non-modal-panels-do-neither", "non-modal-panels-never-expose-outside-dismiss-the-type-forbids-it", "single-dismiss-callback-reports-the-concrete-reason", "busy-blocks-user-dismiss-programmatic-owner-close-is-always-allowed", "escape-dismisses-in-both-modal-and-non-modal-panels", "no-back-or-swipe-dismiss-reason-exists-on-this-web-only-platform", "reduced-motion-still-completes-the-exit-callback-once"];
977
+ };
978
+ readonly filePicker: {
979
+ readonly controlled: readonly [];
980
+ readonly inputs: readonly ["descriptor", "existingCount"];
981
+ readonly events: readonly ["onSelect"];
982
+ readonly configuration: {
983
+ readonly mode: readonly ["single", "multiple"];
984
+ };
985
+ readonly defaults: {
986
+ readonly mode: "single";
987
+ };
988
+ readonly stateAxes: {
989
+ readonly availability: readonly ["enabled", "disabled"];
990
+ readonly interaction: readonly ["idle", "hover", "focusVisible", "pressed", "dragged"];
991
+ };
992
+ readonly web: {
993
+ readonly roles: readonly ["button"];
994
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
995
+ readonly focus: "native";
996
+ };
997
+ readonly native: {
998
+ readonly roles: readonly ["button"];
999
+ readonly states: readonly ["disabled"];
1000
+ readonly actions: readonly ["activate"];
1001
+ };
1002
+ readonly scenarios: readonly ["selecting-files-never-mutates-already-accepted-items", "rejected-files-report-a-reason-without-blocking-the-rest-of-the-batch", "type-and-size-are-judged-at-selection-time-not-upload-time", "count-cap-accounts-for-already-selected-items-across-repeated-picks", "single-mode-behaves-as-an-implicit-one-file-count-cap", "web-dropzone-is-always-paired-with-a-reachable-button-trigger", "native-never-exposes-a-dropzone-trigger", "rejection-is-announced-without-relying-on-color-alone"];
1003
+ };
1004
+ readonly pagination: {
1005
+ readonly controlled: readonly ["currentPage", "onPageChange"];
1006
+ readonly inputs: readonly ["totalCount", "totalPages", "pageSize", "labels"];
1007
+ readonly configuration: {
1008
+ readonly window: readonly ["siblingCount", "boundaryCount"];
1009
+ };
1010
+ readonly stateAxes: {};
1011
+ readonly web: {
1012
+ readonly roles: readonly ["navigation"];
1013
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
1014
+ readonly focus: "native";
1015
+ };
1016
+ readonly native: {
1017
+ readonly roles: readonly [];
1018
+ readonly states: readonly [];
1019
+ readonly actions: readonly [];
1020
+ };
1021
+ readonly scenarios: readonly ["current-page-marked-and-announced-without-a-composed-live-region-spam", "ellipsis-is-decorative-and-excluded-from-the-accessible-tree", "previous-disabled-on-first-page-next-disabled-on-last-page", "single-page-renders-no-ellipsis-and-no-disabled-dead-buttons", "page-window-never-produces-two-consecutive-ellipses", "nav-landmark-present-with-a-localized-accessible-name"];
1022
+ };
1023
+ readonly popover: {
1024
+ readonly controlled: readonly ["open", "defaultOpen", "onOpenChange"];
1025
+ readonly defaults: {
1026
+ readonly dismissible: true;
1027
+ readonly outsideDismiss: true;
1028
+ readonly escapeDismiss: true;
1029
+ readonly focusOutDismiss: true;
1030
+ };
1031
+ readonly stateAxes: {
1032
+ readonly value: readonly ["open"];
1033
+ };
1034
+ readonly web: {
1035
+ readonly roles: readonly ["dialog"];
1036
+ readonly keyboard: readonly ["Tab", "Escape"];
1037
+ readonly focus: "restore";
1038
+ readonly dismiss: readonly ["escape", "outside"];
1039
+ };
1040
+ readonly native: {
1041
+ readonly roles: readonly [];
1042
+ readonly states: readonly [];
1043
+ readonly actions: readonly [];
1044
+ };
1045
+ readonly scenarios: readonly ["focus-enters-surface-on-open", "escape-closes-and-restores-trigger-focus", "outside-pointer-close-does-not-cancel-the-original-interaction", "tabbing-past-last-focusable-child-closes-without-trapping", "controlled-owner-programmatic-close-always-wins", "close-action-inside-content-closes-exactly-once", "trigger-while-open-does-not-reopen", "one-visible-popover-per-trigger"];
1046
+ };
1047
+ readonly tree: {
1048
+ readonly controlled: readonly ["expandedKeys", "defaultExpandedKeys", "onExpandedKeysChange", "selection", "asyncState"];
1049
+ readonly defaults: {
1050
+ readonly loop: false;
1051
+ };
1052
+ readonly stateAxes: {
1053
+ readonly availability: readonly ["enabled", "disabled"];
1054
+ readonly value: readonly ["selected", "expanded"];
1055
+ readonly content: readonly ["idle", "loading", "loadingMore", "empty", "error"];
1056
+ };
1057
+ readonly web: {
1058
+ readonly roles: readonly ["tree", "treeitem", "group"];
1059
+ readonly keyboard: readonly ["Tab", "Enter", "Space", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "Typeahead"];
1060
+ readonly focus: "roving";
1061
+ };
1062
+ readonly native: {
1063
+ readonly roles: readonly [];
1064
+ readonly states: readonly [];
1065
+ readonly actions: readonly [];
1066
+ };
1067
+ readonly scenarios: readonly ["depth-and-sibling-position-are-announced-not-only-visual-indent", "arrow-expands-or-moves-to-the-first-child-arrow-collapses-or-moves-to-the-parent-respecting-rtl", "up-down-home-end-move-across-visible-nodes-only-collapsed-subtrees-are-skipped", "typeahead-matches-only-currently-visible-nodes", "disabled-gates-selection-only-expand-and-collapse-remain-available", "empty-children-array-is-rejected-a-node-either-omits-children-or-lists-at-least-one", "one-tab-stop-per-node-the-expand-collapse-glyph-is-decorative-not-a-nested-control", "drag-reorder-is-out-of-scope-until-a-real-product-need-exists"];
1068
+ };
1069
+ readonly uploadItem: {
1070
+ readonly controlled: readonly [];
1071
+ readonly inputs: readonly ["descriptor", "labels"];
1072
+ readonly events: readonly ["onCancel", "onRetry"];
1073
+ readonly stateAxes: {
1074
+ readonly content: readonly ["idle", "loading", "complete", "error"];
1075
+ };
1076
+ readonly web: {
1077
+ readonly roles: readonly ["group", "progressbar", "button"];
1078
+ readonly keyboard: readonly ["Tab", "Enter", "Space"];
1079
+ readonly focus: "native";
1080
+ };
1081
+ readonly native: {
1082
+ readonly roles: readonly ["progressbar", "button"];
1083
+ readonly states: readonly ["busy"];
1084
+ readonly actions: readonly ["cancel", "retry"];
1085
+ };
1086
+ readonly scenarios: readonly ["progress-is-announced-as-a-sentence-not-only-a-filled-bar", "cancel-is-reachable-only-while-uploading", "retry-is-reachable-only-while-error", "pending-and-success-expose-no-destructive-or-retry-action", "indeterminate-progress-falls-back-to-a-static-uploading-label", "reuses-the-shared-progress-recipe-instead-of-a-new-bar", "duplicate-ids-in-a-rendered-list-are-rejected"];
1087
+ };
1088
+ readonly form: {
1089
+ readonly controlled: readonly [];
1090
+ readonly inputs: readonly ["status", "formError", "fieldOrder"];
1091
+ readonly events: readonly ["onSubmit"];
1092
+ readonly defaults: {
1093
+ readonly errorAnnouncementPriority: "high";
1094
+ };
1095
+ readonly stateAxes: {
1096
+ readonly availability: readonly ["enabled", "busy"];
1097
+ readonly content: readonly ["idle", "loading", "error"];
1098
+ };
1099
+ readonly web: {
1100
+ readonly roles: readonly ["alert"];
1101
+ readonly keyboard: readonly ["Tab", "Enter"];
1102
+ readonly focus: "native";
1103
+ };
1104
+ readonly native: {
1105
+ readonly roles: readonly ["alert"];
1106
+ readonly states: readonly ["busy"];
1107
+ readonly actions: readonly ["submit"];
1108
+ };
1109
+ readonly scenarios: readonly ["submitting-blocks-every-concurrent-submit-attempt", "each-submit-attempt-settles-its-result-exactly-once", "failed-submit-returns-to-a-resting-state-that-still-allows-retry", "succeeded-submit-remains-resting-and-allows-resubmission", "dispose-during-submit-settles-the-pending-attempt-as-interrupted", "disposed-session-rejects-further-submit-attempts", "form-level-error-never-carries-a-per-field-message", "first-invalid-field-in-render-order-receives-focus-on-submit-failure", "form-level-error-is-announced-when-no-field-target-exists"];
1110
+ };
1111
+ readonly numberField: {
1112
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
1113
+ readonly stateAxes: {
1114
+ readonly availability: readonly ["enabled", "disabled", "readOnly"];
1115
+ readonly value: readonly ["empty", "filled"];
1116
+ readonly validation: readonly ["valid", "invalid"];
1117
+ };
1118
+ readonly web: {
1119
+ readonly roles: readonly ["spinbutton"];
1120
+ readonly keyboard: readonly ["Tab", "ArrowUp", "ArrowDown"];
1121
+ readonly focus: "native";
1122
+ };
1123
+ readonly native: {
1124
+ readonly roles: readonly ["text", "button"];
1125
+ readonly states: readonly ["disabled"];
1126
+ readonly actions: readonly ["focus", "setText", "increment", "decrement"];
1127
+ };
1128
+ readonly scenarios: readonly ["value-and-range-are-independent-controlled-inputs", "stepper-buttons-disable-at-min-and-max", "empty-disables-neither-stepper-direction", "keyboard-arrow-up-down-step-like-the-stepper-buttons", "invalid-is-a-numberfield-only-axis-independent-of-range", "held-repeat-is-not-part-of-the-contract"];
1129
+ };
1130
+ readonly slider: {
1131
+ readonly controlled: readonly ["value", "defaultValue", "onValueChange"];
1132
+ readonly events: readonly ["onValueChangeEnd"];
1133
+ readonly defaults: {
1134
+ readonly pageMultiplier: 10;
1135
+ };
1136
+ readonly stateAxes: {
1137
+ readonly interaction: readonly ["idle", "hover", "focusVisible", "pressed", "dragged"];
1138
+ readonly availability: readonly ["enabled", "disabled"];
1139
+ };
1140
+ readonly web: {
1141
+ readonly roles: readonly ["slider"];
1142
+ readonly keyboard: readonly ["Tab", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End", "PageUp", "PageDown"];
1143
+ readonly focus: "native";
1144
+ };
1145
+ readonly native: {
1146
+ readonly roles: readonly ["adjustable"];
1147
+ readonly states: readonly ["disabled"];
1148
+ readonly actions: readonly ["increment", "decrement"];
1149
+ };
1150
+ readonly scenarios: readonly ["label-then-value-then-range-announcement-order", "arrow-keys-step-by-one-increment", "page-keys-step-by-the-page-multiplier", "home-and-end-jump-to-min-and-max", "rtl-mirrors-the-track-without-reversing-logical-increment-actions", "continuous-change-and-interaction-end-are-separate-events", "non-divisible-ranges-preserve-exact-min-and-max-endpoints", "native-disable-during-drag-finishes-once-and-ignores-later-moves", "value-is-always-present-no-empty-state", "fill-color-is-never-the-only-value-cue", "range-two-handle-selection-is-out-of-scope-until-a-real-product-need-exists"];
1151
+ };
1152
+ };
1153
+ export type BehaviorName = keyof typeof behaviorRegistry;
1154
+ export type CollectionKey = string;
1155
+ export type CollectionItemTone = "neutral" | "danger";
1156
+ export type CollectionItemDescriptor<Key extends CollectionKey = CollectionKey> = Readonly<{
1157
+ id: Key;
1158
+ label: string;
1159
+ textValue: string;
1160
+ description?: string;
1161
+ shortcut?: string;
1162
+ disabled?: boolean;
1163
+ tone?: CollectionItemTone;
1164
+ }>;
1165
+ /** Menu-only extension; danger tone and shortcut do not belong to Select. */
1166
+ export type MenuItemDescriptor<Key extends CollectionKey = CollectionKey> = CollectionItemDescriptor<Key>;
1167
+ type CollectionSectionLabel = Readonly<{
1168
+ label: string;
1169
+ accessibilityLabel?: string;
1170
+ }> | Readonly<{
1171
+ label?: string;
1172
+ accessibilityLabel: string;
1173
+ }>;
1174
+ export type CollectionSectionDescriptor<Key extends CollectionKey = CollectionKey, SectionKey extends CollectionKey = CollectionKey> = Readonly<{
1175
+ id: SectionKey;
1176
+ items: readonly CollectionItemDescriptor<Key>[];
1177
+ }> & CollectionSectionLabel;
1178
+ export type MenuSectionDescriptor<Key extends CollectionKey = CollectionKey, SectionKey extends CollectionKey = CollectionKey> = CollectionSectionDescriptor<Key, SectionKey>;
1179
+ export type NoSelectionModel = Readonly<{
1180
+ mode: "none";
1181
+ }>;
1182
+ export type SingleSelectionModel<Key extends CollectionKey = CollectionKey> = Readonly<{
1183
+ mode: "single";
1184
+ selectedKey: Key | null;
1185
+ defaultSelectedKey?: never;
1186
+ onSelectionChange(key: Key | null): void;
1187
+ disallowEmptySelection?: boolean;
1188
+ }> | Readonly<{
1189
+ mode: "single";
1190
+ selectedKey?: never;
1191
+ defaultSelectedKey?: Key | null;
1192
+ onSelectionChange?: (key: Key | null) => void;
1193
+ disallowEmptySelection?: boolean;
1194
+ }>;
1195
+ export type MultipleSelectionModel<Key extends CollectionKey = CollectionKey> = Readonly<{
1196
+ mode: "multiple";
1197
+ selectedKeys: ReadonlySet<Key>;
1198
+ defaultSelectedKeys?: never;
1199
+ onSelectionChange(keys: ReadonlySet<Key>): void;
1200
+ }> | Readonly<{
1201
+ mode: "multiple";
1202
+ selectedKeys?: never;
1203
+ defaultSelectedKeys?: ReadonlySet<Key>;
1204
+ onSelectionChange?: (keys: ReadonlySet<Key>) => void;
1205
+ }>;
1206
+ export type CollectionSelectionModel<Key extends CollectionKey = CollectionKey> = NoSelectionModel | SingleSelectionModel<Key> | MultipleSelectionModel<Key>;
1207
+ export type AsyncCollectionState = Readonly<{
1208
+ status: "idle";
1209
+ }> | Readonly<{
1210
+ status: "loading";
1211
+ message: string;
1212
+ }> | Readonly<{
1213
+ status: "loadingMore";
1214
+ message: string;
1215
+ }> | Readonly<{
1216
+ status: "empty";
1217
+ message: string;
1218
+ }> | Readonly<{
1219
+ status: "error";
1220
+ message: string;
1221
+ }>;
1222
+ /**
1223
+ * Shared input semantics for future Select/Combobox renderers. Web may render a
1224
+ * popup while Native renders a sheet, but both consume the same stable keys.
1225
+ */
1226
+ export type SelectItemDescriptor<Key extends CollectionKey = CollectionKey> = Omit<CollectionItemDescriptor<Key>, "shortcut" | "tone"> & Readonly<{
1227
+ shortcut?: never;
1228
+ tone?: never;
1229
+ }>;
1230
+ export type ControlledSelectSelection<Key extends CollectionKey = CollectionKey> = Readonly<{
1231
+ selectedKey: Key | null;
1232
+ defaultSelectedKey?: never;
1233
+ onSelectionChange(key: Key | null): void;
1234
+ }>;
1235
+ export type UncontrolledSelectSelection<Key extends CollectionKey = CollectionKey> = Readonly<{
1236
+ selectedKey?: never;
1237
+ defaultSelectedKey?: Key | null;
1238
+ onSelectionChange?: (key: Key | null) => void;
1239
+ }>;
1240
+ export type SelectSelection<Key extends CollectionKey = CollectionKey> = ControlledSelectSelection<Key> | UncontrolledSelectSelection<Key>;
1241
+ export type ControlledComboboxInput = Readonly<{
1242
+ inputValue: string;
1243
+ defaultInputValue?: never;
1244
+ onInputValueChange(value: string): void;
1245
+ }>;
1246
+ export type UncontrolledComboboxInput = Readonly<{
1247
+ inputValue?: never;
1248
+ defaultInputValue?: string;
1249
+ onInputValueChange?: (value: string) => void;
1250
+ }>;
1251
+ export type ComboboxInput = ControlledComboboxInput | UncontrolledComboboxInput;
1252
+ export type ComboboxFiltering = "local" | "external";
1253
+ export type ComboboxCommitReason = "selection" | "clear";
1254
+ //# sourceMappingURL=behaviors.d.ts.map