@astryxdesign/core 0.1.4-canary.ff77e1c → 0.1.4

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 (598) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +18 -20
  4. package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
  5. package/dist/AppShell/AppShell.d.ts +1 -1
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +53 -55
  8. package/dist/AspectRatio/AspectRatio.d.ts +10 -48
  9. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js +12 -33
  11. package/dist/AspectRatio/index.d.ts +1 -1
  12. package/dist/AspectRatio/index.d.ts.map +1 -1
  13. package/dist/Avatar/Avatar.d.ts.map +1 -1
  14. package/dist/Avatar/Avatar.js +25 -27
  15. package/dist/Avatar/AvatarStatusDot.js +5 -5
  16. package/dist/AvatarGroup/AvatarGroup.js +5 -5
  17. package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
  18. package/dist/Badge/Badge.js +3 -3
  19. package/dist/Banner/Banner.d.ts.map +1 -1
  20. package/dist/Banner/Banner.js +25 -32
  21. package/dist/Blockquote/Blockquote.js +7 -7
  22. package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
  23. package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
  24. package/dist/Button/Button.js +19 -19
  25. package/dist/ButtonGroup/ButtonGroup.js +7 -7
  26. package/dist/Calendar/Calendar.d.ts.map +1 -1
  27. package/dist/Calendar/Calendar.js +48 -68
  28. package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
  29. package/dist/Calendar/styles.d.ts +2 -2
  30. package/dist/Calendar/styles.d.ts.map +1 -1
  31. package/dist/Calendar/styles.js +2 -2
  32. package/dist/Card/Card.d.ts +2 -4
  33. package/dist/Card/Card.d.ts.map +1 -1
  34. package/dist/Card/Card.js +10 -18
  35. package/dist/Carousel/Carousel.d.ts.map +1 -1
  36. package/dist/Carousel/Carousel.js +21 -24
  37. package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
  38. package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
  39. package/dist/Carousel/carousel.markers.stylex.js +12 -0
  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 +15 -27
  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 +11 -13
  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 +10 -12
  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 +12 -14
  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 +15 -24
  67. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  68. package/dist/Chat/ChatToolCalls.js +74 -81
  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 +23 -25
  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 +6 -8
  80. package/dist/Citation/Citation.js +10 -10
  81. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  82. package/dist/ClickableCard/ClickableCard.js +9 -32
  83. package/dist/Code/Code.js +3 -3
  84. package/dist/CodeBlock/CodeBlock.d.ts +1 -10
  85. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  86. package/dist/CodeBlock/CodeBlock.js +52 -88
  87. package/dist/Collapsible/Collapsible.d.ts +3 -9
  88. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  89. package/dist/Collapsible/Collapsible.js +22 -110
  90. package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
  91. package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
  92. package/dist/Collapsible/CollapsibleGroup.js +12 -73
  93. package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
  94. package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
  95. package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
  96. package/dist/Collapsible/index.d.ts +0 -1
  97. package/dist/Collapsible/index.d.ts.map +1 -1
  98. package/dist/Collapsible/useCollapsible.d.ts +1 -4
  99. package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
  100. package/dist/Collapsible/useCollapsible.js +6 -20
  101. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  102. package/dist/CommandPalette/CommandPalette.js +34 -36
  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 +2 -7
  110. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  111. package/dist/ContextMenu/ContextMenu.js +43 -76
  112. package/dist/DateInput/DateInput.js +18 -18
  113. package/dist/DateRangeInput/DateRangeInput.js +21 -21
  114. package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
  115. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  116. package/dist/DateTimeInput/DateTimeInput.js +26 -30
  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 +17 -2
  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 +3 -4
  136. package/dist/Grid/Grid.d.ts.map +1 -1
  137. package/dist/Grid/Grid.js +12 -29
  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 +1 -5
  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 +12 -16
  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 +2 -29
  155. package/dist/Layer/useLayer.d.ts.map +1 -1
  156. package/dist/Layer/useLayer.js +31 -44
  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 +31 -55
  164. package/dist/Lightbox/useLightbox.js +3 -3
  165. package/dist/Link/Link.js +15 -15
  166. package/dist/Link/LinkProvider.js +3 -3
  167. package/dist/Link/useLinkify.js +3 -3
  168. package/dist/List/List.js +11 -11
  169. package/dist/List/ListItem.js +11 -11
  170. package/dist/Markdown/Markdown.d.ts.map +1 -1
  171. package/dist/Markdown/Markdown.js +102 -102
  172. package/dist/MetadataList/MetadataList.js +10 -10
  173. package/dist/MetadataList/MetadataListItem.js +15 -15
  174. package/dist/MobileNav/MobileNav.d.ts +1 -1
  175. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  176. package/dist/MobileNav/MobileNav.js +23 -26
  177. package/dist/MobileNav/MobileNavToggle.js +5 -5
  178. package/dist/MoreMenu/MoreMenu.js +3 -3
  179. package/dist/MultiSelector/MultiSelector.js +56 -56
  180. package/dist/NavIcon/NavIcon.js +3 -3
  181. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  182. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  183. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  184. package/dist/NumberInput/NumberInput.js +32 -48
  185. package/dist/Outline/Outline.js +15 -15
  186. package/dist/OverflowList/OverflowList.js +8 -8
  187. package/dist/Overlay/Overlay.js +3 -3
  188. package/dist/Overlay/OverlayScrim.js +5 -5
  189. package/dist/Overlay/useOverlay.js +3 -3
  190. package/dist/Pagination/Pagination.d.ts +1 -1
  191. package/dist/Pagination/Pagination.d.ts.map +1 -1
  192. package/dist/Pagination/Pagination.js +72 -125
  193. package/dist/Popover/Popover.js +16 -16
  194. package/dist/Popover/usePopover.js +7 -7
  195. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  196. package/dist/PowerSearch/PowerSearch.js +92 -110
  197. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  198. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  199. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  200. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  201. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  202. package/dist/ProgressBar/ProgressBar.js +18 -25
  203. package/dist/RadioList/RadioList.js +7 -7
  204. package/dist/RadioList/RadioListItem.d.ts +1 -1
  205. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  206. package/dist/RadioList/RadioListItem.js +21 -24
  207. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  208. package/dist/Resizable/ResizeHandle.js +10 -28
  209. package/dist/Section/Section.js +5 -5
  210. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  211. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  212. package/dist/SegmentedControl/SegmentedControl.js +10 -32
  213. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  214. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  215. package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
  216. package/dist/SelectableCard/SelectableCard.js +5 -5
  217. package/dist/Selector/Selector.js +46 -46
  218. package/dist/Selector/SelectorOption.js +3 -3
  219. package/dist/SideNav/SideNav.d.ts.map +1 -1
  220. package/dist/SideNav/SideNav.js +34 -38
  221. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  222. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  223. package/dist/SideNav/SideNavCollapseButton.js +6 -8
  224. package/dist/SideNav/SideNavHeading.js +87 -87
  225. package/dist/SideNav/SideNavItem.js +42 -42
  226. package/dist/SideNav/SideNavSection.d.ts +1 -1
  227. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  228. package/dist/SideNav/SideNavSection.js +16 -18
  229. package/dist/Skeleton/Skeleton.js +3 -3
  230. package/dist/Slider/Slider.js +23 -23
  231. package/dist/Spinner/Spinner.js +9 -9
  232. package/dist/StatusDot/StatusDot.js +5 -5
  233. package/dist/Switch/Switch.d.ts +4 -8
  234. package/dist/Switch/Switch.d.ts.map +1 -1
  235. package/dist/Switch/Switch.js +29 -34
  236. package/dist/TabList/Tab.js +18 -18
  237. package/dist/TabList/TabList.js +5 -5
  238. package/dist/TabList/TabMenu.d.ts.map +1 -1
  239. package/dist/TabList/TabMenu.js +30 -57
  240. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  241. package/dist/Table/BaseTable.d.ts.map +1 -1
  242. package/dist/Table/BaseTable.js +39 -50
  243. package/dist/Table/Table.js +7 -7
  244. package/dist/Table/TableBody.d.ts +1 -1
  245. package/dist/Table/TableBody.d.ts.map +1 -1
  246. package/dist/Table/TableBody.js +5 -9
  247. package/dist/Table/TableCell.js +3 -3
  248. package/dist/Table/TableFooter.d.ts +1 -1
  249. package/dist/Table/TableFooter.d.ts.map +1 -1
  250. package/dist/Table/TableFooter.js +5 -9
  251. package/dist/Table/TableHeader.d.ts +1 -1
  252. package/dist/Table/TableHeader.d.ts.map +1 -1
  253. package/dist/Table/TableHeader.js +5 -9
  254. package/dist/Table/TableHeaderCell.js +3 -3
  255. package/dist/Table/TableRow.js +5 -5
  256. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  257. package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
  258. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  259. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  260. package/dist/Table/plugins/pagination/paginateData.js +1 -5
  261. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  262. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
  263. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  264. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  265. package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
  266. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  267. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  268. package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
  269. package/dist/Table/tableContextMenu.js +9 -9
  270. package/dist/Text/Text.js +10 -10
  271. package/dist/TextArea/TextArea.js +14 -14
  272. package/dist/TextInput/TextInput.js +15 -15
  273. package/dist/Thumbnail/Thumbnail.d.ts +2 -3
  274. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  275. package/dist/Thumbnail/Thumbnail.js +29 -30
  276. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  277. package/dist/TimeInput/TimeInput.js +21 -26
  278. package/dist/Timestamp/Timestamp.d.ts +1 -1
  279. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  280. package/dist/Timestamp/Timestamp.js +26 -37
  281. package/dist/Toast/Toast.d.ts.map +1 -1
  282. package/dist/Toast/Toast.js +17 -25
  283. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  284. package/dist/Toast/ToastViewport.js +11 -23
  285. package/dist/Toast/useToast.d.ts.map +1 -1
  286. package/dist/Toast/useToast.js +4 -44
  287. package/dist/ToggleButton/ToggleButton.js +12 -12
  288. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  289. package/dist/Token/Token.js +21 -21
  290. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  291. package/dist/Tokenizer/Tokenizer.js +34 -36
  292. package/dist/Toolbar/Toolbar.js +18 -18
  293. package/dist/Tooltip/Tooltip.js +11 -11
  294. package/dist/Tooltip/useTooltip.d.ts +1 -5
  295. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  296. package/dist/Tooltip/useTooltip.js +3 -3
  297. package/dist/TopNav/TopNav.js +32 -32
  298. package/dist/TopNav/TopNavHeading.js +67 -67
  299. package/dist/TopNav/TopNavItem.js +5 -5
  300. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  301. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  302. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  303. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
  304. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  305. package/dist/TopNav/TopNavMenu.js +32 -32
  306. package/dist/TreeList/TreeList.js +8 -8
  307. package/dist/TreeList/TreeListBranches.js +11 -11
  308. package/dist/TreeList/TreeListItem.js +30 -30
  309. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  310. package/dist/Typeahead/BaseTypeahead.js +20 -23
  311. package/dist/Typeahead/Typeahead.js +12 -12
  312. package/dist/Typeahead/TypeaheadItem.js +10 -10
  313. package/dist/VStack/VStack.js +3 -3
  314. package/dist/astryx.css +0 -7
  315. package/dist/astryx.umd.js +59 -59
  316. package/dist/astryx.umd.js.map +4 -4
  317. package/dist/docs-types.d.ts +2 -8
  318. package/dist/docs-types.d.ts.map +1 -1
  319. package/dist/hooks/focusableSelector.d.ts +1 -1
  320. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  321. package/dist/hooks/focusableSelector.js +1 -1
  322. package/dist/hooks/index.d.ts +0 -2
  323. package/dist/hooks/index.d.ts.map +1 -1
  324. package/dist/hooks/index.js +0 -1
  325. package/dist/hooks/useFocusTrap.d.ts +0 -3
  326. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  327. package/dist/hooks/useFocusTrap.js +1 -38
  328. package/dist/hooks/useInteractiveRole.d.ts +2 -6
  329. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  330. package/dist/hooks/useInteractiveRole.js +2 -6
  331. package/dist/hooks/useKeyboardHint.js +9 -9
  332. package/dist/hooks/useStreamingText.d.ts +1 -3
  333. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  334. package/dist/hooks/useStreamingText.js +5 -14
  335. package/dist/theme/MediaTheme.js +3 -3
  336. package/dist/theme/Theme.js +7 -7
  337. package/dist/theme/defineTheme.d.ts +1 -1
  338. package/dist/theme/defineTheme.d.ts.map +1 -1
  339. package/dist/theme/expandColorScale.d.ts.map +1 -1
  340. package/dist/theme/expandColorScale.js +3 -10
  341. package/dist/theme/hct.d.ts +15 -0
  342. package/dist/theme/hct.d.ts.map +1 -1
  343. package/dist/theme/hct.js +9 -9
  344. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  345. package/dist/theme/tokens.d.ts +2 -10
  346. package/dist/theme/tokens.d.ts.map +1 -1
  347. package/dist/theme/tokens.js +4 -220
  348. package/dist/theme/useTheme.d.ts +2 -3
  349. package/dist/theme/useTheme.d.ts.map +1 -1
  350. package/dist/theme/useTheme.js +6 -73
  351. package/dist/utils/index.d.ts +0 -3
  352. package/dist/utils/index.d.ts.map +1 -1
  353. package/dist/utils/index.js +1 -3
  354. package/dist/utils/timeParser.d.ts.map +1 -1
  355. package/dist/utils/timeParser.js +5 -8
  356. package/package.json +3 -3
  357. package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
  358. package/src/AlertDialog/AlertDialog.tsx +0 -2
  359. package/src/AppShell/AppShell.tsx +0 -2
  360. package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
  361. package/src/AspectRatio/AspectRatio.test.tsx +1 -142
  362. package/src/AspectRatio/AspectRatio.tsx +10 -70
  363. package/src/AspectRatio/index.ts +1 -5
  364. package/src/Avatar/Avatar.doc.mjs +0 -11
  365. package/src/Avatar/Avatar.test.tsx +1 -32
  366. package/src/Avatar/Avatar.tsx +20 -12
  367. package/src/AvatarGroup/AvatarGroup.doc.mjs +0 -1
  368. package/src/Banner/Banner.doc.mjs +0 -8
  369. package/src/Banner/Banner.test.tsx +0 -38
  370. package/src/Banner/Banner.tsx +1 -8
  371. package/src/Calendar/Calendar.doc.mjs +1 -1
  372. package/src/Calendar/Calendar.test.tsx +17 -122
  373. package/src/Calendar/Calendar.tsx +5 -26
  374. package/src/Calendar/dayCellUtils.ts +1 -3
  375. package/src/Calendar/styles.ts +2 -12
  376. package/src/Card/Card.doc.mjs +1 -1
  377. package/src/Card/Card.tsx +6 -16
  378. package/src/Carousel/Carousel.doc.mjs +12 -12
  379. package/src/Carousel/Carousel.test.tsx +0 -13
  380. package/src/Carousel/Carousel.tsx +2 -4
  381. package/src/Carousel/carousel.markers.stylex.ts +10 -0
  382. package/src/Chat/Chat.doc.mjs +1 -1
  383. package/src/Chat/ChatComposerInput.test.tsx +1 -27
  384. package/src/Chat/ChatComposerInput.tsx +15 -20
  385. package/src/Chat/ChatDictationButton.tsx +4 -4
  386. package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
  387. package/src/Chat/ChatMessageMetadata.tsx +6 -4
  388. package/src/Chat/ChatSystemMessage.test.tsx +11 -26
  389. package/src/Chat/ChatSystemMessage.tsx +7 -7
  390. package/src/Chat/ChatTokenizedText.test.tsx +16 -29
  391. package/src/Chat/ChatTokenizedText.tsx +8 -15
  392. package/src/Chat/ChatToolCalls.test.tsx +0 -55
  393. package/src/Chat/ChatToolCalls.tsx +12 -10
  394. package/src/Chat/index.ts +4 -1
  395. package/src/Chat/useTriggerMenu.tsx +4 -1
  396. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  397. package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
  398. package/src/CheckboxInput/CheckboxInput.tsx +0 -2
  399. package/src/CheckboxList/CheckboxList.test.tsx +0 -19
  400. package/src/CheckboxList/CheckboxListItem.tsx +2 -11
  401. package/src/Citation/Citation.doc.mjs +0 -5
  402. package/src/ClickableCard/ClickableCard.tsx +2 -45
  403. package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
  404. package/src/CodeBlock/CodeBlock.test.tsx +3 -122
  405. package/src/CodeBlock/CodeBlock.tsx +4 -62
  406. package/src/Collapsible/Collapsible.doc.mjs +4 -8
  407. package/src/Collapsible/Collapsible.tsx +10 -86
  408. package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
  409. package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
  410. package/src/Collapsible/CollapsibleGroup.tsx +9 -107
  411. package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
  412. package/src/Collapsible/index.ts +0 -4
  413. package/src/Collapsible/useCollapsible.ts +6 -20
  414. package/src/CommandPalette/CommandPalette.doc.mjs +0 -5
  415. package/src/CommandPalette/CommandPalette.tsx +3 -5
  416. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
  417. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
  418. package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
  419. package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
  420. package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
  421. package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
  422. package/src/ContextMenu/ContextMenu.test.tsx +0 -87
  423. package/src/ContextMenu/ContextMenu.tsx +28 -87
  424. package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
  425. package/src/DateInput/DateInput.test.tsx +20 -11
  426. package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
  427. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
  428. package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
  429. package/src/DateTimeInput/DateTimeInput.tsx +2 -8
  430. package/src/DateTimeInput/index.ts +0 -1
  431. package/src/Dialog/Dialog.doc.mjs +0 -4
  432. package/src/Dialog/DialogHeader.doc.mjs +0 -45
  433. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  434. package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
  435. package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
  436. package/src/EmptyState/EmptyState.doc.mjs +1 -1
  437. package/src/Field/Field.test.tsx +4 -1
  438. package/src/Field/FieldLabel.test.tsx +2 -2
  439. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
  440. package/src/Grid/Grid.test.tsx +18 -43
  441. package/src/Grid/Grid.tsx +9 -26
  442. package/src/HoverCard/HoverCard.doc.mjs +6 -6
  443. package/src/HoverCard/useHoverCard.doc.mjs +5 -5
  444. package/src/HoverCard/useHoverCard.tsx +2 -9
  445. package/src/Icon/Icon.test.tsx +29 -41
  446. package/src/Icon/Icon.tsx +2 -6
  447. package/src/InputGroup/InputGroup.doc.mjs +0 -1
  448. package/src/InputGroup/InputGroup.tsx +2 -2
  449. package/src/Item/Item.tsx +1 -1
  450. package/src/Layer/useLayer.doc.mjs +2 -2
  451. package/src/Layer/useLayer.test.tsx +2 -221
  452. package/src/Layer/useLayer.tsx +30 -69
  453. package/src/Layout/LayoutContent.doc.mjs +0 -12
  454. package/src/Layout/LayoutPanel.doc.mjs +0 -40
  455. package/src/Lightbox/Lightbox.doc.mjs +0 -5
  456. package/src/Lightbox/Lightbox.test.tsx +2 -123
  457. package/src/Lightbox/Lightbox.tsx +1 -29
  458. package/src/Markdown/Markdown.tsx +7 -9
  459. package/src/Markdown/parser.perf.test.ts +12 -34
  460. package/src/MobileNav/MobileNav.test.tsx +0 -56
  461. package/src/MobileNav/MobileNav.tsx +8 -13
  462. package/src/NavMenu/NavMenu.doc.mjs +0 -15
  463. package/src/NumberInput/NumberInput.test.tsx +3 -48
  464. package/src/NumberInput/NumberInput.tsx +15 -32
  465. package/src/Outline/Outline.doc.mjs +0 -2
  466. package/src/Overlay/Overlay.doc.mjs +0 -6
  467. package/src/Pagination/Pagination.test.tsx +0 -162
  468. package/src/Pagination/Pagination.tsx +26 -80
  469. package/src/Popover/Popover.doc.mjs +6 -6
  470. package/src/Popover/Popover.test.tsx +0 -65
  471. package/src/Popover/usePopover.doc.mjs +1 -1
  472. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  473. package/src/PowerSearch/PowerSearch.test.tsx +1 -109
  474. package/src/PowerSearch/PowerSearch.tsx +16 -37
  475. package/src/ProgressBar/ProgressBar.doc.mjs +0 -2
  476. package/src/ProgressBar/ProgressBar.test.tsx +0 -30
  477. package/src/ProgressBar/ProgressBar.tsx +5 -12
  478. package/src/RadioList/RadioList.test.tsx +0 -19
  479. package/src/RadioList/RadioListItem.tsx +4 -9
  480. package/src/Resizable/ResizeHandle.tsx +4 -22
  481. package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
  482. package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
  483. package/src/SegmentedControl/SegmentedControl.tsx +5 -27
  484. package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
  485. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  486. package/src/Selector/Selector.test.tsx +1 -27
  487. package/src/SideNav/SideNav.doc.mjs +1 -7
  488. package/src/SideNav/SideNav.test.tsx +0 -66
  489. package/src/SideNav/SideNav.tsx +2 -6
  490. package/src/SideNav/SideNavCollapseButton.tsx +3 -4
  491. package/src/SideNav/SideNavSection.tsx +4 -6
  492. package/src/Switch/Switch.doc.mjs +7 -7
  493. package/src/Switch/Switch.test.tsx +3 -102
  494. package/src/Switch/Switch.tsx +7 -20
  495. package/src/TabList/TabList.test.tsx +1 -185
  496. package/src/TabList/TabMenu.tsx +9 -45
  497. package/src/Table/BaseTable.tsx +2 -13
  498. package/src/Table/Table.doc.mjs +0 -5
  499. package/src/Table/Table.test.tsx +0 -87
  500. package/src/Table/TableBody.tsx +2 -15
  501. package/src/Table/TableFooter.tsx +2 -15
  502. package/src/Table/TableHeader.tsx +2 -15
  503. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
  504. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
  505. package/src/Table/plugins/pagination/paginateData.ts +1 -5
  506. package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
  507. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
  508. package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
  509. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
  510. package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
  511. package/src/TextArea/TextArea.test.tsx +3 -3
  512. package/src/TextInput/TextInput.test.tsx +3 -3
  513. package/src/Thumbnail/Thumbnail.test.tsx +2 -36
  514. package/src/Thumbnail/Thumbnail.tsx +2 -4
  515. package/src/TimeInput/TimeInput.test.tsx +0 -37
  516. package/src/TimeInput/TimeInput.tsx +1 -11
  517. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  518. package/src/Timestamp/Timestamp.test.tsx +0 -52
  519. package/src/Timestamp/Timestamp.tsx +16 -30
  520. package/src/Toast/Toast.tsx +3 -11
  521. package/src/Toast/ToastViewport.test.tsx +0 -64
  522. package/src/Toast/ToastViewport.tsx +0 -12
  523. package/src/Toast/useToast.tsx +0 -41
  524. package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
  525. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  526. package/src/Tokenizer/Tokenizer.test.tsx +0 -54
  527. package/src/Tokenizer/Tokenizer.tsx +4 -5
  528. package/src/Tooltip/Tooltip.doc.mjs +6 -6
  529. package/src/Tooltip/useTooltip.doc.mjs +5 -5
  530. package/src/Tooltip/useTooltip.tsx +2 -12
  531. package/src/TopNav/TopNav.doc.mjs +1 -1
  532. package/src/TopNav/TopNav.test.tsx +7 -23
  533. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
  534. package/src/TreeList/TreeList.doc.mjs +2 -2
  535. package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
  536. package/src/Typeahead/BaseTypeahead.tsx +2 -5
  537. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  538. package/src/Typeahead/Typeahead.test.tsx +1 -45
  539. package/src/docs-types.ts +1 -9
  540. package/src/hooks/focusableSelector.ts +1 -1
  541. package/src/hooks/index.ts +0 -3
  542. package/src/hooks/useFocusTrap.doc.mjs +2 -4
  543. package/src/hooks/useFocusTrap.test.tsx +1 -149
  544. package/src/hooks/useFocusTrap.ts +1 -50
  545. package/src/hooks/useInteractiveRole.ts +4 -12
  546. package/src/hooks/useStreamingText.test.ts +19 -54
  547. package/src/hooks/useStreamingText.ts +5 -16
  548. package/src/hooks/useTreeFocus.test.tsx +3 -1
  549. package/src/reset.css +0 -29
  550. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  551. package/src/theme/defineTheme.ts +13 -4
  552. package/src/theme/derivedVarRegistry.test.ts +2 -2
  553. package/src/theme/expandColorScale.test.ts +0 -29
  554. package/src/theme/expandColorScale.ts +6 -11
  555. package/src/theme/hct.ts +17 -9
  556. package/src/theme/tokens.test.ts +9 -182
  557. package/src/theme/tokens.ts +4 -239
  558. package/src/theme/useTheme.test.tsx +2 -126
  559. package/src/theme/useTheme.ts +6 -87
  560. package/src/utils/index.ts +0 -4
  561. package/src/utils/sharedResizeObserver.test.ts +2 -2
  562. package/src/utils/timeParser.test.ts +0 -13
  563. package/src/utils/timeParser.ts +5 -8
  564. package/dist/hooks/useHotkeys.d.ts +0 -51
  565. package/dist/hooks/useHotkeys.d.ts.map +0 -1
  566. package/dist/hooks/useHotkeys.js +0 -160
  567. package/dist/utils/color.d.ts +0 -42
  568. package/dist/utils/color.d.ts.map +0 -1
  569. package/dist/utils/color.js +0 -150
  570. package/dist/utils/composeEventHandlers.d.ts +0 -30
  571. package/dist/utils/composeEventHandlers.d.ts.map +0 -1
  572. package/dist/utils/composeEventHandlers.js +0 -40
  573. package/src/Chat/ChatDictationButton.test.tsx +0 -43
  574. package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
  575. package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
  576. package/src/Collapsible/Collapsible.test.tsx +0 -405
  577. package/src/FieldStatus/FieldStatus.test.tsx +0 -282
  578. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
  579. package/src/Layout/Layout.test.tsx +0 -285
  580. package/src/Layout/LayoutSlots.test.tsx +0 -364
  581. package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
  582. package/src/OverflowList/OverflowList.test.tsx +0 -416
  583. package/src/Overlay/Overlay.test.tsx +0 -356
  584. package/src/Resizable/ResizeHandle.test.tsx +0 -218
  585. package/src/SizeContext/SizeContext.test.tsx +0 -226
  586. package/src/Toast/useToast.test.tsx +0 -258
  587. package/src/__tests__/TestIcon.tsx +0 -26
  588. package/src/__tests__/fastRoleQueries.ts +0 -66
  589. package/src/docPropReferences.test.ts +0 -178
  590. package/src/hooks/useHotkeys.doc.mjs +0 -52
  591. package/src/hooks/useHotkeys.test.ts +0 -245
  592. package/src/hooks/useHotkeys.ts +0 -203
  593. package/src/theme/themingTargets.test.ts +0 -353
  594. package/src/utils/color.test.ts +0 -133
  595. package/src/utils/color.ts +0 -148
  596. package/src/utils/composeEventHandlers.test.ts +0 -71
  597. package/src/utils/composeEventHandlers.ts +0 -44
  598. package/src/utils/mergeProps.test.ts +0 -166
@@ -12,11 +12,8 @@
12
12
  import {describe, it, expect, vi} from 'vitest';
13
13
  import {act, render, screen, within} from '@testing-library/react';
14
14
  import userEvent from '@testing-library/user-event';
15
- import {getButton} from '../__tests__/fastRoleQueries';
16
- import * as stylex from '@stylexjs/stylex';
17
15
  import {Calendar} from './Calendar';
18
16
  import type {CalendarHandle} from './Calendar';
19
- import {calendarStyles} from './styles';
20
17
 
21
18
  /**
22
19
  * Helper to find a day button by its day number.
@@ -27,7 +24,7 @@ import {calendarStyles} from './styles';
27
24
  function getDayButton(day: number, month = 'January', year = 2026) {
28
25
  // Match the full date pattern with the day number
29
26
  const pattern = new RegExp(`${month}\\s+${day},\\s+${year}`);
30
- return getButton(pattern);
27
+ return screen.getByRole('button', {name: pattern});
31
28
  }
32
29
 
33
30
  describe('Calendar', () => {
@@ -74,24 +71,6 @@ describe('Calendar', () => {
74
71
  expect(screen.getByText(expectedLabel)).toBeInTheDocument();
75
72
  });
76
73
 
77
- it("marks today's cell with aria-current='date'", () => {
78
- render(<Calendar />);
79
-
80
- const now = new Date();
81
- const iso = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
82
-
83
- const todayCell = document.querySelector(`button[data-date="${iso}"]`);
84
- expect(todayCell).not.toBeNull();
85
- expect(todayCell).toHaveAttribute('aria-current', 'date');
86
-
87
- // Only today's cell is marked current.
88
- const others = Array.from(
89
- document.querySelectorAll('button[data-date]'),
90
- ).filter(el => el.getAttribute('data-date') !== iso);
91
- expect(others.length).toBeGreaterThan(0);
92
- others.forEach(el => expect(el).not.toHaveAttribute('aria-current'));
93
- });
94
-
95
74
  it('displays day names', () => {
96
75
  render(<Calendar />);
97
76
 
@@ -118,11 +97,7 @@ describe('Calendar', () => {
118
97
  render(<Calendar value="2026-01-15" focusDate="2026-01-01" />);
119
98
 
120
99
  const day15 = getDayButton(15);
121
- // In an ARIA grid, selection state lives on the gridcell, not the button
122
- // (a plain button role does not permit aria-selected).
123
- const gridcell15 = day15.closest('[role="gridcell"]');
124
- expect(gridcell15).toHaveAttribute('aria-selected', 'true');
125
- expect(day15).not.toHaveAttribute('aria-selected');
100
+ expect(day15).toHaveAttribute('aria-selected', 'true');
126
101
  });
127
102
 
128
103
  it('calls onChange when date is selected', async () => {
@@ -148,7 +123,7 @@ describe('Calendar', () => {
148
123
  // Verify we start on February
149
124
  expect(screen.getByText('February 2026')).toBeInTheDocument();
150
125
 
151
- const prevButton = getButton('Previous month');
126
+ const prevButton = screen.getByRole('button', {name: 'Previous month'});
152
127
  await user.click(prevButton);
153
128
 
154
129
  expect(screen.getByText('January 2026')).toBeInTheDocument();
@@ -162,7 +137,7 @@ describe('Calendar', () => {
162
137
  // Verify we start on January
163
138
  expect(screen.getByText('January 2026')).toBeInTheDocument();
164
139
 
165
- const nextButton = getButton('Next month');
140
+ const nextButton = screen.getByRole('button', {name: 'Next month'});
166
141
  await user.click(nextButton);
167
142
 
168
143
  expect(screen.getByText('February 2026')).toBeInTheDocument();
@@ -176,7 +151,7 @@ describe('Calendar', () => {
176
151
  <Calendar focusDate="2026-01-01" onFocusDateChange={handleFocusChange} />,
177
152
  );
178
153
 
179
- const nextButton = getButton('Next month');
154
+ const nextButton = screen.getByRole('button', {name: 'Next month'});
180
155
  await user.click(nextButton);
181
156
 
182
157
  expect(handleFocusChange).toHaveBeenCalledWith('2026-02-01');
@@ -234,39 +209,12 @@ describe('Calendar', () => {
234
209
 
235
210
  render(<Calendar numberOfMonths={2} focusDate="2026-01-01" />);
236
211
 
237
- const nextButton = getButton('Next month');
212
+ const nextButton = screen.getByRole('button', {name: 'Next month'});
238
213
  await user.click(nextButton);
239
214
 
240
215
  expect(screen.getByText(/February 2026.*March 2026/)).toBeInTheDocument();
241
216
  });
242
217
 
243
- it('clamps out-of-range numberOfMonths to a single month', () => {
244
- // 1000 would otherwise try to render 1000 month grids and lock the page up.
245
- render(
246
- <Calendar
247
- numberOfMonths={1000 as unknown as 1 | 2}
248
- focusDate="2026-01-01"
249
- />,
250
- );
251
-
252
- // Only the focused month renders — no second month, no range separator.
253
- expect(screen.getByText('January 2026')).toBeInTheDocument();
254
- expect(screen.queryByText(/February 2026/)).not.toBeInTheDocument();
255
- });
256
-
257
- it('clamps numberOfMonths={0} to a single month', () => {
258
- render(
259
- <Calendar
260
- numberOfMonths={0 as unknown as 1 | 2}
261
- focusDate="2026-01-01"
262
- />,
263
- );
264
-
265
- // 0 previously rendered no months at all; now falls back to one.
266
- expect(screen.getByText('January 2026')).toBeInTheDocument();
267
- expect(screen.getAllByRole('gridcell').length).toBeGreaterThan(0);
268
- });
269
-
270
218
  // ─── Display Options ─────────────────────────────────────────
271
219
 
272
220
  it('shows week numbers when hasWeekNumbers is true', () => {
@@ -362,22 +310,9 @@ describe('Calendar', () => {
362
310
  const day12 = getDayButton(12);
363
311
  const day15 = getDayButton(15);
364
312
 
365
- // Selection state lives on the gridcell wrapper, not the day button.
366
- expect(day10.closest('[role="gridcell"]')).toHaveAttribute(
367
- 'aria-selected',
368
- 'true',
369
- );
370
- expect(day12.closest('[role="gridcell"]')).toHaveAttribute(
371
- 'aria-selected',
372
- 'true',
373
- );
374
- expect(day15.closest('[role="gridcell"]')).toHaveAttribute(
375
- 'aria-selected',
376
- 'true',
377
- );
378
- expect(day10).not.toHaveAttribute('aria-selected');
379
- expect(day12).not.toHaveAttribute('aria-selected');
380
- expect(day15).not.toHaveAttribute('aria-selected');
313
+ expect(day10).toHaveAttribute('aria-selected', 'true');
314
+ expect(day12).toHaveAttribute('aria-selected', 'true');
315
+ expect(day15).toHaveAttribute('aria-selected', 'true');
381
316
  });
382
317
 
383
318
  it('caps the range highlight next to a disabled mid-range day (#2715)', () => {
@@ -541,8 +476,12 @@ describe('Calendar', () => {
541
476
  it('has navigation buttons with accessible labels', () => {
542
477
  render(<Calendar />);
543
478
 
544
- expect(getButton('Previous month')).toBeInTheDocument();
545
- expect(getButton('Next month')).toBeInTheDocument();
479
+ expect(
480
+ screen.getByRole('button', {name: 'Previous month'}),
481
+ ).toBeInTheDocument();
482
+ expect(
483
+ screen.getByRole('button', {name: 'Next month'}),
484
+ ).toBeInTheDocument();
546
485
  });
547
486
 
548
487
  // ─── Bug Regression Tests ───────────────────────────────────
@@ -650,14 +589,14 @@ describe('Calendar', () => {
650
589
  it('prev button is disabled when focusDate month contains min', () => {
651
590
  render(<Calendar focusDate="2026-01-01" min="2026-01-15" />);
652
591
 
653
- const prevButton = getButton('Previous month');
592
+ const prevButton = screen.getByRole('button', {name: 'Previous month'});
654
593
  expect(prevButton).toBeDisabled();
655
594
  });
656
595
 
657
596
  it('next button is disabled when focusDate month contains max', () => {
658
597
  render(<Calendar focusDate="2026-01-01" max="2026-01-15" />);
659
598
 
660
- const nextButton = getButton('Next month');
599
+ const nextButton = screen.getByRole('button', {name: 'Next month'});
661
600
  expect(nextButton).toBeDisabled();
662
601
  });
663
602
 
@@ -736,48 +675,4 @@ describe('Calendar', () => {
736
675
  }
737
676
  }
738
677
  });
739
-
740
- // ─── RTL (#3388) ─────────────────────────────────────────────
741
-
742
- describe('RTL month navigation', () => {
743
- // jsdom does not apply compiled StyleX CSS, so the scaleX(-1) mirror
744
- // itself is only observable in a browser (see the dir="rtl" Storybook
745
- // story). These tests pin the structure the fix depends on: both nav
746
- // chevrons render inside the navIcon wrapper that carries the
747
- // ':is([dir="rtl"] *)' conditional transform.
748
- it('wraps both nav chevrons in the RTL-mirroring navIcon wrapper', () => {
749
- render(<Calendar focusDate="2026-01-01" />);
750
-
751
- const {className: navIconClass} = stylex.props(calendarStyles.navIcon);
752
- expect(navIconClass).toBeTruthy();
753
-
754
- for (const name of ['Previous month', 'Next month']) {
755
- const button = getButton(name);
756
- const wrappers = Array.from(button.querySelectorAll('span')).filter(
757
- span => span.className === navIconClass,
758
- );
759
- expect(wrappers.length).toBe(1);
760
- }
761
- });
762
-
763
- it('keeps navigation semantics unchanged under dir="rtl"', async () => {
764
- const user = userEvent.setup();
765
-
766
- render(
767
- <div dir="rtl">
768
- <Calendar focusDate="2026-02-01" />
769
- </div>,
770
- );
771
-
772
- expect(screen.getByText('February 2026')).toBeInTheDocument();
773
-
774
- // DOM order and handlers must not change in RTL: flexbox already
775
- // places "Previous month" at the visual right; only the glyph mirrors.
776
- await user.click(getButton('Previous month'));
777
- expect(screen.getByText('January 2026')).toBeInTheDocument();
778
-
779
- await user.click(getButton('Next month'));
780
- expect(screen.getByText('February 2026')).toBeInTheDocument();
781
- });
782
- });
783
678
  });
@@ -203,7 +203,7 @@ export function Calendar({ref, ...props}: CalendarProps) {
203
203
  value,
204
204
  defaultValue,
205
205
  onChange,
206
- numberOfMonths: numberOfMonthsProp = 1,
206
+ numberOfMonths = 1,
207
207
  min,
208
208
  max,
209
209
  dateConstraints,
@@ -223,11 +223,6 @@ export function Calendar({ref, ...props}: CalendarProps) {
223
223
  // DayOfWeek so all downstream date math keeps working with an index.
224
224
  const weekStartsOn = normalizeDayOfWeek(weekStartsOnProp);
225
225
 
226
- // `numberOfMonths` is typed `1 | 2`; defensively clamp anything else that
227
- // slips through at runtime to 1 so `Array.from({length})` can't render an
228
- // absurd number of month grids (e.g. `numberOfMonths={1000}`).
229
- const numberOfMonths = numberOfMonthsProp === 2 ? 2 : 1;
230
-
231
226
  // Today's date (memoized)
232
227
  const today = useMemo(() => plainDateToday(), []);
233
228
 
@@ -431,14 +426,7 @@ export function Calendar({ref, ...props}: CalendarProps) {
431
426
  <Button
432
427
  label="Previous month"
433
428
  variant="ghost"
434
- icon={
435
- // Wrapper span (not Icon props): Icon's string mode clobbers
436
- // caller classNames, so the RTL mirror must live on its own
437
- // element.
438
- <span {...stylex.props(calendarStyles.navIcon)}>
439
- <Icon icon="chevronLeft" size="sm" color="inherit" />
440
- </span>
441
- }
429
+ icon={<Icon icon="chevronLeft" size="sm" color="inherit" />}
442
430
  onClick={() => navigateMonth(-1)}
443
431
  isDisabled={!canNavigatePrevious}
444
432
  isIconOnly
@@ -451,11 +439,7 @@ export function Calendar({ref, ...props}: CalendarProps) {
451
439
  <Button
452
440
  label="Next month"
453
441
  variant="ghost"
454
- icon={
455
- <span {...stylex.props(calendarStyles.navIcon)}>
456
- <Icon icon="chevronRight" size="sm" color="inherit" />
457
- </span>
458
- }
442
+ icon={<Icon icon="chevronRight" size="sm" color="inherit" />}
459
443
  onClick={() => navigateMonth(1)}
460
444
  isDisabled={!canNavigateNext}
461
445
  isIconOnly
@@ -928,10 +912,7 @@ function DayCell({
928
912
  });
929
913
 
930
914
  return (
931
- <div
932
- role="gridcell"
933
- aria-selected={state.isSelected || state.isInRange || undefined}
934
- {...stylex.props(dayCellStyles.cell)}>
915
+ <div role="gridcell" {...stylex.props(dayCellStyles.cell)}>
935
916
  {/* Range background */}
936
917
  {state.isInRange && (
937
918
  <div
@@ -971,10 +952,8 @@ function DayCell({
971
952
  type="button"
972
953
  data-date={day.iso}
973
954
  aria-label={plainDateFormat(date, DATE_FORMAT_WITH_WEEKDAY)}
955
+ aria-selected={state.isSelected || state.isInRange || undefined}
974
956
  aria-disabled={state.effectivelyDisabled || undefined}
975
- // Mark today's cell programmatically (APG date-picker pattern), not just
976
- // visually, so screen-reader users can identify the current date.
977
- aria-current={state.isToday ? 'date' : undefined}
978
957
  disabled={isDisabled}
979
958
  // Initial roving tab-stop seed; useGridFocus owns it after mount.
980
959
  tabIndex={isTabbableDay ? 0 : -1}
@@ -193,9 +193,7 @@ export function isRangeHighlighted(input: {
193
193
  isDisabled: boolean;
194
194
  isOutside: boolean;
195
195
  }): boolean {
196
- if (input.mode !== 'range') {
197
- return false;
198
- }
196
+ if (input.mode !== 'range') {return false;}
199
197
  return isSpanHighlighted({
200
198
  date: input.date,
201
199
  spanStart: input.rangeStart,
@@ -64,19 +64,9 @@ export const calendarStyles = stylex.create({
64
64
  whiteSpace: 'nowrap',
65
65
  borderWidth: 0,
66
66
  },
67
- /**
68
- * Wrapper for the month nav chevrons. In RTL the flex header already
69
- * swaps the buttons' visual sides; the glyphs must mirror with them so
70
- * "Previous month" points outward (visually right) instead of inward.
71
- * Keyed on the dir attribute (dir="rtl"), same as MobileNav's drawer
72
- * transform — bare CSS `direction: rtl` alone won't trigger it.
73
- */
74
67
  navIcon: {
75
- display: 'inline-flex',
76
- transform: {
77
- default: null,
78
- ':is([dir="rtl"] *)': 'scaleX(-1)',
79
- },
68
+ width: spacingVars['--spacing-4'],
69
+ height: spacingVars['--spacing-4'],
80
70
  },
81
71
  });
82
72
 
@@ -131,7 +131,7 @@ export const docsZh = {
131
131
  theming: {
132
132
  container: true,
133
133
  targets: [
134
- {className: 'astryx-card', visualProps: ['variant']},
134
+ {className: 'astryx-card'},
135
135
  ],
136
136
  vars: [
137
137
  {name: '--_card-radius', description: 'Border radius of the card', default: 'var(--radius-container)', private: true},
package/src/Card/Card.tsx CHANGED
@@ -44,10 +44,8 @@ import {themeProps} from '../utils/themeProps';
44
44
  * - Non-semantic palette: `blue | cyan | gray | green | orange | pink | purple | red | teal | yellow`
45
45
  * Each uses the corresponding `--color-background-<name>` token (20% opacity tint).
46
46
  *
47
- * Only `default` draws a visible border. Its border width is subtracted from
48
- * the padding so the total inset (border + padding) equals the padding token —
49
- * keeping content geometry faithful to the spacing scale and identical to the
50
- * borderless variants. Themes can override borderWidth/borderColor.
47
+ * All variants include a transparent border to prevent layout jitter
48
+ * when switching variants. Themes can override borderWidth/borderColor.
51
49
  */
52
50
  export type CardVariant =
53
51
  | 'default'
@@ -73,18 +71,12 @@ const styles = stylex.create({
73
71
  '--_card-radius': radiusVars['--radius-container'],
74
72
  borderRadius: 'var(--_card-radius)',
75
73
  overflow: 'clip',
76
- },
77
- // The border is drawn *inside* the padding — its width is subtracted from
78
- // each side — so total inset (border + padding) equals the padding token
79
- // rather than exceeding it by the border width.
80
- withBorder: {
81
74
  borderWidth: borderVars['--border-width'],
82
75
  borderStyle: 'solid',
76
+ borderColor: 'transparent',
77
+ },
78
+ withBorder: {
83
79
  borderColor: colorVars['--color-border-emphasized'],
84
- paddingInlineStart: `calc(var(--container-padding-inline-start) - ${borderVars['--border-width']})`,
85
- paddingInlineEnd: `calc(var(--container-padding-inline-end) - ${borderVars['--border-width']})`,
86
- paddingBlockStart: `calc(var(--container-padding-block-start) - ${borderVars['--border-width']})`,
87
- paddingBlockEnd: `calc(var(--container-padding-block-end) - ${borderVars['--border-width']})`,
88
80
  },
89
81
  // Fixed-height cards scroll content; overflow: auto also clips to border-radius
90
82
  scrollable: {
@@ -274,6 +266,7 @@ export function Card({
274
266
  stylex.props(
275
267
  styles.card,
276
268
  variantStyles[variant],
269
+ variant === 'default' && styles.withBorder,
277
270
  hasFixedHeight && styles.scrollable,
278
271
  dynamicStyles.sizing(
279
272
  width ?? null,
@@ -303,9 +296,6 @@ export function Card({
303
296
  !useThemeDefault &&
304
297
  effectivePadding !== 4 &&
305
298
  containerPaddingBlockEndVarStyles[effectivePadding],
306
- // Applied after the container padding so the border-inset calc wins;
307
- // it reads the --container-padding-* vars set above.
308
- variant === 'default' && styles.withBorder,
309
299
  xstyle,
310
300
  ),
311
301
  className,
@@ -20,15 +20,15 @@ export const docs = {
20
20
  ],
21
21
  anatomy: [
22
22
  {name: 'Scroll container', required: true, description: 'The horizontal overflow area that holds all items.'},
23
- {name: 'Items', required: true, description: 'The children rendered in a row inside the scroll container. With hasSnap, each item snaps to the start edge.'},
23
+ {name: 'Items', required: true, description: 'The children rendered in a row. Each item is animated with a scroll-driven scale effect.'},
24
24
  {name: 'Fade edges', required: false, description: 'Gradient fades on the left and right edges that indicate more content is available. Enabled by default, disable with hasEdgeFade={false}.'},
25
- {name: 'Navigation buttons', required: false, description: 'Prev/next buttons that appear when the content can scroll in that direction. Enabled by default, disable with hasButtons={false}.'},
25
+ {name: 'Navigation buttons', required: false, description: 'Prev/next buttons that appear on hover. Enabled by default, disable with hasButtons={false}.'},
26
26
  ],
27
27
  },
28
28
  props: [
29
29
  {name: 'children', type: 'ReactNode', description: 'Carousel items rendered in a horizontal scroll container.', required: true},
30
30
  {name: 'gap', type: "0 | 0.5 | 1 | 1.5 | 2 | 3 | 4", description: 'Gap between items using the spacing token scale.', default: '1'},
31
- {name: 'hasButtons', type: 'boolean', description: 'Show prev/next navigation buttons when content is scrollable.', default: 'true'},
31
+ {name: 'hasButtons', type: 'boolean', description: 'Show prev/next navigation buttons on hover (desktop only).', default: 'true'},
32
32
  {name: 'hasEdgeFade', type: 'boolean', description: 'Show a gradient edge-fade mask when content overflows, signalling that more items exist off-screen.', default: 'true'},
33
33
  {name: 'hasSnap', type: 'boolean', description: 'Enable scroll-snap so each child snaps to the start edge.', default: 'false'},
34
34
  {name: 'padding', type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10', description: 'Inline padding inside the scroll container, with matching scroll-padding so snap points align to the content edge.'},
@@ -59,20 +59,20 @@ export const docs = {
59
59
  export const docsZh = {
60
60
  usage: {
61
61
  description:
62
- 'Carousel 在项目超出可用宽度时将一行项目水平滚动。适用于卡片网格、图片画廊、产品列表,或任何希望无需占据整页即可浏览的项目集合。',
62
+ 'Carousel scrolls a row of items horizontally when they overflow the available width. Use it for card grids, image galleries, product lists, or any set of items that should be browsable without taking up the full page.',
63
63
  bestPractices: [
64
- {guidance: true, description: '当每个项目应精确对齐到起始边缘时启用滚动吸附,例如画廊或产品列表。'},
65
- {guidance: true, description: '始终提供描述轮播内容的 aria-label,例如"精选产品""团队成员"'},
66
- {guidance: true, description: '使用一致的间距和项目宽度,让轮播看起来是有意为之,而不是内容意外溢出。'},
67
- {guidance: false, description: '将每位用户都必须看到的内容放入轮播。并非所有人都会水平滚动,关键内容应放在首屏。'},
68
- {guidance: false, description: '自动轮播项目。让用户按自己的节奏滚动。'},
69
- {guidance: false, description: '嵌套轮播。轮播中嵌套轮播会造成困惑并破坏键盘导航。'},
64
+ {guidance: true, description: 'Enable scroll-snap when each item should land precisely at the start edge, like a gallery or product list.'},
65
+ {guidance: true, description: 'Always provide an aria-label that describes what the carousel contains, like "Featured products" or "Team members".'},
66
+ {guidance: true, description: 'Use a consistent gap and item width so the carousel looks intentional, not like content overflowing by accident.'},
67
+ {guidance: false, description: 'Use a carousel for content every user must see. Not everyone scrolls horizontally, so put critical content above the fold.'},
68
+ {guidance: false, description: 'Auto-advance items. Let the user scroll at their own pace.'},
69
+ {guidance: false, description: 'Nest carousels. A carousel inside a carousel is confusing and breaks keyboard navigation.'},
70
70
  ],
71
71
  },
72
72
  propDescriptions: {
73
73
  children: '在水平滚动容器中渲染的轮播项目。',
74
74
  gap: '使用间距令牌比例的项目间距。',
75
- hasButtons: '内容可滚动时显示上一个/下一个导航按钮。',
75
+ hasButtons: '悬停时显示上一个/下一个导航按钮(仅桌面端)。',
76
76
  hasEdgeFade: '内容溢出时显示渐变边缘遮罩,提示屏幕外还有更多项目。',
77
77
  hasSnap: '启用滚动吸附,使每个子元素吸附到起始边缘。',
78
78
  padding: '滚动容器内的内联内边距,并设置匹配的 scroll-padding,使吸附点与内容边缘对齐。',
@@ -98,7 +98,7 @@ export const docsDense = {
98
98
  propDescriptions: {
99
99
  children: 'carousel items in horizontal scroll',
100
100
  gap: 'item spacing via spacing token scale',
101
- hasButtons: 'prev/next buttons when content is scrollable',
101
+ hasButtons: 'prev/next buttons on hover (desktop)',
102
102
  hasEdgeFade: 'gradient edge-fade mask on overflow',
103
103
  hasSnap: 'scroll-snap; children snap to start edge',
104
104
  padding: 'inline padding; scroll-padding keeps snap points on content edge',
@@ -38,19 +38,6 @@ describe('Carousel', () => {
38
38
  expect(region).toHaveAttribute('aria-roledescription', 'carousel');
39
39
  });
40
40
 
41
- it('makes the scroll container keyboard-focusable', () => {
42
- render(
43
- <Carousel aria-label="Photos">
44
- <div>Item</div>
45
- </Carousel>,
46
- );
47
- // The inner scroll container overflows, so it must be reachable by
48
- // keyboard (axe: scrollable-region-focusable).
49
- const region = screen.getByRole('region', {name: 'Photos'});
50
- const scroller = region.firstElementChild;
51
- expect(scroller).toHaveAttribute('tabindex', '0');
52
- });
53
-
54
41
  it('applies data-testid', () => {
55
42
  render(
56
43
  <Carousel data-testid="my-carousel">
@@ -318,8 +318,6 @@ export function Carousel({
318
318
  : null
319
319
  : null;
320
320
 
321
- // Self-authored position styles (positioning: 'custom' below): a cover
322
- // centered on the anchor, sized to it — direction-neutral by construction.
323
321
  const coverStyle: React.CSSProperties = {
324
322
  positionArea: 'center',
325
323
  width: 'anchor-size(width)',
@@ -342,7 +340,6 @@ export function Carousel({
342
340
  {...htmlProps}>
343
341
  <div
344
342
  ref={composedRef}
345
- tabIndex={0}
346
343
  {...stylex.props(
347
344
  styles.scroller,
348
345
  gapStyles[gap],
@@ -400,7 +397,8 @@ export function Carousel({
400
397
  </div>
401
398
  </>,
402
399
  {
403
- positioning: 'custom',
400
+ placement: 'below',
401
+ alignment: 'center',
404
402
  style: coverStyle,
405
403
  xstyle: styles.buttonOverlay,
406
404
  },
@@ -0,0 +1,10 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ import * as stylex from '@stylexjs/stylex';
4
+
5
+ /**
6
+ * Scoped marker for Carousel ancestor selectors.
7
+ * Prevents hover styles from leaking from parent containers.
8
+ */
9
+ export const carouselScope: ReturnType<typeof stylex.defineMarker> =
10
+ stylex.defineMarker();
@@ -17,7 +17,7 @@ export const docs = {
17
17
  {className: 'astryx-chat-composer', visualProps: ['density']},
18
18
  {className: 'astryx-chat-composer-input'},
19
19
  {className: 'astryx-chat-composer-drawer', visualProps: ['collapsed']},
20
- {className: 'astryx-chat-message', visualProps: ['sender', 'density']},
20
+ {className: 'astryx-chat-message', visualProps: ['sender']},
21
21
  {
22
22
  className: 'astryx-chat-message-bubble',
23
23
  visualProps: ['sender', 'variant', 'density'],
@@ -2,7 +2,6 @@
2
2
 
3
3
  import {describe, it, expect, vi, afterEach} from 'vitest';
4
4
  import {render, screen, fireEvent} from '@testing-library/react';
5
- import {ChatComposer} from './ChatComposer';
6
5
  import {ChatComposerInput} from './ChatComposerInput';
7
6
  import type {
8
7
  ChatComposerTrigger,
@@ -130,29 +129,6 @@ describe('ChatComposerInput', () => {
130
129
  fireEvent.keyDown(textbox, {key: 'Enter'});
131
130
  expect(onSubmit).not.toHaveBeenCalled();
132
131
  });
133
-
134
- it('keeps parent submit flow when child onChange observes input changes', () => {
135
- const onSubmit = vi.fn();
136
- const onInputChange = vi.fn();
137
- render(
138
- <ChatComposer
139
- onSubmit={onSubmit}
140
- input={<ChatComposerInput onChange={onInputChange} />}
141
- />,
142
- );
143
-
144
- const textbox = screen.getByRole('textbox');
145
- textbox.textContent = 'hello world';
146
- fireEvent.input(textbox);
147
-
148
- expect(onInputChange).toHaveBeenLastCalledWith('hello world');
149
-
150
- fireEvent.keyDown(textbox, {key: 'Enter'});
151
-
152
- expect(onSubmit).toHaveBeenCalledWith('hello world');
153
- expect(onInputChange).toHaveBeenLastCalledWith('');
154
- expect(textbox.textContent).toBe('');
155
- });
156
132
  });
157
133
 
158
134
  // Controlled-value sync used to overwrite `textContent` on every
@@ -369,9 +345,7 @@ describe('ChatComposerInput', () => {
369
345
  },
370
346
  });
371
347
 
372
- expect(
373
- textbox.querySelector('[data-astryx-token]'),
374
- ).not.toBeInTheDocument();
348
+ expect(textbox.querySelector('[data-astryx-token]')).not.toBeInTheDocument();
375
349
  expect(textbox.textContent).toBe(long);
376
350
  });
377
351
  });
@@ -43,7 +43,10 @@ import {
43
43
  } from '../theme/tokens.stylex';
44
44
  import {mergeProps} from '../utils';
45
45
  import {useTriggerMenu} from './useTriggerMenu';
46
- import {useChatComposerTokens, isCustomToken} from './useChatComposerTokens';
46
+ import {
47
+ useChatComposerTokens,
48
+ isCustomToken,
49
+ } from './useChatComposerTokens';
47
50
  import {ensureCaretInside, insertTextAtCursor} from './chatComposerSelection';
48
51
  import {ChatPastedTextToken} from './ChatPastedTextToken';
49
52
  import {
@@ -280,13 +283,12 @@ function serialize(node: Node): string {
280
283
 
281
284
  export function ChatComposerInput(props: ChatComposerInputProps) {
282
285
  const composerCtx = useChatComposerContext();
283
- const hasControlledValueProp = props.value !== undefined;
284
286
 
285
287
  const {
286
288
  ref,
287
289
  handleRef,
288
290
  value: controlledValue = composerCtx?.value,
289
- onChange: onChangeProp,
291
+ onChange = composerCtx?.onChange,
290
292
  placeholder = composerCtx?.placeholder ?? 'Type a message\u2026',
291
293
  maxRows = 8,
292
294
  triggers,
@@ -304,21 +306,6 @@ export function ChatComposerInput(props: ChatComposerInputProps) {
304
306
  ...rest
305
307
  } = props;
306
308
 
307
- const composerOnChange = composerCtx?.onChange;
308
- const onChange = useCallback(
309
- (nextValue: string) => {
310
- if (hasControlledValueProp) {
311
- onChangeProp?.(nextValue);
312
- return;
313
- }
314
- composerOnChange?.(nextValue);
315
- if (onChangeProp !== composerOnChange) {
316
- onChangeProp?.(nextValue);
317
- }
318
- },
319
- [composerOnChange, hasControlledValueProp, onChangeProp],
320
- );
321
-
322
309
  const editableRef = useRef<HTMLDivElement>(null);
323
310
  const selfRef = useRef<ChatComposerInputHandle>(null);
324
311
  const [isEmpty, setIsEmpty] = useState(true);
@@ -692,7 +679,11 @@ ChatComposerInput.displayName = 'ChatComposerInput';
692
679
  // Token element helper (for custom rendering in stories/consumers)
693
680
  // =============================================================================
694
681
 
695
- export function ChatComposerTokenElement({token}: {token: ChatComposerToken}) {
682
+ export function ChatComposerTokenElement({
683
+ token,
684
+ }: {
685
+ token: ChatComposerToken;
686
+ }) {
696
687
  return (
697
688
  <span
698
689
  data-astryx-token=""
@@ -702,7 +693,11 @@ export function ChatComposerTokenElement({token}: {token: ChatComposerToken}) {
702
693
  {isCustomToken(token) ? (
703
694
  token.render()
704
695
  ) : (
705
- <Badge label={token.label} variant={token.variant} icon={token.icon} />
696
+ <Badge
697
+ label={token.label}
698
+ variant={token.variant}
699
+ icon={token.icon}
700
+ />
706
701
  )}
707
702
  </span>
708
703
  );