@astryxdesign/core 0.1.4-canary.fd7ab46 → 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 (579) 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.js +15 -15
  175. package/dist/MobileNav/MobileNavToggle.js +5 -5
  176. package/dist/MoreMenu/MoreMenu.js +3 -3
  177. package/dist/MultiSelector/MultiSelector.js +56 -56
  178. package/dist/NavIcon/NavIcon.js +3 -3
  179. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  180. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  181. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  182. package/dist/NumberInput/NumberInput.js +32 -48
  183. package/dist/Outline/Outline.js +15 -15
  184. package/dist/OverflowList/OverflowList.js +8 -8
  185. package/dist/Overlay/Overlay.js +3 -3
  186. package/dist/Overlay/OverlayScrim.js +5 -5
  187. package/dist/Overlay/useOverlay.js +3 -3
  188. package/dist/Pagination/Pagination.d.ts +1 -1
  189. package/dist/Pagination/Pagination.d.ts.map +1 -1
  190. package/dist/Pagination/Pagination.js +72 -125
  191. package/dist/Popover/Popover.js +16 -16
  192. package/dist/Popover/usePopover.js +7 -7
  193. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  194. package/dist/PowerSearch/PowerSearch.js +92 -110
  195. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  196. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  197. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  198. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  199. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  200. package/dist/ProgressBar/ProgressBar.js +18 -25
  201. package/dist/RadioList/RadioList.js +7 -7
  202. package/dist/RadioList/RadioListItem.d.ts +1 -1
  203. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  204. package/dist/RadioList/RadioListItem.js +21 -24
  205. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  206. package/dist/Resizable/ResizeHandle.js +10 -28
  207. package/dist/Section/Section.js +5 -5
  208. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  209. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  210. package/dist/SegmentedControl/SegmentedControl.js +10 -32
  211. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  212. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  213. package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
  214. package/dist/SelectableCard/SelectableCard.js +5 -5
  215. package/dist/Selector/Selector.js +46 -46
  216. package/dist/Selector/SelectorOption.js +3 -3
  217. package/dist/SideNav/SideNav.d.ts.map +1 -1
  218. package/dist/SideNav/SideNav.js +34 -38
  219. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  220. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  221. package/dist/SideNav/SideNavCollapseButton.js +6 -8
  222. package/dist/SideNav/SideNavHeading.js +87 -87
  223. package/dist/SideNav/SideNavItem.js +42 -42
  224. package/dist/SideNav/SideNavSection.d.ts +1 -1
  225. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  226. package/dist/SideNav/SideNavSection.js +16 -18
  227. package/dist/Skeleton/Skeleton.js +3 -3
  228. package/dist/Slider/Slider.js +23 -23
  229. package/dist/Spinner/Spinner.js +9 -9
  230. package/dist/StatusDot/StatusDot.js +5 -5
  231. package/dist/Switch/Switch.d.ts +4 -8
  232. package/dist/Switch/Switch.d.ts.map +1 -1
  233. package/dist/Switch/Switch.js +29 -34
  234. package/dist/TabList/Tab.js +18 -18
  235. package/dist/TabList/TabList.js +5 -5
  236. package/dist/TabList/TabMenu.d.ts.map +1 -1
  237. package/dist/TabList/TabMenu.js +30 -57
  238. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  239. package/dist/Table/BaseTable.d.ts.map +1 -1
  240. package/dist/Table/BaseTable.js +39 -50
  241. package/dist/Table/Table.js +7 -7
  242. package/dist/Table/TableBody.d.ts +1 -1
  243. package/dist/Table/TableBody.d.ts.map +1 -1
  244. package/dist/Table/TableBody.js +5 -9
  245. package/dist/Table/TableCell.js +3 -3
  246. package/dist/Table/TableFooter.d.ts +1 -1
  247. package/dist/Table/TableFooter.d.ts.map +1 -1
  248. package/dist/Table/TableFooter.js +5 -9
  249. package/dist/Table/TableHeader.d.ts +1 -1
  250. package/dist/Table/TableHeader.d.ts.map +1 -1
  251. package/dist/Table/TableHeader.js +5 -9
  252. package/dist/Table/TableHeaderCell.js +3 -3
  253. package/dist/Table/TableRow.js +5 -5
  254. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  255. package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
  256. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  257. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  258. package/dist/Table/plugins/pagination/paginateData.js +1 -5
  259. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  260. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
  261. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  262. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  263. package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
  264. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  265. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  266. package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
  267. package/dist/Table/tableContextMenu.js +9 -9
  268. package/dist/Text/Text.js +10 -10
  269. package/dist/TextArea/TextArea.js +14 -14
  270. package/dist/TextInput/TextInput.js +15 -15
  271. package/dist/Thumbnail/Thumbnail.d.ts +2 -3
  272. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  273. package/dist/Thumbnail/Thumbnail.js +29 -30
  274. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  275. package/dist/TimeInput/TimeInput.js +21 -26
  276. package/dist/Timestamp/Timestamp.d.ts +1 -1
  277. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  278. package/dist/Timestamp/Timestamp.js +26 -37
  279. package/dist/Toast/Toast.d.ts.map +1 -1
  280. package/dist/Toast/Toast.js +17 -25
  281. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  282. package/dist/Toast/ToastViewport.js +11 -23
  283. package/dist/Toast/useToast.js +4 -4
  284. package/dist/ToggleButton/ToggleButton.js +12 -12
  285. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  286. package/dist/Token/Token.js +21 -21
  287. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  288. package/dist/Tokenizer/Tokenizer.js +34 -36
  289. package/dist/Toolbar/Toolbar.js +18 -18
  290. package/dist/Tooltip/Tooltip.js +11 -11
  291. package/dist/Tooltip/useTooltip.d.ts +1 -5
  292. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  293. package/dist/Tooltip/useTooltip.js +3 -3
  294. package/dist/TopNav/TopNav.js +32 -32
  295. package/dist/TopNav/TopNavHeading.js +67 -67
  296. package/dist/TopNav/TopNavItem.js +5 -5
  297. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  298. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  299. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  300. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
  301. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  302. package/dist/TopNav/TopNavMenu.js +32 -32
  303. package/dist/TreeList/TreeList.js +8 -8
  304. package/dist/TreeList/TreeListBranches.js +11 -11
  305. package/dist/TreeList/TreeListItem.js +30 -30
  306. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  307. package/dist/Typeahead/BaseTypeahead.js +20 -23
  308. package/dist/Typeahead/Typeahead.js +12 -12
  309. package/dist/Typeahead/TypeaheadItem.js +10 -10
  310. package/dist/VStack/VStack.js +3 -3
  311. package/dist/astryx.css +0 -7
  312. package/dist/astryx.umd.js +60 -60
  313. package/dist/astryx.umd.js.map +4 -4
  314. package/dist/docs-types.d.ts +2 -8
  315. package/dist/docs-types.d.ts.map +1 -1
  316. package/dist/hooks/focusableSelector.d.ts +1 -1
  317. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  318. package/dist/hooks/focusableSelector.js +1 -1
  319. package/dist/hooks/index.d.ts +0 -2
  320. package/dist/hooks/index.d.ts.map +1 -1
  321. package/dist/hooks/index.js +0 -1
  322. package/dist/hooks/useFocusTrap.d.ts +0 -3
  323. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  324. package/dist/hooks/useFocusTrap.js +1 -38
  325. package/dist/hooks/useInteractiveRole.d.ts +2 -6
  326. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  327. package/dist/hooks/useInteractiveRole.js +2 -6
  328. package/dist/hooks/useKeyboardHint.js +9 -9
  329. package/dist/hooks/useStreamingText.d.ts +1 -3
  330. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  331. package/dist/hooks/useStreamingText.js +5 -14
  332. package/dist/theme/MediaTheme.js +3 -3
  333. package/dist/theme/Theme.js +7 -7
  334. package/dist/theme/defineTheme.d.ts +1 -1
  335. package/dist/theme/defineTheme.d.ts.map +1 -1
  336. package/dist/theme/expandColorScale.d.ts.map +1 -1
  337. package/dist/theme/expandColorScale.js +3 -10
  338. package/dist/theme/hct.d.ts +15 -0
  339. package/dist/theme/hct.d.ts.map +1 -1
  340. package/dist/theme/hct.js +9 -9
  341. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  342. package/dist/theme/tokens.d.ts +2 -10
  343. package/dist/theme/tokens.d.ts.map +1 -1
  344. package/dist/theme/tokens.js +4 -220
  345. package/dist/utils/index.d.ts +0 -3
  346. package/dist/utils/index.d.ts.map +1 -1
  347. package/dist/utils/index.js +1 -3
  348. package/dist/utils/timeParser.d.ts.map +1 -1
  349. package/dist/utils/timeParser.js +5 -8
  350. package/package.json +3 -3
  351. package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
  352. package/src/AlertDialog/AlertDialog.tsx +0 -2
  353. package/src/AppShell/AppShell.tsx +0 -2
  354. package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
  355. package/src/AspectRatio/AspectRatio.test.tsx +1 -142
  356. package/src/AspectRatio/AspectRatio.tsx +10 -70
  357. package/src/AspectRatio/index.ts +1 -5
  358. package/src/Avatar/Avatar.doc.mjs +0 -11
  359. package/src/Avatar/Avatar.test.tsx +1 -32
  360. package/src/Avatar/Avatar.tsx +20 -12
  361. package/src/Banner/Banner.doc.mjs +0 -8
  362. package/src/Banner/Banner.test.tsx +0 -38
  363. package/src/Banner/Banner.tsx +1 -8
  364. package/src/Calendar/Calendar.doc.mjs +1 -1
  365. package/src/Calendar/Calendar.test.tsx +17 -122
  366. package/src/Calendar/Calendar.tsx +5 -26
  367. package/src/Calendar/dayCellUtils.ts +1 -3
  368. package/src/Calendar/styles.ts +2 -12
  369. package/src/Card/Card.tsx +6 -16
  370. package/src/Carousel/Carousel.doc.mjs +12 -12
  371. package/src/Carousel/Carousel.test.tsx +0 -13
  372. package/src/Carousel/Carousel.tsx +2 -4
  373. package/src/Carousel/carousel.markers.stylex.ts +10 -0
  374. package/src/Chat/Chat.doc.mjs +1 -1
  375. package/src/Chat/ChatComposerInput.test.tsx +1 -27
  376. package/src/Chat/ChatComposerInput.tsx +15 -20
  377. package/src/Chat/ChatDictationButton.tsx +4 -4
  378. package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
  379. package/src/Chat/ChatMessageMetadata.tsx +6 -4
  380. package/src/Chat/ChatSystemMessage.test.tsx +11 -26
  381. package/src/Chat/ChatSystemMessage.tsx +7 -7
  382. package/src/Chat/ChatTokenizedText.test.tsx +16 -29
  383. package/src/Chat/ChatTokenizedText.tsx +8 -15
  384. package/src/Chat/ChatToolCalls.test.tsx +0 -55
  385. package/src/Chat/ChatToolCalls.tsx +12 -10
  386. package/src/Chat/index.ts +4 -1
  387. package/src/Chat/useTriggerMenu.tsx +4 -1
  388. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  389. package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
  390. package/src/CheckboxInput/CheckboxInput.tsx +0 -2
  391. package/src/CheckboxList/CheckboxList.test.tsx +0 -19
  392. package/src/CheckboxList/CheckboxListItem.tsx +2 -11
  393. package/src/Citation/Citation.doc.mjs +0 -5
  394. package/src/ClickableCard/ClickableCard.tsx +2 -45
  395. package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
  396. package/src/CodeBlock/CodeBlock.test.tsx +3 -122
  397. package/src/CodeBlock/CodeBlock.tsx +4 -62
  398. package/src/Collapsible/Collapsible.doc.mjs +4 -8
  399. package/src/Collapsible/Collapsible.tsx +10 -86
  400. package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
  401. package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
  402. package/src/Collapsible/CollapsibleGroup.tsx +9 -107
  403. package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
  404. package/src/Collapsible/index.ts +0 -4
  405. package/src/Collapsible/useCollapsible.ts +6 -20
  406. package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
  407. package/src/CommandPalette/CommandPalette.tsx +3 -5
  408. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
  409. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
  410. package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
  411. package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
  412. package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
  413. package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
  414. package/src/ContextMenu/ContextMenu.test.tsx +0 -87
  415. package/src/ContextMenu/ContextMenu.tsx +28 -87
  416. package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
  417. package/src/DateInput/DateInput.test.tsx +20 -11
  418. package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
  419. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
  420. package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
  421. package/src/DateTimeInput/DateTimeInput.tsx +2 -8
  422. package/src/DateTimeInput/index.ts +0 -1
  423. package/src/Dialog/Dialog.doc.mjs +0 -4
  424. package/src/Dialog/DialogHeader.doc.mjs +0 -45
  425. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  426. package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
  427. package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
  428. package/src/Field/Field.test.tsx +4 -1
  429. package/src/Field/FieldLabel.test.tsx +2 -2
  430. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
  431. package/src/Grid/Grid.test.tsx +18 -43
  432. package/src/Grid/Grid.tsx +9 -26
  433. package/src/HoverCard/HoverCard.doc.mjs +6 -6
  434. package/src/HoverCard/useHoverCard.doc.mjs +5 -5
  435. package/src/HoverCard/useHoverCard.tsx +2 -9
  436. package/src/Icon/Icon.test.tsx +29 -41
  437. package/src/Icon/Icon.tsx +2 -6
  438. package/src/InputGroup/InputGroup.tsx +2 -2
  439. package/src/Item/Item.tsx +1 -1
  440. package/src/Layer/useLayer.doc.mjs +2 -2
  441. package/src/Layer/useLayer.test.tsx +2 -221
  442. package/src/Layer/useLayer.tsx +30 -69
  443. package/src/Layout/LayoutContent.doc.mjs +0 -12
  444. package/src/Layout/LayoutPanel.doc.mjs +0 -40
  445. package/src/Lightbox/Lightbox.doc.mjs +0 -5
  446. package/src/Lightbox/Lightbox.test.tsx +2 -123
  447. package/src/Lightbox/Lightbox.tsx +1 -29
  448. package/src/Markdown/Markdown.tsx +7 -9
  449. package/src/Markdown/parser.perf.test.ts +12 -34
  450. package/src/NavMenu/NavMenu.doc.mjs +0 -15
  451. package/src/NumberInput/NumberInput.test.tsx +3 -48
  452. package/src/NumberInput/NumberInput.tsx +15 -32
  453. package/src/Overlay/Overlay.doc.mjs +0 -6
  454. package/src/Pagination/Pagination.test.tsx +0 -162
  455. package/src/Pagination/Pagination.tsx +26 -80
  456. package/src/Popover/Popover.doc.mjs +6 -6
  457. package/src/Popover/Popover.test.tsx +0 -65
  458. package/src/Popover/usePopover.doc.mjs +1 -1
  459. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  460. package/src/PowerSearch/PowerSearch.test.tsx +1 -109
  461. package/src/PowerSearch/PowerSearch.tsx +16 -37
  462. package/src/ProgressBar/ProgressBar.test.tsx +0 -30
  463. package/src/ProgressBar/ProgressBar.tsx +5 -12
  464. package/src/RadioList/RadioList.test.tsx +0 -19
  465. package/src/RadioList/RadioListItem.tsx +4 -9
  466. package/src/Resizable/ResizeHandle.tsx +4 -22
  467. package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
  468. package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
  469. package/src/SegmentedControl/SegmentedControl.tsx +5 -27
  470. package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
  471. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  472. package/src/Selector/Selector.test.tsx +1 -27
  473. package/src/SideNav/SideNav.doc.mjs +1 -7
  474. package/src/SideNav/SideNav.test.tsx +0 -66
  475. package/src/SideNav/SideNav.tsx +2 -6
  476. package/src/SideNav/SideNavCollapseButton.tsx +3 -4
  477. package/src/SideNav/SideNavSection.tsx +4 -6
  478. package/src/Switch/Switch.doc.mjs +7 -7
  479. package/src/Switch/Switch.test.tsx +3 -102
  480. package/src/Switch/Switch.tsx +7 -20
  481. package/src/TabList/TabList.test.tsx +1 -185
  482. package/src/TabList/TabMenu.tsx +9 -45
  483. package/src/Table/BaseTable.tsx +2 -13
  484. package/src/Table/Table.test.tsx +0 -87
  485. package/src/Table/TableBody.tsx +2 -15
  486. package/src/Table/TableFooter.tsx +2 -15
  487. package/src/Table/TableHeader.tsx +2 -15
  488. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
  489. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
  490. package/src/Table/plugins/pagination/paginateData.ts +1 -5
  491. package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
  492. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
  493. package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
  494. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
  495. package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
  496. package/src/TextArea/TextArea.test.tsx +3 -3
  497. package/src/TextInput/TextInput.test.tsx +3 -3
  498. package/src/Thumbnail/Thumbnail.test.tsx +2 -36
  499. package/src/Thumbnail/Thumbnail.tsx +2 -4
  500. package/src/TimeInput/TimeInput.test.tsx +0 -37
  501. package/src/TimeInput/TimeInput.tsx +1 -11
  502. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  503. package/src/Timestamp/Timestamp.test.tsx +0 -52
  504. package/src/Timestamp/Timestamp.tsx +16 -30
  505. package/src/Toast/Toast.tsx +3 -11
  506. package/src/Toast/ToastViewport.test.tsx +0 -64
  507. package/src/Toast/ToastViewport.tsx +0 -12
  508. package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
  509. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  510. package/src/Tokenizer/Tokenizer.test.tsx +0 -54
  511. package/src/Tokenizer/Tokenizer.tsx +4 -5
  512. package/src/Tooltip/Tooltip.doc.mjs +6 -6
  513. package/src/Tooltip/useTooltip.doc.mjs +5 -5
  514. package/src/Tooltip/useTooltip.tsx +2 -12
  515. package/src/TopNav/TopNav.doc.mjs +1 -1
  516. package/src/TopNav/TopNav.test.tsx +7 -23
  517. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
  518. package/src/TreeList/TreeList.doc.mjs +2 -2
  519. package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
  520. package/src/Typeahead/BaseTypeahead.tsx +2 -5
  521. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  522. package/src/Typeahead/Typeahead.test.tsx +1 -45
  523. package/src/docs-types.ts +1 -9
  524. package/src/hooks/focusableSelector.ts +1 -1
  525. package/src/hooks/index.ts +0 -3
  526. package/src/hooks/useFocusTrap.doc.mjs +2 -4
  527. package/src/hooks/useFocusTrap.test.tsx +1 -149
  528. package/src/hooks/useFocusTrap.ts +1 -50
  529. package/src/hooks/useInteractiveRole.ts +4 -12
  530. package/src/hooks/useStreamingText.test.ts +19 -54
  531. package/src/hooks/useStreamingText.ts +5 -16
  532. package/src/hooks/useTreeFocus.test.tsx +3 -1
  533. package/src/reset.css +0 -29
  534. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  535. package/src/theme/defineTheme.ts +13 -4
  536. package/src/theme/derivedVarRegistry.test.ts +2 -2
  537. package/src/theme/expandColorScale.test.ts +0 -29
  538. package/src/theme/expandColorScale.ts +6 -11
  539. package/src/theme/hct.ts +17 -9
  540. package/src/theme/tokens.test.ts +9 -182
  541. package/src/theme/tokens.ts +4 -239
  542. package/src/theme/useTheme.test.tsx +0 -20
  543. package/src/utils/index.ts +0 -4
  544. package/src/utils/sharedResizeObserver.test.ts +2 -2
  545. package/src/utils/timeParser.test.ts +0 -13
  546. package/src/utils/timeParser.ts +5 -8
  547. package/dist/hooks/useHotkeys.d.ts +0 -51
  548. package/dist/hooks/useHotkeys.d.ts.map +0 -1
  549. package/dist/hooks/useHotkeys.js +0 -160
  550. package/dist/utils/color.d.ts +0 -42
  551. package/dist/utils/color.d.ts.map +0 -1
  552. package/dist/utils/color.js +0 -150
  553. package/dist/utils/composeEventHandlers.d.ts +0 -30
  554. package/dist/utils/composeEventHandlers.d.ts.map +0 -1
  555. package/dist/utils/composeEventHandlers.js +0 -40
  556. package/src/Chat/ChatDictationButton.test.tsx +0 -43
  557. package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
  558. package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
  559. package/src/Collapsible/Collapsible.test.tsx +0 -405
  560. package/src/FieldStatus/FieldStatus.test.tsx +0 -282
  561. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
  562. package/src/Layout/Layout.test.tsx +0 -285
  563. package/src/Layout/LayoutSlots.test.tsx +0 -364
  564. package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
  565. package/src/OverflowList/OverflowList.test.tsx +0 -416
  566. package/src/Overlay/Overlay.test.tsx +0 -356
  567. package/src/Resizable/ResizeHandle.test.tsx +0 -218
  568. package/src/SizeContext/SizeContext.test.tsx +0 -226
  569. package/src/__tests__/TestIcon.tsx +0 -26
  570. package/src/__tests__/fastRoleQueries.ts +0 -66
  571. package/src/docPropReferences.test.ts +0 -178
  572. package/src/hooks/useHotkeys.doc.mjs +0 -52
  573. package/src/hooks/useHotkeys.test.ts +0 -245
  574. package/src/hooks/useHotkeys.ts +0 -203
  575. package/src/utils/color.test.ts +0 -133
  576. package/src/utils/color.ts +0 -148
  577. package/src/utils/composeEventHandlers.test.ts +0 -71
  578. package/src/utils/composeEventHandlers.ts +0 -44
  579. package/src/utils/mergeProps.test.ts +0 -166
@@ -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
 
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
  );
@@ -105,7 +105,6 @@ export function ChatDictationButton({
105
105
  xstyle,
106
106
  className,
107
107
  style,
108
- ...rest
109
108
  }: ChatDictationButtonProps) {
110
109
  if (isHiddenWhenUnsupported && !dictation.isSupported) {
111
110
  return null;
@@ -131,8 +130,7 @@ export function ChatDictationButton({
131
130
  return (
132
131
  <span
133
132
  ref={ref}
134
- {...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}
135
- {...rest}>
133
+ {...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}>
136
134
  {isListening && (
137
135
  <span
138
136
  aria-hidden
@@ -163,7 +161,9 @@ export function ChatDictationButton({
163
161
  aria-label={accessibleLabel}
164
162
  variant="ghost"
165
163
  size={size}
166
- icon={isListening ? undefined : <Icon icon="microphone" size={size} />}
164
+ icon={
165
+ isListening ? undefined : <Icon icon="microphone" size={size} />
166
+ }
167
167
  isIconOnly
168
168
  onClick={dictation.toggle}
169
169
  />
@@ -118,13 +118,11 @@ export function ChatLayoutScrollButton({
118
118
  xstyle,
119
119
  className,
120
120
  style,
121
- ...rest
122
121
  }: ChatLayoutScrollButtonProps) {
123
122
  return (
124
123
  <div
125
124
  ref={ref}
126
- {...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}
127
- {...rest}>
125
+ {...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}>
128
126
  <div
129
127
  {...stylex.props(
130
128
  styles.container,
@@ -28,7 +28,11 @@ import type {BaseProps} from '../BaseProps';
28
28
  import {themeProps} from '../utils/themeProps';
29
29
 
30
30
  export type ChatMessageStatus =
31
- 'sending' | 'sent' | 'delivered' | 'read' | 'error';
31
+ | 'sending'
32
+ | 'sent'
33
+ | 'delivered'
34
+ | 'read'
35
+ | 'error';
32
36
 
33
37
  const STATUS_CONFIG: Record<
34
38
  ChatMessageStatus,
@@ -114,7 +118,6 @@ export function ChatMessageMetadata({
114
118
  xstyle,
115
119
  className,
116
120
  style,
117
- ...rest
118
121
  }: ChatMessageMetadataProps) {
119
122
  const msgContext = useChatMessageContext();
120
123
  const sender = msgContext?.sender ?? 'assistant';
@@ -139,8 +142,7 @@ export function ChatMessageMetadata({
139
142
  ),
140
143
  className,
141
144
  style,
142
- )}
143
- {...rest}>
145
+ )}>
144
146
  {timestamp != null && <span>{timestamp}</span>}
145
147
  {timestamp != null && (footer != null || statusConfig != null) && (
146
148
  <span>·</span>
@@ -11,20 +11,26 @@ describe('ChatSystemMessage', () => {
11
11
  });
12
12
 
13
13
  it('has role="status"', () => {
14
- render(<ChatSystemMessage data-testid="sys">Notice</ChatSystemMessage>);
14
+ render(
15
+ <ChatSystemMessage data-testid="sys">Notice</ChatSystemMessage>,
16
+ );
15
17
  const el = screen.getByTestId('sys');
16
18
  expect(el.getAttribute('role')).toBe('status');
17
19
  });
18
20
 
19
21
  it('renders default variant without divider lines', () => {
20
- const {container} = render(<ChatSystemMessage>Hello</ChatSystemMessage>);
22
+ const {container} = render(
23
+ <ChatSystemMessage>Hello</ChatSystemMessage>,
24
+ );
21
25
  // Divider lines have aria-hidden, so check there are none
22
26
  const hiddenElements = container.querySelectorAll('[aria-hidden]');
23
27
  expect(hiddenElements.length).toBe(0);
24
28
  });
25
29
 
26
30
  it('renders divider variant with Divider', () => {
27
- render(<ChatSystemMessage variant="divider">Today</ChatSystemMessage>);
31
+ render(
32
+ <ChatSystemMessage variant="divider">Today</ChatSystemMessage>,
33
+ );
28
34
  expect(screen.getByText('Today')).toBeTruthy();
29
35
  });
30
36
 
@@ -48,30 +54,9 @@ describe('ChatSystemMessage', () => {
48
54
  });
49
55
 
50
56
  it('applies data-testid', () => {
51
- render(<ChatSystemMessage data-testid="my-sys">Hello</ChatSystemMessage>);
52
- expect(screen.getByTestId('my-sys')).toBeTruthy();
53
- });
54
-
55
- it('forwards rest props (data-*, id) while keeping its own role', () => {
56
- render(
57
- <ChatSystemMessage data-testid="sys" data-custom="x" id="sys-1">
58
- Hello
59
- </ChatSystemMessage>,
60
- );
61
- const el = screen.getByTestId('sys');
62
- expect(el).toHaveAttribute('data-custom', 'x');
63
- expect(el).toHaveAttribute('id', 'sys-1');
64
- expect(el.getAttribute('role')).toBe('status');
65
- });
66
-
67
- it('forwards rest props in the divider variant', () => {
68
57
  render(
69
- <ChatSystemMessage variant="divider" data-testid="sys" data-custom="x">
70
- Today
71
- </ChatSystemMessage>,
58
+ <ChatSystemMessage data-testid="my-sys">Hello</ChatSystemMessage>,
72
59
  );
73
- const el = screen.getByTestId('sys');
74
- expect(el).toHaveAttribute('data-custom', 'x');
75
- expect(el.getAttribute('role')).toBe('status');
60
+ expect(screen.getByTestId('my-sys')).toBeTruthy();
76
61
  });
77
62
  });
@@ -120,21 +120,21 @@ export function ChatSystemMessage({
120
120
  xstyle,
121
121
  className,
122
122
  style: styleProp,
123
+ 'data-testid': testId,
123
124
  ref,
124
- ...rest
125
125
  }: ChatSystemMessageProps) {
126
126
  if (variant === 'divider') {
127
127
  return (
128
128
  <div
129
129
  ref={ref}
130
+ role="status"
131
+ data-testid={testId}
130
132
  {...mergeProps(
131
133
  themeProps('chat-system-message', {variant}),
132
134
  stylex.props(styles.dividerWrap, xstyle),
133
135
  className,
134
136
  styleProp,
135
- )}
136
- {...rest}
137
- role="status">
137
+ )}>
138
138
  <Divider label={children} />
139
139
  </div>
140
140
  );
@@ -143,14 +143,14 @@ export function ChatSystemMessage({
143
143
  return (
144
144
  <div
145
145
  ref={ref}
146
+ role="status"
147
+ data-testid={testId}
146
148
  {...mergeProps(
147
149
  themeProps('chat-system-message', {variant}),
148
150
  stylex.props(styles.root, xstyle),
149
151
  className,
150
152
  styleProp,
151
- )}
152
- {...rest}
153
- role="status">
153
+ )}>
154
154
  <span {...stylex.props(styles.content)}>
155
155
  {icon != null && <span {...stylex.props(styles.icon)}>{icon}</span>}
156
156
  {children}