@astryxdesign/core 0.4.7 → 0.5.0-canary.009bcb3

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 (730) hide show
  1. package/CHANGELOG.md +161 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  3. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  4. package/dist/AlertDialog/AlertDialog.js +45 -20
  5. package/dist/AppShell/AppShell.d.ts.map +1 -1
  6. package/dist/AppShell/AppShell.js +3 -2
  7. package/dist/AspectRatio/AspectRatio.d.ts +24 -0
  8. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  9. package/dist/AspectRatio/AspectRatio.js +23 -4
  10. package/dist/Avatar/Avatar.d.ts +25 -1
  11. package/dist/Avatar/Avatar.d.ts.map +1 -1
  12. package/dist/Avatar/Avatar.js +58 -19
  13. package/dist/Avatar/index.d.ts +2 -2
  14. package/dist/Avatar/index.d.ts.map +1 -1
  15. package/dist/Avatar/index.js +1 -1
  16. package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
  17. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  18. package/dist/AvatarGroup/AvatarGroup.js +8 -4
  19. package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
  20. package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
  21. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  22. package/dist/AvatarGroup/AvatarGroupOverflow.js +10 -6
  23. package/dist/Banner/Banner.d.ts +49 -15
  24. package/dist/Banner/Banner.d.ts.map +1 -1
  25. package/dist/Banner/Banner.js +62 -20
  26. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  27. package/dist/BottomSheet/BottomSheet.js +17 -4
  28. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  29. package/dist/BottomSheet/BottomSheetSwitcher.js +3 -2
  30. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  31. package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
  32. package/dist/Button/Button.d.ts.map +1 -1
  33. package/dist/Button/Button.js +11 -6
  34. package/dist/ButtonGroup/ButtonGroup.d.ts +5 -1
  35. package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  36. package/dist/ButtonGroup/ButtonGroup.js +26 -7
  37. package/dist/Calendar/Calendar.d.ts +7 -3
  38. package/dist/Calendar/Calendar.d.ts.map +1 -1
  39. package/dist/Calendar/Calendar.js +21 -23
  40. package/dist/Calendar/getInitialFocusDate.d.ts +46 -0
  41. package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -0
  42. package/dist/Calendar/getInitialFocusDate.js +62 -0
  43. package/dist/Calendar/styles.d.ts +5 -14
  44. package/dist/Calendar/styles.d.ts.map +1 -1
  45. package/dist/Calendar/styles.js +15 -15
  46. package/dist/Card/Card.d.ts +12 -12
  47. package/dist/Card/Card.d.ts.map +1 -1
  48. package/dist/Card/Card.js +17 -9
  49. package/dist/Card/index.d.ts +35 -1
  50. package/dist/Card/index.d.ts.map +1 -1
  51. package/dist/Card/index.js +21 -1
  52. package/dist/Carousel/Carousel.d.ts.map +1 -1
  53. package/dist/Carousel/Carousel.js +3 -3
  54. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  55. package/dist/Chat/ChatComposerInput.js +2 -3
  56. package/dist/Chat/ChatLayout.d.ts.map +1 -1
  57. package/dist/Chat/ChatLayout.js +3 -3
  58. package/dist/Chat/ChatMessageList.d.ts +22 -3
  59. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  60. package/dist/Chat/ChatMessageList.js +6 -3
  61. package/dist/Chat/ChatTokenizedText.d.ts +2 -0
  62. package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
  63. package/dist/Chat/ChatTokenizedText.js +11 -6
  64. package/dist/Chat/useChatComposerTokens.js +1 -1
  65. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  66. package/dist/CheckboxInput/CheckboxInput.js +10 -3
  67. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  68. package/dist/ClickableCard/ClickableCard.js +3 -3
  69. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  70. package/dist/CodeBlock/CodeBlock.js +15 -4
  71. package/dist/CodeBlock/highlightRanges.js +1 -1
  72. package/dist/CodeBlock/highlightStyles.js +13 -13
  73. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  74. package/dist/CommandPalette/CommandPaletteInput.js +3 -2
  75. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  76. package/dist/CommandPalette/CommandPaletteItem.js +3 -2
  77. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  78. package/dist/ComplexSelector/ComplexSelector.js +1 -3
  79. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  80. package/dist/ContextMenu/ContextMenu.js +4 -3
  81. package/dist/DateInput/DateInput.d.ts +43 -0
  82. package/dist/DateInput/DateInput.d.ts.map +1 -1
  83. package/dist/DateInput/DateInput.js +22 -2
  84. package/dist/DateInput/NativeDateField.d.ts +10 -0
  85. package/dist/DateInput/NativeDateField.d.ts.map +1 -0
  86. package/dist/DateInput/NativeDateField.js +494 -0
  87. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  88. package/dist/DateInput/TouchDateField.js +82 -23
  89. package/dist/DateInput/index.d.ts +1 -1
  90. package/dist/DateInput/index.d.ts.map +1 -1
  91. package/dist/DateInput/nativeDateSegments.d.ts +22 -0
  92. package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
  93. package/dist/DateInput/nativeDateSegments.js +111 -0
  94. package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
  95. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  96. package/dist/DateTimeInput/DateTimeInput.d.ts +21 -1
  97. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  98. package/dist/DateTimeInput/DateTimeInput.js +406 -12
  99. package/dist/DateTimeInput/index.d.ts +1 -1
  100. package/dist/DateTimeInput/index.d.ts.map +1 -1
  101. package/dist/Dialog/Dialog.d.ts +21 -1
  102. package/dist/Dialog/Dialog.d.ts.map +1 -1
  103. package/dist/Dialog/Dialog.js +110 -58
  104. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  105. package/dist/DropdownMenu/DropdownMenu.js +4 -13
  106. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  107. package/dist/DropdownMenu/DropdownMenuSubMenu.js +6 -5
  108. package/dist/Field/FieldLabel.d.ts.map +1 -1
  109. package/dist/Field/FieldLabel.js +9 -1
  110. package/dist/Field/InputClearButton.d.ts +9 -3
  111. package/dist/Field/InputClearButton.d.ts.map +1 -1
  112. package/dist/Field/InputClearButton.js +14 -3
  113. package/dist/FileInput/FileInput.d.ts.map +1 -1
  114. package/dist/FileInput/FileInput.js +3 -2
  115. package/dist/Heading/Heading.d.ts.map +1 -1
  116. package/dist/Heading/Heading.js +6 -3
  117. package/dist/HoverCard/HoverCard.d.ts +6 -0
  118. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  119. package/dist/HoverCard/HoverCard.js +104 -3
  120. package/dist/HoverCard/useHoverCard.d.ts +19 -2
  121. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  122. package/dist/HoverCard/useHoverCard.js +74 -26
  123. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
  124. package/dist/Indicator/CheckboxIndicator.js +6 -2
  125. package/dist/Item/Item.d.ts.map +1 -1
  126. package/dist/Item/Item.js +4 -2
  127. package/dist/Kbd/Kbd.d.ts.map +1 -1
  128. package/dist/Kbd/Kbd.js +2 -19
  129. package/dist/Layer/LayerDepthContext.d.ts +52 -0
  130. package/dist/Layer/LayerDepthContext.d.ts.map +1 -0
  131. package/dist/Layer/LayerDepthContext.js +66 -0
  132. package/dist/Layer/gestureCounter.d.ts +8 -0
  133. package/dist/Layer/gestureCounter.d.ts.map +1 -0
  134. package/dist/Layer/gestureCounter.js +53 -0
  135. package/dist/Layer/index.d.ts +3 -0
  136. package/dist/Layer/index.d.ts.map +1 -1
  137. package/dist/Layer/index.js +4 -0
  138. package/dist/Layer/layerStack.d.ts +98 -0
  139. package/dist/Layer/layerStack.d.ts.map +1 -0
  140. package/dist/Layer/layerStack.js +306 -0
  141. package/dist/Layer/useLayer.d.ts +23 -13
  142. package/dist/Layer/useLayer.d.ts.map +1 -1
  143. package/dist/Layer/useLayer.js +128 -8
  144. package/dist/Layer/useLayerDismissal.d.ts +93 -0
  145. package/dist/Layer/useLayerDismissal.d.ts.map +1 -0
  146. package/dist/Layer/useLayerDismissal.js +91 -0
  147. package/dist/Lightbox/Lightbox.d.ts +1 -0
  148. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  149. package/dist/Lightbox/Lightbox.js +103 -81
  150. package/dist/List/List.d.ts +1 -1
  151. package/dist/List/List.d.ts.map +1 -1
  152. package/dist/List/List.js +15 -4
  153. package/dist/Markdown/Markdown.d.ts +1 -1
  154. package/dist/Markdown/Markdown.d.ts.map +1 -1
  155. package/dist/Markdown/Markdown.js +20 -7
  156. package/dist/Markdown/index.d.ts +1 -1
  157. package/dist/Markdown/index.d.ts.map +1 -1
  158. package/dist/Markdown/parser.d.ts +38 -1
  159. package/dist/Markdown/parser.d.ts.map +1 -1
  160. package/dist/Markdown/parser.js +182 -32
  161. package/dist/MetadataList/MetadataListItem.d.ts +1 -1
  162. package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
  163. package/dist/MetadataList/MetadataListItem.js +4 -1
  164. package/dist/MobileNav/MobileNav.d.ts +6 -1
  165. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  166. package/dist/MobileNav/MobileNav.js +61 -36
  167. package/dist/MultiSelector/MultiSelector.d.ts +32 -1
  168. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  169. package/dist/MultiSelector/MultiSelector.js +73 -15
  170. package/dist/MultiSelector/hooks.d.ts +7 -1
  171. package/dist/MultiSelector/hooks.d.ts.map +1 -1
  172. package/dist/MultiSelector/hooks.js +3 -2
  173. package/dist/MultiSelector/index.d.ts +1 -1
  174. package/dist/MultiSelector/index.d.ts.map +1 -1
  175. package/dist/NavIcon/NavIcon.d.ts.map +1 -1
  176. package/dist/NavIcon/NavIcon.js +5 -1
  177. package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
  178. package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
  179. package/dist/NavMenu/NavHeadingMenu.js +9 -5
  180. package/dist/NumberInput/NumberInput.d.ts +6 -1
  181. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  182. package/dist/NumberInput/NumberInput.js +54 -104
  183. package/dist/NumberInput/numberInputCommit.d.ts +34 -0
  184. package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
  185. package/dist/NumberInput/numberInputCommit.js +71 -0
  186. package/dist/NumberInput/numberParser.d.ts +64 -0
  187. package/dist/NumberInput/numberParser.d.ts.map +1 -0
  188. package/dist/NumberInput/numberParser.js +350 -0
  189. package/dist/Outline/Outline.d.ts.map +1 -1
  190. package/dist/Outline/Outline.js +3 -2
  191. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  192. package/dist/OverflowList/OverflowList.js +3 -2
  193. package/dist/Overlay/Overlay.d.ts.map +1 -1
  194. package/dist/Overlay/Overlay.js +3 -2
  195. package/dist/Popover/Popover.d.ts.map +1 -1
  196. package/dist/Popover/Popover.js +1 -9
  197. package/dist/Popover/usePopover.d.ts +7 -41
  198. package/dist/Popover/usePopover.d.ts.map +1 -1
  199. package/dist/Popover/usePopover.js +40 -21
  200. package/dist/PowerSearch/PowerSearch.d.ts +8 -2
  201. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  202. package/dist/PowerSearch/PowerSearch.js +19 -6
  203. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +3 -1
  204. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  205. package/dist/PowerSearch/PowerSearchEditPopover.js +28 -6
  206. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +3 -1
  207. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  208. package/dist/PowerSearch/PowerSearchValueEditor.js +110 -27
  209. package/dist/PowerSearch/types.d.ts +2 -0
  210. package/dist/PowerSearch/types.d.ts.map +1 -1
  211. package/dist/PowerSearch/usePowerSearchSource.d.ts +6 -1
  212. package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
  213. package/dist/PowerSearch/usePowerSearchSource.js +14 -5
  214. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  215. package/dist/ProgressBar/ProgressBar.js +18 -5
  216. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  217. package/dist/Resizable/ResizeHandle.js +3 -2
  218. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  219. package/dist/SegmentedControl/SegmentedControl.js +3 -2
  220. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  221. package/dist/SelectableCard/SelectableCard.js +12 -3
  222. package/dist/Selector/Selector.d.ts +18 -1
  223. package/dist/Selector/Selector.d.ts.map +1 -1
  224. package/dist/Selector/Selector.js +91 -18
  225. package/dist/Selector/hooks.d.ts +7 -1
  226. package/dist/Selector/hooks.d.ts.map +1 -1
  227. package/dist/Selector/hooks.js +3 -2
  228. package/dist/SideNav/SideNav.d.ts.map +1 -1
  229. package/dist/SideNav/SideNav.js +4 -3
  230. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  231. package/dist/SideNav/SideNavHeading.js +8 -7
  232. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  233. package/dist/SideNav/SideNavItem.js +4 -3
  234. package/dist/Slider/Slider.d.ts.map +1 -1
  235. package/dist/Slider/Slider.js +37 -5
  236. package/dist/Spinner/Spinner.d.ts +3 -3
  237. package/dist/Spinner/Spinner.d.ts.map +1 -1
  238. package/dist/Spinner/Spinner.js +130 -78
  239. package/dist/StatusDot/StatusDot.d.ts.map +1 -1
  240. package/dist/StatusDot/StatusDot.js +6 -1
  241. package/dist/Stepper/Step.d.ts +140 -0
  242. package/dist/Stepper/Step.d.ts.map +1 -0
  243. package/dist/Stepper/Step.js +1045 -0
  244. package/dist/Stepper/StepStatus.d.ts +24 -0
  245. package/dist/Stepper/StepStatus.d.ts.map +1 -0
  246. package/dist/Stepper/StepStatus.js +1 -0
  247. package/dist/Stepper/Stepper.d.ts +93 -0
  248. package/dist/Stepper/Stepper.d.ts.map +1 -0
  249. package/dist/Stepper/Stepper.js +184 -0
  250. package/dist/Stepper/StepperContext.d.ts +41 -0
  251. package/dist/Stepper/StepperContext.d.ts.map +1 -0
  252. package/dist/Stepper/StepperContext.js +34 -0
  253. package/dist/Stepper/index.d.ts +8 -0
  254. package/dist/Stepper/index.d.ts.map +1 -0
  255. package/dist/Stepper/index.js +7 -0
  256. package/dist/Stepper/stepper.stylex.d.ts +15 -0
  257. package/dist/Stepper/stepper.stylex.d.ts.map +1 -0
  258. package/dist/Stepper/stepper.stylex.js +20 -0
  259. package/dist/Switch/Switch.d.ts.map +1 -1
  260. package/dist/Switch/Switch.js +8 -3
  261. package/dist/TabList/Tab.d.ts +15 -2
  262. package/dist/TabList/Tab.d.ts.map +1 -1
  263. package/dist/TabList/Tab.js +32 -7
  264. package/dist/TabList/TabList.d.ts +46 -7
  265. package/dist/TabList/TabList.d.ts.map +1 -1
  266. package/dist/TabList/TabList.js +353 -23
  267. package/dist/TabList/TabListContext.d.ts +11 -1
  268. package/dist/TabList/TabListContext.d.ts.map +1 -1
  269. package/dist/TabList/TabListContext.js +11 -2
  270. package/dist/TabList/TabMenu.d.ts.map +1 -1
  271. package/dist/TabList/TabMenu.js +3 -2
  272. package/dist/TabList/index.d.ts +2 -2
  273. package/dist/TabList/index.d.ts.map +1 -1
  274. package/dist/Table/BaseTable.d.ts.map +1 -1
  275. package/dist/Table/BaseTable.js +10 -2
  276. package/dist/Table/Table.d.ts.map +1 -1
  277. package/dist/Table/Table.js +3 -6
  278. package/dist/Table/TableRow.d.ts +16 -5
  279. package/dist/Table/TableRow.d.ts.map +1 -1
  280. package/dist/Table/TableRow.js +16 -5
  281. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  282. package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
  283. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
  284. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  285. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +54 -11
  286. package/dist/Table/plugins/pagination/useTablePagination.d.ts +3 -0
  287. package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
  288. package/dist/Table/plugins/pagination/useTablePagination.js +21 -4
  289. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  290. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
  291. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
  292. package/dist/Table/plugins/rowStatus/useTableRowStatus.js +10 -3
  293. package/dist/Table/plugins/selection/useTableSelection.d.ts +16 -0
  294. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  295. package/dist/Table/plugins/selection/useTableSelection.js +43 -5
  296. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  297. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
  298. package/dist/Table/types.d.ts +22 -4
  299. package/dist/Table/types.d.ts.map +1 -1
  300. package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
  301. package/dist/Table/useBaseTablePlugins.js +5 -0
  302. package/dist/Text/Text.d.ts.map +1 -1
  303. package/dist/Text/Text.js +6 -3
  304. package/dist/TextArea/TextArea.d.ts.map +1 -1
  305. package/dist/TextArea/TextArea.js +16 -10
  306. package/dist/TextInput/TextInput.d.ts.map +1 -1
  307. package/dist/TextInput/TextInput.js +3 -2
  308. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  309. package/dist/TimeInput/TimeInput.js +3 -2
  310. package/dist/Timestamp/Timestamp.d.ts +1 -1
  311. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  312. package/dist/Timestamp/Timestamp.js +15 -21
  313. package/dist/Toast/Toast.d.ts.map +1 -1
  314. package/dist/Toast/Toast.js +22 -7
  315. package/dist/Toast/ToastViewport.d.ts +1 -0
  316. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  317. package/dist/Toast/ToastViewport.js +71 -18
  318. package/dist/Token/Token.d.ts +1 -1
  319. package/dist/Token/Token.d.ts.map +1 -1
  320. package/dist/Token/Token.js +20 -9
  321. package/dist/Token/TokenLink.d.ts +1 -1
  322. package/dist/Token/TokenLink.d.ts.map +1 -1
  323. package/dist/Token/TokenLink.js +7 -4
  324. package/dist/Tokenizer/Tokenizer.d.ts +14 -1
  325. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  326. package/dist/Tokenizer/Tokenizer.js +33 -21
  327. package/dist/Tooltip/Tooltip.d.ts +5 -0
  328. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  329. package/dist/Tooltip/useTooltip.d.ts +5 -0
  330. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  331. package/dist/Tooltip/useTooltip.js +39 -24
  332. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  333. package/dist/TopNav/TopNavHeading.js +5 -4
  334. package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
  335. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  336. package/dist/TopNav/TopNavMegaMenu.js +31 -11
  337. package/dist/TopNav/TopNavMenu.d.ts +1 -1
  338. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  339. package/dist/TopNav/TopNavMenu.js +22 -7
  340. package/dist/TreeList/TreeList.d.ts +1 -1
  341. package/dist/TreeList/TreeList.d.ts.map +1 -1
  342. package/dist/TreeList/TreeList.js +7 -2
  343. package/dist/Typeahead/BaseTypeahead.d.ts +35 -0
  344. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  345. package/dist/Typeahead/BaseTypeahead.js +119 -37
  346. package/dist/Typeahead/Typeahead.d.ts +8 -1
  347. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  348. package/dist/Typeahead/Typeahead.js +5 -2
  349. package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
  350. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  351. package/dist/Typeahead/TypeaheadItem.js +7 -2
  352. package/dist/astryx.css +113 -11
  353. package/dist/hooks/index.d.ts +1 -0
  354. package/dist/hooks/index.d.ts.map +1 -1
  355. package/dist/hooks/index.js +1 -0
  356. package/dist/hooks/useFocusTrap.d.ts +7 -4
  357. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  358. package/dist/hooks/useFocusTrap.js +60 -95
  359. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  360. package/dist/hooks/useHotkeys.js +3 -18
  361. package/dist/hooks/useMergedRefs.d.ts +18 -0
  362. package/dist/hooks/useMergedRefs.d.ts.map +1 -0
  363. package/dist/hooks/useMergedRefs.js +25 -0
  364. package/dist/index.d.ts +1 -0
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +1 -0
  367. package/dist/theme/Theme.d.ts.map +1 -1
  368. package/dist/theme/Theme.js +46 -10
  369. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  370. package/dist/theme/derivedVarRegistry.js +24 -4
  371. package/dist/theme/generateThemeRules.d.ts +21 -0
  372. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  373. package/dist/theme/generateThemeRules.js +26 -0
  374. package/dist/theme/syntax/tokens.d.ts +1 -1
  375. package/dist/theme/syntax/tokens.d.ts.map +1 -1
  376. package/dist/theme/syntax/tokens.js +5 -2
  377. package/dist/utils/groupItems.d.ts +5 -1
  378. package/dist/utils/groupItems.d.ts.map +1 -1
  379. package/dist/utils/groupItems.js +9 -9
  380. package/dist/utils/index.d.ts +1 -1
  381. package/dist/utils/index.d.ts.map +1 -1
  382. package/dist/utils/isApplePlatform.d.ts +18 -0
  383. package/dist/utils/isApplePlatform.d.ts.map +1 -0
  384. package/dist/utils/isApplePlatform.js +37 -0
  385. package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
  386. package/dist/utils/sharedResizeObserver.js +10 -1
  387. package/dist/utils/timeParser.d.ts +1 -1
  388. package/dist/utils/timeParser.d.ts.map +1 -1
  389. package/dist/utils/timeParser.js +26 -12
  390. package/locales/af-ZA.json +6 -6
  391. package/locales/ar-SA.json +6 -6
  392. package/locales/ca-ES.json +5 -5
  393. package/locales/cs-CZ.json +6 -6
  394. package/locales/da-DK.json +6 -6
  395. package/locales/de-DE.json +6 -6
  396. package/locales/el-GR.json +6 -6
  397. package/locales/en.json +163 -11
  398. package/locales/es-ES.json +5 -5
  399. package/locales/fi-FI.json +6 -6
  400. package/locales/fr-FR.json +6 -6
  401. package/locales/he-IL.json +6 -6
  402. package/locales/hu-HU.json +6 -6
  403. package/locales/it-IT.json +6 -6
  404. package/locales/ja-JP.json +6 -6
  405. package/locales/ko-KR.json +6 -6
  406. package/locales/nl-NL.json +6 -6
  407. package/locales/no-NO.json +6 -6
  408. package/locales/pl-PL.json +6 -6
  409. package/locales/pseudo.json +114 -0
  410. package/locales/pt-BR.json +6 -6
  411. package/locales/pt-PT.json +6 -6
  412. package/locales/ro-RO.json +6 -6
  413. package/locales/ru-RU.json +6 -6
  414. package/locales/sr-SP.json +6 -6
  415. package/locales/sv-SE.json +6 -6
  416. package/locales/tr-TR.json +6 -6
  417. package/locales/uk-UA.json +6 -6
  418. package/locales/vi-VN.json +6 -6
  419. package/locales/zh-CN.json +6 -6
  420. package/locales/zh-TW.json +6 -6
  421. package/package.json +8 -3
  422. package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
  423. package/src/AlertDialog/AlertDialog.test.tsx +211 -2
  424. package/src/AlertDialog/AlertDialog.tsx +62 -20
  425. package/src/AppShell/AppShell.tsx +3 -2
  426. package/src/AspectRatio/AspectRatio.doc.mjs +6 -3
  427. package/src/AspectRatio/AspectRatio.test.tsx +57 -10
  428. package/src/AspectRatio/AspectRatio.tsx +40 -1
  429. package/src/Avatar/Avatar.doc.mjs +14 -3
  430. package/src/Avatar/Avatar.test.tsx +97 -0
  431. package/src/Avatar/Avatar.tsx +125 -52
  432. package/src/Avatar/index.ts +2 -2
  433. package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
  434. package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
  435. package/src/AvatarGroup/AvatarGroup.tsx +15 -6
  436. package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
  437. package/src/AvatarGroup/AvatarGroupOverflow.tsx +10 -4
  438. package/src/Banner/Banner.doc.mjs +22 -11
  439. package/src/Banner/Banner.test.tsx +177 -25
  440. package/src/Banner/Banner.tsx +93 -27
  441. package/src/BottomSheet/BottomSheet.test.tsx +123 -0
  442. package/src/BottomSheet/BottomSheet.tsx +17 -4
  443. package/src/BottomSheet/BottomSheetSwitcher.tsx +3 -2
  444. package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
  445. package/src/Button/Button.doc.mjs +24 -1
  446. package/src/Button/Button.test.tsx +32 -4
  447. package/src/Button/Button.tsx +12 -5
  448. package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
  449. package/src/ButtonGroup/ButtonGroup.test.tsx +404 -1
  450. package/src/ButtonGroup/ButtonGroup.tsx +23 -5
  451. package/src/Calendar/Calendar.doc.mjs +7 -6
  452. package/src/Calendar/Calendar.test.tsx +143 -0
  453. package/src/Calendar/Calendar.tsx +30 -26
  454. package/src/Calendar/getInitialFocusDate.test.ts +94 -0
  455. package/src/Calendar/getInitialFocusDate.ts +93 -0
  456. package/src/Calendar/styles.ts +49 -31
  457. package/src/Card/Card.doc.mjs +10 -7
  458. package/src/Card/Card.test.tsx +113 -19
  459. package/src/Card/Card.tsx +67 -89
  460. package/src/Card/index.ts +36 -1
  461. package/src/Carousel/Carousel.tsx +3 -2
  462. package/src/Chat/ChatComposerInput.tsx +5 -1
  463. package/src/Chat/ChatLayout.tsx +3 -2
  464. package/src/Chat/ChatMessageList.doc.mjs +9 -1
  465. package/src/Chat/ChatMessageList.test.tsx +46 -0
  466. package/src/Chat/ChatMessageList.tsx +28 -4
  467. package/src/Chat/ChatTokenizedText.tsx +17 -10
  468. package/src/Chat/useChatComposerTokens.ts +1 -1
  469. package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
  470. package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
  471. package/src/CheckboxInput/CheckboxInput.tsx +8 -2
  472. package/src/ClickableCard/ClickableCard.tsx +3 -2
  473. package/src/CodeBlock/CodeBlock.doc.mjs +16 -4
  474. package/src/CodeBlock/CodeBlock.test.tsx +37 -0
  475. package/src/CodeBlock/CodeBlock.tsx +20 -4
  476. package/src/CodeBlock/highlightRanges.ts +1 -1
  477. package/src/CodeBlock/highlightStyles.ts +13 -13
  478. package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
  479. package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
  480. package/src/ComplexSelector/ComplexSelector.test.tsx +32 -0
  481. package/src/ComplexSelector/ComplexSelector.tsx +1 -3
  482. package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
  483. package/src/ContextMenu/ContextMenu.tsx +4 -3
  484. package/src/DateInput/DateInput.doc.mjs +16 -0
  485. package/src/DateInput/DateInput.tsx +55 -2
  486. package/src/DateInput/DateInputTouch.test.tsx +146 -32
  487. package/src/DateInput/NativeDateField.test.tsx +635 -0
  488. package/src/DateInput/NativeDateField.tsx +641 -0
  489. package/src/DateInput/TouchDateField.tsx +108 -24
  490. package/src/DateInput/index.ts +1 -0
  491. package/src/DateInput/nativeDateSegments.ts +127 -0
  492. package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
  493. package/src/DateRangeInput/DateRangeInput.test.tsx +22 -0
  494. package/src/DateRangeInput/DateRangeInput.tsx +4 -2
  495. package/src/DateTimeInput/DateTimeInput.doc.mjs +18 -0
  496. package/src/DateTimeInput/DateTimeInput.test.tsx +1088 -0
  497. package/src/DateTimeInput/DateTimeInput.tsx +556 -24
  498. package/src/DateTimeInput/index.ts +1 -0
  499. package/src/Dialog/Dialog.doc.mjs +8 -3
  500. package/src/Dialog/Dialog.test.tsx +429 -2
  501. package/src/Dialog/Dialog.tsx +133 -58
  502. package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
  503. package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
  504. package/src/DropdownMenu/DropdownMenu.tsx +4 -13
  505. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +8 -5
  506. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +8 -11
  507. package/src/Field/Field.doc.mjs +13 -2
  508. package/src/Field/FieldLabel.test.tsx +29 -0
  509. package/src/Field/FieldLabel.tsx +7 -0
  510. package/src/Field/InputClearButton.test.tsx +15 -1
  511. package/src/Field/InputClearButton.tsx +28 -4
  512. package/src/FileInput/FileInput.tsx +3 -2
  513. package/src/Heading/Heading.test.tsx +23 -1
  514. package/src/Heading/Heading.tsx +6 -3
  515. package/src/HoverCard/HoverCard.doc.mjs +13 -2
  516. package/src/HoverCard/HoverCard.test.tsx +154 -4
  517. package/src/HoverCard/HoverCard.tsx +143 -3
  518. package/src/HoverCard/useHoverCard.tsx +104 -33
  519. package/src/Indicator/CheckboxIndicator.tsx +14 -8
  520. package/src/Indicator/Indicator.doc.mjs +2 -0
  521. package/src/Item/Item.tsx +5 -4
  522. package/src/Kbd/Kbd.tsx +2 -19
  523. package/src/Layer/LayerDepthContext.tsx +62 -0
  524. package/src/Layer/gestureCounter.ts +57 -0
  525. package/src/Layer/index.ts +9 -0
  526. package/src/Layer/layerDismissalFamilies.test.tsx +359 -0
  527. package/src/Layer/layerDismissalInvariants.test.tsx +417 -0
  528. package/src/Layer/layerStack.ts +362 -0
  529. package/src/Layer/useLayer.test.tsx +324 -15
  530. package/src/Layer/useLayer.tsx +164 -8
  531. package/src/Layer/useLayerDismissal.test.tsx +469 -0
  532. package/src/Layer/useLayerDismissal.ts +173 -0
  533. package/src/Layout/Layout.doc.mjs +2 -2
  534. package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
  535. package/src/Lightbox/Lightbox.doc.mjs +12 -0
  536. package/src/Lightbox/Lightbox.tsx +124 -102
  537. package/src/Link/Link.doc.mjs +39 -0
  538. package/src/List/List.test.tsx +38 -0
  539. package/src/List/List.tsx +8 -1
  540. package/src/Markdown/Markdown.doc.mjs +5 -0
  541. package/src/Markdown/Markdown.test.tsx +37 -0
  542. package/src/Markdown/Markdown.tsx +16 -5
  543. package/src/Markdown/incremental.test.ts +16 -2
  544. package/src/Markdown/index.ts +1 -0
  545. package/src/Markdown/parser.perf.test.ts +96 -1
  546. package/src/Markdown/parser.test.ts +178 -2
  547. package/src/Markdown/parser.ts +253 -32
  548. package/src/MetadataList/MetadataList.test.tsx +75 -2
  549. package/src/MetadataList/MetadataListItem.tsx +5 -2
  550. package/src/MobileNav/MobileNav.tsx +62 -36
  551. package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
  552. package/src/MultiSelector/MultiSelector.doc.mjs +49 -1
  553. package/src/MultiSelector/MultiSelector.test.tsx +311 -0
  554. package/src/MultiSelector/MultiSelector.tsx +151 -15
  555. package/src/MultiSelector/hooks.ts +9 -2
  556. package/src/MultiSelector/index.ts +1 -0
  557. package/src/NavIcon/NavIcon.doc.mjs +8 -2
  558. package/src/NavIcon/NavIcon.test.tsx +9 -0
  559. package/src/NavIcon/NavIcon.tsx +5 -1
  560. package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
  561. package/src/NavMenu/NavHeadingMenu.tsx +9 -5
  562. package/src/NumberInput/NumberInput.doc.mjs +31 -7
  563. package/src/NumberInput/NumberInput.test.tsx +436 -8
  564. package/src/NumberInput/NumberInput.tsx +62 -114
  565. package/src/NumberInput/numberInputCommit.test.ts +72 -0
  566. package/src/NumberInput/numberInputCommit.ts +103 -0
  567. package/src/NumberInput/numberParser.docblock.test.ts +234 -0
  568. package/src/NumberInput/numberParser.test.ts +222 -0
  569. package/src/NumberInput/numberParser.ts +403 -0
  570. package/src/Outline/Outline.tsx +3 -2
  571. package/src/OverflowList/OverflowList.tsx +3 -2
  572. package/src/Overlay/Overlay.tsx +3 -2
  573. package/src/Pagination/Pagination.test.tsx +3 -2
  574. package/src/Popover/Popover.test.tsx +14 -0
  575. package/src/Popover/Popover.tsx +1 -9
  576. package/src/Popover/usePopover.tsx +57 -32
  577. package/src/PowerSearch/PowerSearch.doc.mjs +160 -28
  578. package/src/PowerSearch/PowerSearch.test.tsx +240 -1
  579. package/src/PowerSearch/PowerSearch.tsx +34 -5
  580. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +288 -0
  581. package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
  582. package/src/PowerSearch/PowerSearchValueEditor.test.tsx +111 -1
  583. package/src/PowerSearch/PowerSearchValueEditor.tsx +124 -10
  584. package/src/PowerSearch/types.ts +2 -0
  585. package/src/PowerSearch/usePowerSearchSource.test.ts +82 -2
  586. package/src/PowerSearch/usePowerSearchSource.ts +13 -3
  587. package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
  588. package/src/ProgressBar/ProgressBar.test.tsx +24 -0
  589. package/src/ProgressBar/ProgressBar.tsx +28 -8
  590. package/src/Resizable/ResizeHandle.tsx +3 -2
  591. package/src/SegmentedControl/SegmentedControl.tsx +3 -2
  592. package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
  593. package/src/SelectableCard/SelectableCard.tsx +19 -2
  594. package/src/Selector/Selector.doc.mjs +26 -1
  595. package/src/Selector/Selector.test.tsx +346 -1
  596. package/src/Selector/Selector.tsx +148 -21
  597. package/src/Selector/hooks.ts +17 -2
  598. package/src/SideNav/SideNav.doc.mjs +6 -6
  599. package/src/SideNav/SideNav.tsx +4 -2
  600. package/src/SideNav/SideNavHeading.tsx +12 -12
  601. package/src/SideNav/SideNavItem.tsx +4 -2
  602. package/src/Slider/Slider.test.tsx +106 -1
  603. package/src/Slider/Slider.tsx +55 -3
  604. package/src/Spinner/Spinner.test.tsx +147 -1
  605. package/src/Spinner/Spinner.tsx +120 -101
  606. package/src/StatusDot/StatusDot.doc.mjs +8 -2
  607. package/src/StatusDot/StatusDot.test.tsx +9 -0
  608. package/src/StatusDot/StatusDot.tsx +7 -1
  609. package/src/Stepper/Step.doc.mjs +98 -0
  610. package/src/Stepper/Step.tsx +1638 -0
  611. package/src/Stepper/StepStatus.ts +26 -0
  612. package/src/Stepper/Stepper.doc.mjs +370 -0
  613. package/src/Stepper/Stepper.test.tsx +1024 -0
  614. package/src/Stepper/Stepper.tsx +258 -0
  615. package/src/Stepper/StepperContext.ts +71 -0
  616. package/src/Stepper/index.ts +18 -0
  617. package/src/Stepper/stepper.stylex.ts +19 -0
  618. package/src/Switch/Switch.doc.mjs +2 -0
  619. package/src/Switch/Switch.test.tsx +10 -0
  620. package/src/Switch/Switch.tsx +6 -2
  621. package/src/TabList/Tab.doc.mjs +13 -1
  622. package/src/TabList/Tab.tsx +67 -7
  623. package/src/TabList/TabList.doc.mjs +22 -6
  624. package/src/TabList/TabList.test.tsx +559 -0
  625. package/src/TabList/TabList.tsx +490 -22
  626. package/src/TabList/TabListContext.ts +13 -2
  627. package/src/TabList/TabMenu.tsx +3 -2
  628. package/src/TabList/index.ts +6 -2
  629. package/src/Table/BaseTable.tsx +12 -4
  630. package/src/Table/Table.doc.mjs +9 -2
  631. package/src/Table/Table.test.tsx +132 -14
  632. package/src/Table/Table.tsx +3 -8
  633. package/src/Table/TableBody.doc.mjs +40 -0
  634. package/src/Table/TableFooter.doc.mjs +40 -0
  635. package/src/Table/TableHeader.doc.mjs +40 -0
  636. package/src/Table/TableRow.tsx +16 -5
  637. package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
  638. package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
  639. package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +112 -0
  640. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +100 -0
  641. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +67 -12
  642. package/src/Table/plugins/pagination/useTablePagination.test.tsx +34 -4
  643. package/src/Table/plugins/pagination/useTablePagination.tsx +35 -3
  644. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -2
  645. package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +13 -7
  646. package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +12 -3
  647. package/src/Table/plugins/selection/useTableSelection.test.tsx +138 -0
  648. package/src/Table/plugins/selection/useTableSelection.tsx +63 -7
  649. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
  650. package/src/Table/types.ts +22 -4
  651. package/src/Table/useBaseTablePlugins.ts +5 -0
  652. package/src/Table/useTableGroupedRows.doc.mjs +5 -4
  653. package/src/Table/useTablePagination.doc.mjs +7 -0
  654. package/src/Table/useTableRowStatus.doc.mjs +1 -1
  655. package/src/Table/useTableSelection.doc.mjs +31 -0
  656. package/src/Text/Text.test.tsx +67 -1
  657. package/src/Text/Text.tsx +6 -3
  658. package/src/TextArea/TextArea.doc.mjs +12 -2
  659. package/src/TextArea/TextArea.test.tsx +11 -0
  660. package/src/TextArea/TextArea.tsx +37 -24
  661. package/src/TextInput/TextInput.doc.mjs +10 -0
  662. package/src/TextInput/TextInput.tsx +3 -2
  663. package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
  664. package/src/TimeInput/TimeInput.tsx +2 -2
  665. package/src/Timestamp/Timestamp.test.tsx +58 -0
  666. package/src/Timestamp/Timestamp.tsx +12 -10
  667. package/src/Toast/Toast.doc.mjs +26 -12
  668. package/src/Toast/Toast.tsx +28 -4
  669. package/src/Toast/ToastViewport.test.tsx +536 -8
  670. package/src/Toast/ToastViewport.tsx +81 -12
  671. package/src/Token/Token.test.tsx +95 -0
  672. package/src/Token/Token.tsx +15 -10
  673. package/src/Token/TokenLink.tsx +14 -5
  674. package/src/Tokenizer/Tokenizer.doc.mjs +43 -3
  675. package/src/Tokenizer/Tokenizer.test.tsx +161 -0
  676. package/src/Tokenizer/Tokenizer.tsx +53 -24
  677. package/src/Toolbar/Toolbar.doc.mjs +5 -0
  678. package/src/Tooltip/Tooltip.doc.mjs +5 -0
  679. package/src/Tooltip/Tooltip.test.tsx +32 -0
  680. package/src/Tooltip/Tooltip.tsx +5 -0
  681. package/src/Tooltip/useTooltip.tsx +47 -24
  682. package/src/TopNav/TopNavHeading.tsx +5 -4
  683. package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
  684. package/src/TopNav/TopNavMegaMenu.tsx +47 -5
  685. package/src/TopNav/TopNavMenu.test.tsx +133 -1
  686. package/src/TopNav/TopNavMenu.tsx +38 -7
  687. package/src/TreeList/TreeList.test.tsx +49 -0
  688. package/src/TreeList/TreeList.tsx +7 -2
  689. package/src/Typeahead/BaseTypeahead.doc.mjs +24 -0
  690. package/src/Typeahead/BaseTypeahead.tsx +181 -39
  691. package/src/Typeahead/Typeahead.doc.mjs +11 -0
  692. package/src/Typeahead/Typeahead.test.tsx +203 -0
  693. package/src/Typeahead/Typeahead.tsx +12 -2
  694. package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
  695. package/src/Typeahead/TypeaheadItem.tsx +8 -1
  696. package/src/hooks/index.ts +2 -0
  697. package/src/hooks/useAnnounce.doc.mjs +96 -0
  698. package/src/hooks/useContainerReveal.doc.mjs +2 -2
  699. package/src/hooks/useDevWarning.doc.mjs +96 -0
  700. package/src/hooks/useFocusTrap.test.tsx +14 -0
  701. package/src/hooks/useFocusTrap.ts +62 -111
  702. package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
  703. package/src/hooks/useHotkeys.ts +3 -18
  704. package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
  705. package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
  706. package/src/hooks/useInteractiveRole.doc.mjs +119 -0
  707. package/src/hooks/useLongPress.doc.mjs +123 -0
  708. package/src/hooks/useMergedRefs.doc.mjs +79 -0
  709. package/src/hooks/useMergedRefs.test.tsx +62 -0
  710. package/src/hooks/useMergedRefs.ts +36 -0
  711. package/src/hooks/useTypeahead.doc.mjs +153 -0
  712. package/src/index.ts +1 -0
  713. package/src/raw-import.d.ts +14 -0
  714. package/src/theme/MediaTheme.doc.mjs +5 -5
  715. package/src/theme/Theme.test.tsx +104 -2
  716. package/src/theme/Theme.tsx +49 -14
  717. package/src/theme/defineTheme.test.ts +23 -0
  718. package/src/theme/derivedVarRegistry.test.ts +26 -3
  719. package/src/theme/derivedVarRegistry.ts +23 -4
  720. package/src/theme/generateThemeRules.test.ts +99 -1
  721. package/src/theme/generateThemeRules.ts +28 -0
  722. package/src/theme/syntax/tokens.ts +5 -2
  723. package/src/utils/groupItems.ts +12 -6
  724. package/src/utils/index.ts +1 -1
  725. package/src/utils/isApplePlatform.test.ts +61 -0
  726. package/src/utils/isApplePlatform.ts +37 -0
  727. package/src/utils/sharedResizeObserver.ts +10 -2
  728. package/src/utils/timeParser.test.ts +6 -1
  729. package/src/utils/timeParser.ts +35 -13
  730. package/src/__tests__/inputWidthContract.test.tsx +0 -69
@@ -28,18 +28,19 @@ import React, {
28
28
  type ReactNode,
29
29
  } from 'react';
30
30
  import * as stylex from '@stylexjs/stylex';
31
- import {usePopover} from '../Popover/usePopover';
31
+ import {usePopoverInternal} from '../Popover/usePopover';
32
32
  import {useTooltip} from '../Tooltip';
33
33
  import {Icon, renderIconSlot, type IconType} from '../Icon';
34
34
  import type {IconName} from '../Icon';
35
35
  import {
36
36
  Field,
37
- InputClearButton,
38
37
  inputStatusBorderStyles,
39
38
  inputStatusHoverShadowStyles,
40
39
  inputWrapperStyles,
41
40
  type FieldStatusVariant,
42
41
  } from '../Field';
42
+ import {useKeepLayerOpenProps} from '../Layer/useLayer';
43
+ import {InternalInputClearButton} from '../Field/InputClearButton';
43
44
  import {Divider} from '../Divider';
44
45
  import {Spinner} from '../Spinner';
45
46
  import {PanelSearchInput} from '../Field/PanelSearchInput';
@@ -424,6 +425,11 @@ export type MultiSelectorStatusType = 'warning' | 'error' | 'success';
424
425
 
425
426
  export type {MultiSelectorStatus};
426
427
 
428
+ export interface MultiSelectorSelectedItem {
429
+ value: string;
430
+ label: string;
431
+ }
432
+
427
433
  export interface MultiSelectorProps<
428
434
  T extends MultiSelectorOptionType = MultiSelectorOptionType,
429
435
  > extends Omit<BaseProps, 'onChange' | 'defaultValue'> {
@@ -599,6 +605,25 @@ export interface MultiSelectorProps<
599
605
  */
600
606
  searchPlaceholder?: string;
601
607
 
608
+ /**
609
+ * Content shown in the panel when there are no options to show, and
610
+ * announced in a polite live region when the panel opens. Not shown while
611
+ * `isLoading` — the options have not arrived yet.
612
+ * @default 'No options'
613
+ */
614
+ emptyText?: ReactNode;
615
+
616
+ /**
617
+ * Content shown in the panel when a search query matches no options, and
618
+ * announced in a polite live region at the same time.
619
+ *
620
+ * The panel message is `role="presentation"`, so the live region is the only
621
+ * route to assistive tech: a string is announced verbatim, a richer node
622
+ * falls back to the default text since it cannot be spoken.
623
+ * @default 'No results found'
624
+ */
625
+ emptySearchText?: ReactNode;
626
+
602
627
  /**
603
628
  * How to display selected items in the trigger.
604
629
  * - 'count': "3 selected"
@@ -608,6 +633,17 @@ export interface MultiSelectorProps<
608
633
  */
609
634
  triggerDisplay?: 'count' | 'labels' | 'badges';
610
635
 
636
+ /**
637
+ * Formats the trigger text when triggerDisplay is 'count' or 'labels'.
638
+ * Receives the selected items (value plus resolved label, in selection
639
+ * order) and returns the full trigger text; the count is `items.length`.
640
+ * Not called when nothing is selected — the placeholder shows instead — and
641
+ * not called for triggerDisplay 'badges', which renders Badge elements
642
+ * rather than text.
643
+ * @default items => `${items.length} selected` for 'count', "A, B, C, +N" for 'labels'
644
+ */
645
+ formatValue?: (items: MultiSelectorSelectedItem[]) => string;
646
+
611
647
  /**
612
648
  * Maximum number of badges to show before showing "+N".
613
649
  * Only used when triggerDisplay is 'badges'.
@@ -710,7 +746,10 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
710
746
  selectAllLabel: selectAllLabelFromProps,
711
747
  hasSearch = false,
712
748
  searchPlaceholder: searchPlaceholderFromProps,
749
+ emptyText: emptyTextFromProps,
750
+ emptySearchText: emptySearchTextFromProps,
713
751
  triggerDisplay = 'count',
752
+ formatValue,
714
753
  maxBadges = 3,
715
754
  renderOption,
716
755
  indicatorPosition = 'start',
@@ -730,6 +769,9 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
730
769
  selectAllLabelFromProps ?? t('@astryx.multiSelector.selectAll');
731
770
  const searchPlaceholder =
732
771
  searchPlaceholderFromProps ?? t('@astryx.multiSelector.searchPlaceholder');
772
+ const emptyText = emptyTextFromProps ?? t('@astryx.multiSelector.empty');
773
+ const emptySearchText =
774
+ emptySearchTextFromProps ?? t('@astryx.multiSelector.emptySearchResults');
733
775
  const size = useSize(sizeProp, 'md');
734
776
  const effectiveStatusVariant =
735
777
  variant === 'ghost' && statusVariant === 'attached'
@@ -804,6 +846,19 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
804
846
  // Announce selection-count changes politely (comboboxes-7 announce path).
805
847
  // Toggling options / select-all previously produced no audible feedback.
806
848
  const announce = useAnnounce();
849
+
850
+ // The panel's empty message is role="presentation" and reaches assistive tech
851
+ // only through this live region, so the region has to speak whatever the
852
+ // panel shows. A ReactNode override cannot be spoken; fall back to the
853
+ // catalog copy for that case rather than announcing nothing.
854
+ const emptyAnnouncement =
855
+ typeof emptyText === 'string'
856
+ ? emptyText
857
+ : t('@astryx.multiSelector.empty');
858
+ const emptySearchAnnouncement =
859
+ typeof emptySearchText === 'string'
860
+ ? emptySearchText
861
+ : t('@astryx.multiSelector.emptySearchResults');
807
862
  const announceSelection = useCallback(
808
863
  (nextValue: string[]) => {
809
864
  const total = selectableItems.length;
@@ -889,7 +944,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
889
944
  triggerRef.current?.focus();
890
945
  }, [announce]);
891
946
 
892
- const popover = usePopover({
947
+ const popover = usePopoverInternal({
893
948
  hasLightDismiss: true,
894
949
  onHide: handleLayerHide,
895
950
  hasCloseButton: false,
@@ -901,6 +956,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
901
956
  // `usePopover` owns — not on the scrolling list inside it.
902
957
  surfaceTarget: 'multi-selector-popup',
903
958
  });
959
+ const keepOpenProps = useKeepLayerOpenProps(popover.id, popover.isOpen);
904
960
 
905
961
  // Open dropdown on mount when isDefaultOpen is true
906
962
  useEffect(() => {
@@ -923,16 +979,54 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
923
979
  announce('');
924
980
  return;
925
981
  }
982
+ // While isLoading the panel deliberately shows nothing, so announcing a
983
+ // result would put a claim in the one channel the screen has gone quiet
984
+ // for.
985
+ if (isLoading) {
986
+ announce('');
987
+ return;
988
+ }
926
989
  const count = filterOptionsByQuery(selectableItems, nextQuery).length;
927
990
  announce(
928
991
  count === 0
929
- ? t('@astryx.multiSelector.emptySearchResults')
992
+ ? emptySearchAnnouncement
930
993
  : t('@astryx.multiSelector.resultCount', {count}),
931
994
  );
932
995
  },
933
- [announce, selectableItems, t],
996
+ [announce, isLoading, selectableItems, emptySearchAnnouncement, t],
934
997
  );
935
998
 
999
+ // The panel's empty message is role="presentation", so this region is the
1000
+ // only route to assistive tech. It has to watch the STATE rather than the
1001
+ // open event: the panel can become empty either on open or when a fetch
1002
+ // lands with nothing in it, and an open-only announcement leaves the second
1003
+ // case silent while the message sits on screen. The ref makes it fire once
1004
+ // per arrival at that state rather than on every re-render.
1005
+ const announcedEmptyRef = useRef<string | null>(null);
1006
+ useEffect(() => {
1007
+ const isPanelEmpty =
1008
+ popover.isOpen &&
1009
+ !isLoading &&
1010
+ searchQuery === '' &&
1011
+ selectableItems.length === 0;
1012
+ if (!isPanelEmpty) {
1013
+ announcedEmptyRef.current = null;
1014
+ return;
1015
+ }
1016
+ if (announcedEmptyRef.current === emptyAnnouncement) {
1017
+ return;
1018
+ }
1019
+ announcedEmptyRef.current = emptyAnnouncement;
1020
+ announce(emptyAnnouncement);
1021
+ }, [
1022
+ popover.isOpen,
1023
+ isLoading,
1024
+ searchQuery,
1025
+ selectableItems.length,
1026
+ emptyAnnouncement,
1027
+ announce,
1028
+ ]);
1029
+
936
1030
  // Handle toggle
937
1031
  // Clear all selected values. Shared by the clear button and the keyboard
938
1032
  // Delete/Backspace path so clearing is reachable without a mouse.
@@ -1070,6 +1164,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1070
1164
  onKeyDown,
1071
1165
  onItemMouseEnter,
1072
1166
  } = useMultiCombobox({
1167
+ wasJustDismissed: popover.wasJustDismissed,
1073
1168
  selectableItems: sortedItems,
1074
1169
  isDisabled,
1075
1170
  isOpen: popover.isOpen,
@@ -1107,13 +1202,18 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1107
1202
  }, [popover.isOpen, highlightedIndex, getItemId]);
1108
1203
 
1109
1204
  // Build trigger display content
1110
- const selectedLabels = useMemo(() => {
1205
+ const selectedItems = useMemo(() => {
1111
1206
  return optimisticValue.map(v => {
1112
1207
  const item = selectableItems.find(i => i.value === v);
1113
- return item?.label ?? v;
1208
+ return {value: v, label: item?.label ?? v};
1114
1209
  });
1115
1210
  }, [optimisticValue, selectableItems]);
1116
1211
 
1212
+ const selectedLabels = useMemo(
1213
+ () => selectedItems.map(item => item.label),
1214
+ [selectedItems],
1215
+ );
1216
+
1117
1217
  const renderTriggerContent = useCallback(() => {
1118
1218
  if (optimisticValue.length === 0) {
1119
1219
  return <span {...stylex.props(styles.triggerText)}>{placeholder}</span>;
@@ -1123,7 +1223,8 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1123
1223
  case 'count':
1124
1224
  return (
1125
1225
  <span {...stylex.props(styles.triggerText)}>
1126
- {optimisticValue.length} selected
1226
+ {formatValue?.(selectedItems) ??
1227
+ `${optimisticValue.length} selected`}
1127
1228
  </span>
1128
1229
  );
1129
1230
 
@@ -1134,7 +1235,11 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1134
1235
  remaining > 0
1135
1236
  ? `${displayed.join(', ')}, +${remaining}`
1136
1237
  : displayed.join(', ');
1137
- return <span {...stylex.props(styles.triggerText)}>{text}</span>;
1238
+ return (
1239
+ <span {...stylex.props(styles.triggerText)}>
1240
+ {formatValue?.(selectedItems) ?? text}
1241
+ </span>
1242
+ );
1138
1243
  }
1139
1244
 
1140
1245
  case 'badges': {
@@ -1154,7 +1259,15 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1154
1259
  );
1155
1260
  }
1156
1261
  }
1157
- }, [optimisticValue, triggerDisplay, selectedLabels, placeholder, maxBadges]);
1262
+ }, [
1263
+ optimisticValue,
1264
+ triggerDisplay,
1265
+ selectedItems,
1266
+ selectedLabels,
1267
+ placeholder,
1268
+ formatValue,
1269
+ maxBadges,
1270
+ ]);
1158
1271
 
1159
1272
  // Render search input
1160
1273
  const renderSearch = useCallback(() => {
@@ -1381,7 +1494,10 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1381
1494
  // message out of the listbox's accessibility tree (role="listbox" only
1382
1495
  // permits option/group children); the no-results outcome is announced
1383
1496
  // via the result-count live region instead.
1384
- if (realItemCount === 0) {
1497
+ // While isLoading the options have not arrived yet, so asserting either
1498
+ // message would be a claim the component cannot make; the trigger's
1499
+ // spinner covers it.
1500
+ if (realItemCount === 0 && !isLoading) {
1385
1501
  elements.push(
1386
1502
  <div
1387
1503
  key="empty"
@@ -1390,7 +1506,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1390
1506
  themeProps('multi-selector-empty-state'),
1391
1507
  stylex.props(styles.emptyState),
1392
1508
  )}>
1393
- No results found
1509
+ {searchQuery ? emptySearchText : emptyText}
1394
1510
  </div>,
1395
1511
  );
1396
1512
  return elements;
@@ -1420,8 +1536,17 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1420
1536
  // A standalone divider between groups would orphan itself once its
1421
1537
  // neighbors are filtered out, so skip it while searching.
1422
1538
  if (!isSearching) {
1539
+ // role="listbox" only permits option/group children; the divider
1540
+ // carries no information the options don't, so it's hidden from
1541
+ // the accessibility tree entirely rather than exposing
1542
+ // role="separator" as a disallowed listbox child (axe
1543
+ // aria-required-children).
1423
1544
  elements.push(
1424
- <Divider key={`divider-${i}`} xstyle={styles.divider} />,
1545
+ <Divider
1546
+ key={`divider-${i}`}
1547
+ aria-hidden="true"
1548
+ xstyle={styles.divider}
1549
+ />,
1425
1550
  );
1426
1551
  }
1427
1552
  } else if (isSection(option)) {
@@ -1471,7 +1596,16 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1471
1596
  flushPending();
1472
1597
 
1473
1598
  return elements;
1474
- }, [options, renderItem, sortedItems, searchQuery, hasSelectAll]);
1599
+ }, [
1600
+ options,
1601
+ renderItem,
1602
+ sortedItems,
1603
+ searchQuery,
1604
+ hasSelectAll,
1605
+ isLoading,
1606
+ emptyText,
1607
+ emptySearchText,
1608
+ ]);
1475
1609
 
1476
1610
  // The detached message box renders its own leading status icon, so the
1477
1611
  // on-field icon would duplicate it — keep the chevron indicator instead.
@@ -1573,7 +1707,8 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1573
1707
  ))}
1574
1708
  {isBusy && <Spinner size="sm" />}
1575
1709
  {hasClear && value.length > 0 && !isDisabled && (
1576
- <InputClearButton
1710
+ <InternalInputClearButton
1711
+ {...keepOpenProps}
1577
1712
  label={t('@astryx.multiSelector.clearAll', {label})}
1578
1713
  onClick={handleClear}
1579
1714
  iconClassName={stableClassName('multi-selector-clear-icon')}
@@ -1592,6 +1727,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
1592
1727
  type="button"
1593
1728
  aria-label={t(STATUS_BUTTON_LABEL_KEY[status.type])}
1594
1729
  aria-describedby={statusTooltip.describedBy}
1730
+ {...keepOpenProps}
1595
1731
  onClick={e => e.stopPropagation()}
1596
1732
  {...stylex.props(
1597
1733
  focusOutlineStyles.focusVisible,
@@ -34,6 +34,12 @@ interface UseMultiComboboxOptions {
34
34
  * The Delete/Backspace clear path is skipped when false.
35
35
  */
36
36
  hasValue?: boolean;
37
+ /**
38
+ * Whether the browser's light dismiss just closed the popup. The trigger
39
+ * click that follows belongs to that same press, so acting on it would
40
+ * reopen the popup the user just closed.
41
+ */
42
+ wasJustDismissed?: () => boolean;
37
43
  listboxId: string;
38
44
  }
39
45
 
@@ -62,6 +68,7 @@ export function useMultiCombobox({
62
68
  onToggle,
63
69
  onClear,
64
70
  hasValue = false,
71
+ wasJustDismissed,
65
72
  listboxId,
66
73
  }: UseMultiComboboxOptions): UseMultiComboboxResult {
67
74
  const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);
@@ -87,7 +94,7 @@ export function useMultiCombobox({
87
94
  }, [onClose]);
88
95
 
89
96
  const onTriggerClick = useCallback(() => {
90
- if (isDisabled) {
97
+ if (isDisabled || wasJustDismissed?.()) {
91
98
  return;
92
99
  }
93
100
  if (isOpen) {
@@ -98,7 +105,7 @@ export function useMultiCombobox({
98
105
  setHighlightedIndex(0);
99
106
  }
100
107
  }
101
- }, [isDisabled, isOpen, onOpen, closeAndReset, hasSearch]);
108
+ }, [isDisabled, wasJustDismissed, isOpen, onOpen, closeAndReset, hasSearch]);
102
109
 
103
110
  const onItemMouseEnter = useCallback(
104
111
  (item: MultiSelectorOptionData, index: number) => {
@@ -13,6 +13,7 @@ export {
13
13
  type MultiSelectorProps,
14
14
  type MultiSelectorSize,
15
15
  type MultiSelectorStatusType,
16
+ type MultiSelectorSelectedItem,
16
17
  } from './MultiSelector';
17
18
  export type {
18
19
  MultiSelectorOptionType,
@@ -22,7 +22,10 @@ export const docs = {
22
22
  ],
23
23
  theming: {
24
24
  targets: [
25
- {className: 'astryx-navicon'},
25
+ {className: 'astryx-nav-icon'},
26
+ // Still emitted beside the names above, so themes written against
27
+ // them keep working. Drop in the next major.
28
+ {className: 'astryx-navicon', deprecatedFor: 'nav-icon'},
26
29
  ],
27
30
  },
28
31
  usage: {
@@ -51,7 +54,10 @@ export const docsZh = {
51
54
  ],
52
55
  theming: {
53
56
  targets: [
54
- {className: 'astryx-navicon'},
57
+ {className: 'astryx-nav-icon'},
58
+ // Still emitted beside the names above, so themes written against
59
+ // them keep working. Drop in the next major.
60
+ {className: 'astryx-navicon', deprecatedFor: 'nav-icon'},
55
61
  ],
56
62
  },
57
63
  usage: {
@@ -30,3 +30,12 @@ describe('NavIcon', () => {
30
30
  expect(screen.getByTestId('nav-icon')).toBeInTheDocument();
31
31
  });
32
32
  });
33
+
34
+ describe('NavIcon theme target names', () => {
35
+ it('renders the deprecated class beside the current one', () => {
36
+ render(<NavIcon icon={<span>Icon</span>} data-testid="nav-icon" />);
37
+ const root = screen.getByTestId('nav-icon');
38
+ expect(root).toHaveClass('astryx-nav-icon');
39
+ expect(root).toHaveClass('astryx-navicon');
40
+ });
41
+ });
@@ -79,7 +79,11 @@ export function NavIcon({
79
79
  <span
80
80
  ref={ref}
81
81
  {...mergeProps(
82
- themeProps('navicon'),
82
+ themeProps('nav-icon', undefined, {
83
+ // `navicon` ran the compound name together; themes styling it keep
84
+ // working until the next major.
85
+ legacyNames: ['navicon'],
86
+ }),
83
87
  stylex.props(styles.base, xstyle),
84
88
  className,
85
89
  style,
@@ -321,3 +321,33 @@ describe('context forwarding', () => {
321
321
  expect(closeMenu).toHaveBeenCalledOnce();
322
322
  });
323
323
  });
324
+
325
+ describe('NavHeadingMenu pass-through props', () => {
326
+ it('forwards pass-through props to the menu element', () => {
327
+ render(
328
+ <NavHeadingMenu aria-label="Products" id="products" data-source="nav">
329
+ <NavHeadingMenuItem label="First" />
330
+ </NavHeadingMenu>,
331
+ );
332
+ const menu = screen.getByRole('menu');
333
+ expect(menu).toHaveAttribute('aria-label', 'Products');
334
+ expect(menu).toHaveAttribute('id', 'products');
335
+ expect(menu).toHaveAttribute('data-source', 'nav');
336
+ });
337
+
338
+ it('runs a caller onKeyDown alongside the menu keyboard model', async () => {
339
+ const user = userEvent.setup();
340
+ const onKeyDown = vi.fn();
341
+ render(
342
+ <NavHeadingMenu onKeyDown={onKeyDown}>
343
+ <NavHeadingMenuItem label="First" />
344
+ <NavHeadingMenuItem label="Second" />
345
+ </NavHeadingMenu>,
346
+ );
347
+ const items = screen.getAllByRole('menuitem');
348
+ items[0].focus();
349
+ await user.keyboard('{ArrowDown}');
350
+ expect(onKeyDown).toHaveBeenCalled();
351
+ expect(items[1]).toHaveFocus();
352
+ });
353
+ });
@@ -15,7 +15,7 @@
15
15
  import React, {useCallback, useMemo, type ReactNode} from 'react';
16
16
  import * as stylex from '@stylexjs/stylex';
17
17
  import {spacingVars} from '../theme/tokens.stylex';
18
- import {mergeProps, mergeRefs} from '../utils';
18
+ import {composeEventHandlers, mergeProps} from '../utils';
19
19
  import type {BaseProps} from '../BaseProps';
20
20
  import {useListFocus} from '../hooks/useListFocus';
21
21
  import {useTypeahead} from '../hooks/useTypeahead';
@@ -26,6 +26,7 @@ import {
26
26
  type NavHeadingMenuSize,
27
27
  } from './NavMenuContext';
28
28
 
29
+ import {useMergedRefs} from '../hooks/useMergedRefs';
29
30
  const styles = stylex.create({
30
31
  root: {
31
32
  display: 'flex',
@@ -95,6 +96,8 @@ export function NavHeadingMenu({
95
96
  className,
96
97
  style: styleProp,
97
98
  'data-testid': testId,
99
+ onKeyDown: onKeyDownProp,
100
+ ...rest
98
101
  }: NavHeadingMenuProps) {
99
102
  const closeCtx = useNavHeadingCloseContext();
100
103
  const closeMenu = closeCtx?.closeMenu;
@@ -162,16 +165,17 @@ export function NavHeadingMenu({
162
165
  return (
163
166
  <NavHeadingMenuContext value={ctx}>
164
167
  <div
165
- ref={mergeRefs(ref, listRef)}
166
- role="menu"
167
- onKeyDown={listKeyDown}
168
+ ref={useMergedRefs(ref, listRef)}
168
169
  data-testid={testId}
169
170
  {...mergeProps(
170
171
  themeProps('nav-heading-menu', {size}),
171
172
  stylex.props(styles.root, sizeStyles[size], xstyle),
172
173
  className,
173
174
  inlineStyle,
174
- )}>
175
+ )}
176
+ {...rest}
177
+ role="menu"
178
+ onKeyDown={composeEventHandlers(onKeyDownProp, listKeyDown)}>
175
179
  {children}
176
180
  </div>
177
181
  </NavHeadingMenuContext>
@@ -35,7 +35,7 @@ export const docs = {
35
35
  name: 'onChange',
36
36
  type: '(value: number) => void',
37
37
  description:
38
- 'Callback fired when input value changes (only on valid input).',
38
+ 'Callback fired when a valid text edit commits on blur or Enter, or when a step or clear control changes the value.',
39
39
  required: true,
40
40
  },
41
41
  {
@@ -61,6 +61,11 @@ export const docs = {
61
61
  description:
62
62
  'Whether the field is optional (mutually exclusive with isRequired).',
63
63
  },
64
+ {
65
+ name: 'onKeyDown',
66
+ type: '(e: KeyboardEvent<HTMLInputElement>) => void',
67
+ description: 'Callback fired on keydown events on the input.',
68
+ },
64
69
  {
65
70
  name: 'isRequired',
66
71
  type: 'boolean',
@@ -123,12 +128,14 @@ export const docs = {
123
128
  {
124
129
  name: 'min',
125
130
  type: 'number | null',
126
- description: 'Minimum value allowed.',
131
+ description:
132
+ 'Minimum value allowed. A smaller entry commits at this value on blur or Enter.',
127
133
  },
128
134
  {
129
135
  name: 'max',
130
136
  type: 'number | null',
131
- description: 'Maximum value allowed.',
137
+ description:
138
+ 'Maximum value allowed. A larger entry commits at this value on blur or Enter.',
132
139
  },
133
140
  {
134
141
  name: 'step',
@@ -237,6 +244,11 @@ export const docs = {
237
244
  description:
238
245
  'A form input for numeric values with built-in validation, min/max constraints, and step controls. Use NumberInput for quantities, measurements, percentages, and similar inputs.',
239
246
  bestPractices: [
247
+ {
248
+ guidance: true,
249
+ description:
250
+ "Let people paste formatted numbers: a pasted 1,234,234,234 is read under the field's locale and commits as 1234234234 on blur. Typing is never intercepted.",
251
+ },
240
252
  {
241
253
  guidance: true,
242
254
  description:
@@ -318,7 +330,8 @@ export const docsZh = {
318
330
  {
319
331
  name: 'onChange',
320
332
  type: '(value: number) => void',
321
- description: '输入值变化时触发的回调(仅在输入有效时触发)。',
333
+ description:
334
+ '有效文本编辑在失焦或按 Enter 时提交;步进或清除控件更改值时也会触发回调。',
322
335
  required: true,
323
336
  },
324
337
  {
@@ -400,12 +413,12 @@ export const docsZh = {
400
413
  {
401
414
  name: 'min',
402
415
  type: 'number | null',
403
- description: '允许的最小值。',
416
+ description: '允许的最小值。更小的输入会在失焦或按 Enter 时提交为该值。',
404
417
  },
405
418
  {
406
419
  name: 'max',
407
420
  type: 'number | null',
408
- description: '允许的最大值。',
421
+ description: '允许的最大值。更大的输入会在失焦或按 Enter 时提交为该值。',
409
422
  },
410
423
  {
411
424
  name: 'step',
@@ -504,6 +517,11 @@ export const docsZh = {
504
517
  description:
505
518
  'A form input for numeric values with built-in validation, min/max constraints, and step controls. Use NumberInput for quantities, measurements, percentages, and similar inputs.',
506
519
  bestPractices: [
520
+ {
521
+ guidance: true,
522
+ description:
523
+ '可以直接粘贴带格式的数字:粘贴 1,234,234,234 会按字段所在区域设置解析,失去焦点时提交为 1234234234。输入过程中不会拦截按键。',
524
+ },
507
525
  {
508
526
  guidance: true,
509
527
  description:
@@ -573,6 +591,11 @@ export const docsDense = {
573
591
  description:
574
592
  'A form input for numeric values with built-in validation, min/max constraints, and step controls. Use NumberInput for quantities, measurements, percentages, and similar inputs.',
575
593
  bestPractices: [
594
+ {
595
+ guidance: true,
596
+ description:
597
+ "Pasted formatted numbers parse: 1,234,234,234 commits as 1234234234 under the field's locale. Typing is never intercepted.",
598
+ },
576
599
  {
577
600
  guidance: true,
578
601
  description:
@@ -635,7 +658,8 @@ export const docsDense = {
635
658
  propDescriptions: {
636
659
  label: 'Label text (always rendered for accessibility).',
637
660
  value: 'Current input value.',
638
- onChange: 'Callback on valid input change.',
661
+ onChange:
662
+ 'Callback when a valid text edit commits on blur/Enter, or a step/clear control changes the value.',
639
663
  size: 'Size variant.',
640
664
  isLabelHidden: 'Visually hide label (still accessible to screen readers).',
641
665
  description: 'Text between label + input.',