@astryxdesign/core 0.1.4 → 0.1.5-canary.76e6697

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 (635) hide show
  1. package/CHANGELOG.md +141 -0
  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 +20 -18
  5. package/dist/AlertDialog/useImperativeAlertDialog.d.ts +0 -2
  6. package/dist/AlertDialog/useImperativeAlertDialog.d.ts.map +1 -1
  7. package/dist/AlertDialog/useImperativeAlertDialog.js +3 -5
  8. package/dist/AppShell/AppShell.d.ts +1 -1
  9. package/dist/AppShell/AppShell.d.ts.map +1 -1
  10. package/dist/AppShell/AppShell.js +55 -53
  11. package/dist/AspectRatio/AspectRatio.d.ts +48 -10
  12. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  13. package/dist/AspectRatio/AspectRatio.js +33 -12
  14. package/dist/AspectRatio/index.d.ts +1 -1
  15. package/dist/AspectRatio/index.d.ts.map +1 -1
  16. package/dist/Avatar/Avatar.d.ts.map +1 -1
  17. package/dist/Avatar/Avatar.js +28 -26
  18. package/dist/Avatar/AvatarStatusDot.js +6 -6
  19. package/dist/AvatarGroup/AvatarGroup.js +6 -6
  20. package/dist/AvatarGroup/AvatarGroupOverflow.js +7 -7
  21. package/dist/Badge/Badge.js +3 -3
  22. package/dist/Banner/Banner.d.ts.map +1 -1
  23. package/dist/Banner/Banner.js +32 -25
  24. package/dist/Blockquote/Blockquote.js +7 -7
  25. package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
  26. package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
  27. package/dist/Button/Button.js +19 -19
  28. package/dist/ButtonGroup/ButtonGroup.js +7 -7
  29. package/dist/Calendar/Calendar.d.ts.map +1 -1
  30. package/dist/Calendar/Calendar.js +68 -48
  31. package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
  32. package/dist/Calendar/styles.d.ts +2 -2
  33. package/dist/Calendar/styles.d.ts.map +1 -1
  34. package/dist/Calendar/styles.js +2 -2
  35. package/dist/Card/Card.d.ts +4 -2
  36. package/dist/Card/Card.d.ts.map +1 -1
  37. package/dist/Card/Card.js +18 -10
  38. package/dist/Carousel/Carousel.d.ts.map +1 -1
  39. package/dist/Carousel/Carousel.js +24 -21
  40. package/dist/Center/Center.js +3 -3
  41. package/dist/Chat/ChatComposer.js +23 -23
  42. package/dist/Chat/ChatComposerDrawer.js +14 -14
  43. package/dist/Chat/ChatComposerInput.d.ts +1 -1
  44. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  45. package/dist/Chat/ChatComposerInput.js +27 -15
  46. package/dist/Chat/ChatDictationButton.d.ts +1 -1
  47. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  48. package/dist/Chat/ChatDictationButton.js +13 -11
  49. package/dist/Chat/ChatLayout.js +17 -17
  50. package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
  51. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  52. package/dist/Chat/ChatLayoutScrollButton.js +12 -10
  53. package/dist/Chat/ChatMessage.js +12 -12
  54. package/dist/Chat/ChatMessageBubble.js +7 -7
  55. package/dist/Chat/ChatMessageList.js +14 -14
  56. package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
  57. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  58. package/dist/Chat/ChatMessageMetadata.js +14 -12
  59. package/dist/Chat/ChatPastedTextToken.js +13 -13
  60. package/dist/Chat/ChatSendButton.js +3 -3
  61. package/dist/Chat/ChatSystemMessage.d.ts +1 -1
  62. package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
  63. package/dist/Chat/ChatSystemMessage.js +17 -17
  64. package/dist/Chat/ChatTokenizedText.d.ts +1 -1
  65. package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
  66. package/dist/Chat/ChatTokenizedText.js +24 -15
  67. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  68. package/dist/Chat/ChatToolCalls.js +81 -74
  69. package/dist/Chat/index.d.ts +1 -1
  70. package/dist/Chat/index.d.ts.map +1 -1
  71. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  72. package/dist/Chat/useTriggerMenu.js +15 -15
  73. package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
  74. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  75. package/dist/CheckboxInput/CheckboxInput.js +25 -23
  76. package/dist/CheckboxList/CheckboxList.js +9 -9
  77. package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
  78. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  79. package/dist/CheckboxList/CheckboxListItem.js +8 -6
  80. package/dist/Citation/Citation.js +10 -10
  81. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  82. package/dist/ClickableCard/ClickableCard.js +32 -9
  83. package/dist/Code/Code.js +3 -3
  84. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  85. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  86. package/dist/CodeBlock/CodeBlock.js +88 -52
  87. package/dist/Collapsible/Collapsible.d.ts +9 -3
  88. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  89. package/dist/Collapsible/Collapsible.js +109 -22
  90. package/dist/Collapsible/CollapsibleGroup.d.ts +37 -7
  91. package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
  92. package/dist/Collapsible/CollapsibleGroup.js +64 -12
  93. package/dist/Collapsible/CollapsibleGroupContext.d.ts +24 -0
  94. package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
  95. package/dist/Collapsible/CollapsibleGroupContext.js +26 -3
  96. package/dist/Collapsible/index.d.ts +1 -0
  97. package/dist/Collapsible/index.d.ts.map +1 -1
  98. package/dist/Collapsible/useCollapsible.d.ts +4 -1
  99. package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
  100. package/dist/Collapsible/useCollapsible.js +20 -6
  101. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  102. package/dist/CommandPalette/CommandPalette.js +36 -34
  103. package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
  104. package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
  105. package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
  106. package/dist/CommandPalette/CommandPaletteInput.js +13 -13
  107. package/dist/CommandPalette/CommandPaletteItem.js +3 -3
  108. package/dist/CommandPalette/CommandPaletteList.js +3 -3
  109. package/dist/ContextMenu/ContextMenu.d.ts +7 -2
  110. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  111. package/dist/ContextMenu/ContextMenu.js +76 -43
  112. package/dist/DateInput/DateInput.js +18 -18
  113. package/dist/DateRangeInput/DateRangeInput.js +21 -21
  114. package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
  115. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  116. package/dist/DateTimeInput/DateTimeInput.js +30 -26
  117. package/dist/DateTimeInput/index.d.ts +1 -1
  118. package/dist/DateTimeInput/index.d.ts.map +1 -1
  119. package/dist/Dialog/Dialog.js +9 -9
  120. package/dist/Dialog/DialogHeader.js +16 -16
  121. package/dist/Dialog/useImperativeDialog.js +3 -3
  122. package/dist/Divider/Divider.js +7 -7
  123. package/dist/DropdownMenu/DropdownMenu.js +10 -10
  124. package/dist/DropdownMenu/DropdownMenuItem.d.ts +2 -17
  125. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  126. package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
  127. package/dist/DropdownMenu/renderDropdownItems.js +10 -10
  128. package/dist/EmptyState/EmptyState.js +9 -9
  129. package/dist/Field/Field.js +17 -17
  130. package/dist/Field/FieldLabel.js +15 -15
  131. package/dist/Field/InputClearButton.js +5 -5
  132. package/dist/FieldStatus/FieldStatus.js +3 -3
  133. package/dist/FileInput/FileInput.js +29 -29
  134. package/dist/FormLayout/FormLayout.js +5 -5
  135. package/dist/Grid/Grid.d.ts +4 -3
  136. package/dist/Grid/Grid.d.ts.map +1 -1
  137. package/dist/Grid/Grid.js +29 -12
  138. package/dist/Grid/GridSpan.js +3 -3
  139. package/dist/HStack/HStack.js +3 -3
  140. package/dist/Heading/Heading.js +10 -10
  141. package/dist/HoverCard/HoverCard.js +9 -9
  142. package/dist/HoverCard/useHoverCard.d.ts +5 -1
  143. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  144. package/dist/HoverCard/useHoverCard.js +3 -3
  145. package/dist/Icon/Icon.d.ts.map +1 -1
  146. package/dist/Icon/Icon.js +16 -12
  147. package/dist/Icon/defaultIcons.js +116 -116
  148. package/dist/IconButton/IconButton.js +3 -3
  149. package/dist/InputGroup/InputGroup.js +11 -11
  150. package/dist/InputGroup/InputGroupText.js +3 -3
  151. package/dist/Item/Item.js +18 -18
  152. package/dist/Kbd/Kbd.js +5 -5
  153. package/dist/Layer/LayerProvider.js +7 -7
  154. package/dist/Layer/useLayer.d.ts +29 -2
  155. package/dist/Layer/useLayer.d.ts.map +1 -1
  156. package/dist/Layer/useLayer.js +44 -31
  157. package/dist/Layout/Layout.js +21 -21
  158. package/dist/Layout/LayoutContent.js +3 -3
  159. package/dist/Layout/LayoutFooter.js +5 -5
  160. package/dist/Layout/LayoutHeader.js +5 -5
  161. package/dist/Layout/LayoutPanel.js +3 -3
  162. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  163. package/dist/Lightbox/Lightbox.js +55 -31
  164. package/dist/Lightbox/useLightbox.d.ts +0 -1
  165. package/dist/Lightbox/useLightbox.d.ts.map +1 -1
  166. package/dist/Lightbox/useLightbox.js +3 -4
  167. package/dist/Link/Link.d.ts +0 -2
  168. package/dist/Link/Link.d.ts.map +1 -1
  169. package/dist/Link/Link.js +15 -17
  170. package/dist/Link/LinkProvider.js +3 -3
  171. package/dist/Link/useLinkify.js +3 -3
  172. package/dist/List/List.js +11 -11
  173. package/dist/List/ListItem.js +11 -11
  174. package/dist/Markdown/Markdown.d.ts.map +1 -1
  175. package/dist/Markdown/Markdown.js +102 -102
  176. package/dist/MetadataList/MetadataList.js +10 -10
  177. package/dist/MetadataList/MetadataListItem.js +15 -15
  178. package/dist/MobileNav/MobileNav.d.ts +1 -1
  179. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  180. package/dist/MobileNav/MobileNav.js +26 -23
  181. package/dist/MobileNav/MobileNavToggle.js +5 -5
  182. package/dist/MoreMenu/MoreMenu.js +3 -3
  183. package/dist/MultiSelector/MultiSelector.js +56 -56
  184. package/dist/NavIcon/NavIcon.js +3 -3
  185. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  186. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  187. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  188. package/dist/NumberInput/NumberInput.js +48 -32
  189. package/dist/Outline/Outline.js +15 -15
  190. package/dist/OverflowList/OverflowList.js +8 -8
  191. package/dist/Overlay/Overlay.js +3 -3
  192. package/dist/Overlay/OverlayScrim.js +5 -5
  193. package/dist/Overlay/useOverlay.d.ts +0 -3
  194. package/dist/Overlay/useOverlay.d.ts.map +1 -1
  195. package/dist/Overlay/useOverlay.js +3 -6
  196. package/dist/Pagination/Pagination.d.ts +1 -1
  197. package/dist/Pagination/Pagination.d.ts.map +1 -1
  198. package/dist/Pagination/Pagination.js +125 -72
  199. package/dist/Popover/Popover.js +16 -16
  200. package/dist/Popover/usePopover.js +7 -7
  201. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  202. package/dist/PowerSearch/PowerSearch.js +110 -92
  203. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  204. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  205. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  206. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  207. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  208. package/dist/ProgressBar/ProgressBar.js +25 -18
  209. package/dist/RadioList/RadioList.js +7 -7
  210. package/dist/RadioList/RadioListItem.d.ts +1 -1
  211. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  212. package/dist/RadioList/RadioListItem.js +24 -21
  213. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  214. package/dist/Resizable/ResizeHandle.js +28 -10
  215. package/dist/Section/Section.js +5 -5
  216. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  217. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  218. package/dist/SegmentedControl/SegmentedControl.js +32 -10
  219. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  220. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  221. package/dist/SegmentedControl/SegmentedControlItem.js +18 -12
  222. package/dist/SelectableCard/SelectableCard.js +5 -5
  223. package/dist/Selector/Selector.js +46 -46
  224. package/dist/Selector/SelectorOption.js +3 -3
  225. package/dist/SideNav/SideNav.d.ts.map +1 -1
  226. package/dist/SideNav/SideNav.js +38 -34
  227. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  228. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  229. package/dist/SideNav/SideNavCollapseButton.js +8 -6
  230. package/dist/SideNav/SideNavHeading.js +87 -87
  231. package/dist/SideNav/SideNavItem.js +42 -42
  232. package/dist/SideNav/SideNavSection.d.ts +1 -1
  233. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  234. package/dist/SideNav/SideNavSection.js +18 -16
  235. package/dist/Skeleton/Skeleton.js +3 -3
  236. package/dist/Slider/Slider.js +23 -23
  237. package/dist/Spinner/Spinner.js +9 -9
  238. package/dist/StatusDot/StatusDot.js +5 -5
  239. package/dist/Switch/Switch.d.ts +8 -4
  240. package/dist/Switch/Switch.d.ts.map +1 -1
  241. package/dist/Switch/Switch.js +34 -29
  242. package/dist/TabList/Tab.js +18 -18
  243. package/dist/TabList/TabList.js +5 -5
  244. package/dist/TabList/TabMenu.d.ts.map +1 -1
  245. package/dist/TabList/TabMenu.js +57 -30
  246. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  247. package/dist/Table/BaseTable.d.ts.map +1 -1
  248. package/dist/Table/BaseTable.js +50 -39
  249. package/dist/Table/Table.js +7 -7
  250. package/dist/Table/TableBody.d.ts +1 -1
  251. package/dist/Table/TableBody.d.ts.map +1 -1
  252. package/dist/Table/TableBody.js +9 -5
  253. package/dist/Table/TableCell.js +3 -3
  254. package/dist/Table/TableFooter.d.ts +1 -1
  255. package/dist/Table/TableFooter.d.ts.map +1 -1
  256. package/dist/Table/TableFooter.js +9 -5
  257. package/dist/Table/TableHeader.d.ts +1 -1
  258. package/dist/Table/TableHeader.d.ts.map +1 -1
  259. package/dist/Table/TableHeader.js +9 -5
  260. package/dist/Table/TableHeaderCell.js +3 -3
  261. package/dist/Table/TableRow.js +5 -5
  262. package/dist/Table/index.d.ts +2 -0
  263. package/dist/Table/index.d.ts.map +1 -1
  264. package/dist/Table/index.js +1 -0
  265. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  266. package/dist/Table/plugins/columnResize/useTableColumnResize.js +14 -11
  267. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  268. package/dist/Table/plugins/groupedRows/index.d.ts +3 -0
  269. package/dist/Table/plugins/groupedRows/index.d.ts.map +1 -0
  270. package/dist/Table/plugins/groupedRows/index.js +3 -0
  271. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +78 -0
  272. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -0
  273. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +250 -0
  274. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  275. package/dist/Table/plugins/pagination/paginateData.js +5 -1
  276. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  277. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +1 -1
  278. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +23 -23
  279. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  280. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  281. package/dist/Table/plugins/selection/useTableSelectionState.js +11 -1
  282. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  283. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  284. package/dist/Table/plugins/sortable/useTableSortableState.js +8 -4
  285. package/dist/Table/tableContextMenu.js +9 -9
  286. package/dist/Text/Text.js +10 -10
  287. package/dist/TextArea/TextArea.js +14 -14
  288. package/dist/TextInput/TextInput.js +15 -15
  289. package/dist/Thumbnail/Thumbnail.d.ts +3 -2
  290. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  291. package/dist/Thumbnail/Thumbnail.js +30 -29
  292. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  293. package/dist/TimeInput/TimeInput.js +26 -21
  294. package/dist/Timestamp/Timestamp.d.ts +1 -1
  295. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  296. package/dist/Timestamp/Timestamp.js +37 -26
  297. package/dist/Toast/Toast.d.ts.map +1 -1
  298. package/dist/Toast/Toast.js +25 -17
  299. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  300. package/dist/Toast/ToastViewport.js +23 -11
  301. package/dist/Toast/useToast.d.ts.map +1 -1
  302. package/dist/Toast/useToast.js +44 -4
  303. package/dist/ToggleButton/ToggleButton.js +12 -12
  304. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  305. package/dist/Token/Token.js +21 -21
  306. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  307. package/dist/Tokenizer/Tokenizer.js +36 -34
  308. package/dist/Toolbar/Toolbar.js +18 -18
  309. package/dist/Tooltip/Tooltip.js +11 -11
  310. package/dist/Tooltip/useTooltip.d.ts +5 -1
  311. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  312. package/dist/Tooltip/useTooltip.js +3 -3
  313. package/dist/TopNav/TopNav.js +32 -32
  314. package/dist/TopNav/TopNavHeading.js +67 -67
  315. package/dist/TopNav/TopNavItem.js +5 -5
  316. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  317. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  318. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  319. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +25 -14
  320. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  321. package/dist/TopNav/TopNavMenu.js +32 -32
  322. package/dist/TreeList/TreeList.js +8 -8
  323. package/dist/TreeList/TreeListBranches.js +11 -11
  324. package/dist/TreeList/TreeListItem.js +30 -30
  325. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  326. package/dist/Typeahead/BaseTypeahead.js +23 -20
  327. package/dist/Typeahead/Typeahead.js +12 -12
  328. package/dist/Typeahead/TypeaheadItem.js +10 -10
  329. package/dist/VStack/VStack.js +3 -3
  330. package/dist/VisuallyHidden/VisuallyHidden.d.ts +0 -3
  331. package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  332. package/dist/VisuallyHidden/VisuallyHidden.js +0 -3
  333. package/dist/astryx.css +7 -0
  334. package/dist/astryx.umd.js +63 -63
  335. package/dist/astryx.umd.js.map +4 -4
  336. package/dist/docs-types.d.ts +8 -2
  337. package/dist/docs-types.d.ts.map +1 -1
  338. package/dist/hooks/focusableSelector.d.ts +1 -1
  339. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  340. package/dist/hooks/focusableSelector.js +1 -1
  341. package/dist/hooks/index.d.ts +2 -0
  342. package/dist/hooks/index.d.ts.map +1 -1
  343. package/dist/hooks/index.js +1 -0
  344. package/dist/hooks/useFocusTrap.d.ts +3 -0
  345. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  346. package/dist/hooks/useFocusTrap.js +38 -1
  347. package/dist/hooks/useHotkeys.d.ts +51 -0
  348. package/dist/hooks/useHotkeys.d.ts.map +1 -0
  349. package/dist/hooks/useHotkeys.js +160 -0
  350. package/dist/hooks/useInteractiveRole.d.ts +6 -2
  351. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  352. package/dist/hooks/useInteractiveRole.js +6 -2
  353. package/dist/hooks/useKeyboardHint.js +9 -9
  354. package/dist/hooks/useStreamingText.d.ts +3 -1
  355. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  356. package/dist/hooks/useStreamingText.js +14 -5
  357. package/dist/theme/MediaTheme.js +3 -3
  358. package/dist/theme/Theme.js +7 -7
  359. package/dist/theme/defineTheme.d.ts +1 -1
  360. package/dist/theme/defineTheme.d.ts.map +1 -1
  361. package/dist/theme/expandColorScale.d.ts.map +1 -1
  362. package/dist/theme/expandColorScale.js +10 -3
  363. package/dist/theme/hct.d.ts +0 -15
  364. package/dist/theme/hct.d.ts.map +1 -1
  365. package/dist/theme/hct.js +9 -9
  366. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  367. package/dist/theme/tokens.d.ts +10 -2
  368. package/dist/theme/tokens.d.ts.map +1 -1
  369. package/dist/theme/tokens.js +220 -4
  370. package/dist/theme/useTheme.d.ts +3 -2
  371. package/dist/theme/useTheme.d.ts.map +1 -1
  372. package/dist/theme/useTheme.js +73 -6
  373. package/dist/utils/color.d.ts +42 -0
  374. package/dist/utils/color.d.ts.map +1 -0
  375. package/dist/utils/color.js +150 -0
  376. package/dist/utils/composeEventHandlers.d.ts +30 -0
  377. package/dist/utils/composeEventHandlers.d.ts.map +1 -0
  378. package/dist/utils/composeEventHandlers.js +40 -0
  379. package/dist/utils/index.d.ts +3 -0
  380. package/dist/utils/index.d.ts.map +1 -1
  381. package/dist/utils/index.js +3 -1
  382. package/dist/utils/timeParser.d.ts.map +1 -1
  383. package/dist/utils/timeParser.js +8 -5
  384. package/package.json +4 -4
  385. package/src/AlertDialog/AlertDialog.doc.mjs +4 -0
  386. package/src/AlertDialog/AlertDialog.tsx +2 -0
  387. package/src/AlertDialog/useImperativeAlertDialog.tsx +0 -2
  388. package/src/AppShell/AppShell.tsx +2 -0
  389. package/src/AspectRatio/AspectRatio.doc.mjs +28 -1
  390. package/src/AspectRatio/AspectRatio.test.tsx +142 -1
  391. package/src/AspectRatio/AspectRatio.tsx +70 -10
  392. package/src/AspectRatio/index.ts +5 -1
  393. package/src/Avatar/Avatar.doc.mjs +11 -0
  394. package/src/Avatar/Avatar.test.tsx +32 -1
  395. package/src/Avatar/Avatar.tsx +14 -22
  396. package/src/Avatar/AvatarStatusDot.tsx +2 -2
  397. package/src/AvatarGroup/AvatarGroup.doc.mjs +1 -0
  398. package/src/AvatarGroup/AvatarGroup.tsx +2 -2
  399. package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -2
  400. package/src/Banner/Banner.doc.mjs +8 -0
  401. package/src/Banner/Banner.test.tsx +38 -0
  402. package/src/Banner/Banner.tsx +8 -1
  403. package/src/Calendar/Calendar.doc.mjs +1 -1
  404. package/src/Calendar/Calendar.test.tsx +122 -17
  405. package/src/Calendar/Calendar.tsx +26 -5
  406. package/src/Calendar/dayCellUtils.ts +3 -1
  407. package/src/Calendar/styles.ts +12 -2
  408. package/src/Card/Card.doc.mjs +1 -1
  409. package/src/Card/Card.tsx +16 -6
  410. package/src/Carousel/Carousel.doc.mjs +12 -12
  411. package/src/Carousel/Carousel.test.tsx +13 -0
  412. package/src/Carousel/Carousel.tsx +4 -2
  413. package/src/Chat/Chat.doc.mjs +1 -1
  414. package/src/Chat/ChatComposerInput.test.tsx +27 -1
  415. package/src/Chat/ChatComposerInput.tsx +20 -15
  416. package/src/Chat/ChatDictationButton.test.tsx +43 -0
  417. package/src/Chat/ChatDictationButton.tsx +4 -4
  418. package/src/Chat/ChatLayoutScrollButton.test.tsx +33 -0
  419. package/src/Chat/ChatLayoutScrollButton.tsx +3 -1
  420. package/src/Chat/ChatMessageMetadata.test.tsx +32 -0
  421. package/src/Chat/ChatMessageMetadata.tsx +4 -6
  422. package/src/Chat/ChatSystemMessage.test.tsx +26 -11
  423. package/src/Chat/ChatSystemMessage.tsx +7 -7
  424. package/src/Chat/ChatTokenizedText.test.tsx +29 -16
  425. package/src/Chat/ChatTokenizedText.tsx +15 -8
  426. package/src/Chat/ChatToolCalls.test.tsx +55 -0
  427. package/src/Chat/ChatToolCalls.tsx +10 -12
  428. package/src/Chat/index.ts +1 -4
  429. package/src/Chat/useTriggerMenu.tsx +1 -4
  430. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  431. package/src/CheckboxInput/CheckboxInput.test.tsx +71 -4
  432. package/src/CheckboxInput/CheckboxInput.tsx +2 -0
  433. package/src/CheckboxList/CheckboxList.test.tsx +19 -0
  434. package/src/CheckboxList/CheckboxListItem.tsx +11 -2
  435. package/src/Citation/Citation.doc.mjs +5 -0
  436. package/src/ClickableCard/ClickableCard.tsx +45 -2
  437. package/src/CodeBlock/CodeBlock.doc.mjs +7 -2
  438. package/src/CodeBlock/CodeBlock.test.tsx +122 -3
  439. package/src/CodeBlock/CodeBlock.tsx +62 -4
  440. package/src/Collapsible/Collapsible.doc.mjs +8 -4
  441. package/src/Collapsible/Collapsible.test.tsx +403 -0
  442. package/src/Collapsible/Collapsible.tsx +85 -10
  443. package/src/Collapsible/CollapsibleGroup.doc.mjs +27 -3
  444. package/src/Collapsible/CollapsibleGroup.test.tsx +314 -0
  445. package/src/Collapsible/CollapsibleGroup.tsx +97 -9
  446. package/src/Collapsible/CollapsibleGroupContext.tsx +34 -2
  447. package/src/Collapsible/index.ts +1 -0
  448. package/src/Collapsible/useCollapsible.ts +20 -6
  449. package/src/CommandPalette/CommandPalette.doc.mjs +5 -0
  450. package/src/CommandPalette/CommandPalette.tsx +5 -3
  451. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +5 -0
  452. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +10 -0
  453. package/src/CommandPalette/CommandPaletteInput.doc.mjs +6 -0
  454. package/src/CommandPalette/CommandPaletteItem.doc.mjs +6 -0
  455. package/src/CommandPalette/CommandPaletteList.doc.mjs +9 -0
  456. package/src/ContextMenu/ContextMenu.doc.mjs +15 -0
  457. package/src/ContextMenu/ContextMenu.test.tsx +87 -0
  458. package/src/ContextMenu/ContextMenu.tsx +87 -28
  459. package/src/ContextMenu/ContextMenuItem.doc.mjs +6 -0
  460. package/src/DateInput/DateInput.test.tsx +11 -20
  461. package/src/DateRangeInput/DateRangeInput.doc.mjs +9 -6
  462. package/src/DateRangeInput/DateRangeInput.test.tsx +31 -44
  463. package/src/DateTimeInput/DateTimeInput.doc.mjs +3 -2
  464. package/src/DateTimeInput/DateTimeInput.test.tsx +118 -16
  465. package/src/DateTimeInput/DateTimeInput.tsx +8 -2
  466. package/src/DateTimeInput/index.ts +1 -0
  467. package/src/Dialog/Dialog.doc.mjs +4 -0
  468. package/src/Dialog/DialogHeader.doc.mjs +45 -0
  469. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  470. package/src/DropdownMenu/DropdownMenu.test.tsx +22 -2
  471. package/src/DropdownMenu/DropdownMenuItem.tsx +5 -17
  472. package/src/EmptyState/EmptyState.doc.mjs +1 -1
  473. package/src/Field/Field.test.tsx +1 -4
  474. package/src/Field/FieldLabel.test.tsx +2 -2
  475. package/src/FieldStatus/FieldStatus.test.tsx +282 -0
  476. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -3
  477. package/src/Grid/Grid.test.tsx +43 -18
  478. package/src/Grid/Grid.tsx +26 -9
  479. package/src/HoverCard/HoverCard.doc.mjs +6 -6
  480. package/src/HoverCard/useHoverCard.doc.mjs +5 -5
  481. package/src/HoverCard/useHoverCard.tsx +9 -2
  482. package/src/Icon/Icon.test.tsx +41 -29
  483. package/src/Icon/Icon.tsx +6 -2
  484. package/src/InputGroup/InputGroup.doc.mjs +1 -0
  485. package/src/InputGroup/InputGroup.tsx +2 -2
  486. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +185 -0
  487. package/src/Item/Item.tsx +1 -1
  488. package/src/Layer/useLayer.doc.mjs +2 -2
  489. package/src/Layer/useLayer.test.tsx +221 -2
  490. package/src/Layer/useLayer.tsx +69 -30
  491. package/src/Layout/Layout.test.tsx +285 -0
  492. package/src/Layout/LayoutContent.doc.mjs +12 -0
  493. package/src/Layout/LayoutPanel.doc.mjs +40 -0
  494. package/src/Layout/LayoutSlots.test.tsx +364 -0
  495. package/src/Lightbox/Lightbox.doc.mjs +5 -0
  496. package/src/Lightbox/Lightbox.test.tsx +123 -2
  497. package/src/Lightbox/Lightbox.tsx +29 -1
  498. package/src/Lightbox/useLightbox.tsx +0 -1
  499. package/src/Link/Link.tsx +0 -2
  500. package/src/Markdown/Markdown.tsx +9 -7
  501. package/src/Markdown/parser.perf.test.ts +34 -12
  502. package/src/MobileNav/MobileNav.test.tsx +56 -0
  503. package/src/MobileNav/MobileNav.tsx +13 -8
  504. package/src/NavMenu/NavMenu.doc.mjs +15 -0
  505. package/src/NumberInput/NumberInput.test.tsx +48 -3
  506. package/src/NumberInput/NumberInput.tsx +32 -15
  507. package/src/Outline/Outline.doc.mjs +2 -0
  508. package/src/Outline/parseOutlineFromMarkdown.test.ts +80 -0
  509. package/src/OverflowList/OverflowList.test.tsx +416 -0
  510. package/src/Overlay/Overlay.doc.mjs +6 -0
  511. package/src/Overlay/Overlay.test.tsx +356 -0
  512. package/src/Overlay/useOverlay.tsx +0 -3
  513. package/src/Pagination/Pagination.test.tsx +162 -0
  514. package/src/Pagination/Pagination.tsx +80 -26
  515. package/src/Popover/Popover.doc.mjs +6 -6
  516. package/src/Popover/Popover.test.tsx +65 -0
  517. package/src/Popover/usePopover.doc.mjs +1 -1
  518. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  519. package/src/PowerSearch/PowerSearch.test.tsx +109 -1
  520. package/src/PowerSearch/PowerSearch.tsx +37 -16
  521. package/src/ProgressBar/ProgressBar.doc.mjs +2 -0
  522. package/src/ProgressBar/ProgressBar.test.tsx +30 -0
  523. package/src/ProgressBar/ProgressBar.tsx +12 -5
  524. package/src/RadioList/RadioList.test.tsx +19 -0
  525. package/src/RadioList/RadioListItem.tsx +9 -4
  526. package/src/Resizable/ResizeHandle.test.tsx +218 -0
  527. package/src/Resizable/ResizeHandle.tsx +22 -4
  528. package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
  529. package/src/SegmentedControl/SegmentedControl.test.tsx +192 -0
  530. package/src/SegmentedControl/SegmentedControl.tsx +27 -5
  531. package/src/SegmentedControl/SegmentedControlItem.tsx +9 -4
  532. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  533. package/src/Selector/Selector.test.tsx +27 -1
  534. package/src/SideNav/SideNav.doc.mjs +7 -1
  535. package/src/SideNav/SideNav.test.tsx +66 -0
  536. package/src/SideNav/SideNav.tsx +6 -2
  537. package/src/SideNav/SideNavCollapseButton.tsx +4 -3
  538. package/src/SideNav/SideNavSection.tsx +6 -4
  539. package/src/SizeContext/SizeContext.test.tsx +226 -0
  540. package/src/Switch/Switch.doc.mjs +7 -7
  541. package/src/Switch/Switch.test.tsx +102 -3
  542. package/src/Switch/Switch.tsx +20 -7
  543. package/src/TabList/TabList.test.tsx +185 -1
  544. package/src/TabList/TabMenu.tsx +45 -9
  545. package/src/Table/BaseTable.tsx +13 -2
  546. package/src/Table/Table.doc.mjs +6 -1
  547. package/src/Table/Table.test.tsx +87 -0
  548. package/src/Table/TableBody.tsx +15 -2
  549. package/src/Table/TableFooter.tsx +15 -2
  550. package/src/Table/TableHeader.tsx +15 -2
  551. package/src/Table/index.ts +5 -0
  552. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +13 -0
  553. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +3 -1
  554. package/src/Table/plugins/groupedRows/index.ts +7 -0
  555. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +231 -0
  556. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +349 -0
  557. package/src/Table/plugins/pagination/paginateData.ts +5 -1
  558. package/src/Table/plugins/pagination/useTablePagination.test.tsx +13 -0
  559. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +1 -1
  560. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +23 -0
  561. package/src/Table/plugins/selection/useTableSelectionState.tsx +11 -6
  562. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +35 -1
  563. package/src/Table/plugins/sortable/useTableSortableState.tsx +8 -4
  564. package/src/Table/useTableGroupedRows.doc.mjs +71 -0
  565. package/src/TextArea/TextArea.test.tsx +3 -3
  566. package/src/TextInput/TextInput.test.tsx +3 -3
  567. package/src/Thumbnail/Thumbnail.test.tsx +36 -2
  568. package/src/Thumbnail/Thumbnail.tsx +4 -2
  569. package/src/TimeInput/TimeInput.test.tsx +37 -0
  570. package/src/TimeInput/TimeInput.tsx +11 -1
  571. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  572. package/src/Timestamp/Timestamp.test.tsx +52 -0
  573. package/src/Timestamp/Timestamp.tsx +30 -16
  574. package/src/Toast/Toast.tsx +11 -3
  575. package/src/Toast/ToastViewport.test.tsx +64 -0
  576. package/src/Toast/ToastViewport.tsx +12 -0
  577. package/src/Toast/useToast.test.tsx +258 -0
  578. package/src/Toast/useToast.tsx +41 -0
  579. package/src/ToggleButton/ToggleButton.doc.mjs +1 -0
  580. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  581. package/src/Tokenizer/Tokenizer.test.tsx +54 -0
  582. package/src/Tokenizer/Tokenizer.tsx +5 -4
  583. package/src/Tooltip/Tooltip.doc.mjs +6 -6
  584. package/src/Tooltip/useTooltip.doc.mjs +5 -5
  585. package/src/Tooltip/useTooltip.tsx +12 -2
  586. package/src/TopNav/TopNav.doc.mjs +1 -1
  587. package/src/TopNav/TopNav.test.tsx +23 -7
  588. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +9 -2
  589. package/src/TreeList/TreeList.doc.mjs +2 -2
  590. package/src/Typeahead/BaseTypeahead.doc.mjs +19 -0
  591. package/src/Typeahead/BaseTypeahead.tsx +5 -2
  592. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  593. package/src/Typeahead/Typeahead.test.tsx +45 -1
  594. package/src/VisuallyHidden/VisuallyHidden.tsx +0 -3
  595. package/src/__tests__/TestIcon.tsx +26 -0
  596. package/src/__tests__/fastRoleQueries.ts +66 -0
  597. package/src/docPropReferences.test.ts +178 -0
  598. package/src/docs-types.ts +9 -1
  599. package/src/hooks/focusableSelector.ts +1 -1
  600. package/src/hooks/index.ts +3 -0
  601. package/src/hooks/useFocusTrap.doc.mjs +4 -2
  602. package/src/hooks/useFocusTrap.test.tsx +149 -1
  603. package/src/hooks/useFocusTrap.ts +50 -1
  604. package/src/hooks/useHotkeys.doc.mjs +52 -0
  605. package/src/hooks/useHotkeys.test.ts +245 -0
  606. package/src/hooks/useHotkeys.ts +203 -0
  607. package/src/hooks/useInteractiveRole.ts +12 -4
  608. package/src/hooks/useStreamingText.test.ts +54 -19
  609. package/src/hooks/useStreamingText.ts +16 -5
  610. package/src/hooks/useTreeFocus.test.tsx +1 -3
  611. package/src/reset.css +29 -0
  612. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  613. package/src/theme/defineTheme.ts +4 -13
  614. package/src/theme/derivedVarRegistry.test.ts +2 -2
  615. package/src/theme/expandColorScale.test.ts +29 -0
  616. package/src/theme/expandColorScale.ts +11 -6
  617. package/src/theme/hct.ts +9 -17
  618. package/src/theme/themingTargets.test.ts +353 -0
  619. package/src/theme/tokens.test.ts +182 -9
  620. package/src/theme/tokens.ts +239 -4
  621. package/src/theme/useTheme.test.tsx +126 -2
  622. package/src/theme/useTheme.ts +87 -6
  623. package/src/utils/color.test.ts +133 -0
  624. package/src/utils/color.ts +148 -0
  625. package/src/utils/composeEventHandlers.test.ts +71 -0
  626. package/src/utils/composeEventHandlers.ts +44 -0
  627. package/src/utils/index.ts +4 -0
  628. package/src/utils/mergeProps.test.ts +166 -0
  629. package/src/utils/sharedResizeObserver.test.ts +2 -2
  630. package/src/utils/timeParser.test.ts +13 -0
  631. package/src/utils/timeParser.ts +8 -5
  632. package/dist/Carousel/carousel.markers.stylex.d.ts +0 -7
  633. package/dist/Carousel/carousel.markers.stylex.d.ts.map +0 -1
  634. package/dist/Carousel/carousel.markers.stylex.js +0 -12
  635. package/src/Carousel/carousel.markers.stylex.ts +0 -10
@@ -12,6 +12,11 @@
12
12
  import {describe, it, expect, vi, beforeEach} from 'vitest';
13
13
  import {render, screen, fireEvent, waitFor} from '@testing-library/react';
14
14
  import userEvent from '@testing-library/user-event';
15
+ // getButton/queryButton instead of getByRole('button', {name}): the closed
16
+ // popover keeps a two-month Calendar (~85 role=button nodes) mounted, which
17
+ // made every role+name query compute ~85 accessible names through jsdom's
18
+ // slow getComputedStyle (~450ms per query). See fastRoleQueries.ts.
19
+ import {getButton, queryButton} from '../__tests__/fastRoleQueries';
15
20
  import {DateRangeInput} from './DateRangeInput';
16
21
  import type {DateRange} from './DateRangeInput';
17
22
 
@@ -53,7 +58,7 @@ describe('DateRangeInput', () => {
53
58
  hasClear={false}
54
59
  />,
55
60
  );
56
- const trigger = screen.getByRole('button', {name: /Range:/});
61
+ const trigger = getButton(/Range:/);
57
62
  expect(trigger.textContent).toMatch(/Mar/);
58
63
  expect(trigger.textContent).toMatch(/15/);
59
64
  expect(trigger.textContent).toMatch(/22/);
@@ -93,13 +98,13 @@ describe('DateRangeInput', () => {
93
98
  onChange={() => {}}
94
99
  />,
95
100
  );
96
- const trigger = screen.getByRole('button', {name: /Range/});
101
+ const trigger = getButton(/Range/);
97
102
  expect(trigger).toHaveAttribute('aria-required', 'true');
98
103
  });
99
104
 
100
105
  it('does not set aria-required when isRequired is false', () => {
101
106
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
102
- const trigger = screen.getByRole('button', {name: /Range/});
107
+ const trigger = getButton(/Range/);
103
108
  expect(trigger).not.toHaveAttribute('aria-required');
104
109
  });
105
110
 
@@ -112,25 +117,25 @@ describe('DateRangeInput', () => {
112
117
  onChange={() => {}}
113
118
  />,
114
119
  );
115
- const trigger = screen.getByRole('button', {name: /Range/});
120
+ const trigger = getButton(/Range/);
116
121
  expect(trigger).toBeDisabled();
117
122
  });
118
123
 
119
124
  it('is not disabled by default', () => {
120
125
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
121
- const trigger = screen.getByRole('button', {name: /Range/});
126
+ const trigger = getButton(/Range/);
122
127
  expect(trigger).not.toBeDisabled();
123
128
  });
124
129
 
125
130
  it('trigger has aria-haspopup="dialog"', () => {
126
131
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
127
- const trigger = screen.getByRole('button', {name: /Range/});
132
+ const trigger = getButton(/Range/);
128
133
  expect(trigger).toHaveAttribute('aria-haspopup', 'dialog');
129
134
  });
130
135
 
131
136
  it('trigger has aria-expanded=false by default', () => {
132
137
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
133
- const trigger = screen.getByRole('button', {name: /Range/});
138
+ const trigger = getButton(/Range/);
134
139
  expect(trigger).toHaveAttribute('aria-expanded', 'false');
135
140
  });
136
141
 
@@ -143,7 +148,7 @@ describe('DateRangeInput', () => {
143
148
  status={{type: 'error', message: 'Required'}}
144
149
  />,
145
150
  );
146
- const trigger = screen.getByRole('button', {name: /Range/});
151
+ const trigger = getButton(/Range/);
147
152
  expect(trigger).toHaveAttribute('aria-invalid', 'true');
148
153
  });
149
154
 
@@ -156,7 +161,7 @@ describe('DateRangeInput', () => {
156
161
  status={{type: 'warning', message: 'Watch out'}}
157
162
  />,
158
163
  );
159
- const trigger = screen.getByRole('button', {name: /Range/});
164
+ const trigger = getButton(/Range/);
160
165
  expect(trigger).not.toHaveAttribute('aria-invalid');
161
166
  });
162
167
 
@@ -181,7 +186,7 @@ describe('DateRangeInput', () => {
181
186
  status={{type: 'error', message: 'Please select dates'}}
182
187
  />,
183
188
  );
184
- const trigger = screen.getByRole('button', {name: /Range/});
189
+ const trigger = getButton(/Range/);
185
190
  const describedBy = trigger.getAttribute('aria-describedby')!;
186
191
  const ids = describedBy.split(' ');
187
192
  const found = ids.some(id => {
@@ -193,9 +198,7 @@ describe('DateRangeInput', () => {
193
198
 
194
199
  it('calendar icon button is present', () => {
195
200
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
196
- expect(
197
- screen.getByRole('button', {name: 'Open calendar'}),
198
- ).toBeInTheDocument();
201
+ expect(getButton('Open calendar')).toBeInTheDocument();
199
202
  });
200
203
 
201
204
  it('calendar icon button is disabled when isDisabled', () => {
@@ -207,7 +210,7 @@ describe('DateRangeInput', () => {
207
210
  onChange={() => {}}
208
211
  />,
209
212
  );
210
- expect(screen.getByRole('button', {name: 'Open calendar'})).toBeDisabled();
213
+ expect(getButton('Open calendar')).toBeDisabled();
211
214
  });
212
215
 
213
216
  it('renders with size="lg"', () => {
@@ -236,9 +239,7 @@ describe('DateRangeInput', () => {
236
239
  hasClear
237
240
  />,
238
241
  );
239
- expect(
240
- screen.getByRole('button', {name: 'Clear Range'}),
241
- ).toBeInTheDocument();
242
+ expect(getButton('Clear Range')).toBeInTheDocument();
242
243
  });
243
244
 
244
245
  it('does not show clear button when value is null', () => {
@@ -250,9 +251,7 @@ describe('DateRangeInput', () => {
250
251
  hasClear
251
252
  />,
252
253
  );
253
- expect(
254
- screen.queryByRole('button', {name: 'Clear Range'}),
255
- ).not.toBeInTheDocument();
254
+ expect(queryButton('Clear Range')).not.toBeInTheDocument();
256
255
  });
257
256
 
258
257
  it('does not show clear button when hasClear is false', () => {
@@ -268,9 +267,7 @@ describe('DateRangeInput', () => {
268
267
  hasClear={false}
269
268
  />,
270
269
  );
271
- expect(
272
- screen.queryByRole('button', {name: 'Clear Range'}),
273
- ).not.toBeInTheDocument();
270
+ expect(queryButton('Clear Range')).not.toBeInTheDocument();
274
271
  });
275
272
 
276
273
  it('does not show clear button when disabled', () => {
@@ -287,9 +284,7 @@ describe('DateRangeInput', () => {
287
284
  isDisabled
288
285
  />,
289
286
  );
290
- expect(
291
- screen.queryByRole('button', {name: 'Clear Range'}),
292
- ).not.toBeInTheDocument();
287
+ expect(queryButton('Clear Range')).not.toBeInTheDocument();
293
288
  });
294
289
 
295
290
  it('calls onChange with null when clear is clicked', () => {
@@ -306,7 +301,7 @@ describe('DateRangeInput', () => {
306
301
  hasClear
307
302
  />,
308
303
  );
309
- fireEvent.click(screen.getByRole('button', {name: 'Clear Range'}));
304
+ fireEvent.click(getButton('Clear Range'));
310
305
  expect(onChange).toHaveBeenCalledWith(null);
311
306
  });
312
307
  });
@@ -346,9 +341,7 @@ describe('DateRangeInput', () => {
346
341
  expect(
347
342
  screen.getByRole('group', {name: 'Preset date ranges', hidden: true}),
348
343
  ).toBeInTheDocument();
349
- expect(
350
- screen.getByRole('button', {name: 'Last 7 days', hidden: true}),
351
- ).toBeInTheDocument();
344
+ expect(getButton('Last 7 days')).toBeInTheDocument();
352
345
  });
353
346
 
354
347
  it('marks the applied preset with aria-current, not aria-selected', () => {
@@ -360,16 +353,10 @@ describe('DateRangeInput', () => {
360
353
  presets={presets}
361
354
  />,
362
355
  );
363
- const active = screen.getByRole('button', {
364
- name: 'Last 7 days',
365
- hidden: true,
366
- });
356
+ const active = getButton('Last 7 days');
367
357
  expect(active).toHaveAttribute('aria-current', 'true');
368
358
  expect(active).not.toHaveAttribute('aria-selected');
369
- const inactive = screen.getByRole('button', {
370
- name: 'This month',
371
- hidden: true,
372
- });
359
+ const inactive = getButton('This month');
373
360
  expect(inactive).not.toHaveAttribute('aria-current');
374
361
  });
375
362
  });
@@ -405,7 +392,7 @@ describe('DateRangeInput', () => {
405
392
  it('shows the reason tooltip on hover when disabled with a reason', async () => {
406
393
  renderDisabled({disabledMessage: 'You need the Editor role'});
407
394
 
408
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
395
+ const trigger = getButton(/Range:/);
409
396
  const container = trigger.parentElement as HTMLElement;
410
397
  const tooltip = screen.getByRole('tooltip', h);
411
398
  expect(tooltip).toHaveTextContent('You need the Editor role');
@@ -427,7 +414,7 @@ describe('DateRangeInput', () => {
427
414
 
428
415
  const tooltip = screen.getByRole('tooltip', h);
429
416
  await user.tab();
430
- expect(screen.getByRole('button', {name: /Range:/, ...h})).toHaveFocus();
417
+ expect(getButton(/Range:/)).toHaveFocus();
431
418
  await waitFor(() => {
432
419
  expect(tooltip).toHaveAttribute('popover-open');
433
420
  });
@@ -452,14 +439,14 @@ describe('DateRangeInput', () => {
452
439
 
453
440
  it('keeps the trigger focusable via aria-disabled when a reason is provided', () => {
454
441
  renderDisabled({disabledMessage: 'You need the Editor role'});
455
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
442
+ const trigger = getButton(/Range:/);
456
443
  expect(trigger).not.toBeDisabled();
457
444
  expect(trigger).toHaveAttribute('aria-disabled', 'true');
458
445
  });
459
446
 
460
447
  it('links the reason tooltip from the trigger via aria-describedby', () => {
461
448
  renderDisabled({disabledMessage: 'You need the Editor role'});
462
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
449
+ const trigger = getButton(/Range:/);
463
450
  const tooltip = screen.getByRole('tooltip', h);
464
451
  expect(trigger.getAttribute('aria-describedby')).toContain(tooltip.id);
465
452
  });
@@ -468,7 +455,7 @@ describe('DateRangeInput', () => {
468
455
  const user = userEvent.setup();
469
456
  renderDisabled({disabledMessage: 'You need the Editor role'});
470
457
 
471
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
458
+ const trigger = getButton(/Range:/);
472
459
  await user.click(trigger);
473
460
  expect(trigger).toHaveAttribute('aria-expanded', 'false');
474
461
 
@@ -478,7 +465,7 @@ describe('DateRangeInput', () => {
478
465
 
479
466
  it('remains natively disabled when disabled without a reason', () => {
480
467
  renderDisabled();
481
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
468
+ const trigger = getButton(/Range:/);
482
469
  expect(trigger).toBeDisabled();
483
470
  expect(trigger).not.toHaveAttribute('aria-disabled');
484
471
  });
@@ -118,7 +118,7 @@ export const docs = {
118
118
  },
119
119
  {
120
120
  name: 'timeIncrement',
121
- type: 'number',
121
+ type: '1 | 5 | 10 | 15 | 30',
122
122
  description:
123
123
  'Minutes to add or subtract when using arrow keys in the time input.',
124
124
  default: '1',
@@ -413,7 +413,7 @@ export const docsZh = {
413
413
  },
414
414
  {
415
415
  name: 'timeIncrement',
416
- type: 'number',
416
+ type: '1 | 5 | 10 | 15 | 30',
417
417
  description: '在时间输入中按箭头键时增减的分钟数。',
418
418
  default: '1',
419
419
  },
@@ -469,6 +469,7 @@ export const docsZh = {
469
469
  description:
470
470
  '用于布局自定义的 StyleX 样式。必须是 stylex.create() 的值。',
471
471
  },
472
+
472
473
  ],
473
474
  theming: {
474
475
  targets: [
@@ -12,6 +12,7 @@
12
12
  import {describe, it, expect, vi, beforeEach} from 'vitest';
13
13
  import {render, screen, fireEvent, waitFor} from '@testing-library/react';
14
14
  import userEvent from '@testing-library/user-event';
15
+ import {getButton, queryButton} from '../__tests__/fastRoleQueries';
15
16
  import {DateTimeInput} from './DateTimeInput';
16
17
  import type {ISODateTimeString} from './DateTimeInput';
17
18
 
@@ -186,14 +187,14 @@ describe('DateTimeInput', () => {
186
187
 
187
188
  it('calendar button is focusable and clickable', () => {
188
189
  render(<DateTimeInput label="Meeting" onChange={() => {}} />);
189
- const button = screen.getByRole('button', {name: 'Open calendar'});
190
+ const button = getButton('Open calendar');
190
191
  expect(button).toBeInTheDocument();
191
192
  expect(button).not.toBeDisabled();
192
193
  });
193
194
 
194
195
  it('calendar button is disabled when isDisabled is true', () => {
195
196
  render(<DateTimeInput label="Meeting" isDisabled onChange={() => {}} />);
196
- const button = screen.getByRole('button', {name: 'Open calendar'});
197
+ const button = getButton('Open calendar');
197
198
  expect(button).toBeDisabled();
198
199
  });
199
200
 
@@ -201,7 +202,7 @@ describe('DateTimeInput', () => {
201
202
  render(<DateTimeInput label="Meeting" isLoading onChange={() => {}} />);
202
203
  expect(screen.getByRole('combobox')).toBeDisabled();
203
204
  expect(screen.getByLabelText('Meeting time')).toBeDisabled();
204
- expect(screen.getByRole('button', {name: 'Open calendar'})).toBeDisabled();
205
+ expect(getButton('Open calendar')).toBeDisabled();
205
206
  });
206
207
 
207
208
  it('sets aria-busy when isLoading is true', () => {
@@ -214,6 +215,21 @@ describe('DateTimeInput', () => {
214
215
  expect(screen.getByRole('combobox')).not.toHaveAttribute('aria-busy');
215
216
  });
216
217
 
218
+ it('sets aria-busy on the time input when isLoading is true', () => {
219
+ render(<DateTimeInput label="Meeting" isLoading onChange={() => {}} />);
220
+ expect(screen.getByLabelText('Meeting time')).toHaveAttribute(
221
+ 'aria-busy',
222
+ 'true',
223
+ );
224
+ });
225
+
226
+ it('does not set aria-busy on the time input when not loading', () => {
227
+ render(<DateTimeInput label="Meeting" onChange={() => {}} />);
228
+ expect(screen.getByLabelText('Meeting time')).not.toHaveAttribute(
229
+ 'aria-busy',
230
+ );
231
+ });
232
+
217
233
  it('renders status icon for error status', () => {
218
234
  render(
219
235
  <DateTimeInput
@@ -270,6 +286,61 @@ describe('DateTimeInput', () => {
270
286
  expect(found).toBe(true);
271
287
  });
272
288
 
289
+ it('links the description to the time input via aria-describedby', () => {
290
+ render(
291
+ <DateTimeInput
292
+ label="Meeting"
293
+ description="Pick the meeting datetime"
294
+ onChange={() => {}}
295
+ />,
296
+ );
297
+ // The description covers both halves of the field, so the time input must
298
+ // carry it too — a screen-reader user tabbing into the time half should
299
+ // not lose the field's description.
300
+ const timeInput = screen.getByLabelText('Meeting time');
301
+ const describedBy = timeInput.getAttribute('aria-describedby')!;
302
+ const ids = describedBy.split(' ');
303
+ const found = ids.some(id =>
304
+ document
305
+ .getElementById(id)
306
+ ?.textContent?.includes('Pick the meeting datetime'),
307
+ );
308
+ expect(found).toBe(true);
309
+ });
310
+
311
+ it('links the status message to the time input via aria-describedby', () => {
312
+ render(
313
+ <DateTimeInput
314
+ label="Meeting"
315
+ onChange={() => {}}
316
+ status={{type: 'error', message: 'Invalid datetime'}}
317
+ />,
318
+ );
319
+ const timeInput = screen.getByLabelText('Meeting time');
320
+ const describedBy = timeInput.getAttribute('aria-describedby')!;
321
+ const ids = describedBy.split(' ');
322
+ const found = ids.some(id =>
323
+ document.getElementById(id)?.textContent?.includes('Invalid datetime'),
324
+ );
325
+ expect(found).toBe(true);
326
+ });
327
+
328
+ it('links the disabled reason to the time input via aria-describedby', () => {
329
+ HTMLElement.prototype.showPopover = vi.fn();
330
+ HTMLElement.prototype.hidePopover = vi.fn();
331
+ render(
332
+ <DateTimeInput
333
+ label="When"
334
+ onChange={() => {}}
335
+ isDisabled
336
+ disabledMessage="You need the Editor role"
337
+ />,
338
+ );
339
+ const timeInput = screen.getByLabelText('When time');
340
+ const tooltip = screen.getByRole('tooltip', {hidden: true});
341
+ expect(timeInput.getAttribute('aria-describedby')).toContain(tooltip.id);
342
+ });
343
+
273
344
  it('handles Escape keydown on date input without error', () => {
274
345
  render(<DateTimeInput label="Meeting" onChange={() => {}} />);
275
346
  const input = screen.getByRole('combobox');
@@ -363,16 +434,12 @@ describe('DateTimeInput', () => {
363
434
  hasClear
364
435
  />,
365
436
  );
366
- expect(
367
- screen.getByRole('button', {name: 'Clear Meeting'}),
368
- ).toBeInTheDocument();
437
+ expect(getButton('Clear Meeting')).toBeInTheDocument();
369
438
  });
370
439
 
371
440
  it('does not show clear button when value is undefined', () => {
372
441
  render(<DateTimeInput label="Meeting" onChange={() => {}} hasClear />);
373
- expect(
374
- screen.queryByRole('button', {name: 'Clear Meeting'}),
375
- ).not.toBeInTheDocument();
442
+ expect(queryButton('Clear Meeting')).not.toBeInTheDocument();
376
443
  });
377
444
 
378
445
  it('does not show clear button when hasClear is false', () => {
@@ -383,9 +450,7 @@ describe('DateTimeInput', () => {
383
450
  onChange={() => {}}
384
451
  />,
385
452
  );
386
- expect(
387
- screen.queryByRole('button', {name: 'Clear Meeting'}),
388
- ).not.toBeInTheDocument();
453
+ expect(queryButton('Clear Meeting')).not.toBeInTheDocument();
389
454
  });
390
455
 
391
456
  it('does not show clear button when disabled', () => {
@@ -398,9 +463,7 @@ describe('DateTimeInput', () => {
398
463
  isDisabled
399
464
  />,
400
465
  );
401
- expect(
402
- screen.queryByRole('button', {name: 'Clear Meeting'}),
403
- ).not.toBeInTheDocument();
466
+ expect(queryButton('Clear Meeting')).not.toBeInTheDocument();
404
467
  });
405
468
 
406
469
  it('calls onChange with undefined when clear is clicked', () => {
@@ -413,7 +476,7 @@ describe('DateTimeInput', () => {
413
476
  hasClear
414
477
  />,
415
478
  );
416
- fireEvent.click(screen.getByRole('button', {name: 'Clear Meeting'}));
479
+ fireEvent.click(getButton('Clear Meeting'));
417
480
  expect(onChange).toHaveBeenCalledWith(undefined);
418
481
  });
419
482
  });
@@ -677,4 +740,43 @@ describe('DateTimeInput', () => {
677
740
  expect(timeInput).toHaveAttribute('placeholder', 'Select a time');
678
741
  });
679
742
  });
743
+
744
+ describe('timeIncrement', () => {
745
+ it('steps the time by timeIncrement minutes on ArrowUp', () => {
746
+ const onChange = vi.fn();
747
+ render(
748
+ <DateTimeInput
749
+ label="Meeting"
750
+ value={'2026-03-15T14:30' as ISODateTimeString}
751
+ timeIncrement={15}
752
+ onChange={onChange}
753
+ />,
754
+ );
755
+
756
+ const timeInput = screen.getByLabelText('Meeting time');
757
+ fireEvent.keyDown(timeInput, {key: 'ArrowUp'});
758
+
759
+ // 14:30 + 15min increment = 14:45
760
+ expect(onChange).toHaveBeenCalledTimes(1);
761
+ expect(onChange.mock.calls[0][0]).toContain('14:45');
762
+ });
763
+
764
+ it('defaults to a 1-minute increment', () => {
765
+ const onChange = vi.fn();
766
+ render(
767
+ <DateTimeInput
768
+ label="Meeting"
769
+ value={'2026-03-15T14:30' as ISODateTimeString}
770
+ onChange={onChange}
771
+ />,
772
+ );
773
+
774
+ const timeInput = screen.getByLabelText('Meeting time');
775
+ fireEvent.keyDown(timeInput, {key: 'ArrowUp'});
776
+
777
+ // 14:30 + default 1min = 14:31
778
+ expect(onChange).toHaveBeenCalledTimes(1);
779
+ expect(onChange.mock.calls[0][0]).toContain('14:31');
780
+ });
781
+ });
680
782
  });
@@ -86,6 +86,9 @@ export type DateTimeInputHourFormat = '12h' | '24h';
86
86
 
87
87
  export type DateTimeInputSize = 'sm' | 'md' | 'lg';
88
88
 
89
+ /** Supported minute increments for arrow-key stepping of the time field. */
90
+ export type DateTimeInputTimeIncrement = 1 | 5 | 10 | 15 | 30;
91
+
89
92
  export type {
90
93
  InputStatus as DateTimeInputStatus,
91
94
  InputStatusType as DateTimeInputStatusType,
@@ -287,10 +290,11 @@ export interface DateTimeInputProps extends Omit<
287
290
  hourFormat?: DateTimeInputHourFormat;
288
291
 
289
292
  /**
290
- * Time increment in minutes when using arrow keys in the time input.
293
+ * Minutes added or subtracted when stepping the time field with the arrow
294
+ * keys. Constrained to a set of sensible increments.
291
295
  * @default 1
292
296
  */
293
- timeIncrement?: number;
297
+ timeIncrement?: DateTimeInputTimeIncrement;
294
298
 
295
299
  /**
296
300
  * Whether to show a clear button when a value is set.
@@ -987,10 +991,12 @@ export function DateTimeInput({
987
991
  aria-disabled={showsDisabledMessage ? 'true' : undefined}
988
992
  readOnly={showsDisabledMessage || undefined}
989
993
  aria-label={timeLabel ?? `${label} time`}
994
+ aria-describedby={ariaDescribedBy}
990
995
  aria-required={isRequired === true ? 'true' : undefined}
991
996
  aria-invalid={
992
997
  status?.type === 'error' || !isTimeInputValid ? 'true' : undefined
993
998
  }
999
+ aria-busy={isBusy || undefined}
994
1000
  {...stylex.props(
995
1001
  styles.input,
996
1002
  isEffectivelyDisabled && styles.inputDisabled,
@@ -14,6 +14,7 @@ export type {
14
14
  DateTimeInputProps,
15
15
  DateTimeInputSize,
16
16
  DateTimeInputHourFormat,
17
+ DateTimeInputTimeIncrement,
17
18
  DateTimeInputStatus,
18
19
  DateTimeInputStatusType,
19
20
  ISODateTimeString,
@@ -8,6 +8,10 @@ export const docs = {
8
8
  group: 'Dialog',
9
9
  category: 'Overlay',
10
10
  keywords: ["dialog","modal","popup","overlay","lightbox","alert","confirm","prompt","backdrop","focus trap","imperative"],
11
+ // Intentionally a contained isInline preview, not playground.overlay: the
12
+ // component stays visible on load and knobs stay live, whereas a real
13
+ // showModal() overlay makes the page inert — see PlaygroundConfig.overlay
14
+ // in docs-types.ts (#3657).
11
15
  playground: {
12
16
  defaults: {
13
17
  isOpen: true,
@@ -65,6 +65,51 @@ export const docs = {
65
65
  default: 'true',
66
66
  },
67
67
  ],
68
+ playground: {
69
+ defaults: {
70
+ title: 'Delete file?',
71
+ subtitle: 'This action cannot be undone.',
72
+ hasDivider: true,
73
+ },
74
+ },
75
+ examples: [
76
+ {
77
+ label: 'Basic',
78
+ code: `
79
+ import {DialogHeader} from '@astryxdesign/core/Dialog';
80
+
81
+ <DialogHeader title="Delete file?" subtitle="This action cannot be undone." />;
82
+ `,
83
+ },
84
+ {
85
+ label: 'With close button',
86
+ code: `
87
+ import {useState} from 'react';
88
+ import {DialogHeader} from '@astryxdesign/core/Dialog';
89
+
90
+ function Header() {
91
+ const [, setIsOpen] = useState(true);
92
+
93
+ // Passing onOpenChange renders a close button that calls it with false.
94
+ return <DialogHeader title="Settings" onOpenChange={setIsOpen} />;
95
+ }
96
+ `,
97
+ },
98
+ {
99
+ label: 'With start and end content',
100
+ code: `
101
+ import {DialogHeader} from '@astryxdesign/core/Dialog';
102
+ import {Icon} from '@astryxdesign/core/Icon';
103
+ import {Badge} from '@astryxdesign/core/Badge';
104
+
105
+ <DialogHeader
106
+ title="Notifications"
107
+ startContent={<Icon icon="chevronLeft" size="sm" />}
108
+ endContent={<Badge label="3" />}
109
+ />;
110
+ `,
111
+ },
112
+ ],
68
113
  };
69
114
 
70
115
  export const docsZh = {
@@ -11,7 +11,7 @@ export const docs = {
11
11
  theming: {
12
12
  targets: [
13
13
  {className: 'astryx-dropdown-menu'},
14
- {className: 'astryx-dropdown-menu-item'},
14
+ {className: 'astryx-dropdown-menu-item', visualProps: ['size']},
15
15
  ],
16
16
  vars: [
17
17
  {name: '--_dropdown-menu-radius', description: 'Border radius of the menu popup', default: 'var(--radius-element)', private: true},
@@ -89,7 +89,7 @@ describe('DropdownMenu', () => {
89
89
  .getByRole('menu', {hidden: true})
90
90
  .closest('[popover]');
91
91
  expect(popover?.getAttribute('style')).toContain(
92
- 'position-area: bottom span-right',
92
+ 'position-area: self-block-end span-self-inline-end',
93
93
  );
94
94
  });
95
95
 
@@ -105,7 +105,27 @@ describe('DropdownMenu', () => {
105
105
  .getByRole('menu', {hidden: true})
106
106
  .closest('[popover]');
107
107
  expect(popover?.getAttribute('style')).toContain(
108
- 'position-area: top span-right',
108
+ 'position-area: self-block-start span-self-inline-end',
109
+ );
110
+ });
111
+
112
+ it('emits the direction-independent logical mapping under an RTL ancestor (#3389)', async () => {
113
+ // The self-* position-area keywords resolve against the popover's own
114
+ // inherited direction in the browser, so RTL emits the same string as
115
+ // LTR and the mirroring is pure CSS. jsdom can't verify the geometry —
116
+ // the DropdownMenu RTL Storybook story is the visual proof surface.
117
+ const user = userEvent.setup();
118
+ const {container} = render(
119
+ <div style={{direction: 'rtl'}}>
120
+ <DropdownMenu button={{label: 'Actions'}} items={[{label: 'Item 1'}]} />
121
+ </div>,
122
+ );
123
+
124
+ await user.click(screen.getByRole('button', {name: /Actions/}));
125
+
126
+ const popover = container.querySelector('[popover]');
127
+ expect(popover?.getAttribute('style')).toContain(
128
+ 'position-area: self-block-end span-self-inline-end',
109
129
  );
110
130
  });
111
131