@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
@@ -156,6 +156,19 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<
156
156
  hasEntriesOnFocus?: boolean;
157
157
  /** Max dropdown items. @default 10 */
158
158
  maxMenuItems?: number;
159
+ /** Fixed dropdown width in pixels. Never shrinks below the input width. */
160
+ menuWidth?: number;
161
+ /**
162
+ * Minimum query length before the search source is queried. Below it no
163
+ * search runs and the menu stays closed — useful for remote sources where
164
+ * one or two characters match too much to be worth fetching.
165
+ *
166
+ * With `hasCreate`, the "Create" entry rides on the search results, so it
167
+ * also waits for the threshold.
168
+ *
169
+ * @default 1
170
+ */
171
+ minQueryLength?: number;
159
172
  /** Text shown when no results found. @default 'No results found' */
160
173
  emptySearchResultsText?: string;
161
174
  /** Whether the input is disabled. @default false */
@@ -393,6 +406,8 @@ export function Tokenizer<T extends SearchableItem>({
393
406
  placeholder,
394
407
  hasEntriesOnFocus,
395
408
  maxMenuItems,
409
+ menuWidth,
410
+ minQueryLength,
396
411
  emptySearchResultsText,
397
412
  isDisabled = false,
398
413
  htmlName,
@@ -533,36 +548,47 @@ export function Tokenizer<T extends SearchableItem>({
533
548
  () => ({
534
549
  search: async (query: string) => {
535
550
  const results = await searchSource.search(query);
536
- const filtered = results.filter(item => !selectedIds.has(item.id));
537
-
538
- // Append a "Create: X" synthetic item when hasCreate is true,
539
- // the user has typed something, and it doesn't exactly match an
540
- // existing result.
541
- if (hasCreate && query.trim()) {
542
- const trimmed = query.trim();
543
- const alreadyExists =
544
- selectedIds.has(trimmed) ||
545
- filtered.some(
546
- item => item.label.toLowerCase() === trimmed.toLowerCase(),
547
- );
548
- if (!alreadyExists) {
549
- const creatableItem = {
550
- id: `${CREATABLE_ID_PREFIX}${trimmed}`,
551
- label: `Create "${trimmed}"`,
552
- auxiliaryData: {__createdValue: trimmed},
553
- } as unknown as T;
554
- filtered.push(creatableItem);
555
- }
556
- }
557
-
558
- return filtered;
551
+ return results.filter(item => !selectedIds.has(item.id));
559
552
  },
560
553
  bootstrap: async () => {
561
554
  const results = await searchSource.bootstrap();
562
555
  return results.filter(item => !selectedIds.has(item.id));
563
556
  },
564
557
  }),
565
- [searchSource, selectedIds, hasCreate],
558
+ [searchSource, selectedIds],
559
+ );
560
+
561
+ /**
562
+ * The "Create X" entry. It is derived from the typed text, not fetched for
563
+ * it, so it is offered through `__queryEntries` rather than appended to the
564
+ * search results — which is what keeps it available when the query is too
565
+ * short to search. `minQueryLength` is there to avoid a fetch too broad to
566
+ * be worth making; creating `QA` costs no fetch, and a field that can
567
+ * create it should not stop being able to.
568
+ */
569
+ const createEntries = useCallback(
570
+ (query: string, results: T[]): T[] => {
571
+ const trimmed = query.trim();
572
+ if (!hasCreate || trimmed === '') {
573
+ return [];
574
+ }
575
+ const alreadyExists =
576
+ selectedIds.has(trimmed) ||
577
+ results.some(
578
+ item => item.label.toLowerCase() === trimmed.toLowerCase(),
579
+ );
580
+ if (alreadyExists) {
581
+ return [];
582
+ }
583
+ return [
584
+ {
585
+ id: `${CREATABLE_ID_PREFIX}${trimmed}`,
586
+ label: `Create "${trimmed}"`,
587
+ auxiliaryData: {__createdValue: trimmed},
588
+ } as unknown as T,
589
+ ];
590
+ },
591
+ [hasCreate, selectedIds],
566
592
  );
567
593
 
568
594
  const emptySource: SearchSource<T> = useMemo(
@@ -778,6 +804,8 @@ export function Tokenizer<T extends SearchableItem>({
778
804
  placeholder={value.length === 0 ? placeholder : ''}
779
805
  hasEntriesOnFocus={isAtMax ? false : hasEntriesOnFocus}
780
806
  maxMenuItems={maxMenuItems}
807
+ menuWidth={menuWidth}
808
+ minQueryLength={minQueryLength}
781
809
  emptySearchResultsText={emptySearchResultsText}
782
810
  isDisabled={isDisabled}
783
811
  isFocusableDisabled={showsDisabledMessage}
@@ -785,6 +813,7 @@ export function Tokenizer<T extends SearchableItem>({
785
813
  inputId={inputId}
786
814
  ariaDescribedBy={ariaDescribedBy}
787
815
  onChangeQuery={onChangeQuery}
816
+ __queryEntries={createEntries}
788
817
  debounceMs={debounceMs}
789
818
  onKeyDown={handleKeyDown}
790
819
  anchorRef={wrapperRef}
@@ -133,6 +133,11 @@ export const docs = {
133
133
  description: 'Visual variant passed to Section.',
134
134
  default: "'transparent'",
135
135
  },
136
+ {
137
+ name: 'dividers',
138
+ type: "Array<'top' | 'bottom' | 'start' | 'end'>",
139
+ description: 'Borders/dividers rendered around the toolbar.',
140
+ },
136
141
  {
137
142
  name: 'xstyle',
138
143
  type: 'StyleXStyles',
@@ -96,6 +96,11 @@ export const docs = {
96
96
  type: 'boolean',
97
97
  description: 'Whether the tooltip should be shown on mount. Still dismissible.',
98
98
  },
99
+ {
100
+ name: 'isOpen',
101
+ type: 'boolean',
102
+ description: 'Controlled open state for the tooltip.',
103
+ },
99
104
  ],
100
105
  },
101
106
  ],
@@ -276,6 +276,38 @@ describe('Tooltip', () => {
276
276
  expect(onOpenChange).not.toHaveBeenCalledWith(false);
277
277
  });
278
278
  });
279
+
280
+ describe('controlled', () => {
281
+ // Escape asks a controlled tooltip to close by calling this same handler,
282
+ // so a consumer who complies sees the request and then this echo. Pinning
283
+ // the echo here keeps the two straight.
284
+ it('echoes the close through onOpenChange when the consumer flips isOpen', async () => {
285
+ const onOpenChange = vi.fn();
286
+ const {rerender} = render(
287
+ <Tooltip content="Pinned" isOpen onOpenChange={onOpenChange} delay={0}>
288
+ <button type="button">Trigger</button>
289
+ </Tooltip>,
290
+ );
291
+ await waitFor(() => {
292
+ expect(onOpenChange).toHaveBeenCalledWith(true);
293
+ });
294
+ onOpenChange.mockClear();
295
+
296
+ rerender(
297
+ <Tooltip
298
+ content="Pinned"
299
+ isOpen={false}
300
+ onOpenChange={onOpenChange}
301
+ delay={0}>
302
+ <button type="button">Trigger</button>
303
+ </Tooltip>,
304
+ );
305
+
306
+ await waitFor(() => {
307
+ expect(onOpenChange).toHaveBeenCalledWith(false);
308
+ });
309
+ });
310
+ });
279
311
  describe('touch', () => {
280
312
  // The modality is document-global; a tap in one case must not decide the
281
313
  // next one's answer.
@@ -146,6 +146,11 @@ export interface TooltipProps {
146
146
  * - `true`: force-show the tooltip (hover/focus hide is suppressed)
147
147
  * - `false`: force-hide the tooltip
148
148
  * - `undefined`: uncontrolled — hover/focus triggers manage visibility
149
+ *
150
+ * A controlled tooltip still takes Escape when it is the top-most layer, and
151
+ * answers by calling `onOpenChange(false)` without hiding itself — closing is
152
+ * your update's decision, exactly as for a controlled Dialog. Ignore the call
153
+ * and the tip stays, and so does the press: nothing underneath dismisses.
149
154
  */
150
155
  isOpen?: boolean;
151
156
 
@@ -31,8 +31,8 @@ import {
31
31
  type LayerTouchTrigger,
32
32
  } from '../Layer/useTouchTrigger';
33
33
  import {layerAnimations} from '../Layer/layerAnimations.stylex';
34
+ import {useLayerDismissal} from '../Layer/useLayerDismissal';
34
35
  import {themeProps} from '../utils/themeProps';
35
- import {isImeKeyEvent} from '../utils/ime';
36
36
  import {
37
37
  colorVars,
38
38
  radiusVars,
@@ -144,6 +144,11 @@ export interface TooltipOptions {
144
144
  * - `true`: force-show the tooltip (hover/focus hide is suppressed)
145
145
  * - `false`: force-hide the tooltip
146
146
  * - `undefined`: uncontrolled — hover/focus triggers manage visibility
147
+ *
148
+ * A controlled tooltip still takes Escape when it is the top-most layer, and
149
+ * answers by calling `onHide` without hiding itself — closing is your
150
+ * update's decision, exactly as for a controlled Dialog. Ignore the call and
151
+ * the tip stays, and so does the press: nothing underneath dismisses.
147
152
  */
148
153
  isOpen?: boolean;
149
154
 
@@ -518,34 +523,52 @@ export function useTooltip(options: TooltipOptions = {}): TooltipReturn {
518
523
  }
519
524
  }, [isOpen, clearTimeouts, layer]);
520
525
 
521
- // Dismiss on Escape (WCAG 1.4.13 — dismissible). Uncontrolled tooltips only;
522
- // a controlled tooltip's visibility is owned by the consumer. The listener is
523
- // mounted for the lifetime of an uncontrolled tooltip rather than gated on
524
- // `layer.isOpen` (React state, which can lag a frame behind the DOM) —
525
- // `layer.hide()` self-guards and no-ops when the layer is already closed.
526
- // Guarded against IME composition-cancel.
527
- useEffect(() => {
528
- if (isOpen !== undefined) {
529
- return;
530
- }
531
- const handleKeyDown = (e: KeyboardEvent) => {
532
- if (e.key !== 'Escape') {
533
- return;
526
+ // Dismiss on Escape (WCAG 1.4.13 — dismissible) through the shared layer
527
+ // stack. A visible tip is the top-most layer, so it takes the press and
528
+ // consumes it: Escape hides the tip and leaves the dialog underneath open.
529
+ // The user presses Escape again to close that. Consuming (rather than also
530
+ // dismissing what is beneath) keeps one rule with no per-component
531
+ // exceptions, and the failure mode is one extra keystroke instead of a
532
+ // dialog closing under someone who only wanted the tip gone.
533
+ //
534
+ // A controlled tooltip stays on the stack and takes the press like any other
535
+ // layer, but answers it by reporting instead of hiding: `isOpen` is the
536
+ // consumer's value, so only their update may change it. Same contract as a
537
+ // controlled Dialog.
538
+ useLayerDismissal({
539
+ // Registered for the hook's lifetime rather than gated on `layer.isOpen`:
540
+ // that state can lag a frame behind the DOM, so a press arriving right after
541
+ // the layer appears would find nothing registered. Because this layer
542
+ // CONSUMES the press, a stale registration would be worse than a missed one
543
+ // — it would silently eat Escapes meant for the dialog underneath — so
544
+ // presence is answered from the DOM at press time instead of from state.
545
+ isActive: true,
546
+ isPresent: () => {
547
+ const el =
548
+ typeof document === 'undefined'
549
+ ? null
550
+ : document.getElementById(layer.id);
551
+ if (el == null) {
552
+ return false;
534
553
  }
535
- if (isImeKeyEvent(e)) {
536
- // Ignore Escape that is committing/cancelling an IME composition;
537
- // see utils/ime.ts for why.
538
- return;
554
+ try {
555
+ return el.matches(':popover-open');
556
+ } catch {
557
+ // Browsers without the Popover API (and some test environments) cannot
558
+ // answer the selector; fall back to the hook's own state.
559
+ return layer.isOpen;
539
560
  }
561
+ },
562
+ onDismiss: () => {
540
563
  clearTimeouts();
541
564
  clearTapOpen();
565
+ if (isOpen !== undefined) {
566
+ onHide?.();
567
+ return;
568
+ }
542
569
  layer.hide();
543
- };
544
- document.addEventListener('keydown', handleKeyDown);
545
- return () => {
546
- document.removeEventListener('keydown', handleKeyDown);
547
- };
548
- }, [isOpen, layer, clearTimeouts, clearTapOpen]);
570
+ },
571
+ });
549
572
 
550
573
  // Render function that wraps layer.render with tooltip styling
551
574
  const renderTooltip = useCallback(
@@ -34,7 +34,8 @@ import {Link} from '../Link';
34
34
  import {Icon} from '../Icon';
35
35
  import {useLinkComponent} from '../Link/useLinkComponent';
36
36
  import type {LinkComponentType} from '../Link/types';
37
- import {mergeProps, mergeRefs} from '../utils';
37
+ import {mergeProps} from '../utils';
38
+ import {useMergedRefs} from '../hooks/useMergedRefs';
38
39
  import type {BaseProps} from '../BaseProps';
39
40
  import {useMenuHover} from '../hooks/useMenuHover';
40
41
  import {NavHeadingCloseContext} from '../NavMenu/NavMenuContext';
@@ -53,7 +54,7 @@ const styles = stylex.create({
53
54
  minHeight: spacingVars['--spacing-8'],
54
55
  paddingInlineStart: {
55
56
  default: spacingVars['--spacing-2'],
56
- ':has(.astryx-navicon)': 0,
57
+ ':has(.astryx-nav-icon)': 0,
57
58
  },
58
59
  paddingInlineEnd: spacingVars['--spacing-2'],
59
60
  paddingBlock: 0,
@@ -189,7 +190,7 @@ const styles = stylex.create({
189
190
  minHeight: spacingVars['--spacing-8'],
190
191
  paddingInlineStart: {
191
192
  default: spacingVars['--spacing-2'],
192
- ':has(.astryx-navicon)': 0,
193
+ ':has(.astryx-nav-icon)': 0,
193
194
  },
194
195
  paddingInlineEnd: spacingVars['--spacing-2'],
195
196
  paddingBlock: 0,
@@ -363,7 +364,7 @@ export function TopNavHeading({
363
364
  // setTriggerEl belongs on the chevron button, not this root: it is the
364
365
  // focus-restore target and a <div> cannot take focus. triggerRef stays here
365
366
  // because the panel anchors to the whole heading.
366
- const setRef = mergeRefs<HTMLElement>(
367
+ const setRef = useMergedRefs<HTMLElement>(
367
368
  rootRef,
368
369
  ref,
369
370
  menu ? popover.triggerRef : undefined,
@@ -860,3 +860,107 @@ describe('TopNavMegaMenu — drawer focus ring', () => {
860
860
  expectSharedFocusRing(screen.getByRole('link', {name: /Analytics/}));
861
861
  });
862
862
  });
863
+
864
+ describe('TopNavMegaMenu pass-through props', () => {
865
+ it('forwards pass-through props to the trigger button', () => {
866
+ render(
867
+ <TopNavMegaMenu
868
+ label="Products"
869
+ aria-label="Products mega menu"
870
+ id="mega-trigger"
871
+ data-source="nav"
872
+ />,
873
+ );
874
+ const trigger = screen.getByRole('button', {name: 'Products mega menu'});
875
+ expect(trigger).toHaveAttribute('id', 'mega-trigger');
876
+ expect(trigger).toHaveAttribute('data-source', 'nav');
877
+ });
878
+
879
+ it('forwards pass-through props to the drawer trigger', () => {
880
+ render(
881
+ <TopNavRenderContext value="drawer">
882
+ <TopNavMegaMenu label="Products" id="mega-drawer" data-source="nav" />
883
+ </TopNavRenderContext>,
884
+ );
885
+ const trigger = screen.getByRole('button', {name: /Products/});
886
+ expect(trigger).toHaveAttribute('id', 'mega-drawer');
887
+ expect(trigger).toHaveAttribute('data-source', 'nav');
888
+ });
889
+ });
890
+
891
+ describe('TopNavMegaMenu — owned handlers on the trigger', () => {
892
+ beforeAll(installPopoverApiMock);
893
+ afterAll(restorePopoverApiMock);
894
+ afterEach(() => {
895
+ vi.useRealTimers();
896
+ });
897
+
898
+ it("composes a caller's onClick with the trigger's own open behavior", async () => {
899
+ const user = userEvent.setup();
900
+ const handleClick = vi.fn();
901
+ render(
902
+ <TopNavMegaMenu
903
+ label="Products"
904
+ items={<TopNavMegaMenuItem title="Analytics" href="/analytics" />}
905
+ onClick={handleClick}
906
+ />,
907
+ );
908
+
909
+ const trigger = screen.getByRole('button', {name: 'Products'});
910
+ await user.click(trigger);
911
+
912
+ expect(handleClick).toHaveBeenCalledOnce();
913
+ expect(trigger).toHaveAttribute('aria-expanded', 'true');
914
+ });
915
+
916
+ it("composes a caller's hover handlers with the trigger's hover-open behavior", async () => {
917
+ vi.useFakeTimers({shouldAdvanceTime: true});
918
+ const user = userEvent.setup({advanceTimers: vi.advanceTimersByTime});
919
+ const handleMouseEnter = vi.fn();
920
+ const handleMouseLeave = vi.fn();
921
+ render(
922
+ <TopNavMegaMenu
923
+ label="Products"
924
+ items={<TopNavMegaMenuItem title="Analytics" href="/analytics" />}
925
+ onMouseEnter={handleMouseEnter}
926
+ onMouseLeave={handleMouseLeave}
927
+ />,
928
+ );
929
+
930
+ const trigger = screen.getByRole('button', {name: 'Products'});
931
+ await user.hover(trigger);
932
+ act(() => {
933
+ vi.advanceTimersByTime(200);
934
+ });
935
+ expect(handleMouseEnter).toHaveBeenCalledOnce();
936
+ expect(trigger).toHaveAttribute('aria-expanded', 'true');
937
+
938
+ await user.unhover(trigger);
939
+ act(() => {
940
+ vi.advanceTimersByTime(400);
941
+ });
942
+ expect(handleMouseLeave).toHaveBeenCalledOnce();
943
+ expect(trigger).toHaveAttribute('aria-expanded', 'false');
944
+ });
945
+
946
+ it("composes a caller's onClick with the drawer section toggle", async () => {
947
+ const user = userEvent.setup();
948
+ const handleClick = vi.fn();
949
+ render(
950
+ <TopNavRenderContext value="drawer">
951
+ <TopNavMegaMenu
952
+ label="Products"
953
+ items={<TopNavMegaMenuItem title="Analytics" href="/analytics" />}
954
+ onClick={handleClick}
955
+ />
956
+ </TopNavRenderContext>,
957
+ );
958
+
959
+ const trigger = screen.getByRole('button', {name: /Products/});
960
+ expect(trigger).toHaveAttribute('aria-expanded', 'false');
961
+
962
+ await user.click(trigger);
963
+ expect(handleClick).toHaveBeenCalledOnce();
964
+ expect(trigger).toHaveAttribute('aria-expanded', 'true');
965
+ });
966
+ });
@@ -53,7 +53,7 @@ import {usePopover} from '../Popover/usePopover';
53
53
  import {useMenuHover} from '../hooks/useMenuHover';
54
54
  import {Grid} from '../Grid/Grid';
55
55
  import {Icon} from '../Icon';
56
- import {mergeProps, mergeRefs} from '../utils';
56
+ import {mergeProps, composeEventHandlers} from '../utils';
57
57
  import type {BaseProps} from '../BaseProps';
58
58
  import {navItemStyles} from '../NavItem/navItemStyles.stylex';
59
59
  import {useTopNavSlot} from './TopNavContext';
@@ -61,6 +61,7 @@ import {useTopNavRenderMode} from './TopNavRenderContext';
61
61
  import {themeProps} from '../utils/themeProps';
62
62
  import {focusOutlineProps} from '../utils/focusOutline.stylex';
63
63
 
64
+ import {useMergedRefs} from '../hooks/useMergedRefs';
64
65
  // =============================================================================
65
66
  // Styles
66
67
  // =============================================================================
@@ -335,6 +336,7 @@ export function TopNavMegaMenu({
335
336
  delay = 150,
336
337
  hideDelay = 250,
337
338
  onOpenChange,
339
+ ...rest
338
340
  }: TopNavMegaMenuProps) {
339
341
  const renderMode = useTopNavRenderMode();
340
342
 
@@ -349,7 +351,14 @@ export function TopNavMegaMenu({
349
351
  // Drawer mode — inline collapsible
350
352
  // =========================================================================
351
353
  if (renderMode === 'drawer') {
352
- return <DrawerMegaMenu label={label} items={items} featured={featured} />;
354
+ return (
355
+ <DrawerMegaMenu
356
+ label={label}
357
+ items={items}
358
+ featured={featured}
359
+ {...rest}
360
+ />
361
+ );
353
362
  }
354
363
 
355
364
  // =========================================================================
@@ -364,6 +373,7 @@ export function TopNavMegaMenu({
364
373
  delay={delay}
365
374
  hideDelay={hideDelay}
366
375
  onOpenChange={onOpenChange}
376
+ {...rest}
367
377
  />
368
378
  );
369
379
  }
@@ -386,6 +396,13 @@ function DefaultMegaMenu({
386
396
  delay = 150,
387
397
  hideDelay = 250,
388
398
  onOpenChange,
399
+ xstyle,
400
+ className,
401
+ style,
402
+ onClick: onClickProp,
403
+ onMouseEnter: onMouseEnterProp,
404
+ onMouseLeave: onMouseLeaveProp,
405
+ ...rest
389
406
  }: TopNavMegaMenuProps) {
390
407
  const slot = useTopNavSlot();
391
408
  const triggerButtonRef = useRef<HTMLButtonElement | null>(null);
@@ -451,16 +468,29 @@ function DefaultMegaMenu({
451
468
  return (
452
469
  <>
453
470
  <button
454
- ref={mergeRefs(triggerButtonRef, setTriggerEl, ref)}
471
+ ref={useMergedRefs(triggerButtonRef, setTriggerEl, ref)}
455
472
  type="button"
473
+ {...rest}
456
474
  {...popover.triggerProps}
457
475
  {...hoverTriggerProps}
476
+ onClick={composeEventHandlers(onClickProp, hoverTriggerProps.onClick)}
477
+ onMouseEnter={composeEventHandlers(
478
+ onMouseEnterProp,
479
+ hoverTriggerProps.onMouseEnter,
480
+ )}
481
+ onMouseLeave={composeEventHandlers(
482
+ onMouseLeaveProp,
483
+ hoverTriggerProps.onMouseLeave,
484
+ )}
458
485
  {...mergeProps(
459
486
  themeProps('top-nav-mega-menu'),
460
487
  focusOutlineProps.focusVisible(
461
488
  styles.trigger,
462
489
  popover.isOpen && styles.triggerOpen,
490
+ xstyle,
463
491
  ),
492
+ className,
493
+ style,
464
494
  )}>
465
495
  {label}
466
496
  <Icon
@@ -512,7 +542,13 @@ function DrawerMegaMenu({
512
542
  label,
513
543
  items,
514
544
  featured,
515
- }: Pick<TopNavMegaMenuProps, 'label' | 'items' | 'featured'>) {
545
+ xstyle,
546
+ className,
547
+ style,
548
+ onClick: onClickProp,
549
+ ...rest
550
+ }: Pick<TopNavMegaMenuProps, 'label' | 'items' | 'featured'> &
551
+ BaseProps<HTMLButtonElement>) {
516
552
  const [isExpanded, setIsExpanded] = useState(false);
517
553
  const menuId = `mega-menu-${label.toLowerCase().replace(/\s+/g, '-')}`;
518
554
 
@@ -521,7 +557,10 @@ function DrawerMegaMenu({
521
557
  {/* Header toggle — same pattern as TopNavMenu drawer */}
522
558
  <button
523
559
  type="button"
524
- onClick={() => setIsExpanded(v => !v)}
560
+ {...rest}
561
+ onClick={composeEventHandlers(onClickProp, () =>
562
+ setIsExpanded(v => !v),
563
+ )}
525
564
  aria-expanded={isExpanded}
526
565
  aria-controls={`${menuId}-items`}
527
566
  {...mergeProps(
@@ -529,7 +568,10 @@ function DrawerMegaMenu({
529
568
  focusOutlineProps.focusVisible(
530
569
  navItemStyles.item,
531
570
  styles.drawerHeader,
571
+ xstyle,
532
572
  ),
573
+ className,
574
+ style,
533
575
  )}>
534
576
  {label}
535
577
  <Icon