@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
@@ -470,84 +470,11 @@ describe('Switch', () => {
470
470
  expect(screen.getByRole('switch')).toBeDisabled();
471
471
  });
472
472
  });
473
- describe('labelSpacing', () => {
474
- const getField = (container: HTMLElement) =>
475
- container.querySelector<HTMLElement>('.astryx-switch-field')!;
476
-
477
- it('omits the data attribute for the default hug spacing', () => {
478
- const {container} = render(
479
- <Switch label="Notify" value={false} onChange={() => {}} />,
480
- );
481
- expect(getField(container)).not.toHaveAttribute('data-label-spacing');
482
- });
483
-
484
- it('reflects spread spacing as a data attribute and variant class', () => {
485
- const {container} = render(
486
- <Switch
487
- label="Notify"
488
- value={false}
489
- onChange={() => {}}
490
- labelSpacing="spread"
491
- />,
492
- );
493
- expect(getField(container)).toHaveAttribute(
494
- 'data-label-spacing',
495
- 'spread',
496
- );
497
- expect(getField(container).className).toContain('spread');
498
- });
499
-
500
- it('renders explicit hug the same as the default', () => {
501
- const {container: implicit} = render(
502
- <Switch label="Notify" value={false} onChange={() => {}} />,
503
- );
504
- const {container: explicit} = render(
505
- <Switch
506
- label="Notify"
507
- value={false}
508
- onChange={() => {}}
509
- labelSpacing="hug"
510
- />,
511
- );
512
- expect(getField(explicit)).not.toHaveAttribute('data-label-spacing');
513
- expect(getField(explicit).className).toBe(getField(implicit).className);
514
- });
515
-
516
- it("treats the deprecated 'default' value as an alias for hug", () => {
517
- const {container: hug} = render(
518
- <Switch
519
- label="Notify"
520
- value={false}
521
- onChange={() => {}}
522
- labelSpacing="hug"
523
- />,
524
- );
525
- const {container: deprecated} = render(
526
- <Switch
527
- label="Notify"
528
- value={false}
529
- onChange={() => {}}
530
- labelSpacing="default"
531
- />,
532
- );
533
- expect(getField(deprecated)).not.toHaveAttribute('data-label-spacing');
534
- expect(getField(deprecated).className).toBe(getField(hug).className);
535
- // The switch row keeps the hug layout, not the spread justification.
536
- expect(getField(deprecated).firstElementChild?.className).toBe(
537
- getField(hug).firstElementChild?.className,
538
- );
539
- });
540
- });
541
473
  describe('form participation', () => {
542
474
  it('submits under htmlName when on', () => {
543
475
  const {container} = render(
544
476
  <form>
545
- <Switch
546
- label="Notify"
547
- htmlName="notify"
548
- value={true}
549
- onChange={() => {}}
550
- />
477
+ <Switch label="Notify" htmlName="notify" value={true} onChange={() => {}} />
551
478
  </form>,
552
479
  );
553
480
  const data = new FormData(container.querySelector('form')!);
@@ -567,20 +494,13 @@ describe('Switch', () => {
567
494
  />
568
495
  </form>,
569
496
  );
570
- expect([
571
- ...new FormData(container.querySelector('form')!).keys(),
572
- ]).toEqual([]);
497
+ expect([...new FormData(container.querySelector('form')!).keys()]).toEqual([]);
573
498
  });
574
499
 
575
500
  it('submits nothing when off or when htmlName is omitted', () => {
576
501
  const {container} = render(
577
502
  <form>
578
- <Switch
579
- label="Off"
580
- htmlName="off"
581
- value={false}
582
- onChange={() => {}}
583
- />
503
+ <Switch label="Off" htmlName="off" value={false} onChange={() => {}} />
584
504
  <Switch label="Unnamed" value={true} onChange={() => {}} />
585
505
  </form>,
586
506
  );
@@ -588,23 +508,4 @@ describe('Switch', () => {
588
508
  expect([...data.keys()]).toEqual([]);
589
509
  });
590
510
  });
591
-
592
- describe('rest forwarding', () => {
593
- it('forwards data-testid, id, and aria-* to the root element', () => {
594
- const {container} = render(
595
- <Switch
596
- label="Notifications"
597
- value={false}
598
- onChange={() => {}}
599
- data-testid="my-switch"
600
- id="switch-1"
601
- aria-label="Toggle notifications"
602
- />,
603
- );
604
- const root = container.querySelector('[data-testid="my-switch"]');
605
- expect(root).not.toBeNull();
606
- expect(root).toHaveAttribute('id', 'switch-1');
607
- expect(root).toHaveAttribute('aria-label', 'Toggle notifications');
608
- });
609
- });
610
511
  });
@@ -185,11 +185,7 @@ const styles = stylex.create({
185
185
 
186
186
  export type SwitchLabelPosition = 'start' | 'end';
187
187
 
188
- export type SwitchLabelSpacing =
189
- | 'hug'
190
- | 'spread'
191
- /** @deprecated Use `'hug'` instead. */
192
- | 'default';
188
+ export type SwitchLabelSpacing = 'default' | 'spread';
193
189
 
194
190
  export interface SwitchProps extends Omit<BaseProps, 'onChange'> {
195
191
  /** Ref forwarded to the root element */
@@ -301,11 +297,9 @@ export interface SwitchProps extends Omit<BaseProps, 'onChange'> {
301
297
  labelPosition?: SwitchLabelPosition;
302
298
  /**
303
299
  * Spacing behavior between label and switch.
304
- * - 'hug': Label and switch are positioned next to each other
300
+ * - 'default': Label and switch are positioned next to each other
305
301
  * - 'spread': Label and switch are pushed to opposite ends
306
- *
307
- * 'default' is a deprecated alias for 'hug'.
308
- * @default 'hug'
302
+ * @default 'default'
309
303
  */
310
304
  labelSpacing?: SwitchLabelSpacing;
311
305
  /**
@@ -356,14 +350,13 @@ export function Switch({
356
350
  labelIcon,
357
351
  labelTooltip,
358
352
  labelPosition = 'end',
359
- labelSpacing = 'hug',
353
+ labelSpacing = 'default',
360
354
  status,
361
355
  width,
362
356
  xstyle,
363
357
  className,
364
358
  style,
365
359
  ref,
366
- ...rest
367
360
  }: SwitchProps) {
368
361
  const id = useId();
369
362
  const descriptionID = useId();
@@ -375,10 +368,6 @@ export function Switch({
375
368
 
376
369
  const isOn = optimisticValue === true;
377
370
 
378
- // 'default' is a deprecated alias for 'hug' (#2889).
379
- const resolvedLabelSpacing: SwitchLabelSpacing =
380
- labelSpacing === 'default' ? 'hug' : labelSpacing;
381
-
382
371
  // Disabled-reason tooltip. Disabled controls swallow pointer events, so the
383
372
  // tooltip listeners attach to the switch row (which already exists) and the
384
373
  // native checkbox stays perceivable via aria-disabled instead of the disabled
@@ -498,14 +487,12 @@ export function Switch({
498
487
  {...mergeProps(
499
488
  themeProps('switch-field', {
500
489
  labelPosition: labelPosition !== 'end' ? labelPosition : undefined,
501
- labelSpacing:
502
- resolvedLabelSpacing !== 'hug' ? resolvedLabelSpacing : undefined,
490
+ labelSpacing: labelSpacing !== 'default' ? labelSpacing : undefined,
503
491
  }),
504
492
  stylex.props(width != null && dynamicWidthStyles.width(width), xstyle),
505
493
  className,
506
494
  style,
507
- )}
508
- {...rest}>
495
+ )}>
509
496
  <div
510
497
  ref={el => {
511
498
  // Interaction (hover/focus) listeners for the disabled-message
@@ -518,7 +505,7 @@ export function Switch({
518
505
  }}
519
506
  {...stylex.props(
520
507
  styles.container,
521
- resolvedLabelSpacing === 'spread' && styles.containerSpread,
508
+ labelSpacing === 'spread' && styles.containerSpread,
522
509
  !isDisabled && switchScope,
523
510
  )}>
524
511
  {' '}
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import {describe, it, expect, vi, beforeAll, afterAll} from 'vitest';
13
- import {render, screen, fireEvent} from '@testing-library/react';
13
+ import {render, screen} from '@testing-library/react';
14
14
  import userEvent from '@testing-library/user-event';
15
15
  import {TabList} from './TabList';
16
16
  import {Tab} from './Tab';
@@ -702,187 +702,3 @@ describe('TabMenu', () => {
702
702
  expect(reportsItem).not.toHaveAttribute('aria-current');
703
703
  });
704
704
  });
705
-
706
- describe('TabMenu keyboard navigation (roving tabindex)', () => {
707
- const menuOptions = [
708
- {value: 'analytics', label: 'Analytics'},
709
- {value: 'reports', label: 'Reports'},
710
- ];
711
-
712
- it('exposes the overflow menu as a single Tab stop (one item tabbable, rest -1)', async () => {
713
- const user = userEvent.setup();
714
- render(
715
- <TabList value="home" onChange={() => {}}>
716
- <Tab value="home" label="Home" />
717
- <TabMenu label="More" options={menuOptions} />
718
- </TabList>,
719
- );
720
-
721
- await user.click(screen.getByRole('button', {name: /More/}));
722
-
723
- const analytics = screen.getByRole('menuitem', {
724
- name: 'Analytics',
725
- hidden: true,
726
- });
727
- const reports = screen.getByRole('menuitem', {
728
- name: 'Reports',
729
- hidden: true,
730
- });
731
-
732
- // Exactly one menu item is in the Tab sequence; arrow keys reach the rest.
733
- expect(analytics).toHaveAttribute('tabindex', '0');
734
- expect(reports).toHaveAttribute('tabindex', '-1');
735
-
736
- const tabbable = [analytics, reports].filter(
737
- el => el.getAttribute('tabindex') === '0',
738
- );
739
- expect(tabbable).toHaveLength(1);
740
- });
741
-
742
- it('moves focus between items with ArrowDown and ArrowUp', async () => {
743
- const user = userEvent.setup();
744
- render(
745
- <TabList value="home" onChange={() => {}}>
746
- <Tab value="home" label="Home" />
747
- <TabMenu label="More" options={menuOptions} />
748
- </TabList>,
749
- );
750
-
751
- await user.click(screen.getByRole('button', {name: /More/}));
752
- const menu = screen.getByRole('menu', {hidden: true});
753
- const analytics = screen.getByRole('menuitem', {
754
- name: 'Analytics',
755
- hidden: true,
756
- });
757
- const reports = screen.getByRole('menuitem', {
758
- name: 'Reports',
759
- hidden: true,
760
- });
761
-
762
- fireEvent.keyDown(menu, {key: 'ArrowDown'});
763
- expect(analytics).toHaveFocus();
764
-
765
- fireEvent.keyDown(menu, {key: 'ArrowDown'});
766
- expect(reports).toHaveFocus();
767
-
768
- fireEvent.keyDown(menu, {key: 'ArrowUp'});
769
- expect(analytics).toHaveFocus();
770
- });
771
-
772
- it('moves the roving tab stop with arrow navigation', async () => {
773
- const user = userEvent.setup();
774
- render(
775
- <TabList value="home" onChange={() => {}}>
776
- <Tab value="home" label="Home" />
777
- <TabMenu label="More" options={menuOptions} />
778
- </TabList>,
779
- );
780
-
781
- await user.click(screen.getByRole('button', {name: /More/}));
782
- const menu = screen.getByRole('menu', {hidden: true});
783
- const analytics = screen.getByRole('menuitem', {
784
- name: 'Analytics',
785
- hidden: true,
786
- });
787
- const reports = screen.getByRole('menuitem', {
788
- name: 'Reports',
789
- hidden: true,
790
- });
791
-
792
- fireEvent.keyDown(menu, {key: 'ArrowDown'}); // focus analytics
793
- fireEvent.keyDown(menu, {key: 'ArrowDown'}); // focus reports
794
-
795
- // The tab stop follows focus, so it is still a single stop after moving.
796
- expect(reports).toHaveAttribute('tabindex', '0');
797
- expect(analytics).toHaveAttribute('tabindex', '-1');
798
- });
799
-
800
- it('jumps to first and last item with Home and End', async () => {
801
- const user = userEvent.setup();
802
- const options = [
803
- {value: 'analytics', label: 'Analytics'},
804
- {value: 'reports', label: 'Reports'},
805
- {value: 'exports', label: 'Exports'},
806
- ];
807
- render(
808
- <TabList value="home" onChange={() => {}}>
809
- <Tab value="home" label="Home" />
810
- <TabMenu label="More" options={options} />
811
- </TabList>,
812
- );
813
-
814
- await user.click(screen.getByRole('button', {name: /More/}));
815
- const menu = screen.getByRole('menu', {hidden: true});
816
- const analytics = screen.getByRole('menuitem', {
817
- name: 'Analytics',
818
- hidden: true,
819
- });
820
- const exports = screen.getByRole('menuitem', {
821
- name: 'Exports',
822
- hidden: true,
823
- });
824
-
825
- fireEvent.keyDown(menu, {key: 'End'});
826
- expect(exports).toHaveFocus();
827
-
828
- fireEvent.keyDown(menu, {key: 'Home'});
829
- expect(analytics).toHaveFocus();
830
- });
831
-
832
- it('selects an item with Enter and calls onChange', async () => {
833
- const user = userEvent.setup();
834
- const handleChange = vi.fn();
835
- render(
836
- <TabList value="home" onChange={handleChange}>
837
- <Tab value="home" label="Home" />
838
- <TabMenu label="More" options={menuOptions} />
839
- </TabList>,
840
- );
841
-
842
- await user.click(screen.getByRole('button', {name: /More/}));
843
- const analytics = screen.getByRole('menuitem', {
844
- name: 'Analytics',
845
- hidden: true,
846
- });
847
- analytics.focus();
848
- fireEvent.keyDown(analytics, {key: 'Enter'});
849
-
850
- expect(handleChange).toHaveBeenCalledWith('analytics');
851
- });
852
-
853
- it('closes the menu when Tab is pressed inside it (APG menu-button)', async () => {
854
- const user = userEvent.setup();
855
- render(
856
- <TabList value="home" onChange={() => {}}>
857
- <Tab value="home" label="Home" />
858
- <TabMenu label="More" options={menuOptions} />
859
- </TabList>,
860
- );
861
-
862
- await user.click(screen.getByRole('button', {name: /More/}));
863
- const menu = screen.getByRole('menu', {hidden: true});
864
-
865
- const hidePopover = vi.mocked(HTMLElement.prototype.hidePopover);
866
- hidePopover.mockClear();
867
- fireEvent.keyDown(menu, {key: 'Tab'});
868
- expect(hidePopover).toHaveBeenCalled();
869
- });
870
-
871
- it('closes the menu when Escape is pressed', async () => {
872
- const user = userEvent.setup();
873
- render(
874
- <TabList value="home" onChange={() => {}}>
875
- <Tab value="home" label="Home" />
876
- <TabMenu label="More" options={menuOptions} />
877
- </TabList>,
878
- );
879
-
880
- await user.click(screen.getByRole('button', {name: /More/}));
881
- const menu = screen.getByRole('menu', {hidden: true});
882
-
883
- const hidePopover = vi.mocked(HTMLElement.prototype.hidePopover);
884
- hidePopover.mockClear();
885
- fireEvent.keyDown(menu, {key: 'Escape'});
886
- expect(hidePopover).toHaveBeenCalled();
887
- });
888
- });
@@ -16,7 +16,7 @@
16
16
  * - /packages/cli/templates/blocks/components/TabList/ (showcase blocks)
17
17
  */
18
18
 
19
- import React, {useCallback, useId, useRef, type ReactNode} from 'react';
19
+ import React, {useCallback, useId, type ReactNode} from 'react';
20
20
  import * as stylex from '@stylexjs/stylex';
21
21
  import {Icon} from '../Icon';
22
22
  import {renderIconSlot, type IconType} from '../Icon';
@@ -262,7 +262,6 @@ export function TabMenu({
262
262
  }: TabMenuProps) {
263
263
  const tabListCtx = useTabListContext();
264
264
  const menuId = useId();
265
- const buttonRef = useRef<HTMLButtonElement>(null);
266
265
 
267
266
  const popover = usePopover({
268
267
  hasLightDismiss: true,
@@ -271,50 +270,20 @@ export function TabMenu({
271
270
  // The popup's own role="menu" is the exposed semantics; a modal dialog
272
271
  // wrapper would announce an unnamed dialog around the menu.
273
272
  role: 'none',
274
- // Return focus to the trigger when the menu closes (Escape, Tab, select,
275
- // or light dismiss) so keyboard focus is never dropped to <body>.
276
- onHide: useCallback(() => {
277
- buttonRef.current?.focus();
278
- }, []),
279
273
  });
280
274
 
281
- // The overflow menu is a composite widget: a single roving tab stop with
282
- // arrow-key navigation between items, per the APG menu pattern. The hook owns
283
- // item tabindex — items render tabIndex={-1} and exactly one is promoted to 0.
284
- const {
285
- listRef,
286
- handleKeyDown: handleListKeyDown,
287
- handleFocus,
288
- focusFirst,
289
- } = useListFocus<HTMLDivElement>({
290
- hasRovingTabIndex: true,
291
- onEscape: () => popover.hide(),
292
- });
275
+ const {listRef, handleKeyDown: handleListKeyDown} =
276
+ useListFocus<HTMLDivElement>({
277
+ onEscape: () => popover.hide(),
278
+ });
293
279
 
294
280
  const handleToggle = useCallback(() => {
295
281
  if (popover.isOpen) {
296
282
  popover.hide();
297
283
  } else {
298
284
  popover.show();
299
- // Move focus into the menu on open so arrow navigation works and the
300
- // roving tab stop lands on a real item (APG menu-button focus-on-open).
301
- requestAnimationFrame(() => focusFirst());
302
285
  }
303
- }, [popover, focusFirst]);
304
-
305
- const handleMenuKeyDown = useCallback(
306
- (e: React.KeyboardEvent) => {
307
- // APG menu-button: Tab leaves the menu rather than walking its items.
308
- // Close and let onHide return focus to the trigger, from which the
309
- // browser's default Tab continues to the next element.
310
- if (e.key === 'Tab') {
311
- popover.hide();
312
- return;
313
- }
314
- handleListKeyDown(e);
315
- },
316
- [handleListKeyDown, popover],
317
- );
286
+ }, [popover]);
318
287
 
319
288
  const selectedOption = options.find(o => o.value === tabListCtx.value);
320
289
  const triggerLabel = selectedOption?.label ?? label;
@@ -330,11 +299,7 @@ export function TabMenu({
330
299
  [tabListCtx, popover],
331
300
  );
332
301
 
333
- const setButtonRef = mergeRefs<HTMLButtonElement>(
334
- popover.triggerRef,
335
- buttonRef,
336
- ref,
337
- );
302
+ const setButtonRef = mergeRefs<HTMLButtonElement>(popover.triggerRef, ref);
338
303
 
339
304
  return (
340
305
  <>
@@ -392,8 +357,7 @@ export function TabMenu({
392
357
  id={menuId}
393
358
  role="menu"
394
359
  aria-label={label}
395
- onKeyDown={handleMenuKeyDown}
396
- onFocus={handleFocus}
360
+ onKeyDown={handleListKeyDown}
397
361
  {...mergeProps(
398
362
  themeProps('tab-menu-dropdown'),
399
363
  stylex.props(styles.dropdown),
@@ -407,7 +371,7 @@ export function TabMenu({
407
371
  <div
408
372
  key={option.value}
409
373
  role="menuitem"
410
- tabIndex={-1}
374
+ tabIndex={0}
411
375
  aria-current={isSelected ? 'true' : undefined}
412
376
  onClick={() => handleSelect(option.value)}
413
377
  onKeyDown={e => {
@@ -279,18 +279,11 @@ function areRowPropsEqual<T extends Record<string, unknown>>(
279
279
  return true;
280
280
  }
281
281
 
282
- // Different object reference - compare values. This is intentionally a
283
- // one-level shallow compare: nested fields rely on reference identity.
282
+ // Different object reference - compare values
284
283
  const prevItem = prevProps.item;
285
284
  const nextItem = nextProps.item;
286
285
  const keys = Object.keys(nextItem);
287
286
 
288
- // A key deleted from nextItem would never be visited by the loop below,
289
- // and the row would keep rendering the removed field's stale value.
290
- if (Object.keys(prevItem).length !== keys.length) {
291
- return false;
292
- }
293
-
294
287
  for (const key of keys) {
295
288
  if (prevItem[key] !== nextItem[key]) {
296
289
  return false;
@@ -372,13 +365,9 @@ function BaseTableInner<T extends Record<string, unknown>>({
372
365
  const headerCells = resolvedColumns.map((col, columnIndex) => {
373
366
  const headerContent = col.header ?? col.key;
374
367
 
375
- // Build initial htmlProps with column alignment if specified.
376
- // `scope: 'col'` is the default so every column header associates its
377
- // data cells with the correct column for screen readers; a plugin's
378
- // transformHeaderCell can override it via htmlProps.scope.
368
+ // Build initial htmlProps with column alignment if specified
379
369
  const initialHeaderHtmlProps: Record<string, unknown> = {
380
370
  'data-column-key': col.key,
381
- scope: 'col',
382
371
  };
383
372
  if (col.align) {
384
373
  initialHeaderHtmlProps.style = {textAlign: col.align};
@@ -15,9 +15,6 @@ import {BaseTable} from './BaseTable';
15
15
  import {Table} from './Table';
16
16
  import {TableRow} from './TableRow';
17
17
  import {TableCell} from './TableCell';
18
- import {TableHeader} from './TableHeader';
19
- import {TableBody} from './TableBody';
20
- import {TableFooter} from './TableFooter';
21
18
  import {
22
19
  proportional,
23
20
  pixel,
@@ -232,34 +229,6 @@ describe('BaseTable', () => {
232
229
  expect(headers[2]).toHaveTextContent('Email');
233
230
  });
234
231
 
235
- it('renders every column header with scope="col"', () => {
236
- render(<BaseTable data={users} columns={columns} />);
237
- const headers = screen.getAllByRole('columnheader');
238
- expect(headers).toHaveLength(3);
239
- for (const header of headers) {
240
- expect(header).toHaveAttribute('scope', 'col');
241
- }
242
- });
243
-
244
- it('lets a consumer override scope via header html props', () => {
245
- // A `<th scope="row">` maps to the `rowheader` role, so query the DOM
246
- // directly to assert the attribute regardless of the resolved ARIA role.
247
- const plugin: TablePlugin<User> = {
248
- transformHeaderCell: (props, column) =>
249
- column.key === 'name'
250
- ? {...props, htmlProps: {...props.htmlProps, scope: 'row'}}
251
- : props,
252
- };
253
- const {container} = render(
254
- <BaseTable data={users} columns={columns} plugins={[plugin]} />,
255
- );
256
- const headerCells = container.querySelectorAll('thead th');
257
- // columns fixture order: name, age, email — plugin overrides name → 'row'
258
- expect(headerCells[0]).toHaveAttribute('scope', 'row');
259
- expect(headerCells[1]).toHaveAttribute('scope', 'col');
260
- expect(headerCells[2]).toHaveAttribute('scope', 'col');
261
- });
262
-
263
232
  it('renders data cells', () => {
264
233
  render(<BaseTable data={users} columns={columns} />);
265
234
  const cells = screen.getAllByRole('cell');
@@ -648,29 +617,6 @@ describe('BaseTable', () => {
648
617
  // =============================================================================
649
618
 
650
619
  describe('Table', () => {
651
- it('clears a cell when the field is removed from the row object (#3595)', () => {
652
- const cols: TableColumn<Record<string, unknown>>[] = [
653
- {key: 'name', header: 'Name'},
654
- {key: 'status', header: 'Status'},
655
- ];
656
- const {rerender} = render(
657
- <Table
658
- data={[{id: '1', name: 'Alice', status: 'active'}]}
659
- columns={cols}
660
- idKey="id"
661
- />,
662
- );
663
- expect(screen.getByText('active')).toBeInTheDocument();
664
-
665
- // Clearing a field by omitting it (optimistic update / server response)
666
- // must re-render the row — the memo previously only compared the keys of
667
- // the NEW item, so the deleted field's stale value kept rendering.
668
- rerender(
669
- <Table data={[{id: '1', name: 'Alice'}]} columns={cols} idKey="id" />,
670
- );
671
- expect(screen.queryByText('active')).not.toBeInTheDocument();
672
- });
673
-
674
620
  it('renders a table with correct structure', () => {
675
621
  render(<Table data={users} columns={columns} />);
676
622
  expect(screen.getByRole('table')).toBeInTheDocument();
@@ -1286,37 +1232,4 @@ describe('emptyState', () => {
1286
1232
  expect(screen.getByText('Name')).toBeInTheDocument();
1287
1233
  expect(screen.getByText('Age')).toBeInTheDocument();
1288
1234
  });
1289
-
1290
- describe('table section rest forwarding', () => {
1291
- it('forwards data-testid and id to the tbody, thead, and tfoot', () => {
1292
- const {container} = render(
1293
- <table>
1294
- <TableHeader data-testid="thead" id="head-1">
1295
- <tr>
1296
- <th>H</th>
1297
- </tr>
1298
- </TableHeader>
1299
- <TableBody data-testid="tbody" id="body-1">
1300
- <tr>
1301
- <td>B</td>
1302
- </tr>
1303
- </TableBody>
1304
- <TableFooter data-testid="tfoot" id="foot-1">
1305
- <tr>
1306
- <td>F</td>
1307
- </tr>
1308
- </TableFooter>
1309
- </table>,
1310
- );
1311
- const thead = container.querySelector('thead')!;
1312
- const tbody = container.querySelector('tbody')!;
1313
- const tfoot = container.querySelector('tfoot')!;
1314
- expect(thead).toHaveAttribute('data-testid', 'thead');
1315
- expect(thead).toHaveAttribute('id', 'head-1');
1316
- expect(tbody).toHaveAttribute('data-testid', 'tbody');
1317
- expect(tbody).toHaveAttribute('id', 'body-1');
1318
- expect(tfoot).toHaveAttribute('data-testid', 'tfoot');
1319
- expect(tfoot).toHaveAttribute('id', 'foot-1');
1320
- });
1321
- });
1322
1235
  });
@@ -13,24 +13,11 @@ export interface TableBodyProps extends BaseProps<HTMLTableSectionElement> {
13
13
  children: ReactNode;
14
14
  }
15
15
 
16
- export function TableBody({
17
- ref,
18
- children,
19
- xstyle,
20
- className,
21
- style,
22
- ...rest
23
- }: TableBodyProps) {
16
+ export function TableBody({ref, children, xstyle}: TableBodyProps) {
24
17
  return (
25
18
  <tbody
26
19
  ref={ref}
27
- {...mergeProps(
28
- themeProps('table-body'),
29
- stylex.props(xstyle),
30
- className,
31
- style,
32
- )}
33
- {...rest}>
20
+ {...mergeProps(themeProps('table-body'), stylex.props(xstyle))}>
34
21
  {children}
35
22
  </tbody>
36
23
  );