@astryxdesign/core 0.7.4 → 0.7.5-canary.0026f37

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 (515) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +2 -2
  2. package/dist/AlertDialog/index.d.ts +4 -4
  3. package/dist/AlertDialog/useImperativeAlertDialog.d.ts +1 -1
  4. package/dist/AppShell/AppShell.d.ts +4 -4
  5. package/dist/AppShell/index.d.ts +4 -4
  6. package/dist/AspectRatio/AspectRatio.d.ts +1 -1
  7. package/dist/AspectRatio/index.d.ts +2 -2
  8. package/dist/Avatar/Avatar.d.ts +2 -2
  9. package/dist/Avatar/AvatarStatusDot.d.ts +2 -2
  10. package/dist/Avatar/index.d.ts +4 -4
  11. package/dist/AvatarGroup/AvatarGroup.d.ts +2 -2
  12. package/dist/AvatarGroup/AvatarGroupContext.d.ts +1 -1
  13. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +1 -1
  14. package/dist/AvatarGroup/index.d.ts +6 -6
  15. package/dist/Badge/Badge.d.ts +2 -2
  16. package/dist/Badge/index.d.ts +2 -2
  17. package/dist/Banner/Banner.d.ts +4 -4
  18. package/dist/Banner/index.d.ts +2 -2
  19. package/dist/Blockquote/Blockquote.d.ts +1 -1
  20. package/dist/Blockquote/index.d.ts +2 -2
  21. package/dist/BottomSheet/BottomSheet.d.ts +10 -6
  22. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  23. package/dist/BottomSheet/BottomSheet.js +12 -1
  24. package/dist/BottomSheet/BottomSheetPanel.d.ts +3 -3
  25. package/dist/BottomSheet/BottomSheetSwitcher.d.ts +1 -1
  26. package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts +2 -2
  27. package/dist/BottomSheet/index.d.ts +4 -4
  28. package/dist/Breadcrumbs/BreadcrumbItem.d.ts +4 -4
  29. package/dist/Breadcrumbs/Breadcrumbs.d.ts +2 -2
  30. package/dist/Breadcrumbs/index.d.ts +12 -12
  31. package/dist/Button/Button.d.ts +4 -4
  32. package/dist/Button/index.d.ts +2 -2
  33. package/dist/ButtonGroup/ButtonGroup.d.ts +4 -4
  34. package/dist/ButtonGroup/index.d.ts +4 -4
  35. package/dist/Calendar/Calendar.d.ts +3 -3
  36. package/dist/Calendar/dayCellUtils.d.ts +1 -1
  37. package/dist/Calendar/getInitialFocusDate.d.ts +2 -2
  38. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +1 -1
  39. package/dist/Calendar/hooks/index.d.ts +6 -6
  40. package/dist/Calendar/hooks/useCalendarConstraints.d.ts +2 -2
  41. package/dist/Calendar/hooks/useCalendarDays.d.ts +2 -2
  42. package/dist/Calendar/hooks/useCalendarNavigation.d.ts +2 -2
  43. package/dist/Calendar/index.d.ts +5 -5
  44. package/dist/Calendar/utils.d.ts +1 -1
  45. package/dist/Card/Card.d.ts +4 -4
  46. package/dist/Card/index.d.ts +2 -2
  47. package/dist/Carousel/Carousel.d.ts +2 -2
  48. package/dist/Carousel/index.d.ts +2 -2
  49. package/dist/Center/Center.d.ts +2 -2
  50. package/dist/Center/index.d.ts +2 -2
  51. package/dist/Chat/ChatComposer.d.ts +1 -1
  52. package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
  53. package/dist/Chat/ChatComposerInput.d.ts +4 -4
  54. package/dist/Chat/ChatDictationButton.d.ts +2 -2
  55. package/dist/Chat/ChatLayout.d.ts +1 -1
  56. package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
  57. package/dist/Chat/ChatMessage.d.ts +2 -2
  58. package/dist/Chat/ChatMessageBubble.d.ts +2 -2
  59. package/dist/Chat/ChatMessageList.d.ts +3 -3
  60. package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
  61. package/dist/Chat/ChatSendButton.d.ts +1 -1
  62. package/dist/Chat/ChatSystemMessage.d.ts +1 -1
  63. package/dist/Chat/ChatTokenizedText.d.ts +2 -2
  64. package/dist/Chat/ChatToolCalls.d.ts +1 -1
  65. package/dist/Chat/index.d.ts +43 -43
  66. package/dist/Chat/useChatComposerTokens.d.ts +1 -1
  67. package/dist/Chat/useChatDictation.d.ts +1 -1
  68. package/dist/Chat/useChatPasteAsToken.d.ts +1 -1
  69. package/dist/Chat/useTriggerMenu.d.ts +2 -2
  70. package/dist/CheckboxInput/CheckboxInput.d.ts +4 -4
  71. package/dist/CheckboxInput/index.d.ts +2 -2
  72. package/dist/CheckboxList/CheckboxList.d.ts +4 -4
  73. package/dist/CheckboxList/CheckboxListItem.d.ts +2 -2
  74. package/dist/CheckboxList/index.d.ts +4 -4
  75. package/dist/Citation/Citation.d.ts +1 -1
  76. package/dist/Citation/index.d.ts +2 -2
  77. package/dist/ClickableCard/ClickableCard.d.ts +3 -3
  78. package/dist/ClickableCard/index.d.ts +2 -2
  79. package/dist/Code/Code.d.ts +1 -1
  80. package/dist/Code/index.d.ts +1 -1
  81. package/dist/CodeBlock/CodeBlock.d.ts +2 -2
  82. package/dist/CodeBlock/highlightRanges.d.ts +1 -1
  83. package/dist/CodeBlock/index.d.ts +8 -8
  84. package/dist/Collapsible/Collapsible.d.ts +2 -2
  85. package/dist/Collapsible/CollapsibleGroup.d.ts +2 -2
  86. package/dist/Collapsible/index.d.ts +7 -7
  87. package/dist/CommandPalette/CommandPalette.d.ts +2 -2
  88. package/dist/CommandPalette/CommandPaletteContext.d.ts +1 -1
  89. package/dist/CommandPalette/CommandPaletteEmpty.d.ts +1 -1
  90. package/dist/CommandPalette/CommandPaletteFooter.d.ts +1 -1
  91. package/dist/CommandPalette/CommandPaletteGroup.d.ts +1 -1
  92. package/dist/CommandPalette/CommandPaletteInput.d.ts +1 -1
  93. package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
  94. package/dist/CommandPalette/CommandPaletteList.d.ts +1 -1
  95. package/dist/CommandPalette/index.d.ts +16 -16
  96. package/dist/ComplexSelector/ComplexSelector.d.ts +5 -5
  97. package/dist/ComplexSelector/index.d.ts +1 -1
  98. package/dist/ContextMenu/ContextMenu.d.ts +4 -4
  99. package/dist/ContextMenu/index.d.ts +9 -9
  100. package/dist/DateInput/DateInput.d.ts +7 -7
  101. package/dist/DateInput/MonthScroller.d.ts +1 -1
  102. package/dist/DateInput/NativeDateField.d.ts +1 -1
  103. package/dist/DateInput/TouchDateField.d.ts +1 -1
  104. package/dist/DateInput/index.d.ts +2 -2
  105. package/dist/DateInput/monthGeometry.d.ts +1 -1
  106. package/dist/DateRangeInput/DateRangeInput.d.ts +6 -6
  107. package/dist/DateRangeInput/index.d.ts +2 -2
  108. package/dist/DateTimeInput/DateTimeInput.d.ts +6 -6
  109. package/dist/DateTimeInput/NativeDateSegment.d.ts +3 -3
  110. package/dist/DateTimeInput/NativeTimeSegment.d.ts +4 -4
  111. package/dist/DateTimeInput/TouchDateTimeField.d.ts +1 -1
  112. package/dist/DateTimeInput/index.d.ts +2 -2
  113. package/dist/Dialog/Dialog.d.ts +3 -3
  114. package/dist/Dialog/DialogHeader.d.ts +1 -1
  115. package/dist/Dialog/index.d.ts +6 -6
  116. package/dist/Dialog/useImperativeDialog.d.ts +1 -1
  117. package/dist/Divider/Divider.d.ts +2 -2
  118. package/dist/Divider/index.d.ts +2 -2
  119. package/dist/Drawer/Drawer.d.ts +3 -3
  120. package/dist/Drawer/DrawerHeader.d.ts +1 -1
  121. package/dist/Drawer/index.d.ts +4 -4
  122. package/dist/DropdownMenu/DropdownMenu.d.ts +5 -5
  123. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +2 -2
  124. package/dist/DropdownMenu/DropdownMenuDivider.d.ts +1 -1
  125. package/dist/DropdownMenu/DropdownMenuGroup.d.ts +1 -1
  126. package/dist/DropdownMenu/DropdownMenuItem.d.ts +2 -2
  127. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
  128. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +2 -2
  129. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +2 -2
  130. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts +1 -1
  131. package/dist/DropdownMenu/index.d.ts +10 -10
  132. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +2 -2
  133. package/dist/DropdownMenu/renderDropdownItems.d.ts +1 -1
  134. package/dist/DropdownMenu/useMenuDrillIn.d.ts +1 -1
  135. package/dist/EmptyState/EmptyState.d.ts +1 -1
  136. package/dist/EmptyState/index.d.ts +2 -2
  137. package/dist/Field/Field.d.ts +5 -5
  138. package/dist/Field/FieldLabel.d.ts +2 -2
  139. package/dist/Field/PanelSearchInput.d.ts +1 -1
  140. package/dist/Field/fieldInputFamily.testing.d.ts +1 -1
  141. package/dist/Field/fieldParts.d.ts +1 -1
  142. package/dist/Field/index.d.ts +10 -10
  143. package/dist/Field/inputDisabledFocus.d.ts +14 -0
  144. package/dist/Field/inputDisabledFocus.d.ts.map +1 -0
  145. package/dist/Field/inputDisabledFocus.js +19 -0
  146. package/dist/FieldStatus/FieldStatus.d.ts +3 -3
  147. package/dist/FieldStatus/index.d.ts +2 -2
  148. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts +1 -1
  149. package/dist/FileInput/FileInput.d.ts +4 -4
  150. package/dist/FileInput/index.d.ts +2 -2
  151. package/dist/FormLayout/FormLayout.d.ts +2 -2
  152. package/dist/FormLayout/index.d.ts +4 -4
  153. package/dist/Grid/Grid.d.ts +3 -3
  154. package/dist/Grid/GridSpan.d.ts +1 -1
  155. package/dist/Grid/index.d.ts +4 -4
  156. package/dist/HStack/HStack.d.ts +2 -2
  157. package/dist/HStack/index.d.ts +1 -1
  158. package/dist/Heading/Heading.d.ts +4 -4
  159. package/dist/Heading/index.d.ts +1 -1
  160. package/dist/HoverCard/HoverCard.d.ts +4 -4
  161. package/dist/HoverCard/index.d.ts +4 -4
  162. package/dist/HoverCard/useHoverCard.d.ts +2 -2
  163. package/dist/Icon/Icon.d.ts +3 -3
  164. package/dist/Icon/IconDefaultSizeContext.d.ts +1 -1
  165. package/dist/Icon/defaultIcons.d.ts +1 -1
  166. package/dist/Icon/globalIconRegistry.d.ts +1 -1
  167. package/dist/Icon/index.d.ts +5 -5
  168. package/dist/Icon/useIcon.d.ts +1 -1
  169. package/dist/IconButton/IconButton.d.ts +1 -1
  170. package/dist/IconButton/index.d.ts +2 -2
  171. package/dist/Indicator/CheckIndicator.d.ts +1 -1
  172. package/dist/Indicator/CheckboxIndicator.d.ts +1 -1
  173. package/dist/Indicator/RadioIndicator.d.ts +1 -1
  174. package/dist/Indicator/index.d.ts +8 -8
  175. package/dist/Indicator/indicatorRegistry.d.ts +2 -2
  176. package/dist/Indicator/types.d.ts +1 -1
  177. package/dist/Indicator/useIndicator.d.ts +2 -2
  178. package/dist/InputGroup/InputGroup.d.ts +2 -2
  179. package/dist/InputGroup/InputGroupText.d.ts +1 -1
  180. package/dist/InputGroup/index.d.ts +6 -6
  181. package/dist/InteractiveRoleContext/InteractiveRoleContext.d.ts +1 -1
  182. package/dist/InteractiveRoleContext/index.d.ts +1 -1
  183. package/dist/Item/Item.d.ts +1 -1
  184. package/dist/Item/ItemSwipeLayer.d.ts +2 -2
  185. package/dist/Item/index.d.ts +2 -2
  186. package/dist/Kbd/Kbd.d.ts +1 -1
  187. package/dist/Kbd/index.d.ts +2 -2
  188. package/dist/Layer/LayerProvider.d.ts +1 -1
  189. package/dist/Layer/index.d.ts +18 -18
  190. package/dist/Layer/layerInset.d.ts +1 -1
  191. package/dist/Layer/layerSlideRules.d.ts +1 -1
  192. package/dist/Layer/modalOutlet.d.ts +1 -1
  193. package/dist/Layer/modalOutlet.js +1 -1
  194. package/dist/Layer/useLayerDismissal.d.ts +1 -1
  195. package/dist/Layout/Layout.d.ts +2 -2
  196. package/dist/Layout/LayoutContent.d.ts +2 -2
  197. package/dist/Layout/LayoutFooter.d.ts +2 -2
  198. package/dist/Layout/LayoutHeader.d.ts +2 -2
  199. package/dist/Layout/LayoutPanel.d.ts +3 -3
  200. package/dist/Layout/index.d.ts +29 -29
  201. package/dist/Layout/padding.stylex.d.ts +1 -1
  202. package/dist/Lightbox/Lightbox.d.ts +1 -1
  203. package/dist/Lightbox/index.d.ts +4 -4
  204. package/dist/Lightbox/useLightbox.d.ts +1 -1
  205. package/dist/Link/Link.d.ts +3 -3
  206. package/dist/Link/LinkContext.d.ts +1 -1
  207. package/dist/Link/LinkProvider.d.ts +1 -1
  208. package/dist/Link/index.d.ts +8 -8
  209. package/dist/Link/useLinkComponent.d.ts +1 -1
  210. package/dist/List/List.d.ts +3 -3
  211. package/dist/List/ListItem.d.ts +2 -2
  212. package/dist/List/index.d.ts +4 -4
  213. package/dist/Markdown/Markdown.d.ts +4 -4
  214. package/dist/Markdown/headingProjection.d.ts +3 -3
  215. package/dist/Markdown/index.d.ts +7 -7
  216. package/dist/Markdown/parser/index.d.ts +3 -3
  217. package/dist/Markdown/parser.d.ts +3 -3
  218. package/dist/Markdown/plugin-renderer/MarkdownPluginNodeRenderer.d.ts +1 -1
  219. package/dist/Markdown/plugin-renderer/index.d.ts +2 -2
  220. package/dist/Markdown/plugins/frontmatter.d.ts +2 -2
  221. package/dist/Markdown/plugins/headingLinks.d.ts +2 -2
  222. package/dist/Markdown/plugins/index.d.ts +14 -14
  223. package/dist/Markdown/plugins/protocol.d.ts +1 -1
  224. package/dist/Markdown/plugins/semanticFence.d.ts +2 -2
  225. package/dist/Markdown/plugins/softBreaks.d.ts +1 -1
  226. package/dist/Markdown/plugins/sourceDecoration.d.ts +2 -2
  227. package/dist/Markdown/plugins/sourceLines.d.ts +1 -1
  228. package/dist/Markdown/plugins/textTransform.d.ts +2 -2
  229. package/dist/Markdown/remark.d.ts +1 -1
  230. package/dist/Markdown/utils.d.ts +4 -4
  231. package/dist/MetadataList/MetadataList.d.ts +2 -2
  232. package/dist/MetadataList/MetadataListItem.d.ts +1 -1
  233. package/dist/MetadataList/index.d.ts +5 -5
  234. package/dist/MobileNav/MobileNav.d.ts +1 -1
  235. package/dist/MobileNav/MobileNavToggle.d.ts +1 -1
  236. package/dist/MobileNav/index.d.ts +4 -4
  237. package/dist/MoreMenu/MoreMenu.d.ts +4 -4
  238. package/dist/MoreMenu/index.d.ts +1 -1
  239. package/dist/MultiSelector/MultiSelector.d.ts +7 -7
  240. package/dist/MultiSelector/hooks.d.ts +1 -1
  241. package/dist/MultiSelector/index.d.ts +3 -3
  242. package/dist/MultiSelector/types.d.ts +1 -1
  243. package/dist/NavIcon/NavIcon.d.ts +1 -1
  244. package/dist/NavIcon/index.d.ts +2 -2
  245. package/dist/NavMenu/NavHeadingMenu.d.ts +2 -2
  246. package/dist/NavMenu/NavHeadingMenuItem.d.ts +2 -2
  247. package/dist/NavMenu/index.d.ts +6 -6
  248. package/dist/NumberInput/NumberInput.d.ts +5 -5
  249. package/dist/NumberInput/index.d.ts +2 -2
  250. package/dist/NumberInput/numberInputCommit.d.ts +1 -1
  251. package/dist/NumberInput/numberParser.d.ts +1 -1
  252. package/dist/Outline/Outline.d.ts +3 -3
  253. package/dist/Outline/index.d.ts +7 -7
  254. package/dist/Outline/parseOutlineFromMarkdown.d.ts +2 -2
  255. package/dist/Outline/useOutlineFromDOM.d.ts +1 -1
  256. package/dist/Outline/useOutlineFromMarkdown.d.ts +3 -3
  257. package/dist/Outline/useScrollSpy.d.ts +1 -1
  258. package/dist/OverflowList/OverflowList.d.ts +2 -2
  259. package/dist/OverflowList/index.d.ts +2 -2
  260. package/dist/Overlay/Overlay.d.ts +2 -2
  261. package/dist/Overlay/index.d.ts +5 -5
  262. package/dist/Overlay/useOverlay.d.ts +1 -1
  263. package/dist/Pagination/Pagination.d.ts +2 -2
  264. package/dist/Pagination/index.d.ts +2 -2
  265. package/dist/Popover/Popover.d.ts +3 -3
  266. package/dist/Popover/index.d.ts +4 -4
  267. package/dist/Popover/usePopover.d.ts +2 -2
  268. package/dist/PowerSearch/PowerSearch.d.ts +5 -5
  269. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +2 -2
  270. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  271. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  272. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +2 -2
  273. package/dist/PowerSearch/formatFilterValue.d.ts +3 -3
  274. package/dist/PowerSearch/index.d.ts +8 -8
  275. package/dist/PowerSearch/resolveDateTimeRangePart.d.ts +1 -1
  276. package/dist/PowerSearch/resolveOperatorLabel.d.ts +2 -2
  277. package/dist/PowerSearch/types.d.ts +1 -1
  278. package/dist/PowerSearch/useInternalConfig.d.ts +1 -1
  279. package/dist/PowerSearch/usePowerSearchConfig.d.ts +1 -1
  280. package/dist/PowerSearch/usePowerSearchSource.d.ts +3 -3
  281. package/dist/PowerSearch/utils.d.ts +3 -3
  282. package/dist/ProgressBar/ProgressBar.d.ts +2 -2
  283. package/dist/ProgressBar/index.d.ts +2 -2
  284. package/dist/RadioList/RadioList.d.ts +3 -3
  285. package/dist/RadioList/RadioListItem.d.ts +2 -2
  286. package/dist/RadioList/index.d.ts +4 -4
  287. package/dist/Resizable/ResizeHandle.d.ts +2 -2
  288. package/dist/Resizable/index.d.ts +6 -6
  289. package/dist/Resizable/useResizable.d.ts +2 -2
  290. package/dist/Resizable/utils.d.ts +3 -3
  291. package/dist/ScrollableArea/ScrollableArea.d.ts +3 -3
  292. package/dist/ScrollableArea/index.d.ts +4 -4
  293. package/dist/Section/Section.d.ts +3 -3
  294. package/dist/Section/index.d.ts +2 -2
  295. package/dist/SegmentedControl/SegmentedControl.d.ts +2 -2
  296. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  297. package/dist/SegmentedControl/index.d.ts +5 -5
  298. package/dist/SelectableCard/SelectableCard.d.ts +3 -3
  299. package/dist/SelectableCard/index.d.ts +2 -2
  300. package/dist/Selector/Selector.d.ts +8 -8
  301. package/dist/Selector/SelectorOption.d.ts +1 -1
  302. package/dist/Selector/hooks.d.ts +1 -1
  303. package/dist/Selector/index.d.ts +4 -4
  304. package/dist/Selector/types.d.ts +1 -1
  305. package/dist/Selector/useSelectorPresentation.d.ts +2 -2
  306. package/dist/Selector/utils.d.ts +1 -1
  307. package/dist/SideNav/SideNav.d.ts +3 -3
  308. package/dist/SideNav/SideNavCollapseButton.d.ts +3 -3
  309. package/dist/SideNav/SideNavHeading.d.ts +2 -2
  310. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  311. package/dist/SideNav/SideNavHeading.js +34 -0
  312. package/dist/SideNav/SideNavItem.d.ts +4 -4
  313. package/dist/SideNav/SideNavSection.d.ts +1 -1
  314. package/dist/SideNav/index.d.ts +14 -14
  315. package/dist/SizeContext/index.d.ts +1 -1
  316. package/dist/Skeleton/Skeleton.d.ts +1 -1
  317. package/dist/Skeleton/index.d.ts +2 -2
  318. package/dist/Slider/Slider.d.ts +3 -3
  319. package/dist/Slider/index.d.ts +2 -2
  320. package/dist/Spinner/Spinner.d.ts +1 -1
  321. package/dist/Spinner/index.d.ts +2 -2
  322. package/dist/Stack/Stack.d.ts +3 -3
  323. package/dist/Stack/StackItem.d.ts +2 -2
  324. package/dist/Stack/index.d.ts +6 -6
  325. package/dist/Stack/stack.stylex.d.ts +1 -1
  326. package/dist/StatusDot/StatusDot.d.ts +2 -2
  327. package/dist/StatusDot/index.d.ts +2 -2
  328. package/dist/Stepper/Step.d.ts +2 -2
  329. package/dist/Stepper/Step.d.ts.map +1 -1
  330. package/dist/Stepper/Step.js +3 -3
  331. package/dist/Stepper/Stepper.d.ts +2 -2
  332. package/dist/Stepper/index.d.ts +7 -7
  333. package/dist/Switch/Switch.d.ts +4 -4
  334. package/dist/Switch/index.d.ts +2 -2
  335. package/dist/TabList/Tab.d.ts +2 -2
  336. package/dist/TabList/TabList.d.ts +3 -3
  337. package/dist/TabList/TabMenu.d.ts +2 -2
  338. package/dist/TabList/index.d.ts +8 -8
  339. package/dist/Table/BaseTable.d.ts +1 -1
  340. package/dist/Table/Table.d.ts +1 -1
  341. package/dist/Table/TableBody.d.ts +1 -1
  342. package/dist/Table/TableCell.d.ts +3 -3
  343. package/dist/Table/TableContext.d.ts +1 -1
  344. package/dist/Table/TableFooter.d.ts +1 -1
  345. package/dist/Table/TableHeader.d.ts +1 -1
  346. package/dist/Table/TableHeaderCell.d.ts +3 -3
  347. package/dist/Table/TableRow.d.ts +2 -2
  348. package/dist/Table/TableSelectionToolbar.d.ts +2 -2
  349. package/dist/Table/columnUtils.d.ts +1 -1
  350. package/dist/Table/index.d.ts +54 -54
  351. package/dist/Table/plugins/columnResize/index.d.ts +2 -2
  352. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts +1 -1
  353. package/dist/Table/plugins/columnSettings/index.d.ts +4 -4
  354. package/dist/Table/plugins/columnSettings/useTableColumnSettings.d.ts +2 -2
  355. package/dist/Table/plugins/columnSettings/useTableColumnSettingsState.d.ts +1 -1
  356. package/dist/Table/plugins/filtering/index.d.ts +4 -4
  357. package/dist/Table/plugins/filtering/useTableFilterState.d.ts +1 -1
  358. package/dist/Table/plugins/filtering/useTableFiltering.d.ts +2 -2
  359. package/dist/Table/plugins/groupedRows/index.d.ts +2 -2
  360. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  361. package/dist/Table/plugins/pagination/index.d.ts +3 -3
  362. package/dist/Table/plugins/pagination/useTablePagination.d.ts +1 -1
  363. package/dist/Table/plugins/rowExpansion/index.d.ts +2 -2
  364. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +1 -1
  365. package/dist/Table/plugins/rowIndex/index.d.ts +2 -2
  366. package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts +1 -1
  367. package/dist/Table/plugins/rowStatus/index.d.ts +2 -2
  368. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +2 -2
  369. package/dist/Table/plugins/selection/index.d.ts +4 -4
  370. package/dist/Table/plugins/selection/useTableSelection.d.ts +1 -1
  371. package/dist/Table/plugins/selection/useTableSelectionState.d.ts +1 -1
  372. package/dist/Table/plugins/sortable/index.d.ts +4 -4
  373. package/dist/Table/plugins/sortable/useTableSortable.d.ts +1 -1
  374. package/dist/Table/plugins/sortable/useTableSortableState.d.ts +1 -1
  375. package/dist/Table/plugins/stickyColumns/index.d.ts +2 -2
  376. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts +1 -1
  377. package/dist/Table/plugins/tree/index.d.ts +4 -4
  378. package/dist/Table/plugins/tree/useTableTreeData.d.ts +1 -1
  379. package/dist/Table/plugins/tree/useTableTreeState.d.ts +1 -1
  380. package/dist/Table/tableContextMenu.d.ts +2 -2
  381. package/dist/Table/types.d.ts +3 -3
  382. package/dist/Table/useBaseTablePlugins.d.ts +1 -1
  383. package/dist/Table/useTableCellStyles.d.ts +2 -2
  384. package/dist/Table/utils.d.ts +2 -2
  385. package/dist/Text/Text.d.ts +3 -3
  386. package/dist/Text/index.d.ts +4 -4
  387. package/dist/TextArea/TextArea.d.ts +10 -8
  388. package/dist/TextArea/TextArea.d.ts.map +1 -1
  389. package/dist/TextArea/TextArea.js +14 -11
  390. package/dist/TextArea/index.d.ts +2 -2
  391. package/dist/TextInput/TextInput.d.ts +11 -9
  392. package/dist/TextInput/TextInput.d.ts.map +1 -1
  393. package/dist/TextInput/TextInput.js +20 -11
  394. package/dist/TextInput/index.d.ts +2 -2
  395. package/dist/Thumbnail/Thumbnail.d.ts +1 -1
  396. package/dist/Thumbnail/index.d.ts +2 -2
  397. package/dist/TimeInput/TimeInput.d.ts +6 -6
  398. package/dist/TimeInput/TouchTimeField.d.ts +1 -1
  399. package/dist/TimeInput/index.d.ts +3 -3
  400. package/dist/Timer/Timer.d.ts +2 -2
  401. package/dist/Timer/index.d.ts +2 -2
  402. package/dist/Timestamp/Timestamp.d.ts +3 -3
  403. package/dist/Timestamp/TimestampHoverCard.d.ts +1 -1
  404. package/dist/Timestamp/formatInstant.d.ts +2 -2
  405. package/dist/Timestamp/formatRelativeTime.d.ts +1 -1
  406. package/dist/Timestamp/index.d.ts +3 -3
  407. package/dist/Timestamp/tooltipEntries.d.ts +2 -2
  408. package/dist/Toast/Toast.d.ts +2 -2
  409. package/dist/Toast/ToastContext.d.ts +1 -1
  410. package/dist/Toast/ToastViewport.d.ts +2 -2
  411. package/dist/Toast/index.d.ts +6 -6
  412. package/dist/Toast/useToast.d.ts +1 -1
  413. package/dist/ToggleButton/ToggleButton.d.ts +3 -3
  414. package/dist/ToggleButton/ToggleButtonGroup.d.ts +1 -1
  415. package/dist/ToggleButton/index.d.ts +4 -4
  416. package/dist/Token/Token.d.ts +2 -2
  417. package/dist/Token/TokenLink.d.ts +1 -1
  418. package/dist/Token/index.d.ts +2 -2
  419. package/dist/Tokenizer/Tokenizer.d.ts +6 -6
  420. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  421. package/dist/Tokenizer/Tokenizer.js +44 -40
  422. package/dist/Tokenizer/index.d.ts +2 -2
  423. package/dist/Tokenizer/useEndLaneReserve.d.ts +3 -2
  424. package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -1
  425. package/dist/Tokenizer/useEndLaneReserve.js +3 -2
  426. package/dist/Toolbar/Toolbar.d.ts +4 -4
  427. package/dist/Toolbar/index.d.ts +2 -2
  428. package/dist/Tooltip/Tooltip.d.ts +3 -3
  429. package/dist/Tooltip/index.d.ts +4 -4
  430. package/dist/Tooltip/useTooltip.d.ts +2 -2
  431. package/dist/TopNav/TopNav.d.ts +1 -1
  432. package/dist/TopNav/TopNavHeading.d.ts +2 -2
  433. package/dist/TopNav/TopNavItem.d.ts +3 -3
  434. package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
  435. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  436. package/dist/TopNav/TopNavMegaMenuItem.d.ts +2 -2
  437. package/dist/TopNav/TopNavMenu.d.ts +1 -1
  438. package/dist/TopNav/index.d.ts +16 -16
  439. package/dist/TreeList/TreeList.d.ts +3 -3
  440. package/dist/TreeList/TreeListItem.d.ts +1 -1
  441. package/dist/TreeList/TreeListTypes.d.ts +1 -1
  442. package/dist/TreeList/index.d.ts +3 -3
  443. package/dist/Typeahead/BaseTypeahead.d.ts +2 -2
  444. package/dist/Typeahead/Typeahead.d.ts +6 -6
  445. package/dist/Typeahead/TypeaheadItem.d.ts +2 -2
  446. package/dist/Typeahead/createStaticSource.d.ts +1 -1
  447. package/dist/Typeahead/index.d.ts +9 -9
  448. package/dist/Typeahead/utils.d.ts +3 -3
  449. package/dist/VStack/VStack.d.ts +2 -2
  450. package/dist/VStack/index.d.ts +1 -1
  451. package/dist/VisuallyHidden/VisuallyHidden.d.ts +24 -6
  452. package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  453. package/dist/VisuallyHidden/VisuallyHidden.js +24 -5
  454. package/dist/VisuallyHidden/index.d.ts +2 -2
  455. package/dist/astryx.css +6 -13
  456. package/dist/hooks/index.d.ts +52 -52
  457. package/dist/hooks/useAutoMediaMode.d.ts +1 -1
  458. package/dist/hooks/useInputContainer.d.ts +1 -1
  459. package/dist/hooks/useInputStatusIcon.d.ts +3 -3
  460. package/dist/hooks/useMenuPress.d.ts +1 -1
  461. package/dist/hooks/usePressFeedback.d.ts +1 -1
  462. package/dist/hooks/useScrollableArea.d.ts +1 -1
  463. package/dist/i18n/InternationalizationContext.d.ts +2 -2
  464. package/dist/i18n/InternationalizationProvider.d.ts +1 -1
  465. package/dist/i18n/index.d.ts +12 -12
  466. package/dist/i18n/resolve.d.ts +1 -1
  467. package/dist/i18n/useLocale.d.ts +1 -1
  468. package/dist/index.d.ts +111 -111
  469. package/dist/theme/Theme.d.ts +2 -2
  470. package/dist/theme/contrast.d.ts +1 -1
  471. package/dist/theme/defineTheme.d.ts +12 -12
  472. package/dist/theme/domainTokens/index.d.ts +6 -6
  473. package/dist/theme/generateThemeRules.d.ts +1 -1
  474. package/dist/theme/index.d.ts +31 -31
  475. package/dist/theme/localTokens.d.ts +1 -1
  476. package/dist/theme/mergeComponents.d.ts +1 -1
  477. package/dist/theme/onMediaTokens.d.ts +1 -1
  478. package/dist/theme/resolveThemeValues.d.ts +7 -7
  479. package/dist/theme/syntax/SyntaxTheme.d.ts +1 -1
  480. package/dist/theme/syntax/index.d.ts +7 -7
  481. package/dist/theme/syntax/presets.d.ts +1 -1
  482. package/dist/theme/themeAdaptations.d.ts +5 -5
  483. package/dist/theme/themeRegistry.d.ts +1 -1
  484. package/dist/theme/tokens.d.ts +1 -1
  485. package/dist/theme/types.d.ts +1 -1
  486. package/dist/theme/useTheme.d.ts +2 -2
  487. package/dist/utils/dateParser.d.ts +3 -3
  488. package/dist/utils/groupItems.d.ts +1 -1
  489. package/dist/utils/index.d.ts +29 -29
  490. package/dist/utils/plainDate.d.ts +3 -3
  491. package/package.json +5 -5
  492. package/src/Badge/Badge.doc.mjs +2 -1
  493. package/src/BottomSheet/BottomSheet.tsx +12 -1
  494. package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +82 -0
  495. package/src/Field/inputDisabledFocus.ts +28 -0
  496. package/src/Icon/Icon.spec.md +40 -29
  497. package/src/Layer/modalOutlet.ts +1 -1
  498. package/src/SideNav/SideNav.test.tsx +15 -6
  499. package/src/SideNav/SideNavHeading.tsx +41 -0
  500. package/src/Stepper/Step.tsx +7 -0
  501. package/src/Stepper/Stepper.test.tsx +33 -0
  502. package/src/TextArea/TextArea.doc.mjs +6 -6
  503. package/src/TextArea/TextArea.test.tsx +65 -6
  504. package/src/TextArea/TextArea.tsx +26 -14
  505. package/src/TextInput/TextInput.doc.mjs +8 -8
  506. package/src/TextInput/TextInput.test.tsx +72 -6
  507. package/src/TextInput/TextInput.tsx +32 -14
  508. package/src/Toast/ToastViewport.modalHost.test.tsx +139 -4
  509. package/src/Tokenizer/Tokenizer.test.tsx +26 -8
  510. package/src/Tokenizer/Tokenizer.tsx +65 -72
  511. package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +471 -0
  512. package/src/Tokenizer/useEndLaneReserve.ts +3 -2
  513. package/src/VisuallyHidden/VisuallyHidden.doc.mjs +1 -1
  514. package/src/VisuallyHidden/VisuallyHidden.test.tsx +39 -0
  515. package/src/VisuallyHidden/VisuallyHidden.tsx +38 -5
@@ -8,9 +8,9 @@
8
8
  * - /packages/core/src/utils/dateParser.test.ts
9
9
  * - /packages/core/src/utils/index.ts
10
10
  */
11
- import { type PlainDate } from './plainDate';
12
- import type { Locale } from '../i18n/types';
13
- export { plainDateFromISO as parseISO, plainDateToISO as dateToISO, } from './plainDate';
11
+ import { type PlainDate } from './plainDate.js';
12
+ import type { Locale } from '../i18n/types.js';
13
+ export { plainDateFromISO as parseISO, plainDateToISO as dateToISO, } from './plainDate.js';
14
14
  /**
15
15
  * Detects if the locale uses day-first date format (DD/MM/YYYY).
16
16
  * US and a few others use month-first (MM/DD/YYYY).
@@ -5,7 +5,7 @@
5
5
  * @position Shared utility; used by CommandPalette, trigger menu, and
6
6
  * any future component that needs to group search results by category.
7
7
  */
8
- import type { SearchableItem } from '../Typeahead/types';
8
+ import type { SearchableItem } from '../Typeahead/types.js';
9
9
  /**
10
10
  * A group of items with an optional heading.
11
11
  * `heading` is null for ungrouped items.
@@ -4,33 +4,33 @@
4
4
  * @output Re-exports all utility functions and shared types
5
5
  * @position Package entry point for utils
6
6
  */
7
- export type { SizeValue } from './types';
8
- export type { ISODateString, DayOfWeek, PlainDate, DateRange } from './dateTypes';
9
- export { parseDateInput, dateToISO, parseISO, isLocaleDayFirst, } from './dateParser';
10
- export { plainDateCreate, plainDateFromISO, plainDateToISO, plainDateToDate, plainDateFromDate, plainDateToday, getDaysInMonth, plainDateDayOfWeek, plainDateAddMonths, plainDateAddDays, plainDateToInstant, plainDateFromInstant, plainDateIsBefore, plainDateIsAfter, plainDateIsEqual, plainDateMax, plainDateMin, plainDateIsInRange, plainDateSetFirstOfMonth, plainDateSetStartOfWeek, plainDateSetEndOfWeekExclusive, plainDateGetWeekNumber, plainDateFormat, formatSharedDate, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_SHORT_WITH_WEEKDAY, DATE_FORMAT_LONG, DATE_FORMAT_MONTH_YEAR, DATE_FORMAT_MONTH_ONLY, DATE_FORMAT_WEEKDAY_ONLY, DATE_FORMAT_SHORT, DATE_FORMAT_SHORT_WITH_YEAR, SHARED_DATE_FORMAT_OPTIONS, } from './plainDate';
11
- export type { SharedDateFormat } from './plainDate';
12
- export { parseISOTime, formatISOTime, formatDisplayTime12h, formatDisplayTime24h, parseTimeInput, compareTime, isTimeInRange, clampTime, adjustTime, createISOTimeString, } from './timeParser';
13
- export type { ISOTimeString, ParsedTime } from './timeParser';
14
- export { parseStyleKey } from './parseStyleKey';
15
- export { getKey, type Key, type KeyFallback } from './getKey';
16
- export { characterCount, firstCharacter, truncateCharacters } from './characters';
17
- export { mergeProps } from './mergeProps';
18
- export { mergeRefs } from './mergeRefs';
19
- export { isFocusDetached } from './focusReturn';
20
- export { composeEventHandlers } from './composeEventHandlers';
21
- export { themeProps, themeDataAttributes } from './themeProps';
22
- export type { ClassValue, ClassProps, ThemeDataAttributes, ThemeProps, } from './themeProps';
23
- export { groupItems, getItemGroup } from './groupItems';
24
- export type { ItemGroup, GroupItemsOptions } from './groupItems';
25
- export { observeResize, unobserveResize } from './sharedResizeObserver';
26
- export { isRenderable } from './isRenderable';
27
- export { getInputARIA } from './inputAria';
28
- export type { InputARIA, InputARIAInputGroup } from './inputAria';
29
- export { parseHex, parseRgb, parseColor, formatHex, formatColor, toGLFloats, } from './color';
30
- export type { RGBA } from './color';
31
- export { devWarn, devError, warnOnce, formatDevMessage } from './devWarning';
32
- export { rtlStyles } from './rtlStyles';
33
- export { focusOutlineStyles, focusOutlineProps } from './focusOutline.stylex';
34
- export { isImeKeyEvent } from './ime';
35
- export { interactionOverlayStyles } from './interactionOverlay.stylex';
7
+ export type { SizeValue } from './types.js';
8
+ export type { ISODateString, DayOfWeek, PlainDate, DateRange } from './dateTypes.js';
9
+ export { parseDateInput, dateToISO, parseISO, isLocaleDayFirst, } from './dateParser.js';
10
+ export { plainDateCreate, plainDateFromISO, plainDateToISO, plainDateToDate, plainDateFromDate, plainDateToday, getDaysInMonth, plainDateDayOfWeek, plainDateAddMonths, plainDateAddDays, plainDateToInstant, plainDateFromInstant, plainDateIsBefore, plainDateIsAfter, plainDateIsEqual, plainDateMax, plainDateMin, plainDateIsInRange, plainDateSetFirstOfMonth, plainDateSetStartOfWeek, plainDateSetEndOfWeekExclusive, plainDateGetWeekNumber, plainDateFormat, formatSharedDate, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_SHORT_WITH_WEEKDAY, DATE_FORMAT_LONG, DATE_FORMAT_MONTH_YEAR, DATE_FORMAT_MONTH_ONLY, DATE_FORMAT_WEEKDAY_ONLY, DATE_FORMAT_SHORT, DATE_FORMAT_SHORT_WITH_YEAR, SHARED_DATE_FORMAT_OPTIONS, } from './plainDate.js';
11
+ export type { SharedDateFormat } from './plainDate.js';
12
+ export { parseISOTime, formatISOTime, formatDisplayTime12h, formatDisplayTime24h, parseTimeInput, compareTime, isTimeInRange, clampTime, adjustTime, createISOTimeString, } from './timeParser.js';
13
+ export type { ISOTimeString, ParsedTime } from './timeParser.js';
14
+ export { parseStyleKey } from './parseStyleKey.js';
15
+ export { getKey, type Key, type KeyFallback } from './getKey.js';
16
+ export { characterCount, firstCharacter, truncateCharacters } from './characters.js';
17
+ export { mergeProps } from './mergeProps.js';
18
+ export { mergeRefs } from './mergeRefs.js';
19
+ export { isFocusDetached } from './focusReturn.js';
20
+ export { composeEventHandlers } from './composeEventHandlers.js';
21
+ export { themeProps, themeDataAttributes } from './themeProps.js';
22
+ export type { ClassValue, ClassProps, ThemeDataAttributes, ThemeProps, } from './themeProps.js';
23
+ export { groupItems, getItemGroup } from './groupItems.js';
24
+ export type { ItemGroup, GroupItemsOptions } from './groupItems.js';
25
+ export { observeResize, unobserveResize } from './sharedResizeObserver.js';
26
+ export { isRenderable } from './isRenderable.js';
27
+ export { getInputARIA } from './inputAria.js';
28
+ export type { InputARIA, InputARIAInputGroup } from './inputAria.js';
29
+ export { parseHex, parseRgb, parseColor, formatHex, formatColor, toGLFloats, } from './color.js';
30
+ export type { RGBA } from './color.js';
31
+ export { devWarn, devError, warnOnce, formatDevMessage } from './devWarning.js';
32
+ export { rtlStyles } from './rtlStyles.js';
33
+ export { focusOutlineStyles, focusOutlineProps } from './focusOutline.stylex.js';
34
+ export { isImeKeyEvent } from './ime.js';
35
+ export { interactionOverlayStyles } from './interactionOverlay.stylex.js';
36
36
  //# sourceMappingURL=index.d.ts.map
@@ -4,9 +4,9 @@
4
4
  * @output Immutable PlainDate records and pure date arithmetic
5
5
  * @position Shared utility; replaces scattered Date usage across Calendar hooks
6
6
  */
7
- import type { ISODateString, PlainDate } from './dateTypes';
8
- import type { Locale } from '../i18n/types';
9
- export type { PlainDate } from './dateTypes';
7
+ import type { ISODateString, PlainDate } from './dateTypes.js';
8
+ import type { Locale } from '../i18n/types.js';
9
+ export type { PlainDate } from './dateTypes.js';
10
10
  export declare function plainDateCreate(year: number, month: number, day: number): PlainDate;
11
11
  export declare function plainDateFromISO(str: ISODateString): PlainDate;
12
12
  export declare function plainDateToISO(pd: PlainDate): ISODateString;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astryxdesign/core",
3
- "version": "0.7.4",
3
+ "version": "0.7.5-canary.0026f37",
4
4
  "displayName": "Astryx Core",
5
5
  "description": "The component library. Accessible, themeable React components with built-in spacing, dark mode, and StyleX styling.",
6
6
  "author": "Meta Open Source",
@@ -792,6 +792,8 @@
792
792
  "react-dom": ">=19.0.0"
793
793
  },
794
794
  "devDependencies": {
795
+ "@astryxdesign/a11y-spec": "0.7.5-canary.0026f37",
796
+ "@astryxdesign/cli": "0.7.5-canary.0026f37",
795
797
  "@babel/cli": "^7.29.7",
796
798
  "@babel/core": "^7.29.7",
797
799
  "@babel/preset-react": "^7.29.7",
@@ -802,16 +804,14 @@
802
804
  "@testing-library/jest-dom": "^6.6.0",
803
805
  "@testing-library/react": "^16.3.2",
804
806
  "@types/babel__core": "^7.20.5",
805
- "tailwindcss": "^4.3.2",
806
- "@astryxdesign/a11y-spec": "0.0.0",
807
- "@astryxdesign/cli": "0.7.4"
807
+ "tailwindcss": "^4.3.2"
808
808
  },
809
809
  "dependencies": {
810
810
  "intl-messageformat": "^11.2.9"
811
811
  },
812
812
  "scripts": {
813
813
  "postinstall": "node scripts/postinstall.mjs",
814
- "build": "node ../../scripts/clean-dist.mjs && pnpm build:i18n && pnpm build:esm && tsc --project tsconfig.build.json && pnpm build:css && node ../../scripts/check-no-dev-jsx.mjs && node ../../scripts/check-fully-specified.mjs",
814
+ "build": "node ../../scripts/clean-dist.mjs && pnpm build:i18n && pnpm build:esm && tsc --project tsconfig.build.json && node ../../scripts/add-declaration-extensions.mjs && pnpm build:css && node ../../scripts/check-no-dev-jsx.mjs && node ../../scripts/check-fully-specified.mjs",
815
815
  "build:i18n": "node ../../scripts/generate-i18n-runtime.mjs && node scripts/build-pseudo-locale.mjs",
816
816
  "build:esm": "babel src --out-dir dist --extensions .ts,.tsx --out-file-extension .js --ignore \"**/*.test.ts,**/*.test.tsx,**/__tests__/**,**/*.perf.test.*,**/*.doc.mjs,**/*.d.ts,**/*.css,**/*.css.d.ts\" --config-file ./babel.config.json",
817
817
  "build:css": "node ../../scripts/build-css.mjs",
@@ -18,6 +18,7 @@ export const docs = {
18
18
  {
19
19
  name: 'label',
20
20
  type: 'ReactNode',
21
+ required: true,
21
22
  description:
22
23
  'Badge text content. A badge is one line, so a label wider than the space available is cut with an ellipsis rather than escaping its container; a string or number label is also set as the badge\'s title so the full text stays reachable on hover.',
23
24
  },
@@ -93,7 +94,7 @@ export const docsZh = {
93
94
  description: '视觉样式变体。语义变体使用实色背景,非语义颜色变体使用浅色背景配彩色文字。',
94
95
  default: "'neutral'",
95
96
  },
96
- {name: 'label', type: 'ReactNode', description: '徽章文本内容。'},
97
+ {name: 'label', type: 'ReactNode', required: true, description: '徽章文本内容。'},
97
98
  {name: 'icon', type: 'ReactNode', description: '可选的前置图标。'},
98
99
  ],
99
100
  theming: {
@@ -4,7 +4,7 @@
4
4
 
5
5
  /**
6
6
  * @file BottomSheet.tsx
7
- * @input Uses React, StyleX, core hooks, shared layer dismissal, the shared interaction modality, named BottomSheetPanel, BottomSheetSwitcherContext
7
+ * @input Uses React, StyleX, core hooks, shared layer dismissal, the modal outlet registry, the shared interaction modality, named BottomSheetPanel, BottomSheetSwitcherContext
8
8
  * @output Exports BottomSheet component and BottomSheetProps
9
9
  * @position Public BottomSheet router plus private standalone/switcher hosts
10
10
  *
@@ -27,6 +27,9 @@
27
27
  * in a switcher, handing one scrim between two dialogs and keeping focus in
28
28
  * the active sheet when a retained dialog closes.
29
29
  *
30
+ * While a standalone modal sheet is open, its dialog is the outlet that
31
+ * app-global surfaces (toasts) render into (Layer/modalOutlet.ts).
32
+ *
30
33
  * SYNC: When modified, update these files to stay in sync:
31
34
  * - /packages/core/src/BottomSheet/BottomSheetPanel.tsx
32
35
  * - /packages/core/src/BottomSheet/BottomSheetEdgeTint.tsx
@@ -36,6 +39,7 @@
36
39
  * - /packages/core/src/BottomSheet/BottomSheetSwitcher.test.tsx
37
40
  * - /packages/core/src/Layer/layerDismissalFamilies.test.tsx
38
41
  * - /packages/core/src/Layer/layerDismissalInvariants.test.tsx
42
+ * - /packages/core/src/Toast/ToastViewport.modalHost.test.tsx
39
43
  * - /apps/storybook/stories/BottomSheet.stories.tsx
40
44
  * - /packages/cli/assets/templates/blocks/components/BottomSheet/BottomSheetShowcase.tsx
41
45
  */
@@ -58,6 +62,7 @@ import {colorVars, durationVars, easeVars} from '../theme/tokens.stylex';
58
62
  import {useDevWarning, useScrollLock} from '../hooks';
59
63
  import {mergeProps} from '../utils';
60
64
  import {LayerDepthProvider} from '../Layer/LayerDepthContext';
65
+ import {useModalOutlet} from '../Layer/modalOutlet';
61
66
  import {useLayerDismissal} from '../Layer/useLayerDismissal';
62
67
  import {focusForLastInput} from '../utils/focusReturn';
63
68
  import {useInteractionModalityTracking} from '../utils/interactionModality';
@@ -373,6 +378,12 @@ function StandaloneBottomSheet({
373
378
  }
374
379
  }, [hasScrim, isOpen]);
375
380
 
381
+ // Host app-global surfaces (toasts) inside this sheet while it is an open
382
+ // modal, so they stay visible and operable above it. A closing sheet stays
383
+ // modal through its exit animation, but inert and hidden, so it hands them
384
+ // back as soon as it starts closing.
385
+ useModalOutlet(dialogRef, isOpen && hasScrim);
386
+
376
387
  useEffect(() => {
377
388
  if (!isOpen && isPresented && hasScrim) {
378
389
  handleScrimOpacity(0);
@@ -0,0 +1,82 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file BottomSheetToastOutlet.a11y.chromium.spec.ts
5
+ * @input The built Core/Toast AppToastOverBottomSheet story; real Chromium hit
6
+ * testing and mouse input
7
+ * @output Browser evidence that a toast fired from an open BottomSheet, on its
8
+ * own or over a Dialog, is hit-testable above the sheet and takes a click
9
+ * @position Chromium proof for BottomSheet's modal outlet
10
+ * (Layer/modalOutlet.ts). jsdom has no top layer and no modal inertness, so
11
+ * Toast/ToastViewport.modalHost.test.tsx can only check where the viewport
12
+ * lives.
13
+ */
14
+
15
+ import {expect, test} from '@playwright/test';
16
+ import {holdMotionStill} from '@astryxdesign/a11y-spec/chromium';
17
+ import {
18
+ DEFAULT_STORYBOOK_DIR,
19
+ serveStorybook,
20
+ type StaticServer,
21
+ } from '@astryxdesign/a11y-spec/storybook';
22
+
23
+ let storybook: StaticServer;
24
+ test.beforeAll(async () => {
25
+ storybook = await serveStorybook(
26
+ process.env.ASTRYX_STORYBOOK_DIR ?? DEFAULT_STORYBOOK_DIR,
27
+ );
28
+ });
29
+ test.afterAll(async () => {
30
+ await storybook?.close();
31
+ });
32
+
33
+ // Phone width: where an app presents its dialogs as bottom sheets.
34
+ test.use({viewport: {width: 390, height: 844}});
35
+
36
+ const SCENARIOS = [
37
+ {name: 'on its own', opens: ['Open sheet']},
38
+ {name: 'over a Dialog', opens: ['Open dialog', 'Open sheet from the dialog']},
39
+ ];
40
+
41
+ for (const {name, opens} of SCENARIOS) {
42
+ test(`a toast action above a sheet opened ${name} takes the click`, async ({
43
+ page,
44
+ }) => {
45
+ await page.goto(
46
+ `${storybook.origin}/iframe.html?id=core-toast--app-toast-over-bottom-sheet&viewMode=story`,
47
+ );
48
+ await holdMotionStill(page);
49
+ for (const label of opens) {
50
+ await page.getByRole('button', {name: label, exact: true}).click();
51
+ }
52
+ const sheet = page.getByRole('dialog', {name: 'Item actions'});
53
+ await expect(sheet).toBeVisible();
54
+ await sheet.getByRole('button', {name: 'Archive'}).click();
55
+ await expect(sheet.getByText('The item is archived.')).toBeVisible();
56
+
57
+ const undo = page.locator('[popover] button', {hasText: 'Undo'});
58
+ await expect(undo).toBeVisible();
59
+ const box = await undo.boundingBox();
60
+ if (box == null) {
61
+ throw new Error('the Undo button has no box');
62
+ }
63
+ const x = box.x + box.width / 2;
64
+ const y = box.y + box.height / 2;
65
+
66
+ // Hit testing skips inert content and follows top-layer order: a toast
67
+ // left outside the sheet's modal, or under it, loses this point to the
68
+ // sheet.
69
+ const hit = await page.evaluate(
70
+ ([px, py]) =>
71
+ document.elementFromPoint(px, py)?.closest('button')?.textContent ??
72
+ null,
73
+ [x, y],
74
+ );
75
+ expect(hit).toBe('Undo');
76
+
77
+ await page.mouse.click(x, y);
78
+ await expect(
79
+ sheet.getByText('The item is back in your inbox.'),
80
+ ).toBeVisible();
81
+ });
82
+ }
@@ -0,0 +1,28 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file inputDisabledFocus.ts
5
+ * @input Uses StyleX and theme tokens
6
+ * @output inputDisabledFocusStyles (internal; not re-exported from Field/index.ts)
7
+ * @position Field wrapper style shared by TextInput and TextArea
8
+ */
9
+
10
+ import * as stylex from '@stylexjs/stylex';
11
+ import {colorVars} from '../theme/tokens.stylex';
12
+
13
+ export const inputDisabledFocusStyles = stylex.create({
14
+ // The shared disabled style drops the focus ring; restore it while the field's
15
+ // own control, a direct child, has keyboard focus (`spec:AST-085` FR6), so a
16
+ // focused status button keeps only its own outline.
17
+ ring: {
18
+ borderColor: {
19
+ default: colorVars['--color-border-emphasized'],
20
+ ':has(> [aria-disabled="true"]:focus-visible)':
21
+ colorVars['--color-accent'],
22
+ },
23
+ boxShadow: {
24
+ default: 'none',
25
+ ':has(> [aria-disabled="true"]:focus-visible)': `inset 0px 0px 0px 2px ${colorVars['--color-accent-muted']}`,
26
+ },
27
+ },
28
+ });
@@ -27,7 +27,7 @@ architecture:
27
27
  architecture:public-component-api,
28
28
  ]
29
29
  contributing: []
30
- system_specs: []
30
+ system_specs: [spec:AST-087]
31
31
  ---
32
32
 
33
33
  # Icon component contract
@@ -53,6 +53,7 @@ Consumer migration instructions belong in consumer docs and release notes.
53
53
  **Owns**
54
54
 
55
55
  - Accepting a semantic icon key or a supplied icon component as the glyph source.
56
+ - Passing the resolved size and a variant the entry can receive to a registry entry.
56
57
  - Resolving explicit, component-owned contextual, and standalone size defaults.
57
58
  - Applying Icon's size, color, theming target, and accessibility semantics to
58
59
  the rendered glyph.
@@ -71,12 +72,13 @@ Consumer migration instructions belong in consumer docs and release notes.
71
72
 
72
73
  ## Public concepts
73
74
 
74
- | Concept | Closed values or states | Meaning | Availability by variant/orientation/state | Default | Owner | Stability | Invalid-value behavior |
75
- | ------------- | --------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------------- | ----------------------------------------------- | ---------------- | --------- | ------------------------------------------------------ |
76
- | Glyph source | semantic key, namespaced extension key, or icon component | Selects the visual symbol. | Every render | Required | `component:Icon` | Stable | TypeScript rejects unsupported built-in string values. |
77
- | Size | `xsm`, `sm`, `md`, `lg` | Selects the icon box size. | Every rendered glyph | nearest component-owned default; otherwise `md` | `component:Icon` | Stable | TypeScript rejects unsupported values. |
78
- | Color | documented semantic and palette values | Selects the glyph color or inherits it from context. | Every rendered glyph | `inherit` | `component:Icon` | Stable | TypeScript rejects unsupported values. |
79
- | Accessibility | decorative or meaningfully labelled | Controls whether assistive technology receives the glyph. | Every rendered glyph | Decorative | `component:Icon` | Stable | Empty labels use the decorative behavior. |
75
+ | Concept | Closed values or states | Meaning | Availability by variant/orientation/state | Default | Owner | Stability | Invalid-value behavior |
76
+ | ------------- | --------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------- | ---------------- | --------- | --------------------------------------------------------------------------------- |
77
+ | Glyph source | semantic key, namespaced extension key, or icon component | Selects the visual symbol. | Every render | Required | `component:Icon` | Stable | TypeScript rejects unsupported built-in string values. |
78
+ | Size | `xsm`, `sm`, `md`, `lg` | Selects the icon box size. | Every rendered glyph | nearest component-owned default; otherwise `md` | `component:Icon` | Stable | TypeScript rejects unsupported values. |
79
+ | Color | documented semantic and palette values | Selects the glyph color or inherits it from context. | Every rendered glyph | `inherit` | `component:Icon` | Stable | TypeScript rejects unsupported values. |
80
+ | Accessibility | decorative or meaningfully labelled | Controls whether assistive technology receives the glyph. | Every rendered glyph | Decorative | `component:Icon` | Stable | Empty labels use the decorative behavior. |
81
+ | Variant | names in `IconVariantMap`; the active theme lists its own | Requests a theme's alternate artwork for a registry glyph. | Registry glyphs only; never a supplied component | None | `component:Icon` | Stable | TypeScript rejects unknown names; an unlisted variant renders the normal artwork. |
80
82
 
81
83
  A namespaced key that does not resolve currently renders nothing. This is
82
84
  existing behavior, not an intentional fallback promise.
@@ -86,13 +88,15 @@ existing behavior, not an intentional fallback promise.
86
88
  Requirements identify their basis so observed code is not mistaken for an
87
89
  intentional decision.
88
90
 
89
- | ID | Candidate invariant | Basis | Draft review state |
90
- | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------- |
91
- | FR1 | Icon MUST present at most one glyph from the supplied semantic key, namespaced key, or icon component. | Documented promise and current tests. | Settled intent. |
92
- | FR2 | Every rendered glyph MUST carry the `icon` theming target with its resolved size and selected color reflected as target data. | Current source, docs, and theming tests. | Settled intent. |
93
- | FR3 | Icon MUST apply the resolved size as width and height for every glyph, plus font size where needed for 1em-based icon sources. This sizing contract MUST NOT promise an HTML or SVG element type. | Human decision, current source, and tests. | Settled intent. |
94
- | FR4 | Supported SVG and styling escape hatches MUST retain their established merge and override behavior. | Current source and regression tests. | Current compatibility behavior; verify before changing. |
95
- | FR5 | An explicit Icon `size` MUST win. Without one, Icon MUST use the nearest default supplied by an owning Astryx component for its documented icon slot; without such a default, Icon MUST use `md`. | Component-size precedence and Button sizing decision. | Settled intent. |
91
+ | ID | Candidate invariant | Basis | Draft review state |
92
+ | --- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------- |
93
+ | FR1 | Icon MUST present at most one glyph from the supplied semantic key, namespaced key, or icon component. | Documented promise and current tests. | Settled intent. |
94
+ | FR2 | Every rendered glyph MUST carry the `icon` theming target with its resolved size and selected color reflected as target data. | Current source, docs, and theming tests. | Settled intent. |
95
+ | FR3 | Icon MUST apply the resolved size as width and height for every glyph, plus font size where needed for 1em-based icon sources. This sizing contract MUST NOT promise an HTML or SVG element type. | Human decision, current source, and tests. | Settled intent. |
96
+ | FR4 | Supported SVG and styling escape hatches MUST retain their established merge and override behavior. | Current source and regression tests. | Current compatibility behavior; verify before changing. |
97
+ | FR5 | An explicit Icon `size` MUST win. Without one, Icon MUST use the nearest default supplied by an owning Astryx component for its documented icon slot; without such a default, Icon MUST use `md`. | Component-size precedence and Button sizing decision. | Settled intent. |
98
+ | FR6 | In registry mode, Icon MUST pass `{size, variant}` to the selected entry, where `size` is the size resolved by ORD1 and `variant` is the requested variant when the active theme lists it and, for a theme-supplied entry, the theme that defined the entry lists it too, otherwise `undefined`. A supplied icon component MUST NOT receive `variant`, Icon MUST NOT forward `variant` to the DOM, and the `icon` target MUST NOT reflect it. | `spec:AST-087` FR1–FR5 and FR9. | Settled intent. |
99
+ | FR7 | The `icon` target MUST guarantee `width` and `height` on its `size:*` selectors as reviewed target-specific additions, so a theme sets each size's dimension. Without theme styles, sizes are 12, 16, 20, and 24px at a 16px root and scale with the root font size. | `spec:AST-087` FR10. | Settled intent. |
96
100
 
97
101
  ### Allowed variation
98
102
 
@@ -109,15 +113,18 @@ intentional decision.
109
113
 
110
114
  ### Representative states
111
115
 
112
- | State | Required invariant | Allowed variation |
113
- | -------------------------------- | -------------------------------------------------------- | ---------------------------------------------- |
114
- | Semantic key | One resolved glyph carries the `icon` target. | Theme, registry, or built-in artwork. |
115
- | Namespaced extension key | A resolved extension glyph carries the `icon` target. | Consumer- or library-owned artwork. |
116
- | Supplied icon component | The supplied glyph carries the `icon` target. | Component implementation and SVG internals. |
117
- | Standalone Icon without `size` | The resolved size is `md`. | Glyph source and color. |
118
- | Owned icon slot without `size` | The nearest documented component default is used. | The owning component's declared size mapping. |
119
- | Explicit Icon size in owned slot | The explicit Icon size wins over the contextual default. | Any supported Icon size. |
120
- | Unresolved namespaced key | No glyph is currently rendered. | No fallback behavior is established by intent. |
116
+ | State | Required invariant | Allowed variation |
117
+ | -------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------- |
118
+ | Semantic key | One resolved glyph carries the `icon` target. | Theme, registry, or built-in artwork. |
119
+ | Namespaced extension key | A resolved extension glyph carries the `icon` target. | Consumer- or library-owned artwork. |
120
+ | Supplied icon component | The supplied glyph carries the `icon` target. | Component implementation and SVG internals. |
121
+ | Standalone Icon without `size` | The resolved size is `md`. | Glyph source and color. |
122
+ | Owned icon slot without `size` | The nearest documented component default is used. | The owning component's declared size mapping. |
123
+ | Explicit Icon size in owned slot | The explicit Icon size wins over the contextual default. | Any supported Icon size. |
124
+ | Unresolved namespaced key | No glyph is currently rendered. | No fallback behavior is established by intent. |
125
+ | Listed variant | The entry receives the size and the variant when its defining theme also lists it. | The theme's artwork for that request. |
126
+ | Unlisted or omitted variant | The entry receives `variant: undefined`. | The theme's normal artwork. |
127
+ | Variant on a supplied component | The component renders as given without `variant`. | Component implementation. |
121
128
 
122
129
  ### Transformation and precedence order
123
130
 
@@ -172,6 +179,8 @@ not promise a `span`, `svg`, or other element type.
172
179
  rules for the `icon` target.
173
180
  - `architecture:icon-resolution-and-component-slots` owns semantic-key and
174
181
  component-slot resolution before Icon renders the selected source.
182
+ - `spec:AST-087` decides the `variant` request, theme-listed variant names, and
183
+ theme-set size dimensions.
175
184
  - `architecture:public-component-api` owns admission and compatibility rules for
176
185
  Icon's public props and observable defaults.
177
186
  - The owning component or family specifies each contextual Icon-size mapping.
@@ -181,12 +190,14 @@ not promise a `span`, `svg`, or other element type.
181
190
 
182
191
  ## Verification map
183
192
 
184
- | Contract | Verification | Representative states | Mutation or failure expectation | Audit section |
185
- | ------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
186
- | FR1, FR3, FR5 | `Icon.test.tsx` sizing suites and `IconButton.test.tsx` contextual-size suites | standalone default; Button sizes; explicit override; both modes | Breaking source rendering, standalone fallback, contextual mapping, explicit precedence, or cross-mode sizing fails assertions. | `audit:Icon/behavior` |
187
- | FR2, FR4 | `Icon.test.tsx` target/styling suites plus source inspection | Both source modes; size and color variants | Removing the target or breaking override composition fails existing assertions; `data-color` reflection currently lacks focused assertions. | `audit:Icon/theming` |
188
- | AR1, AR2, AR3 | `Icon.test.tsx` accessible-name suites | Decorative, labelled, explicit ARIA override | Changing default or labelled semantics fails accessibility assertions. | `audit:Icon/accessibility` |
189
- | Theming anatomy map | `scripts/check-knowledge.mjs` | Canonical consumer anatomy and current target | Missing, extra, prefixed, or stale mappings fail repository validation. | `audit:Icon/theming` |
193
+ | Contract | Verification | Representative states | Mutation or failure expectation | Audit section |
194
+ | ------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
195
+ | FR1, FR3, FR5 | `Icon.test.tsx` sizing suites and `IconButton.test.tsx` contextual-size suites | standalone default; Button sizes; explicit override; both modes | Breaking source rendering, standalone fallback, contextual mapping, explicit precedence, or cross-mode sizing fails assertions. | `audit:Icon/behavior` |
196
+ | FR2, FR4 | `Icon.test.tsx` target/styling suites plus source inspection | Both source modes; size and color variants | Removing the target or breaking override composition fails existing assertions; `data-color` reflection currently lacks focused assertions. | `audit:Icon/theming` |
197
+ | AR1, AR2, AR3 | `Icon.test.tsx` accessible-name suites | Decorative, labelled, explicit ARIA override | Changing default or labelled semantics fails accessibility assertions. | `audit:Icon/accessibility` |
198
+ | FR6 | `Icon.test.tsx` variant suites (pending) | listed, unlisted, and omitted variant; no active list; inherited entry under a replaced list; supplied component | An unlisted variant, or one the entry's defining theme does not list, reaches an entry, or `variant` reaches a supplied component or the DOM. | `audit:Icon/behavior` |
199
+ | FR7 | Theme styling tests for each size (pending) | each size with and without theme styles | A themed size does not change the glyph dimension, or an unstyled size changes. | `audit:Icon/theming` |
200
+ | Theming anatomy map | `scripts/check-knowledge.mjs` | Canonical consumer anatomy and current target | Missing, extra, prefixed, or stale mappings fail repository validation. | `audit:Icon/theming` |
190
201
 
191
202
  Focused coverage for `data-color` on both glyph source modes is a checkable test
192
203
  gap; source inspection is the current evidence for that part of FR2.
@@ -4,7 +4,7 @@
4
4
 
5
5
  /**
6
6
  * @file modalOutlet.ts
7
- * @input The open Dialog `<dialog>` elements
7
+ * @input The open Dialog and scrim BottomSheet `<dialog>` elements
8
8
  * @output Exports useModalOutlet (a modal supplies its outlet),
9
9
  * getActiveModalOutlet, and subscribeModalOutlets (a global host follows
10
10
  * the latest one)
@@ -668,18 +668,27 @@ describe('SideNavHeading headerEndContent', () => {
668
668
  expect(screen.getByTestId('end-badge')).toBeInTheDocument();
669
669
  });
670
670
 
671
- it('renders headerEndContent inside the link in isWholeHeadingLink path', () => {
671
+ it('renders headerEndContent beside the link, not inside it, in isWholeHeadingLink path', () => {
672
+ const onPress = vi.fn();
672
673
  render(
673
674
  <SideNavHeading
674
675
  heading="My App"
675
676
  headingHref="/home"
676
- headerEndContent={<span data-testid="end-badge">3</span>}
677
+ headerEndContent={
678
+ <button type="button" onClick={onPress}>
679
+ Create
680
+ </button>
681
+ }
677
682
  />,
678
683
  );
679
- const badge = screen.getByTestId('end-badge');
680
- expect(badge).toBeInTheDocument();
681
- // Badge renders inside the link
682
- expect(badge.closest('a')).not.toBeNull();
684
+ const link = screen.getByRole('link', {name: 'My App'});
685
+ expect(link).toHaveAttribute('href', '/home');
686
+ // A control inside a link is invalid and its press would follow the link.
687
+ const button = screen.getByRole('button', {name: 'Create'});
688
+ expect(button.closest('a')).toBeNull();
689
+ expect(link.parentElement).toBe(button.parentElement?.parentElement);
690
+ fireEvent.click(button);
691
+ expect(onPress).toHaveBeenCalledTimes(1);
683
692
  });
684
693
 
685
694
  it('renders headerEndContent in isWholeHeadingTrigger path', () => {
@@ -189,6 +189,17 @@ const styles = stylex.create({
189
189
  // today. The 28px min box still wins over Icon's width/height.
190
190
  fontSize: 'inherit',
191
191
  },
192
+ // The link part of a whole-heading link row that also has end content.
193
+ linkBesideEndContent: {
194
+ display: 'flex',
195
+ alignItems: 'center',
196
+ alignSelf: 'stretch',
197
+ gap: spacingVars['--spacing-2'],
198
+ flexGrow: 1,
199
+ minWidth: 0,
200
+ textDecoration: 'none',
201
+ color: 'inherit',
202
+ },
192
203
  headerEndContent: {
193
204
  flexShrink: 0,
194
205
  display: 'flex',
@@ -640,6 +651,36 @@ export function SideNavHeading({
640
651
  </button>
641
652
  );
642
653
 
654
+ // Whole heading is a link (no menu, single headingHref). End content may
655
+ // be a control, which must not sit inside the link (no interactive content
656
+ // in an <a>), so with end content the row is a div holding the link and the
657
+ // end content side by side, as the mixed mode does.
658
+ if (isWholeHeadingLink && headingHref && headerEndContentElement) {
659
+ return (
660
+ <div
661
+ ref={ref}
662
+ data-testid={testId}
663
+ {...mergeProps(
664
+ themeProps('side-nav-heading'),
665
+ stylex.props(styles.root, xstyle),
666
+ className,
667
+ style,
668
+ )}>
669
+ <LinkComponent
670
+ href={headingHref}
671
+ {...focusOutlineProps.focusVisible(
672
+ styles.linkBesideEndContent,
673
+ styles.menuTrigger,
674
+ )}
675
+ {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>
676
+ {icon && <span {...stylex.props(styles.icon)}>{icon}</span>}
677
+ {renderTextContent()}
678
+ </LinkComponent>
679
+ {headerEndContentElement}
680
+ </div>
681
+ );
682
+ }
683
+
643
684
  // Whole heading is a link (no menu, single headingHref)
644
685
  if (isWholeHeadingLink && headingHref) {
645
686
  return (
@@ -1316,6 +1316,10 @@ export function Step({
1316
1316
  const iconLabelNode = (
1317
1317
  <div {...stylex.props(styles.iconLabelRow)}>
1318
1318
  {(!isCompact || indicatorPosition !== 'on-track') && indicatorNode}
1319
+ {/* A space between the indicator and the label: the row is a flex
1320
+ container, which drops whitespace-only text, so nothing changes on
1321
+ screen, but a text reading of the button then keeps "1 Account" as two
1322
+ words instead of "1Account". */}{' '}
1319
1323
  <span
1320
1324
  {...mergeProps(
1321
1325
  labelThemeProps,
@@ -1576,6 +1580,8 @@ export function Step({
1576
1580
  )}
1577
1581
  />
1578
1582
  </div>
1583
+ {/* Whitespace between the indicator column and the label, as in
1584
+ iconLabelNode. */}{' '}
1579
1585
  <div {...stylex.props(styles.otBodyV)}>
1580
1586
  {labelLineNode}
1581
1587
  {otDescriptionNode}
@@ -1658,6 +1664,7 @@ export function Step({
1658
1664
  )}
1659
1665
  />
1660
1666
  </div>
1667
+ {/* Whitespace between the rail and the label, as in iconLabelNode. */}{' '}
1661
1668
  {/* The on-track indicator remains visible as a node on the rail at
1662
1669
  compact widths, but the wrapper becomes presentational with its
1663
1670
  label. Navigation moves to the named controls in the summary row. */}
@@ -2016,3 +2016,36 @@ describe('step-label and step-description theme targets', () => {
2016
2016
  );
2017
2017
  });
2018
2018
  });
2019
+
2020
+ describe('clickable step text reading', () => {
2021
+ // axe-core's Label in Name rule joins a button's text nodes with nothing
2022
+ // between them, aria-hidden ones included, so a number badge next to a label
2023
+ // reads as one word ("1Account") that the step's name does not contain.
2024
+ // Whitespace between them changes nothing on screen (the rows are flex
2025
+ // containers) and keeps the two words apart.
2026
+ it.each([
2027
+ ['vertical', 'separated'],
2028
+ ['horizontal', 'separated'],
2029
+ ['vertical', 'on-track'],
2030
+ ['horizontal', 'on-track'],
2031
+ ] as const)(
2032
+ 'keeps the number and label apart in a %s %s step',
2033
+ (orientation, indicatorPosition) => {
2034
+ render(
2035
+ <Stepper
2036
+ orientation={orientation}
2037
+ indicatorPosition={indicatorPosition}
2038
+ activeStep={0}
2039
+ label="Steps"
2040
+ onStepClick={() => {}}>
2041
+ <Step step={0} label="Account" indicator="number" />
2042
+ <Step step={1} label="Payment" indicator="number" />
2043
+ </Stepper>,
2044
+ );
2045
+
2046
+ const button = screen.getByRole('button', {name: /Account/});
2047
+ expect(button.textContent).toMatch(/1\s+Account/);
2048
+ expect(button.textContent).not.toMatch(/1Account/);
2049
+ },
2050
+ );
2051
+ });