@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 @@
1
+ {"version":3,"file":"behaviors.js","sourceRoot":"","sources":["../src/behaviors.ts"],"names":[],"mappings":"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","sourcesContent":["import { sheetBehaviorDefaults } from \"./sheet.js\";\nimport { loadMoreBehaviorDefaults } from \"./load-more.js\";\nimport { toastBehaviorDefaults } from \"./toast.js\";\nimport { bottomNavigationBehaviorDefaults } from \"./bottom-navigation.js\";\nimport { tooltipBehaviorDefaults } from \"./tooltip.js\";\n/*\n Batch 2 저작 모듈의 행동 계약. 각 컴포넌트가 자기 모듈에 spec을 두고 레지스트리는\n 경로만 모은다 — 여러 저작자가 병렬로 이 파일을 고치면 서로의 변경을 덮어쓴다\n (`docs/authoring-brief.md`).\n*/\nimport { breadcrumbBehaviorSpec } from \"./breadcrumb.js\";\nimport { calendarBehavior } from \"./calendar.js\";\nimport { carouselBehavior } from \"./carousel.js\";\nimport { commandPaletteBehaviorScenarios } from \"./command-palette.js\";\nimport { floatingActionButtonBehaviorScenarios } from \"./floating-action-button.js\";\nimport { tourBehaviorScenarios } from \"./tour.js\";\nimport { dataTableBehavior } from \"./data-table.js\";\nimport { layoutBehavior } from \"./layout.js\";\nimport { otpFieldBehavior } from \"./otp-field.js\";\nimport { passwordFieldBehavior } from \"./password-field.js\";\nimport { splitterBehavior } from \"./splitter.js\";\nimport { datePickerBehavior } from \"./date-picker.js\";\nimport { sidePanelBehavior } from \"./side-panel.js\";\nimport { filePickerBehavior } from \"./file-picker.js\";\nimport { paginationBehaviorScenarios } from \"./pagination.js\";\nimport { popoverBehaviorDefaults, popoverBehaviorScenarios } from \"./popover.js\";\nimport { treeBehavior } from \"./tree.js\";\nimport { uploadItemBehavior } from \"./upload-item.js\";\nimport { formBehaviorSpec } from \"./form.js\";\nimport { numberFieldBehavior } from \"./number-field.js\";\nimport { sliderBehavior } from \"./slider.js\";\nimport type { DesignSystemDirection } from \"./design-system-provider.js\";\nimport {\n checkboxBehaviorDefaults,\n type CheckboxState,\n} from \"./selection-helpers.js\";\n\nexport {\n checkboxBehaviorDefaults,\n getCheckboxNextState,\n reconcileCheckboxSelection,\n toggleCheckboxSelection,\n type CheckboxState,\n type MixedCheckboxActivation,\n} from \"./selection-helpers.js\";\n\n/** Platform-neutral behavior vocabulary shared by renderer acceptance tests. */\nexport type InteractionState =\n | \"idle\"\n | \"hover\"\n | \"focusVisible\"\n | \"pressed\"\n | \"dragged\";\nexport type AvailabilityState = \"enabled\" | \"disabled\" | \"readOnly\" | \"busy\";\nexport type ValueState =\n | \"empty\"\n | \"filled\"\n | \"checked\"\n | \"mixed\"\n | \"selected\"\n | \"open\"\n | \"expanded\";\nexport type ValidationState = \"valid\" | \"invalid\";\nexport type ContentState =\n | \"idle\"\n | \"loading\"\n | \"loadingMore\"\n | \"empty\"\n | \"error\"\n | \"complete\";\nexport type TabsActivationMode = \"automatic\" | \"manual\";\nexport type TabsMountPolicy = \"active\" | \"visited\" | \"always\";\nexport type TabsPanelMode = \"keyed\" | \"dynamic\";\nexport type TabsOrientation = \"horizontal\" | \"vertical\";\nexport type TabsDirection = DesignSystemDirection;\n\nexport type SelectionOrientation = \"horizontal\" | \"vertical\";\nexport type SelectionDirection = DesignSystemDirection;\n\n/** Stable option anatomy shared by CheckboxGroup and RadioGroup renderers. */\nexport type SelectionItemDescriptor<Key extends string = string> = Readonly<{\n id: Key;\n label: string;\n description?: string;\n disabled?: boolean;\n}>;\n\n/** A group needs either visible copy or an explicit accessible name. */\nexport type SelectionGroupLabel =\n | Readonly<{ label: string; accessibilityLabel?: string }>\n | Readonly<{ label?: never; accessibilityLabel: string }>;\n\nexport type ControlledCheckboxState = Readonly<{\n checked: CheckboxState;\n defaultChecked?: never;\n onCheckedChange(checked: boolean): void;\n}>;\nexport type UncontrolledCheckboxState = Readonly<{\n checked?: never;\n defaultChecked?: CheckboxState;\n onCheckedChange?: (checked: boolean) => void;\n}>;\nexport type CheckboxSelection = ControlledCheckboxState | UncontrolledCheckboxState;\n\nexport type ControlledCheckboxGroupSelection<Key extends string = string> = Readonly<{\n value: ReadonlySet<Key>;\n defaultValue?: never;\n onValueChange(value: ReadonlySet<Key>): void;\n}>;\nexport type UncontrolledCheckboxGroupSelection<Key extends string = string> = Readonly<{\n value?: never;\n defaultValue?: ReadonlySet<Key>;\n onValueChange?: (value: ReadonlySet<Key>) => void;\n}>;\nexport type CheckboxGroupSelection<Key extends string = string> =\n | ControlledCheckboxGroupSelection<Key>\n | UncontrolledCheckboxGroupSelection<Key>;\n\nexport type ControlledRadioGroupSelection<Key extends string = string> = Readonly<{\n value: Key | null;\n defaultValue?: never;\n onValueChange(value: Key): void;\n}>;\nexport type UncontrolledRadioGroupSelection<Key extends string = string> = Readonly<{\n value?: never;\n defaultValue?: Key | null;\n onValueChange?: (value: Key) => void;\n}>;\nexport type RadioGroupSelection<Key extends string = string> =\n | ControlledRadioGroupSelection<Key>\n | UncontrolledRadioGroupSelection<Key>;\n\nexport type SelectionNavigationIntent = \"next\" | \"previous\" | \"first\" | \"last\";\n\n/** Resolves a renderer's required name while rejecting type-valid blank copy. */\nexport function resolveControlAccessibleName(\n label: string | undefined,\n accessibilityLabel: string | undefined,\n controlName = \"Control\",\n): string {\n if (label !== undefined && (typeof label !== \"string\" || !label.trim())) {\n throw new TypeError(`${controlName} label must not be empty`);\n }\n if (\n accessibilityLabel !== undefined &&\n (typeof accessibilityLabel !== \"string\" || !accessibilityLabel.trim())\n ) {\n throw new TypeError(`${controlName} accessibilityLabel must not be empty`);\n }\n const resolved = accessibilityLabel?.trim() || label?.trim();\n if (!resolved) {\n throw new TypeError(`${controlName} needs an accessible name`);\n }\n return resolved;\n}\n\nexport const selectionGroupBehaviorDefaults = {\n orientation: \"vertical\",\n direction: \"ltr\",\n} as const satisfies Readonly<{\n orientation: SelectionOrientation;\n direction: SelectionDirection;\n}>;\n\nexport const radioGroupBehaviorDefaults = {\n ...selectionGroupBehaviorDefaults,\n loop: true,\n} as const satisfies Readonly<{\n orientation: SelectionOrientation;\n direction: SelectionDirection;\n loop: boolean;\n}>;\n\nexport const selectBehaviorDefaults = {\n disallowEmptySelection: false,\n loop: false,\n} as const satisfies Readonly<{\n disallowEmptySelection: boolean;\n loop: boolean;\n}>;\n\nexport const comboboxBehaviorDefaults = {\n filtering: \"local\",\n loop: false,\n} as const satisfies Readonly<{\n filtering: ComboboxFiltering;\n loop: boolean;\n}>;\n\n/** Throws before a renderer can expose ambiguous or unreachable selection state. */\nexport function validateSelectionItems<Key extends string>(\n items: readonly SelectionItemDescriptor<Key>[],\n): void {\n const ids = new Set<Key>();\n for (const item of items) {\n if (typeof item.id !== \"string\" || item.id.trim().length === 0) {\n throw new TypeError(\"Selection item id must not be empty\");\n }\n if (typeof item.label !== \"string\" || item.label.trim().length === 0) {\n throw new TypeError(`Selection item ${item.id} label must not be empty`);\n }\n if (\n item.description !== undefined &&\n (typeof item.description !== \"string\" ||\n item.description.trim().length === 0)\n ) {\n throw new TypeError(\n `Selection item ${item.id} description must not be empty when provided`,\n );\n }\n if (ids.has(item.id)) {\n throw new TypeError(`Duplicate selection item id: ${item.id}`);\n }\n ids.add(item.id);\n }\n}\n\nexport function validateCheckboxSelection<Key extends string>(\n items: readonly SelectionItemDescriptor<Key>[],\n current: ReadonlySet<Key>,\n): void {\n validateSelectionItems(items);\n const knownIds = new Set(items.map((item) => item.id));\n for (const selectedId of current) {\n if (!knownIds.has(selectedId)) {\n throw new RangeError(`Selected checkbox must exist: ${selectedId}`);\n }\n }\n}\n\nexport function resolveInitialRadioValue<Key extends string>(\n items: readonly SelectionItemDescriptor<Key>[],\n requestedValue: Key | null | undefined,\n required = false,\n): Key | null {\n validateSelectionItems(items);\n if (requestedValue != null) {\n if (!items.some((item) => item.id === requestedValue)) {\n throw new RangeError(`Selected radio must exist: ${requestedValue}`);\n }\n return requestedValue;\n }\n return required ? (items.find((item) => !item.disabled)?.id ?? null) : null;\n}\n\nexport function validateRadioSelection<Key extends string>(\n items: readonly SelectionItemDescriptor<Key>[],\n current: Key | null,\n): void {\n validateSelectionItems(items);\n if (current != null && !items.some((item) => item.id === current)) {\n throw new RangeError(`Selected radio must exist: ${current}`);\n }\n}\n\n/** Returns the only enabled radio that may enter the Web tab order. */\nexport function resolveRadioTabStop<Key extends string>(\n items: readonly SelectionItemDescriptor<Key>[],\n selectedValue: Key | null,\n): Key | undefined {\n validateSelectionItems(items);\n const selected = items.find((item) => item.id === selectedValue);\n if (selected && !selected.disabled) return selected.id;\n return items.find((item) => !item.disabled)?.id;\n}\n\n/** Reconciles an uncontrolled radio when its selected item leaves the collection. */\nexport function reconcileRadioSelection<Key extends string>(\n items: readonly SelectionItemDescriptor<Key>[],\n current: Key | null,\n required = false,\n): Key | null {\n validateSelectionItems(items);\n if (current != null && items.some((item) => item.id === current)) return current;\n return required ? (items.find((item) => !item.disabled)?.id ?? null) : null;\n}\n\nexport function getSelectionNavigationIntent(\n key: WebKeyboardKey,\n orientation: SelectionOrientation,\n direction: SelectionDirection,\n): SelectionNavigationIntent | undefined {\n if (key === \"Home\") return \"first\";\n if (key === \"End\") return \"last\";\n if (orientation === \"vertical\") {\n if (key === \"ArrowDown\") return \"next\";\n if (key === \"ArrowUp\") return \"previous\";\n return undefined;\n }\n if (key === \"ArrowRight\") return direction === \"rtl\" ? \"previous\" : \"next\";\n if (key === \"ArrowLeft\") return direction === \"rtl\" ? \"next\" : \"previous\";\n return undefined;\n}\n\nexport function getRadioNavigationTarget<Key extends string>(\n items: readonly SelectionItemDescriptor<Key>[],\n currentId: Key | null | undefined,\n intent: SelectionNavigationIntent,\n loop = true,\n): Key | undefined {\n validateSelectionItems(items);\n const enabled = items.filter((item) => !item.disabled);\n if (enabled.length === 0) return undefined;\n if (intent === \"first\") return enabled[0]?.id;\n if (intent === \"last\") return enabled.at(-1)?.id;\n const currentIndex = enabled.findIndex((item) => item.id === currentId);\n if (currentIndex < 0) return enabled[0]?.id;\n const delta = intent === \"next\" ? 1 : -1;\n const nextIndex = currentIndex + delta;\n if (!loop && (nextIndex < 0 || nextIndex >= enabled.length)) return currentId ?? enabled[0]?.id;\n return enabled[(nextIndex + enabled.length) % enabled.length]?.id;\n}\n\n/** Platform-neutral item anatomy shared by Web and native Tabs renderers. */\nexport type TabDescriptor<Key extends string = string> = Readonly<{\n id: Key;\n label: string;\n disabled?: boolean;\n}>;\nexport type ControlledTabsSelection<Key extends string = string> = Readonly<{\n value: Key;\n defaultValue?: never;\n onValueChange(value: Key): void;\n}>;\nexport type UncontrolledTabsSelection<Key extends string = string> = Readonly<{\n value?: never;\n defaultValue?: Key;\n onValueChange?: (value: Key) => void;\n}>;\nexport type TabsSelection<Key extends string = string> =\n | ControlledTabsSelection<Key>\n | UncontrolledTabsSelection<Key>;\nexport type TabNavigationIntent = \"next\" | \"previous\" | \"first\" | \"last\";\n\nexport function getTabNavigationIntent(\n key: WebKeyboardKey,\n orientation: TabsOrientation,\n direction: TabsDirection,\n): TabNavigationIntent | undefined {\n if (key === \"Home\") return \"first\";\n if (key === \"End\") return \"last\";\n if (orientation === \"vertical\") {\n if (key === \"ArrowDown\") return \"next\";\n if (key === \"ArrowUp\") return \"previous\";\n return undefined;\n }\n if (key === \"ArrowRight\") return direction === \"rtl\" ? \"previous\" : \"next\";\n if (key === \"ArrowLeft\") return direction === \"rtl\" ? \"next\" : \"previous\";\n return undefined;\n}\n\n/** Validates collection identity and resolves the only safe initial selection. */\nexport function resolveInitialTabValue<Key extends string>(\n items: readonly TabDescriptor<Key>[],\n requestedValue?: Key,\n): Key | undefined {\n const ids = new Set<Key>();\n for (const item of items) {\n if (ids.has(item.id)) {\n throw new TypeError(`Duplicate tab id: ${item.id}`);\n }\n ids.add(item.id);\n }\n if (requestedValue !== undefined) {\n const requested = items.find((item) => item.id === requestedValue);\n if (!requested || requested.disabled) {\n throw new RangeError(`Selected tab must exist and be enabled: ${requestedValue}`);\n }\n return requestedValue;\n }\n return items.find((item) => !item.disabled)?.id;\n}\n\n/** Shared roving-focus math; renderers still own DOM/native focus APIs. */\nexport function getTabNavigationTarget<Key extends string>(\n items: readonly TabDescriptor<Key>[],\n currentId: Key,\n intent: TabNavigationIntent,\n loop = true,\n): Key | undefined {\n const enabled = items.filter((item) => !item.disabled);\n if (enabled.length === 0) return undefined;\n if (intent === \"first\") return enabled[0]?.id;\n if (intent === \"last\") return enabled.at(-1)?.id;\n const currentIndex = enabled.findIndex((item) => item.id === currentId);\n if (currentIndex < 0) return enabled[0]?.id;\n const delta = intent === \"next\" ? 1 : -1;\n const nextIndex = currentIndex + delta;\n if (!loop && (nextIndex < 0 || nextIndex >= enabled.length)) return currentId;\n return enabled[(nextIndex + enabled.length) % enabled.length]?.id;\n}\n\nexport type BehaviorStateAxis =\n | \"interaction\"\n | \"availability\"\n | \"value\"\n | \"validation\"\n | \"content\";\n\nexport type WebKeyboardKey =\n | \"Tab\"\n | \"Enter\"\n | \"Space\"\n | \"Escape\"\n | \"ArrowUp\"\n | \"ArrowDown\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"Home\"\n | \"End\"\n | \"PageUp\"\n | \"PageDown\"\n | \"F8\"\n | \"Typeahead\";\n\nexport type NativeAccessibilityState =\n | \"disabled\"\n | \"selected\"\n | \"checked\"\n | \"busy\"\n | \"expanded\";\n\nexport type BehaviorContract = Readonly<{\n /** Controlled/uncontrolled state triplets only. */\n controlled: readonly string[];\n /** Read-only inputs which do not form a controlled state axis. */\n inputs?: readonly string[];\n /** Emitted events which do not themselves own state. */\n events?: readonly string[];\n configuration?: Readonly<Record<string, readonly string[]>>;\n defaults?: Readonly<Record<string, string | number | boolean>>;\n stateAxes: Readonly<Partial<Record<BehaviorStateAxis, readonly string[]>>>;\n web: Readonly<{\n roles: readonly string[];\n keyboard: readonly WebKeyboardKey[];\n focus:\n | \"native\"\n | \"roving\"\n | \"activeDescendant\"\n | \"trap\"\n | \"restore\"\n | \"none\";\n dismiss?: readonly (\n | \"escape\"\n | \"outside\"\n | \"selection\"\n | \"blur\"\n | \"timeout\"\n | \"action\"\n | \"close-action\"\n | \"swipe\"\n | \"programmatic\"\n )[];\n }>;\n native: Readonly<{\n roles: readonly string[];\n states: readonly NativeAccessibilityState[];\n actions: readonly string[];\n dismiss?: readonly (\n | \"back\"\n | \"swipe\"\n | \"outside\"\n | \"selection\"\n | \"timeout\"\n | \"action\"\n | \"close-action\"\n | \"programmatic\"\n )[];\n }>;\n scenarios: readonly string[];\n}>;\n\n/** Safe behavior defaults: automatic activation is opt-in for instant panels. */\nexport const tabsBehaviorDefaults = {\n activationMode: \"manual\",\n mountPolicy: \"active\",\n panelMode: \"keyed\",\n orientation: \"horizontal\",\n direction: \"ltr\",\n loop: true,\n} as const satisfies Readonly<{\n activationMode: TabsActivationMode;\n mountPolicy: TabsMountPolicy;\n panelMode: TabsPanelMode;\n orientation: TabsOrientation;\n direction: TabsDirection;\n loop: boolean;\n}>;\n\n/**\n * Behavior is data, not a React implementation. Web/RN renderers can use any\n * suitable primitive while running the same scenarios and exposing the same\n * controlled state names.\n */\nexport const behaviorRegistry = {\n link: {\n controlled: [],\n inputs: [\"destination\", \"label\"],\n stateAxes: {\n interaction: [\"idle\", \"hover\", \"focusVisible\", \"pressed\"],\n },\n web: {\n roles: [\"link\"],\n keyboard: [\"Tab\", \"Enter\"],\n focus: \"native\",\n },\n native: {\n roles: [\"link\"],\n states: [],\n actions: [\"activate\"],\n },\n scenarios: [\n \"href-is-the-destination-source-of-truth\",\n \"web-renders-a-real-anchor-and-preserves-modifier-context-navigation\",\n \"native-internal-destination-uses-router-link-semantics\",\n \"native-external-destination-uses-platform-linking-and-reports-failure\",\n \"link-never-exposes-disabled-action-or-visited-application-state\",\n \"download-remains-a-separate-platform-workflow\",\n \"visible-label-owns-one-accessible-name\",\n \"leading-and-trailing-icons-are-decorative-semantic-icons\",\n \"logical-icon-direction-follows-rtl\",\n \"inline-link-has-a-persistent-non-color-cue\",\n \"standalone-link-target-is-at-least-forty-four-units\",\n \"destination-link-never-contains-another-interactive-descendant\",\n ],\n },\n field: {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\"],\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\"],\n validation: [\"valid\", \"invalid\"],\n content: [\"idle\", \"loading\", \"error\"],\n },\n web: { roles: [\"textbox\"], keyboard: [\"Tab\"], focus: \"native\" },\n native: { roles: [\"text\"], states: [\"disabled\"], actions: [\"focus\", \"setText\"] },\n scenarios: [\"label-description-error-linkage\", \"invalid-plus-focus\", \"disabled-suppresses-edit\"],\n },\n searchField: {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\", \"onClear\"],\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"busy\"],\n value: [\"empty\", \"filled\"],\n validation: [\"valid\", \"invalid\"],\n content: [\"idle\", \"loading\", \"error\"],\n },\n web: { roles: [\"searchbox\", \"button\"], keyboard: [\"Tab\", \"Enter\"], focus: \"native\" },\n native: { roles: [\"text\", \"button\"], states: [\"disabled\", \"busy\"], actions: [\"focus\", \"setText\", \"clear\"] },\n scenarios: [\"clear-has-name\", \"empty-hides-clear\", \"invalid-plus-focus\", \"busy-preserves-query\"],\n },\n checkbox: {\n controlled: [\"checked\", \"defaultChecked\", \"onCheckedChange\"],\n configuration: { mixedActivation: [\"check\", \"uncheck\"] },\n defaults: checkboxBehaviorDefaults,\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\"],\n value: [\"checked\", \"mixed\"],\n validation: [\"valid\", \"invalid\"],\n },\n web: { roles: [\"checkbox\"], keyboard: [\"Tab\", \"Space\"], focus: \"native\" },\n native: {\n roles: [\"checkbox\"],\n states: [\"disabled\", \"checked\"],\n actions: [\"activate\"],\n },\n scenarios: [\n \"visible-label-is-accessible-name\",\n \"mixed-is-announced-and-activates-to-default\",\n \"disabled-and-read-only-suppress-change\",\n \"controlled-value-never-mutates-internally\",\n \"required-and-invalid-support-are-linked\",\n ],\n },\n checkboxGroup: {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\"],\n configuration: {\n orientation: [\"horizontal\", \"vertical\"],\n direction: [\"ltr\", \"rtl\"],\n },\n defaults: selectionGroupBehaviorDefaults,\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\"],\n value: [\"checked\"],\n validation: [\"valid\", \"invalid\"],\n },\n web: {\n roles: [\"group\", \"checkbox\"],\n keyboard: [\"Tab\", \"Space\"],\n focus: \"native\",\n },\n native: {\n roles: [\"checkbox\"],\n states: [\"disabled\", \"checked\"],\n actions: [\"activate\"],\n },\n scenarios: [\n \"each-enabled-checkbox-is-a-tab-stop\",\n \"space-toggles-only-focused-checkbox\",\n \"group-label-description-and-error-are-linked\",\n \"disabled-selected-item-is-retained-but-not-activated\",\n \"change-emits-a-fresh-set\",\n \"duplicate-and-unknown-ids-are-rejected\",\n \"uncontrolled-selection-reconciles-collection-mutation\",\n \"required-and-invalid-are-announced\",\n \"no-nested-interactive-descendants\",\n ],\n },\n radioGroup: {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\"],\n configuration: {\n orientation: [\"horizontal\", \"vertical\"],\n direction: [\"ltr\", \"rtl\"],\n loop: [\"true\", \"false\"],\n },\n defaults: radioGroupBehaviorDefaults,\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\"],\n value: [\"checked\", \"selected\"],\n validation: [\"valid\", \"invalid\"],\n },\n web: {\n roles: [\"radiogroup\", \"radio\"],\n keyboard: [\n \"Tab\",\n \"Space\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Home\",\n \"End\",\n ],\n focus: \"roving\",\n },\n native: {\n roles: [\"radio\"],\n states: [\"disabled\", \"checked\"],\n actions: [\"activate\"],\n },\n scenarios: [\n \"at-most-one-selection-and-nullable-initial-value\",\n \"checked-or-first-enabled-is-the-only-tab-stop\",\n \"arrow-focuses-and-selects-while-skipping-disabled\",\n \"orientation-direction-and-loop-control-navigation\",\n \"space-selects-focused-radio\",\n \"group-label-description-and-error-are-linked\",\n \"disabled-selected-item-is-retained-with-enabled-tab-stop\",\n \"required-invalid-and-read-only-are-announced\",\n \"controlled-value-never-mutates-internally\",\n \"duplicate-and-unknown-ids-are-rejected\",\n ],\n },\n switch: {\n controlled: [\"checked\", \"defaultChecked\", \"onCheckedChange\"],\n stateAxes: { availability: [\"enabled\", \"disabled\"], value: [\"checked\"] },\n web: { roles: [\"switch\"], keyboard: [\"Tab\", \"Space\"], focus: \"native\" },\n native: { roles: [\"switch\"], states: [\"disabled\", \"checked\"], actions: [\"activate\"] },\n scenarios: [\"row-and-control-are-one-target\", \"checked-announced\", \"disabled-suppresses-change\"],\n },\n segmentedControl: {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\"],\n stateAxes: { availability: [\"enabled\", \"disabled\"], value: [\"selected\"] },\n web: { roles: [\"radiogroup\", \"radio\"], keyboard: [\"Tab\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"], focus: \"roving\" },\n native: { roles: [\"radio\"], states: [\"disabled\", \"checked\"], actions: [\"activate\"] },\n scenarios: [\"exactly-one-selected\", \"one-tab-stop\", \"arrow-selection\", \"selected-plus-focus\"],\n },\n chip: {\n controlled: [\"selected\", \"onPress\"],\n stateAxes: {\n availability: [\"enabled\", \"disabled\"],\n value: [\"selected\"],\n },\n web: {\n roles: [\"button\", \"radio\", \"checkbox\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\"],\n focus: \"native\",\n },\n native: {\n roles: [\"button\", \"radio\", \"checkbox\"],\n states: [\"disabled\", \"checked\"],\n actions: [\"activate\"],\n },\n scenarios: [\n \"action-never-exposes-selection\",\n \"single-selection-uses-radio-checked\",\n \"multiple-selection-uses-checkbox-checked\",\n \"selected-plus-focus\",\n \"selection-indicator-is-not-color-only\",\n \"single-mode-composes-radio-group-behavior\",\n \"multiple-mode-composes-checkbox-group-behavior\",\n ],\n },\n tabs: {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\"],\n configuration: {\n activationMode: [\"automatic\", \"manual\"],\n mountPolicy: [\"active\", \"visited\", \"always\"],\n panelMode: [\"keyed\", \"dynamic\"],\n orientation: [\"horizontal\", \"vertical\"],\n direction: [\"ltr\", \"rtl\"],\n loop: [\"true\", \"false\"],\n },\n defaults: tabsBehaviorDefaults,\n stateAxes: { availability: [\"enabled\", \"disabled\"], value: [\"selected\"] },\n web: { roles: [\"tablist\", \"tab\", \"tabpanel\"], keyboard: [\"Tab\", \"Enter\", \"Space\", \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"], focus: \"roving\" },\n native: { roles: [\"tab\"], states: [\"disabled\", \"selected\"], actions: [\"activate\"] },\n scenarios: [\n \"tab-controls-panel\",\n \"one-tab-stop\",\n \"disabled-tab-skipped\",\n \"selected-plus-focus\",\n \"automatic-activation-only-for-instant-panels\",\n \"manual-activation-keeps-focus-and-selection-distinct\",\n \"active-mount-removes-inactive-panel\",\n \"always-mount-makes-inactive-panels-inert\",\n \"visited-mount-preserves-visited-panel-state\",\n \"horizontal-arrows-do-not-consume-up-down\",\n \"vertical-arrows-and-aria-orientation\",\n \"web-tablist-has-accessible-name\",\n \"every-tab-controls-an-existing-panel\",\n \"active-panel-labelled-by-selected-tab\",\n \"manual-focus-does-not-relabel-dynamic-panel\",\n \"dynamic-panel-preserves-host-instance\",\n \"dynamic-panel-requires-active-mount\",\n \"panel-enters-tab-order-when-content-has-no-focus-target\",\n \"rtl-navigation-follows-logical-direction\",\n \"first-enabled-tab-is-uncontrolled-default\",\n \"duplicate-and-disabled-selection-are-rejected\",\n \"controlled-selection-never-mutates-internally\",\n \"native-focus-does-not-select-without-activate\",\n \"inactive-mounted-panels-are-hidden-and-inert\",\n \"uncontrolled-selection-reconciles-collection-mutation\",\n ],\n },\n bottomNavigation: {\n controlled: [],\n inputs: [\"items\", \"selectedKey\", \"accessibilityLabel\"],\n events: [\"onActivate\", \"onLongPress\"],\n configuration: {\n direction: [\"ltr\", \"rtl\"],\n keyboardBehavior: [\"hide\", \"remain\"],\n },\n defaults: bottomNavigationBehaviorDefaults,\n stateAxes: {\n interaction: [\"idle\", \"hover\", \"focusVisible\", \"pressed\"],\n availability: [\"enabled\", \"disabled\"],\n value: [\"selected\"],\n },\n web: {\n roles: [\"navigation\", \"list\", \"link\"],\n keyboard: [\"Tab\", \"Enter\"],\n focus: \"native\",\n },\n native: {\n roles: [\"tab\", \"button\"],\n states: [\"disabled\", \"selected\"],\n actions: [\"activate\", \"longpress\"],\n },\n scenarios: [\n \"two-to-five-stable-top-level-destinations\",\n \"router-selected-key-is-read-only-input\",\n \"activation-does-not-select-before-router-commit\",\n \"prevented-or-failed-navigation-keeps-current-selection\",\n \"reselect-is-distinct-from-navigation\",\n \"navigator-preserves-each-destination-state\",\n \"disabled-destination-suppresses-activation\",\n \"visible-label-always-names-a-decorative-icon\",\n \"selected-state-uses-icon-emphasis-and-label-weight-not-color-alone\",\n \"selected-content-and-focus-indicator-remain-simultaneously-visible\",\n \"centered-sibling-action-is-excluded-from-destination-collection\",\n \"badge-zero-is-hidden-and-visible-count-is-bounded\",\n \"badge-subtree-is-hidden-and-item-uses-one-resolved-accessibility-name\",\n \"badge-update-does-not-change-focus-selection-or-live-announce\",\n \"web-uses-a-labelled-navigation-landmark-and-real-links\",\n \"web-current-link-uses-aria-current-page\",\n \"web-preserves-modifier-click-and-does-not-use-tab-roles-or-roving-focus\",\n \"native-emits-tab-press-and-respects-default-prevented-before-navigation\",\n \"native-forwards-tab-long-press\",\n \"native-ios-may-use-button-plus-selected-when-tab-role-is-not-reliably-supported\",\n \"safe-area-padding-is-additive\",\n \"software-keyboard-hides-instead-of-lifting-the-navigation\",\n \"two-hundred-percent-text-wraps-without-fixed-item-height\",\n \"rtl-order-and-badge-anchor-follow-logical-direction\",\n \"targets-are-at-least-forty-four-units\",\n \"reduced-motion-removes-transform-without-changing-state\",\n ],\n },\n disclosureGroup: {\n controlled: [\"expandedKeys\", \"defaultExpandedKeys\", \"onExpandedChange\"],\n stateAxes: { availability: [\"enabled\", \"disabled\"], value: [\"expanded\"] },\n web: { roles: [\"heading\", \"button\", \"region\"], keyboard: [\"Tab\", \"Enter\", \"Space\", \"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"], focus: \"native\" },\n native: { roles: [\"button\"], states: [\"disabled\", \"expanded\"], actions: [\"activate\"] },\n scenarios: [\n \"single-and-multiple-invariants\",\n \"each-enabled-trigger-is-a-tab-stop\",\n \"toggle-keeps-trigger-focus\",\n \"panel-removed-when-collapsed\",\n \"disabled-trigger-suppresses-change\",\n \"reduced-motion\",\n ],\n },\n menu: {\n controlled: [\n \"open\",\n \"defaultOpen\",\n \"onOpenChange\",\n \"onAction\",\n \"onActionAfterDismiss\",\n \"selection\",\n \"asyncState\",\n ],\n stateAxes: { availability: [\"enabled\", \"disabled\"], value: [\"open\", \"selected\"], content: [\"idle\", \"loading\", \"loadingMore\", \"empty\", \"error\"] },\n web: { roles: [\"menu\", \"menuitem\", \"menuitemradio\", \"menuitemcheckbox\"], keyboard: [\"Enter\", \"Space\", \"Escape\", \"ArrowUp\", \"ArrowDown\", \"Home\", \"End\", \"Typeahead\"], focus: \"restore\", dismiss: [\"escape\", \"outside\", \"selection\"] },\n native: { roles: [\"menu\", \"menuitem\"], states: [\"disabled\", \"selected\", \"checked\"], actions: [\"activate\"], dismiss: [\"back\", \"outside\", \"selection\"] },\n scenarios: [\n \"action-and-single-close-after-selection\",\n \"on-action-does-not-depend-on-controlled-close\",\n \"after-dismiss-action-sequences-next-surface\",\n \"multiple-selection-keeps-menu-open\",\n \"disabled-item-skipped\",\n \"escape-or-back-restores-trigger\",\n \"danger-item-not-color-only\",\n \"loading-more-preserves-items-and-selection\",\n ],\n },\n dialog: {\n controlled: [\"open\", \"defaultOpen\", \"onOpenChange\"],\n stateAxes: { availability: [\"enabled\", \"busy\"], value: [\"open\"] },\n web: { roles: [\"dialog\"], keyboard: [\"Tab\", \"Escape\"], focus: \"trap\", dismiss: [\"escape\", \"outside\"] },\n native: { roles: [\"dialog\"], states: [\"busy\"], actions: [\"dismiss\"], dismiss: [\"back\", \"outside\"] },\n scenarios: [\"title-description-linkage\", \"focus-trap-and-restore\", \"modal-isolation\", \"single-dismiss-callback\"],\n },\n alertDialog: {\n controlled: [\"open\", \"defaultOpen\", \"onOpenChange\"],\n stateAxes: { availability: [\"enabled\", \"busy\"], value: [\"open\"], content: [\"idle\", \"loading\", \"error\"] },\n web: { roles: [\"alertdialog\"], keyboard: [\"Tab\", \"Escape\"], focus: \"trap\", dismiss: [\"escape\"] },\n native: { roles: [\"alertdialog\"], states: [\"busy\"], actions: [\"confirm\", \"cancel\"], dismiss: [\"back\"] },\n scenarios: [\n \"visible-title-and-description-are-announced\",\n \"modal-isolation-and-tab-trap\",\n \"confirm-mode-cancel-is-initial-focus\",\n \"alert-mode-confirm-is-initial-focus\",\n \"outside-attempt-is-ignored-without-callback\",\n \"escape-or-back-cancels-when-idle\",\n \"busy-blocks-every-dismiss-and-duplicate-confirm\",\n \"confirm-action-runs-once\",\n \"error-is-announced-and-dialog-stays-open\",\n \"controlled-close-settles-programmatic-cancel\",\n \"unmount-settles-interrupted\",\n \"result-settles-once-after-exit\",\n \"focus-restores-after-every-close-path\",\n \"reduced-motion-still-completes-exit\",\n ],\n },\n sheet: {\n controlled: [\"open\", \"defaultOpen\", \"onOpenChange\", \"dismissPolicy\"],\n defaults: sheetBehaviorDefaults,\n stateAxes: { availability: [\"enabled\", \"busy\"], value: [\"open\"] },\n web: { roles: [\"dialog\"], keyboard: [\"Tab\", \"Escape\"], focus: \"trap\", dismiss: [\"escape\", \"outside\"] },\n native: { roles: [\"dialog\"], states: [\"busy\"], actions: [\"dismiss\"], dismiss: [\"back\", \"outside\"] },\n scenarios: [\n \"focus-or-modal-isolation\",\n \"scroll-lock\",\n \"safe-area\",\n \"single-dismiss-callback\",\n \"busy-blocks-dismiss\",\n \"dismiss-reason-is-reported\",\n \"programmatic-owner-close-is-always-allowed\",\n \"swipe-requires-enabled-policy-and-gesture-capability\",\n \"successor-surface-opens-after-exit\",\n \"nested-modal-surfaces-are-forbidden\",\n \"reduced-motion-still-completes-dismiss\",\n ],\n },\n select: {\n controlled: [\n \"selectedKey\",\n \"defaultSelectedKey\",\n \"onSelectionChange\",\n \"open\",\n \"defaultOpen\",\n \"onOpenChange\",\n ],\n inputs: [\"asyncState\", \"selectedItem\"],\n configuration: {\n disallowEmptySelection: [\"true\", \"false\"],\n loop: [\"true\", \"false\"],\n },\n defaults: selectBehaviorDefaults,\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\", \"busy\"],\n value: [\"empty\", \"selected\", \"open\"],\n validation: [\"valid\", \"invalid\"],\n content: [\"idle\", \"loading\", \"loadingMore\", \"empty\", \"error\"],\n },\n web: {\n roles: [\"combobox\", \"listbox\", \"option\"],\n keyboard: [\n \"Tab\",\n \"Enter\",\n \"Space\",\n \"Escape\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"End\",\n \"Typeahead\",\n ],\n focus: \"activeDescendant\",\n dismiss: [\"selection\", \"escape\", \"outside\", \"blur\"],\n },\n native: {\n roles: [\"button\", \"dialog\", \"radio\"],\n states: [\"disabled\", \"checked\", \"busy\", \"expanded\"],\n actions: [\"activate\", \"dismiss\"],\n dismiss: [\"selection\", \"back\", \"outside\"],\n },\n scenarios: [\n \"visible-label-or-accessibility-label-names-trigger\",\n \"collection-ids-and-text-values-are-validated\",\n \"highlighted-option-is-distinct-from-committed-selection\",\n \"trigger-controls-the-mounted-listbox\",\n \"active-descendant-references-a-mounted-option\",\n \"active-option-scrolls-into-view\",\n \"disabled-options-are-skipped\",\n \"escape-closes-without-commit\",\n \"selection-requests-close-and-restores-trigger-focus\",\n \"controlled-owner-may-defer-a-selection-close-request\",\n \"removed-selection-is-reconciled\",\n \"loading-more-preserves-options-and-selection\",\n \"transient-async-pages-preserve-committed-key-and-copy\",\n \"empty-error-and-loading-are-announced\",\n \"options-have-no-nested-interactive-descendants\",\n ],\n },\n combobox: {\n controlled: [\n \"selectedKey\",\n \"defaultSelectedKey\",\n \"onSelectionChange\",\n \"inputValue\",\n \"defaultInputValue\",\n \"onInputValueChange\",\n \"open\",\n \"defaultOpen\",\n \"onOpenChange\",\n ],\n inputs: [\"asyncState\", \"queryValue\", \"resultQuery\", \"selectedItem\"],\n events: [\"onCommit\"],\n configuration: {\n filtering: [\"local\", \"external\"],\n loop: [\"true\", \"false\"],\n },\n defaults: comboboxBehaviorDefaults,\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\", \"busy\"],\n value: [\"empty\", \"filled\", \"selected\", \"open\"],\n validation: [\"valid\", \"invalid\"],\n content: [\"idle\", \"loading\", \"loadingMore\", \"empty\", \"error\"],\n },\n web: {\n roles: [\"combobox\", \"listbox\", \"option\"],\n keyboard: [\n \"Tab\",\n \"Enter\",\n \"Escape\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"End\",\n ],\n focus: \"activeDescendant\",\n dismiss: [\"selection\", \"escape\", \"outside\", \"blur\"],\n },\n native: {\n roles: [\"button\", \"text\", \"dialog\", \"radio\"],\n states: [\"disabled\", \"checked\", \"busy\", \"expanded\"],\n actions: [\"focus\", \"setText\", \"activate\", \"dismiss\"],\n dismiss: [\"selection\", \"back\", \"outside\"],\n },\n scenarios: [\n \"selected-key-and-input-value-are-independent\",\n \"input-focus-and-active-option-are-distinct\",\n \"input-controls-the-mounted-listbox\",\n \"active-descendant-references-a-mounted-option\",\n \"active-option-scrolls-into-view\",\n \"ime-composition-does-not-prematurely-filter-or-commit\",\n \"escape-restores-the-committed-label\",\n \"query-edit-never-commits-a-stale-selection\",\n \"external-results-do-not-implicitly-commit\",\n \"committed-item-survives-transient-result-pages\",\n \"stale-external-results-do-not-replace-current-query\",\n \"loading-more-preserves-options-and-active-descendant\",\n \"empty-error-and-loading-are-announced\",\n \"custom-values-are-rejected-without-an-explicit-policy\",\n \"selection-state-updates-before-commit-event-and-close-request\",\n \"options-have-no-nested-interactive-descendants\",\n ],\n },\n toast: {\n controlled: [],\n inputs: [\"descriptor\", \"queueSnapshot\", \"visibleSnapshot\"],\n events: [\"onAction\", \"onDismiss\"],\n configuration: {\n priority: [\"normal\", \"high\"],\n duplicatePolicy: [\"update\", \"ignore\"],\n timerUpdatePolicy: [\"preserve\", \"restart\"],\n overflowPolicy: [\"discard-oldest\", \"discard-newest\"],\n },\n defaults: toastBehaviorDefaults,\n stateAxes: {\n value: [\"open\"],\n content: [\"idle\"],\n },\n web: {\n roles: [\"region\", \"status\", \"alert\", \"button\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\", \"Escape\", \"F8\"],\n focus: \"native\",\n dismiss: [\"timeout\", \"action\", \"close-action\", \"escape\", \"swipe\", \"programmatic\"],\n },\n native: {\n roles: [\"alert\", \"button\"],\n states: [],\n actions: [\"announce\", \"activate\", \"dismiss\"],\n dismiss: [\"timeout\", \"action\", \"close-action\", \"swipe\", \"programmatic\"],\n },\n scenarios: [\n \"stable-id-duplicate-updates-in-place-without-reordering\",\n \"bounded-queue-promotes-items-in-fifo-order\",\n \"queued-time-never-consumes-auto-dismiss-duration\",\n \"visible-timer-pauses-for-pointer-focus-window-and-gesture\",\n \"actionable-toast-is-persistent-unless-duration-is-explicit\",\n \"auto-dismiss-duration-is-never-shorter-than-five-seconds\",\n \"action-and-dismiss-callbacks-run-exactly-once\",\n \"programmatic-close-reports-its-own-dismiss-reason\",\n \"normal-and-high-announcements-use-the-visible-copy-or-explicit-override\",\n \"tone-is-always-paired-with-a-non-color-mark\",\n \"web-hotkey-focuses-the-labelled-viewport-and-last-close-restores-focus\",\n \"exit-completes-once-with-and-without-reduced-motion\",\n \"provider-teardown-interrupts-every-session-without-leaking-a-timer\",\n ],\n },\n loadMore: {\n controlled: [],\n inputs: [\"state\", \"labels\"],\n events: [\"onLoadMore\"],\n configuration: { mode: [\"automatic\", \"manual\"] },\n defaults: loadMoreBehaviorDefaults,\n stateAxes: {\n availability: [\"enabled\", \"busy\"],\n content: [\"idle\", \"loadingMore\", \"error\", \"complete\"],\n },\n web: {\n roles: [\"status\", \"alert\", \"button\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\"],\n focus: \"native\",\n },\n native: {\n roles: [\"progressbar\", \"alert\", \"button\"],\n states: [\"busy\", \"disabled\"],\n actions: [\"activate\"],\n },\n scenarios: [\n \"existing-items-remain-mounted-in-every-footer-state\",\n \"automatic-viewport-request-has-an-accessible-manual-fallback\",\n \"one-request-is-in-flight-per-controller\",\n \"same-request-key-is-never-issued-twice-concurrently\",\n \"loading-and-complete-states-block-new-requests\",\n \"error-state-retries-only-with-retry-reason\",\n \"loading-status-and-error-alert-announce-once\",\n \"retry-and-manual-targets-are-at-least-forty-four-units\",\n ],\n },\n tooltip: {\n controlled: [\"open\", \"defaultOpen\", \"onOpenChange\"],\n inputs: [\"content\"],\n configuration: {\n placement: [\"top\", \"bottom\", \"start\", \"end\"],\n align: [\"start\", \"center\", \"end\"],\n },\n defaults: tooltipBehaviorDefaults,\n stateAxes: {\n interaction: [\"idle\", \"hover\", \"focusVisible\"],\n value: [\"open\"],\n },\n web: {\n roles: [\"tooltip\"],\n keyboard: [\"Tab\", \"Escape\"],\n focus: \"none\",\n dismiss: [\"escape\", \"blur\"],\n },\n native: { roles: [], states: [], actions: [] },\n scenarios: [\n \"plain-localized-copy-never-contains-interaction\",\n \"keyboard-focus-opens-immediately-and-pointer-respects-delay\",\n \"recent-sibling-tooltip-uses-skip-delay\",\n \"one-tooltip-is-visible-per-provider\",\n \"trigger-content-hover-and-pointer-corridor-keep-open\",\n \"escape-dismisses-and-suppresses-reopen-until-input-reset\",\n \"blur-or-pointer-leave-closes-only-after-all-active-inputs-end\",\n \"trigger-activation-closes-without-cancelling-trigger-action\",\n \"trigger-keeps-focus-and-tooltip-has-no-tab-stop\",\n \"existing-aria-describedby-is-preserved\",\n \"touch-pointer-hover-is-ignored\",\n \"controlled-close-rejection-never-exposes-two-tooltips\",\n \"timer-and-global-listener-cleanup-on-unmount\",\n \"reduced-motion-exit-completes-exactly-once\",\n ],\n },\n breadcrumb: breadcrumbBehaviorSpec,\n calendar: calendarBehavior,\n carousel: carouselBehavior,\n commandPalette: {\n controlled: [\n \"open\",\n \"defaultOpen\",\n \"onOpenChange\",\n \"inputValue\",\n \"defaultInputValue\",\n \"onInputValueChange\",\n ],\n inputs: [\"queryValue\", \"resultQuery\", \"asyncState\", \"accessibilityLabel\", \"searchPlaceholder\"],\n events: [\"onActivate\", \"onActivateAfterDismiss\"],\n stateAxes: { value: [\"open\"], content: [\"idle\", \"loading\", \"loadingMore\", \"empty\", \"error\"] },\n // 저작자 명세의 dismiss 사유 \"activation\"은 채택하지 않았다. 같은 뜻의 \"action\"이\n // 이미 유니언에 있고(Menu가 onAction으로 쓴다), 공용 어휘에 동의어를 하나 더 두면\n // 렌더러가 둘을 구별해야 하는지 매번 물어야 한다.\n web: { roles: [\"dialog\", \"listbox\", \"option\"], keyboard: [\"Tab\", \"Enter\", \"Escape\", \"ArrowUp\", \"ArrowDown\"], focus: \"trap\", dismiss: [\"escape\", \"outside\", \"action\"] },\n native: { roles: [], states: [], actions: [] },\n scenarios: [...commandPaletteBehaviorScenarios],\n },\n floatingActionButton: {\n controlled: [],\n inputs: [\"label\", \"icon\", \"layoutMode\", \"scrollSignal\", \"safeAreaInset\"],\n events: [\"onPress\"],\n stateAxes: { interaction: [\"idle\", \"hover\", \"pressed\", \"focusVisible\"] },\n web: { roles: [\"button\"], keyboard: [\"Tab\", \"Enter\", \"Space\"], focus: \"native\" },\n native: { roles: [\"button\"], states: [], actions: [\"activate\"] },\n scenarios: [...floatingActionButtonBehaviorScenarios],\n },\n // 이 항목은 `transfer-list.ts`에서 import하지 않고 여기에 직접 쓴다. 그 모듈은\n // 이 파일에서 **값**을(getCheckboxNextState 등) 가져오므로, 여기서 되받으면\n // 실제 순환이 닫혀 레지스트리가 undefined를 담는다(타입만 가져오는\n // data-table과 다른 점이다). 두 정의가 어긋나지 않는지는 테스트로 잠근다.\n transferList: {\n controlled: [\"targetKeys\", \"defaultTargetKeys\", \"onTargetKeysChange\"],\n inputs: [\"items\"],\n events: [\"onMove\"],\n stateAxes: {\n availability: [\"enabled\", \"disabled\"],\n value: [\"empty\", \"filled\", \"selected\", \"mixed\"],\n },\n web: {\n roles: [\"group\", \"listbox\", \"option\", \"checkbox\", \"button\"],\n keyboard: [\"Tab\", \"Space\", \"Enter\", \"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"],\n focus: \"roving\",\n },\n native: {\n roles: [\"list\", \"checkbox\", \"button\"],\n states: [\"disabled\", \"selected\", \"checked\"],\n actions: [\"toggle\", \"toggleSelectAll\", \"moveSelection\", \"moveItem\"],\n },\n scenarios: [\n \"moving-is-reachable-entirely-by-keyboard-select-with-space-then-activate-the-move-button\",\n \"moving-a-single-focused-row-does-not-require-first-opening-multi-select\",\n \"focus-after-a-move-lands-on-the-item-that-slid-into-the-removed-rows-position\",\n \"focus-after-emptying-a-panel-falls-back-to-its-empty-state-never-lost-to-the-document\",\n \"every-move-emits-which-ids-moved-so-the-product-can-announce-a-formatted-sentence\",\n \"disabled-items-are-never-selectable-and-never-move\",\n \"moved-items-are-cleared-from-the-origin-panels-selection-and-left-unselected-at-the-destination\",\n \"select-all-in-a-panel-excludes-disabled-items-from-both-the-denominator-and-the-count\",\n \"an-item-with-nothing-selected-in-its-panel-still-supports-direct-single-item-move\",\n \"search-and-pagination-inside-a-panel-are-product-composition-not-this-contract\",\n ],\n },\n dataTable: dataTableBehavior,\n tour: {\n controlled: [\"open\", \"defaultOpen\", \"onOpenChange\", \"currentStepId\", \"defaultCurrentStepId\", \"onStepChange\"],\n inputs: [\"steps\", \"labels\", \"anchorId\"],\n events: [\"onClose\"],\n stateAxes: { value: [\"open\", \"currentStep\"] },\n // outside 닫힘이 없다. 실수로 워크스루가 끊기지 않게 하려는 고정 규칙이라\n // 저작자가 policy 객체조차 두지 않았고, 요약에도 그 사실을 그대로 옮긴다.\n web: { roles: [\"dialog\"], keyboard: [\"Tab\", \"Enter\", \"Escape\", \"ArrowLeft\", \"ArrowRight\"], focus: \"trap\", dismiss: [\"escape\", \"close-action\", \"programmatic\"] },\n native: { roles: [], states: [], actions: [] },\n scenarios: [...tourBehaviorScenarios],\n },\n layout: layoutBehavior,\n otpField: otpFieldBehavior,\n passwordField: passwordFieldBehavior,\n splitter: splitterBehavior,\n datePicker: datePickerBehavior,\n sidePanel: sidePanelBehavior,\n filePicker: filePickerBehavior,\n pagination: {\n controlled: [\"currentPage\", \"onPageChange\"],\n inputs: [\"totalCount\", \"totalPages\", \"pageSize\", \"labels\"],\n configuration: { window: [\"siblingCount\", \"boundaryCount\"] },\n stateAxes: {},\n web: {\n roles: [\"navigation\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\"],\n focus: \"native\",\n },\n native: { roles: [], states: [], actions: [] },\n scenarios: [...paginationBehaviorScenarios],\n },\n /*\n 비모달이라 `busy` 축이 없다. Sheet/AlertDialog는 진행 중 dismiss를 막지만 Popover는\n 포커스가 정당하게 밖으로 나갈 수 있어 그 축이 성립하지 않는다 — 대신 나가는 것\n 자체가 dismiss 신호이므로 `outside-focus`를 별도 reason으로 둔다.\n */\n popover: {\n controlled: [\"open\", \"defaultOpen\", \"onOpenChange\"],\n defaults: popoverBehaviorDefaults,\n stateAxes: { value: [\"open\"] },\n /*\n `trap`이 아니라 `restore`다 — Dialog·Sheet·AlertDialog는 모달이라 포커스를 가두지만\n Popover는 비모달이라 Tab이 **정당하게 밖으로 나갈 수 있다.** 그래서 가두지 않고,\n 닫힐 때 트리거로 돌려보낸다. 같은 자리에 있는 것은 Menu다(역시 `restore`).\n 나가는 것 자체가 dismiss 신호이므로 `outside-focus`를 별도 reason으로 둔다.\n */\n web: {\n roles: [\"dialog\"],\n keyboard: [\"Tab\", \"Escape\"],\n focus: \"restore\",\n dismiss: [\"escape\", \"outside\"],\n },\n native: { roles: [], states: [], actions: [] },\n scenarios: [...popoverBehaviorScenarios],\n },\n tree: treeBehavior,\n uploadItem: uploadItemBehavior,\n form: formBehaviorSpec,\n numberField: numberFieldBehavior,\n slider: sliderBehavior,\n} as const satisfies Record<string, BehaviorContract>;\n\nexport type BehaviorName = keyof typeof behaviorRegistry;\n\nexport type CollectionKey = string;\nexport type CollectionItemTone = \"neutral\" | \"danger\";\n\nexport type CollectionItemDescriptor<Key extends CollectionKey = CollectionKey> = Readonly<{\n id: Key;\n label: string;\n textValue: string;\n description?: string;\n shortcut?: string;\n disabled?: boolean;\n tone?: CollectionItemTone;\n}>;\n\n/** Menu-only extension; danger tone and shortcut do not belong to Select. */\nexport type MenuItemDescriptor<\n Key extends CollectionKey = CollectionKey,\n> = CollectionItemDescriptor<Key>;\n\ntype CollectionSectionLabel =\n | Readonly<{ label: string; accessibilityLabel?: string }>\n | Readonly<{ label?: string; accessibilityLabel: string }>;\n\nexport type CollectionSectionDescriptor<\n Key extends CollectionKey = CollectionKey,\n SectionKey extends CollectionKey = CollectionKey,\n> = Readonly<{\n id: SectionKey;\n items: readonly CollectionItemDescriptor<Key>[];\n}> & CollectionSectionLabel;\n\nexport type MenuSectionDescriptor<\n Key extends CollectionKey = CollectionKey,\n SectionKey extends CollectionKey = CollectionKey,\n> = CollectionSectionDescriptor<Key, SectionKey>;\n\nexport type NoSelectionModel = Readonly<{ mode: \"none\" }>;\nexport type SingleSelectionModel<Key extends CollectionKey = CollectionKey> =\n | Readonly<{\n mode: \"single\";\n selectedKey: Key | null;\n defaultSelectedKey?: never;\n onSelectionChange(key: Key | null): void;\n disallowEmptySelection?: boolean;\n }>\n | Readonly<{\n mode: \"single\";\n selectedKey?: never;\n defaultSelectedKey?: Key | null;\n onSelectionChange?: (key: Key | null) => void;\n disallowEmptySelection?: boolean;\n }>;\nexport type MultipleSelectionModel<Key extends CollectionKey = CollectionKey> =\n | Readonly<{\n mode: \"multiple\";\n selectedKeys: ReadonlySet<Key>;\n defaultSelectedKeys?: never;\n onSelectionChange(keys: ReadonlySet<Key>): void;\n }>\n | Readonly<{\n mode: \"multiple\";\n selectedKeys?: never;\n defaultSelectedKeys?: ReadonlySet<Key>;\n onSelectionChange?: (keys: ReadonlySet<Key>) => void;\n }>;\nexport type CollectionSelectionModel<Key extends CollectionKey = CollectionKey> =\n | NoSelectionModel\n | SingleSelectionModel<Key>\n | MultipleSelectionModel<Key>;\n\nexport type AsyncCollectionState =\n | Readonly<{ status: \"idle\" }>\n | Readonly<{ status: \"loading\"; message: string }>\n | Readonly<{ status: \"loadingMore\"; message: string }>\n | Readonly<{ status: \"empty\"; message: string }>\n | Readonly<{ status: \"error\"; message: string }>;\n\n/**\n * Shared input semantics for future Select/Combobox renderers. Web may render a\n * popup while Native renders a sheet, but both consume the same stable keys.\n */\nexport type SelectItemDescriptor<\n Key extends CollectionKey = CollectionKey,\n> = Omit<CollectionItemDescriptor<Key>, \"shortcut\" | \"tone\"> &\n Readonly<{ shortcut?: never; tone?: never }>;\n\nexport type ControlledSelectSelection<\n Key extends CollectionKey = CollectionKey,\n> = Readonly<{\n selectedKey: Key | null;\n defaultSelectedKey?: never;\n onSelectionChange(key: Key | null): void;\n}>;\n\nexport type UncontrolledSelectSelection<\n Key extends CollectionKey = CollectionKey,\n> = Readonly<{\n selectedKey?: never;\n defaultSelectedKey?: Key | null;\n onSelectionChange?: (key: Key | null) => void;\n}>;\n\nexport type SelectSelection<Key extends CollectionKey = CollectionKey> =\n | ControlledSelectSelection<Key>\n | UncontrolledSelectSelection<Key>;\n\nexport type ControlledComboboxInput = Readonly<{\n inputValue: string;\n defaultInputValue?: never;\n onInputValueChange(value: string): void;\n}>;\n\nexport type UncontrolledComboboxInput = Readonly<{\n inputValue?: never;\n defaultInputValue?: string;\n onInputValueChange?: (value: string) => void;\n}>;\n\nexport type ComboboxInput = ControlledComboboxInput | UncontrolledComboboxInput;\n\nexport type ComboboxFiltering = \"local\" | \"external\";\nexport type ComboboxCommitReason =\n | \"selection\"\n | \"clear\";\n"]}
@@ -0,0 +1,13 @@
1
+ export type BottomNavigationPresentation = "bar" | "floating";
2
+ export type BottomNavigationDistribution = "equal" | "center-gap";
3
+ export type BottomNavigationDensity = "compact" | "regular";
4
+ /**
5
+ * Shared defaults kept outside the recipe barrel so behavior-only consumers
6
+ * do not pull the complete visual recipe registry into their import graph.
7
+ */
8
+ export declare const bottomNavigationRecipeDefaults: {
9
+ readonly presentation: "bar";
10
+ readonly distribution: "equal";
11
+ readonly density: "regular";
12
+ };
13
+ //# sourceMappingURL=bottom-navigation-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-navigation-defaults.d.ts","sourceRoot":"","sources":["../src/bottom-navigation-defaults.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,UAAU,CAAC;AAC9D,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,YAAY,CAAC;AAClE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,8BAA8B;;;;CAQzC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Shared defaults kept outside the recipe barrel so behavior-only consumers
3
+ * do not pull the complete visual recipe registry into their import graph.
4
+ */
5
+ export const bottomNavigationRecipeDefaults = {
6
+ presentation: "bar",
7
+ distribution: "equal",
8
+ density: "regular",
9
+ };
10
+ //# sourceMappingURL=bottom-navigation-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-navigation-defaults.js","sourceRoot":"","sources":["../src/bottom-navigation-defaults.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,OAAO;IACrB,OAAO,EAAE,SAAS;CAKlB,CAAC","sourcesContent":["export type BottomNavigationPresentation = \"bar\" | \"floating\";\nexport type BottomNavigationDistribution = \"equal\" | \"center-gap\";\nexport type BottomNavigationDensity = \"compact\" | \"regular\";\n\n/**\n * Shared defaults kept outside the recipe barrel so behavior-only consumers\n * do not pull the complete visual recipe registry into their import graph.\n */\nexport const bottomNavigationRecipeDefaults = {\n presentation: \"bar\",\n distribution: \"equal\",\n density: \"regular\",\n} as const satisfies Readonly<{\n presentation: BottomNavigationPresentation;\n distribution: BottomNavigationDistribution;\n density: BottomNavigationDensity;\n}>;\n"]}
@@ -0,0 +1,114 @@
1
+ import { type BottomNavigationDensity, type BottomNavigationDistribution, type BottomNavigationPresentation } from "./bottom-navigation-defaults.js";
2
+ import { type SemanticIconName } from "./icon.js";
3
+ import type { DesignSystemDirection } from "./design-system-provider.js";
4
+ export type BottomNavigationDirection = DesignSystemDirection;
5
+ export type BottomNavigationKeyboardBehavior = "hide" | "remain";
6
+ export type BottomNavigationConfiguration = Readonly<{
7
+ presentation?: BottomNavigationPresentation;
8
+ distribution?: BottomNavigationDistribution;
9
+ density?: BottomNavigationDensity;
10
+ direction?: BottomNavigationDirection;
11
+ keyboardBehavior?: BottomNavigationKeyboardBehavior;
12
+ }>;
13
+ export type ResolvedBottomNavigationConfiguration = Readonly<{
14
+ presentation: BottomNavigationPresentation;
15
+ distribution: BottomNavigationDistribution;
16
+ density: BottomNavigationDensity;
17
+ direction: BottomNavigationDirection;
18
+ keyboardBehavior: BottomNavigationKeyboardBehavior;
19
+ }>;
20
+ /**
21
+ * Bottom navigation only accepts numeric counters. A silent status dot is too
22
+ * ambiguous for a persistent, top-level destination.
23
+ */
24
+ export type BottomNavigationCounterBadge = Readonly<{
25
+ count: number;
26
+ max?: number;
27
+ /** Product-localized copy, for example "3 unread messages". */
28
+ accessibilityLabel: string;
29
+ }>;
30
+ /**
31
+ * BottomNavigation owns icon appearance through its density and state recipe.
32
+ * Products may extend the semantic name registry, but never override size,
33
+ * tone, stroke weight, accessibility, or logical direction at the call site.
34
+ */
35
+ export type BottomNavigationIconDescriptor<IconName extends string = SemanticIconName> = Readonly<{
36
+ name: IconName;
37
+ decorative?: true;
38
+ accessibilityLabel?: never;
39
+ size?: never;
40
+ tone?: never;
41
+ weight?: never;
42
+ directionality?: never;
43
+ }>;
44
+ export type ResolvedBottomNavigationIconDescriptor<IconName extends string = SemanticIconName> = Readonly<{
45
+ name: IconName;
46
+ decorative: true;
47
+ }>;
48
+ /**
49
+ * Items are stable top-level destinations, never actions. The icon is always
50
+ * decorative because the visible/item accessibility label already names it.
51
+ */
52
+ export type BottomNavigationItemDescriptor<Key extends string = string, IconName extends string = SemanticIconName> = Readonly<{
53
+ id: Key;
54
+ label: string;
55
+ accessibilityLabel?: string;
56
+ icon: BottomNavigationIconDescriptor<IconName>;
57
+ badge?: BottomNavigationCounterBadge;
58
+ disabled?: boolean;
59
+ }>;
60
+ /** The router owns selectedKey; the design-system never keeps a second copy. */
61
+ export type BottomNavigationDescriptor<Key extends string = string, IconName extends string = SemanticIconName> = Readonly<{
62
+ accessibilityLabel: string;
63
+ items: readonly BottomNavigationItemDescriptor<Key, IconName>[];
64
+ selectedKey: Key;
65
+ }>;
66
+ /**
67
+ * The resolved badge intentionally has no accessible label. Renderers hide its
68
+ * subtree and use only the item's resolvedAccessibilityLabel, preventing the
69
+ * counter from being announced twice.
70
+ */
71
+ export type ResolvedBottomNavigationCounterBadge = Readonly<{
72
+ visibleLabel: string;
73
+ hiddenFromAccessibility: true;
74
+ }>;
75
+ export type ResolvedBottomNavigationItemDescriptor<Key extends string = string, IconName extends string = SemanticIconName> = Readonly<{
76
+ id: Key;
77
+ label: string;
78
+ icon: ResolvedBottomNavigationIconDescriptor<IconName>;
79
+ disabled: boolean;
80
+ badge: ResolvedBottomNavigationCounterBadge | null;
81
+ resolvedAccessibilityLabel: string;
82
+ }>;
83
+ export type ResolvedBottomNavigationDescriptor<Key extends string = string, IconName extends string = SemanticIconName> = Readonly<{
84
+ accessibilityLabel: string;
85
+ items: readonly ResolvedBottomNavigationItemDescriptor<Key, IconName>[];
86
+ selectedKey: Key;
87
+ }>;
88
+ export type BottomNavigationActivation<Key extends string = string> = Readonly<{
89
+ key: Key;
90
+ reason: "navigate" | "reselect";
91
+ }>;
92
+ /**
93
+ * `maxItems` follows the platform bars rather than Material's five-destination
94
+ * guidance: iOS tab bars and Android navigation bars both render six labelled
95
+ * destinations without collapsing, and products that ship six need the shared
96
+ * contract to describe them instead of routing around it.
97
+ */
98
+ export declare const bottomNavigationBehaviorDefaults: {
99
+ readonly direction: "ltr";
100
+ readonly keyboardBehavior: "hide";
101
+ readonly minItems: 2;
102
+ readonly maxItems: 6;
103
+ };
104
+ export declare function validateBottomNavigationConfiguration(configuration: BottomNavigationConfiguration, itemCount: number): void;
105
+ export declare function resolveBottomNavigationConfiguration(configuration: BottomNavigationConfiguration, itemCount: number): ResolvedBottomNavigationConfiguration;
106
+ export declare function validateBottomNavigationDescriptor<Key extends string, IconName extends string>(descriptor: BottomNavigationDescriptor<Key, IconName>): void;
107
+ export declare function resolveBottomNavigationItem<Key extends string, IconName extends string>(item: BottomNavigationItemDescriptor<Key, IconName>): ResolvedBottomNavigationItemDescriptor<Key, IconName>;
108
+ export declare function resolveBottomNavigationDescriptor<Key extends string, IconName extends string>(descriptor: BottomNavigationDescriptor<Key, IconName>): ResolvedBottomNavigationDescriptor<Key, IconName>;
109
+ /**
110
+ * Produces navigation intent without mutating selectedKey. A renderer forwards
111
+ * the request to its router, which updates selectedKey only after navigation.
112
+ */
113
+ export declare function resolveBottomNavigationActivation<Key extends string, IconName extends string>(descriptor: BottomNavigationDescriptor<Key, IconName>, key: Key): BottomNavigationActivation<Key> | null;
114
+ //# sourceMappingURL=bottom-navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-navigation.d.ts","sourceRoot":"","sources":["../src/bottom-navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAElC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,gBAAgB,EACtB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,MAAM,gCAAgC,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEjE,MAAM,MAAM,6BAA6B,GAAG,QAAQ,CAAC;IACnD,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,gBAAgB,CAAC,EAAE,gCAAgC,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,MAAM,qCAAqC,GAAG,QAAQ,CAAC;IAC3D,YAAY,EAAE,4BAA4B,CAAC;IAC3C,YAAY,EAAE,4BAA4B,CAAC;IAC3C,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,EAAE,yBAAyB,CAAC;IACrC,gBAAgB,EAAE,gCAAgC,CAAC;CACpD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,MAAM,8BAA8B,CACxC,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,sCAAsC,CAChD,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,8BAA8B,CACxC,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,EAAE,EAAE,GAAG,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,4BAA4B,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,gFAAgF;AAChF,MAAM,MAAM,0BAA0B,CACpC,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,SAAS,8BAA8B,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;IAChE,WAAW,EAAE,GAAG,CAAC;CAClB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,MAAM,oCAAoC,GAAG,QAAQ,CAAC;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,IAAI,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,sCAAsC,CAChD,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,EAAE,EAAE,GAAG,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,sCAAsC,CAAC,QAAQ,CAAC,CAAC;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,oCAAoC,GAAG,IAAI,CAAC;IACnD,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,MAAM,kCAAkC,CAC5C,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,SAAS,sCAAsC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;IACxE,WAAW,EAAE,GAAG,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,0BAA0B,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC7E,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACjC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC;;;;;CAU3C,CAAC;AAqHH,wBAAgB,qCAAqC,CACnD,aAAa,EAAE,6BAA6B,EAC5C,SAAS,EAAE,MAAM,GAChB,IAAI,CAwDN;AAED,wBAAgB,oCAAoC,CAClD,aAAa,EAAE,6BAA6B,EAC5C,SAAS,EAAE,MAAM,GAChB,qCAAqC,CAavC;AAED,wBAAgB,kCAAkC,CAChD,GAAG,SAAS,MAAM,EAClB,QAAQ,SAAS,MAAM,EACvB,UAAU,EAAE,0BAA0B,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,CA6C7D;AAED,wBAAgB,2BAA2B,CACzC,GAAG,SAAS,MAAM,EAClB,QAAQ,SAAS,MAAM,EAEvB,IAAI,EAAE,8BAA8B,CAAC,GAAG,EAAE,QAAQ,CAAC,GAClD,sCAAsC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAwBvD;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,SAAS,MAAM,EAClB,QAAQ,SAAS,MAAM,EAEvB,UAAU,EAAE,0BAA0B,CAAC,GAAG,EAAE,QAAQ,CAAC,GACpD,kCAAkC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAOnD;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,SAAS,MAAM,EAClB,QAAQ,SAAS,MAAM,EAEvB,UAAU,EAAE,0BAA0B,CAAC,GAAG,EAAE,QAAQ,CAAC,EACrD,GAAG,EAAE,GAAG,GACP,0BAA0B,CAAC,GAAG,CAAC,GAAG,IAAI,CAQxC"}
@@ -0,0 +1,223 @@
1
+ import { bottomNavigationRecipeDefaults, } from "./bottom-navigation-defaults.js";
2
+ import { formatCounterBadgeCount } from "./counter-badge.js";
3
+ import {} from "./icon.js";
4
+ /**
5
+ * `maxItems` follows the platform bars rather than Material's five-destination
6
+ * guidance: iOS tab bars and Android navigation bars both render six labelled
7
+ * destinations without collapsing, and products that ship six need the shared
8
+ * contract to describe them instead of routing around it.
9
+ */
10
+ export const bottomNavigationBehaviorDefaults = {
11
+ direction: "ltr",
12
+ keyboardBehavior: "hide",
13
+ minItems: 2,
14
+ maxItems: 6,
15
+ };
16
+ function validateTrimmedCopy(value, field) {
17
+ if (typeof value !== "string" || value.trim().length === 0) {
18
+ throw new TypeError(`${field} must not be empty`);
19
+ }
20
+ if (value !== value.trim()) {
21
+ throw new TypeError(`${field} must not start or end with whitespace`);
22
+ }
23
+ }
24
+ function isObject(value) {
25
+ return value !== null && typeof value === "object" && !Array.isArray(value);
26
+ }
27
+ const configurationKeys = new Set([
28
+ "presentation",
29
+ "distribution",
30
+ "density",
31
+ "direction",
32
+ "keyboardBehavior",
33
+ ]);
34
+ const descriptorKeys = new Set(["accessibilityLabel", "items", "selectedKey"]);
35
+ const itemKeys = new Set([
36
+ "id",
37
+ "label",
38
+ "accessibilityLabel",
39
+ "icon",
40
+ "badge",
41
+ "disabled",
42
+ ]);
43
+ const iconKeys = new Set(["name", "decorative"]);
44
+ const badgeKeys = new Set(["count", "max", "accessibilityLabel"]);
45
+ function rejectUnknownKeys(value, allowed, field) {
46
+ for (const key of Object.keys(value)) {
47
+ if (!allowed.has(key)) {
48
+ throw new TypeError(`Unsupported BottomNavigation ${field} field: ${key}`);
49
+ }
50
+ }
51
+ }
52
+ function normalizedCopy(value) {
53
+ return value.normalize("NFKC").toLocaleLowerCase();
54
+ }
55
+ function validateBadge(badge) {
56
+ if (!isObject(badge)) {
57
+ throw new TypeError("BottomNavigation badge must be an object");
58
+ }
59
+ rejectUnknownKeys(badge, badgeKeys, "badge");
60
+ if (!Number.isSafeInteger(badge.count) || badge.count < 0) {
61
+ throw new TypeError("BottomNavigation badge count must be a non-negative safe integer");
62
+ }
63
+ if (badge.max !== undefined &&
64
+ (!Number.isSafeInteger(badge.max) || badge.max < 1)) {
65
+ throw new TypeError("BottomNavigation badge max must be a positive safe integer");
66
+ }
67
+ validateTrimmedCopy(badge.accessibilityLabel, "BottomNavigation badge accessibilityLabel");
68
+ }
69
+ function validateItem(item) {
70
+ if (!isObject(item)) {
71
+ throw new TypeError("BottomNavigation item must be an object");
72
+ }
73
+ rejectUnknownKeys(item, itemKeys, "item");
74
+ validateTrimmedCopy(item.id, "BottomNavigation item id");
75
+ validateTrimmedCopy(item.label, "BottomNavigation item label");
76
+ if (item.accessibilityLabel !== undefined) {
77
+ validateTrimmedCopy(item.accessibilityLabel, "BottomNavigation item accessibilityLabel");
78
+ if (!normalizedCopy(item.accessibilityLabel).includes(normalizedCopy(item.label))) {
79
+ throw new TypeError("BottomNavigation item accessibilityLabel must include the visible label");
80
+ }
81
+ }
82
+ if (!isObject(item.icon)) {
83
+ throw new TypeError("BottomNavigation item icon must be an object");
84
+ }
85
+ if (item.icon.decorative !== undefined && item.icon.decorative !== true) {
86
+ throw new TypeError("BottomNavigation item icon must be decorative");
87
+ }
88
+ rejectUnknownKeys(item.icon, iconKeys, "item icon");
89
+ validateTrimmedCopy(item.icon.name, "BottomNavigation item icon name");
90
+ if (item.disabled !== undefined && typeof item.disabled !== "boolean") {
91
+ throw new TypeError("BottomNavigation item disabled must be a boolean");
92
+ }
93
+ if (item.badge !== undefined)
94
+ validateBadge(item.badge);
95
+ }
96
+ const presentations = new Set(["bar", "floating"]);
97
+ const distributions = new Set(["equal", "center-gap"]);
98
+ const densities = new Set(["compact", "regular"]);
99
+ const directions = new Set(["ltr", "rtl"]);
100
+ const keyboardBehaviors = new Set([
101
+ "hide",
102
+ "remain",
103
+ ]);
104
+ export function validateBottomNavigationConfiguration(configuration, itemCount) {
105
+ if (!isObject(configuration)) {
106
+ throw new TypeError("BottomNavigation configuration must be an object");
107
+ }
108
+ rejectUnknownKeys(configuration, configurationKeys, "configuration");
109
+ if (!Number.isSafeInteger(itemCount) ||
110
+ itemCount < bottomNavigationBehaviorDefaults.minItems ||
111
+ itemCount > bottomNavigationBehaviorDefaults.maxItems) {
112
+ throw new RangeError(`BottomNavigation configuration requires ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`);
113
+ }
114
+ if (configuration.presentation !== undefined &&
115
+ !presentations.has(configuration.presentation)) {
116
+ throw new TypeError(`Unsupported BottomNavigation presentation: ${String(configuration.presentation)}`);
117
+ }
118
+ if (configuration.distribution !== undefined &&
119
+ !distributions.has(configuration.distribution)) {
120
+ throw new TypeError(`Unsupported BottomNavigation distribution: ${String(configuration.distribution)}`);
121
+ }
122
+ if (configuration.density !== undefined && !densities.has(configuration.density)) {
123
+ throw new TypeError(`Unsupported BottomNavigation density: ${String(configuration.density)}`);
124
+ }
125
+ if (configuration.direction !== undefined &&
126
+ !directions.has(configuration.direction)) {
127
+ throw new TypeError(`Unsupported BottomNavigation direction: ${String(configuration.direction)}`);
128
+ }
129
+ if (configuration.keyboardBehavior !== undefined &&
130
+ !keyboardBehaviors.has(configuration.keyboardBehavior)) {
131
+ throw new TypeError(`Unsupported BottomNavigation keyboardBehavior: ${String(configuration.keyboardBehavior)}`);
132
+ }
133
+ if (configuration.distribution === "center-gap" && itemCount % 2 !== 0) {
134
+ throw new RangeError("BottomNavigation center-gap distribution requires an even destination count");
135
+ }
136
+ }
137
+ export function resolveBottomNavigationConfiguration(configuration, itemCount) {
138
+ validateBottomNavigationConfiguration(configuration, itemCount);
139
+ return {
140
+ presentation: configuration.presentation ?? bottomNavigationRecipeDefaults.presentation,
141
+ distribution: configuration.distribution ?? bottomNavigationRecipeDefaults.distribution,
142
+ density: configuration.density ?? bottomNavigationRecipeDefaults.density,
143
+ direction: configuration.direction ?? bottomNavigationBehaviorDefaults.direction,
144
+ keyboardBehavior: configuration.keyboardBehavior ??
145
+ bottomNavigationBehaviorDefaults.keyboardBehavior,
146
+ };
147
+ }
148
+ export function validateBottomNavigationDescriptor(descriptor) {
149
+ if (!isObject(descriptor)) {
150
+ throw new TypeError("BottomNavigation descriptor must be an object");
151
+ }
152
+ rejectUnknownKeys(descriptor, descriptorKeys, "descriptor");
153
+ validateTrimmedCopy(descriptor.accessibilityLabel, "BottomNavigation accessibilityLabel");
154
+ if (!Array.isArray(descriptor.items)) {
155
+ throw new TypeError("BottomNavigation items must be an array");
156
+ }
157
+ validateTrimmedCopy(descriptor.selectedKey, "BottomNavigation selectedKey");
158
+ if (descriptor.items.length < bottomNavigationBehaviorDefaults.minItems ||
159
+ descriptor.items.length > bottomNavigationBehaviorDefaults.maxItems) {
160
+ throw new RangeError(`BottomNavigation must contain ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`);
161
+ }
162
+ const ids = new Set();
163
+ for (const item of descriptor.items) {
164
+ validateItem(item);
165
+ if (ids.has(item.id)) {
166
+ throw new TypeError(`Duplicate BottomNavigation item id: ${item.id}`);
167
+ }
168
+ ids.add(item.id);
169
+ }
170
+ const selected = descriptor.items.find((item) => item.id === descriptor.selectedKey);
171
+ if (!selected) {
172
+ throw new RangeError(`BottomNavigation selectedKey must exist: ${descriptor.selectedKey}`);
173
+ }
174
+ if (selected.disabled) {
175
+ throw new RangeError("BottomNavigation selected destination must be enabled");
176
+ }
177
+ }
178
+ export function resolveBottomNavigationItem(item) {
179
+ validateItem(item);
180
+ const baseAccessibilityLabel = item.accessibilityLabel ?? item.label;
181
+ const visibleBadgeLabel = item.badge
182
+ ? formatCounterBadgeCount(item.badge.count, item.badge.max)
183
+ : null;
184
+ const badge = visibleBadgeLabel
185
+ ? {
186
+ visibleLabel: visibleBadgeLabel,
187
+ hiddenFromAccessibility: true,
188
+ }
189
+ : null;
190
+ return {
191
+ id: item.id,
192
+ label: item.label,
193
+ icon: { name: item.icon.name, decorative: true },
194
+ disabled: item.disabled ?? false,
195
+ badge,
196
+ resolvedAccessibilityLabel: badge && item.badge
197
+ ? `${baseAccessibilityLabel}, ${item.badge.accessibilityLabel}`
198
+ : baseAccessibilityLabel,
199
+ };
200
+ }
201
+ export function resolveBottomNavigationDescriptor(descriptor) {
202
+ validateBottomNavigationDescriptor(descriptor);
203
+ return {
204
+ accessibilityLabel: descriptor.accessibilityLabel,
205
+ items: descriptor.items.map(resolveBottomNavigationItem),
206
+ selectedKey: descriptor.selectedKey,
207
+ };
208
+ }
209
+ /**
210
+ * Produces navigation intent without mutating selectedKey. A renderer forwards
211
+ * the request to its router, which updates selectedKey only after navigation.
212
+ */
213
+ export function resolveBottomNavigationActivation(descriptor, key) {
214
+ validateBottomNavigationDescriptor(descriptor);
215
+ const item = descriptor.items.find((candidate) => candidate.id === key);
216
+ if (!item || item.disabled)
217
+ return null;
218
+ return {
219
+ key,
220
+ reason: key === descriptor.selectedKey ? "reselect" : "navigate",
221
+ };
222
+ }
223
+ //# sourceMappingURL=bottom-navigation.js.map