@astryxdesign/core 0.7.4 → 0.7.5-canary.07605c2

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 (521) 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 +8 -8
  249. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  250. package/dist/NumberInput/NumberInput.js +39 -14
  251. package/dist/NumberInput/index.d.ts +2 -2
  252. package/dist/NumberInput/numberInputCommit.d.ts +1 -1
  253. package/dist/NumberInput/numberParser.d.ts +1 -1
  254. package/dist/Outline/Outline.d.ts +3 -3
  255. package/dist/Outline/index.d.ts +7 -7
  256. package/dist/Outline/parseOutlineFromMarkdown.d.ts +2 -2
  257. package/dist/Outline/useOutlineFromDOM.d.ts +1 -1
  258. package/dist/Outline/useOutlineFromMarkdown.d.ts +3 -3
  259. package/dist/Outline/useScrollSpy.d.ts +1 -1
  260. package/dist/OverflowList/OverflowList.d.ts +2 -2
  261. package/dist/OverflowList/index.d.ts +2 -2
  262. package/dist/Overlay/Overlay.d.ts +2 -2
  263. package/dist/Overlay/index.d.ts +5 -5
  264. package/dist/Overlay/useOverlay.d.ts +1 -1
  265. package/dist/Pagination/Pagination.d.ts +2 -2
  266. package/dist/Pagination/index.d.ts +2 -2
  267. package/dist/Popover/Popover.d.ts +3 -3
  268. package/dist/Popover/index.d.ts +4 -4
  269. package/dist/Popover/usePopover.d.ts +2 -2
  270. package/dist/PowerSearch/PowerSearch.d.ts +5 -5
  271. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +2 -2
  272. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  273. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  274. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +2 -2
  275. package/dist/PowerSearch/formatFilterValue.d.ts +3 -3
  276. package/dist/PowerSearch/index.d.ts +8 -8
  277. package/dist/PowerSearch/resolveDateTimeRangePart.d.ts +1 -1
  278. package/dist/PowerSearch/resolveOperatorLabel.d.ts +2 -2
  279. package/dist/PowerSearch/types.d.ts +1 -1
  280. package/dist/PowerSearch/useInternalConfig.d.ts +1 -1
  281. package/dist/PowerSearch/usePowerSearchConfig.d.ts +1 -1
  282. package/dist/PowerSearch/usePowerSearchSource.d.ts +3 -3
  283. package/dist/PowerSearch/utils.d.ts +3 -3
  284. package/dist/ProgressBar/ProgressBar.d.ts +2 -2
  285. package/dist/ProgressBar/index.d.ts +2 -2
  286. package/dist/RadioList/RadioList.d.ts +3 -3
  287. package/dist/RadioList/RadioListItem.d.ts +2 -2
  288. package/dist/RadioList/index.d.ts +4 -4
  289. package/dist/Resizable/ResizeHandle.d.ts +2 -2
  290. package/dist/Resizable/index.d.ts +6 -6
  291. package/dist/Resizable/useResizable.d.ts +2 -2
  292. package/dist/Resizable/utils.d.ts +3 -3
  293. package/dist/ScrollableArea/ScrollableArea.d.ts +3 -3
  294. package/dist/ScrollableArea/index.d.ts +4 -4
  295. package/dist/Section/Section.d.ts +3 -3
  296. package/dist/Section/index.d.ts +2 -2
  297. package/dist/SegmentedControl/SegmentedControl.d.ts +2 -2
  298. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  299. package/dist/SegmentedControl/index.d.ts +5 -5
  300. package/dist/SelectableCard/SelectableCard.d.ts +3 -3
  301. package/dist/SelectableCard/index.d.ts +2 -2
  302. package/dist/Selector/Selector.d.ts +8 -8
  303. package/dist/Selector/SelectorOption.d.ts +1 -1
  304. package/dist/Selector/hooks.d.ts +1 -1
  305. package/dist/Selector/index.d.ts +4 -4
  306. package/dist/Selector/types.d.ts +1 -1
  307. package/dist/Selector/useSelectorPresentation.d.ts +2 -2
  308. package/dist/Selector/utils.d.ts +1 -1
  309. package/dist/SideNav/SideNav.d.ts +3 -3
  310. package/dist/SideNav/SideNavCollapseButton.d.ts +3 -3
  311. package/dist/SideNav/SideNavHeading.d.ts +2 -2
  312. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  313. package/dist/SideNav/SideNavHeading.js +34 -0
  314. package/dist/SideNav/SideNavItem.d.ts +4 -4
  315. package/dist/SideNav/SideNavSection.d.ts +1 -1
  316. package/dist/SideNav/index.d.ts +14 -14
  317. package/dist/SizeContext/index.d.ts +1 -1
  318. package/dist/Skeleton/Skeleton.d.ts +1 -1
  319. package/dist/Skeleton/index.d.ts +2 -2
  320. package/dist/Slider/Slider.d.ts +3 -3
  321. package/dist/Slider/index.d.ts +2 -2
  322. package/dist/Spinner/Spinner.d.ts +1 -1
  323. package/dist/Spinner/index.d.ts +2 -2
  324. package/dist/Stack/Stack.d.ts +3 -3
  325. package/dist/Stack/StackItem.d.ts +2 -2
  326. package/dist/Stack/index.d.ts +6 -6
  327. package/dist/Stack/stack.stylex.d.ts +1 -1
  328. package/dist/StatusDot/StatusDot.d.ts +2 -2
  329. package/dist/StatusDot/index.d.ts +2 -2
  330. package/dist/Stepper/Step.d.ts +2 -2
  331. package/dist/Stepper/Step.d.ts.map +1 -1
  332. package/dist/Stepper/Step.js +3 -3
  333. package/dist/Stepper/Stepper.d.ts +2 -2
  334. package/dist/Stepper/index.d.ts +7 -7
  335. package/dist/Switch/Switch.d.ts +4 -4
  336. package/dist/Switch/index.d.ts +2 -2
  337. package/dist/TabList/Tab.d.ts +2 -2
  338. package/dist/TabList/TabList.d.ts +3 -3
  339. package/dist/TabList/TabMenu.d.ts +2 -2
  340. package/dist/TabList/index.d.ts +8 -8
  341. package/dist/Table/BaseTable.d.ts +1 -1
  342. package/dist/Table/Table.d.ts +1 -1
  343. package/dist/Table/TableBody.d.ts +1 -1
  344. package/dist/Table/TableCell.d.ts +3 -3
  345. package/dist/Table/TableContext.d.ts +1 -1
  346. package/dist/Table/TableFooter.d.ts +1 -1
  347. package/dist/Table/TableHeader.d.ts +1 -1
  348. package/dist/Table/TableHeaderCell.d.ts +3 -3
  349. package/dist/Table/TableRow.d.ts +2 -2
  350. package/dist/Table/TableSelectionToolbar.d.ts +2 -2
  351. package/dist/Table/columnUtils.d.ts +1 -1
  352. package/dist/Table/index.d.ts +54 -54
  353. package/dist/Table/plugins/columnResize/index.d.ts +2 -2
  354. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts +1 -1
  355. package/dist/Table/plugins/columnSettings/index.d.ts +4 -4
  356. package/dist/Table/plugins/columnSettings/useTableColumnSettings.d.ts +2 -2
  357. package/dist/Table/plugins/columnSettings/useTableColumnSettingsState.d.ts +1 -1
  358. package/dist/Table/plugins/filtering/index.d.ts +4 -4
  359. package/dist/Table/plugins/filtering/useTableFilterState.d.ts +1 -1
  360. package/dist/Table/plugins/filtering/useTableFiltering.d.ts +2 -2
  361. package/dist/Table/plugins/groupedRows/index.d.ts +2 -2
  362. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  363. package/dist/Table/plugins/pagination/index.d.ts +3 -3
  364. package/dist/Table/plugins/pagination/useTablePagination.d.ts +1 -1
  365. package/dist/Table/plugins/rowExpansion/index.d.ts +2 -2
  366. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +1 -1
  367. package/dist/Table/plugins/rowIndex/index.d.ts +2 -2
  368. package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts +1 -1
  369. package/dist/Table/plugins/rowStatus/index.d.ts +2 -2
  370. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +2 -2
  371. package/dist/Table/plugins/selection/index.d.ts +4 -4
  372. package/dist/Table/plugins/selection/useTableSelection.d.ts +1 -1
  373. package/dist/Table/plugins/selection/useTableSelectionState.d.ts +1 -1
  374. package/dist/Table/plugins/sortable/index.d.ts +4 -4
  375. package/dist/Table/plugins/sortable/useTableSortable.d.ts +1 -1
  376. package/dist/Table/plugins/sortable/useTableSortableState.d.ts +1 -1
  377. package/dist/Table/plugins/stickyColumns/index.d.ts +2 -2
  378. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts +1 -1
  379. package/dist/Table/plugins/tree/index.d.ts +4 -4
  380. package/dist/Table/plugins/tree/useTableTreeData.d.ts +1 -1
  381. package/dist/Table/plugins/tree/useTableTreeState.d.ts +1 -1
  382. package/dist/Table/tableContextMenu.d.ts +2 -2
  383. package/dist/Table/types.d.ts +3 -3
  384. package/dist/Table/useBaseTablePlugins.d.ts +1 -1
  385. package/dist/Table/useTableCellStyles.d.ts +2 -2
  386. package/dist/Table/utils.d.ts +2 -2
  387. package/dist/Text/Text.d.ts +3 -3
  388. package/dist/Text/index.d.ts +4 -4
  389. package/dist/TextArea/TextArea.d.ts +10 -8
  390. package/dist/TextArea/TextArea.d.ts.map +1 -1
  391. package/dist/TextArea/TextArea.js +14 -11
  392. package/dist/TextArea/index.d.ts +2 -2
  393. package/dist/TextInput/TextInput.d.ts +11 -9
  394. package/dist/TextInput/TextInput.d.ts.map +1 -1
  395. package/dist/TextInput/TextInput.js +20 -11
  396. package/dist/TextInput/index.d.ts +2 -2
  397. package/dist/Thumbnail/Thumbnail.d.ts +1 -1
  398. package/dist/Thumbnail/index.d.ts +2 -2
  399. package/dist/TimeInput/TimeInput.d.ts +6 -6
  400. package/dist/TimeInput/TouchTimeField.d.ts +1 -1
  401. package/dist/TimeInput/index.d.ts +3 -3
  402. package/dist/Timer/Timer.d.ts +2 -2
  403. package/dist/Timer/index.d.ts +2 -2
  404. package/dist/Timestamp/Timestamp.d.ts +3 -3
  405. package/dist/Timestamp/TimestampHoverCard.d.ts +1 -1
  406. package/dist/Timestamp/formatInstant.d.ts +2 -2
  407. package/dist/Timestamp/formatRelativeTime.d.ts +1 -1
  408. package/dist/Timestamp/index.d.ts +3 -3
  409. package/dist/Timestamp/tooltipEntries.d.ts +2 -2
  410. package/dist/Toast/Toast.d.ts +2 -2
  411. package/dist/Toast/ToastContext.d.ts +1 -1
  412. package/dist/Toast/ToastViewport.d.ts +2 -2
  413. package/dist/Toast/index.d.ts +6 -6
  414. package/dist/Toast/useToast.d.ts +1 -1
  415. package/dist/ToggleButton/ToggleButton.d.ts +3 -3
  416. package/dist/ToggleButton/ToggleButtonGroup.d.ts +1 -1
  417. package/dist/ToggleButton/index.d.ts +4 -4
  418. package/dist/Token/Token.d.ts +2 -2
  419. package/dist/Token/TokenLink.d.ts +1 -1
  420. package/dist/Token/index.d.ts +2 -2
  421. package/dist/Tokenizer/Tokenizer.d.ts +6 -6
  422. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  423. package/dist/Tokenizer/Tokenizer.js +44 -40
  424. package/dist/Tokenizer/index.d.ts +2 -2
  425. package/dist/Tokenizer/useEndLaneReserve.d.ts +3 -2
  426. package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -1
  427. package/dist/Tokenizer/useEndLaneReserve.js +3 -2
  428. package/dist/Toolbar/Toolbar.d.ts +4 -4
  429. package/dist/Toolbar/index.d.ts +2 -2
  430. package/dist/Tooltip/Tooltip.d.ts +3 -3
  431. package/dist/Tooltip/index.d.ts +4 -4
  432. package/dist/Tooltip/useTooltip.d.ts +2 -2
  433. package/dist/TopNav/TopNav.d.ts +1 -1
  434. package/dist/TopNav/TopNavHeading.d.ts +2 -2
  435. package/dist/TopNav/TopNavItem.d.ts +3 -3
  436. package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
  437. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  438. package/dist/TopNav/TopNavMegaMenuItem.d.ts +2 -2
  439. package/dist/TopNav/TopNavMenu.d.ts +1 -1
  440. package/dist/TopNav/index.d.ts +16 -16
  441. package/dist/TreeList/TreeList.d.ts +3 -3
  442. package/dist/TreeList/TreeListItem.d.ts +1 -1
  443. package/dist/TreeList/TreeListTypes.d.ts +1 -1
  444. package/dist/TreeList/index.d.ts +3 -3
  445. package/dist/Typeahead/BaseTypeahead.d.ts +2 -2
  446. package/dist/Typeahead/Typeahead.d.ts +6 -6
  447. package/dist/Typeahead/TypeaheadItem.d.ts +2 -2
  448. package/dist/Typeahead/createStaticSource.d.ts +1 -1
  449. package/dist/Typeahead/index.d.ts +9 -9
  450. package/dist/Typeahead/utils.d.ts +3 -3
  451. package/dist/VStack/VStack.d.ts +2 -2
  452. package/dist/VStack/index.d.ts +1 -1
  453. package/dist/VisuallyHidden/VisuallyHidden.d.ts +24 -6
  454. package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  455. package/dist/VisuallyHidden/VisuallyHidden.js +24 -5
  456. package/dist/VisuallyHidden/index.d.ts +2 -2
  457. package/dist/astryx.css +6 -13
  458. package/dist/hooks/index.d.ts +52 -52
  459. package/dist/hooks/useAutoMediaMode.d.ts +1 -1
  460. package/dist/hooks/useInputContainer.d.ts +1 -1
  461. package/dist/hooks/useInputStatusIcon.d.ts +3 -3
  462. package/dist/hooks/useMenuPress.d.ts +1 -1
  463. package/dist/hooks/usePressFeedback.d.ts +1 -1
  464. package/dist/hooks/useScrollableArea.d.ts +1 -1
  465. package/dist/i18n/InternationalizationContext.d.ts +2 -2
  466. package/dist/i18n/InternationalizationProvider.d.ts +1 -1
  467. package/dist/i18n/index.d.ts +12 -12
  468. package/dist/i18n/resolve.d.ts +1 -1
  469. package/dist/i18n/useLocale.d.ts +1 -1
  470. package/dist/index.d.ts +111 -111
  471. package/dist/theme/Theme.d.ts +2 -2
  472. package/dist/theme/contrast.d.ts +1 -1
  473. package/dist/theme/defineTheme.d.ts +12 -12
  474. package/dist/theme/domainTokens/index.d.ts +6 -6
  475. package/dist/theme/generateThemeRules.d.ts +1 -1
  476. package/dist/theme/index.d.ts +31 -31
  477. package/dist/theme/localTokens.d.ts +1 -1
  478. package/dist/theme/mergeComponents.d.ts +1 -1
  479. package/dist/theme/onMediaTokens.d.ts +1 -1
  480. package/dist/theme/resolveThemeValues.d.ts +7 -7
  481. package/dist/theme/syntax/SyntaxTheme.d.ts +1 -1
  482. package/dist/theme/syntax/index.d.ts +7 -7
  483. package/dist/theme/syntax/presets.d.ts +1 -1
  484. package/dist/theme/themeAdaptations.d.ts +5 -5
  485. package/dist/theme/themeRegistry.d.ts +1 -1
  486. package/dist/theme/tokens.d.ts +1 -1
  487. package/dist/theme/types.d.ts +1 -1
  488. package/dist/theme/useTheme.d.ts +2 -2
  489. package/dist/utils/dateParser.d.ts +3 -3
  490. package/dist/utils/groupItems.d.ts +1 -1
  491. package/dist/utils/index.d.ts +29 -29
  492. package/dist/utils/plainDate.d.ts +3 -3
  493. package/package.json +5 -5
  494. package/src/Badge/Badge.doc.mjs +2 -1
  495. package/src/BottomSheet/BottomSheet.tsx +12 -1
  496. package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +82 -0
  497. package/src/Field/inputDisabledFocus.ts +28 -0
  498. package/src/Icon/Icon.spec.md +40 -29
  499. package/src/Layer/modalOutlet.ts +1 -1
  500. package/src/NumberInput/NumberInput.doc.mjs +6 -6
  501. package/src/NumberInput/NumberInput.test.tsx +126 -14
  502. package/src/NumberInput/NumberInput.tsx +62 -16
  503. package/src/Pagination/Pagination.test.tsx +2 -2
  504. package/src/SideNav/SideNav.test.tsx +15 -6
  505. package/src/SideNav/SideNavHeading.tsx +41 -0
  506. package/src/Stepper/Step.tsx +7 -0
  507. package/src/Stepper/Stepper.test.tsx +33 -0
  508. package/src/TextArea/TextArea.doc.mjs +6 -6
  509. package/src/TextArea/TextArea.test.tsx +65 -6
  510. package/src/TextArea/TextArea.tsx +26 -14
  511. package/src/TextInput/TextInput.doc.mjs +8 -8
  512. package/src/TextInput/TextInput.test.tsx +72 -6
  513. package/src/TextInput/TextInput.tsx +32 -14
  514. package/src/Toast/ToastViewport.modalHost.test.tsx +139 -4
  515. package/src/Tokenizer/Tokenizer.test.tsx +26 -8
  516. package/src/Tokenizer/Tokenizer.tsx +65 -72
  517. package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +471 -0
  518. package/src/Tokenizer/useEndLaneReserve.ts +3 -2
  519. package/src/VisuallyHidden/VisuallyHidden.doc.mjs +1 -1
  520. package/src/VisuallyHidden/VisuallyHidden.test.tsx +39 -0
  521. package/src/VisuallyHidden/VisuallyHidden.tsx +38 -5
@@ -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)
@@ -81,7 +81,7 @@ export const docs = {
81
81
  name: 'isReadOnly',
82
82
  type: 'boolean',
83
83
  description:
84
- 'Makes the input read-only: the value is shown at full opacity and still submits with the form, but cannot be edited. Unlike isDisabled, a read-only input is not dimmed and stays in the tab order. Stepping is off in every form while read-only: arrow keys, the wheel, and the number steppers. isDisabled takes precedence when both are set.',
84
+ 'Makes the input read-only: the value is shown at full opacity and still submits with the form, but cannot be edited. Unlike isDisabled, a read-only input is not dimmed and keeps its form value. Stepping is off in every form while read-only: arrow keys, the wheel, and the number steppers. isDisabled takes precedence when both are set.',
85
85
  default: 'false',
86
86
  },
87
87
  {
@@ -308,7 +308,7 @@ export const docs = {
308
308
  {
309
309
  guidance: false,
310
310
  description:
311
- "Wrap a disabled NumberInput in Tooltip to explain why it's disabled; disabled controls swallow the hover events the wrapper needs. Use the disabledMessage prop instead.",
311
+ "Wrap a disabled NumberInput in Tooltip to explain why it's disabled. Use the disabledMessage prop, which attaches the reason to the field itself.",
312
312
  },
313
313
  ],
314
314
  anatomy: [
@@ -401,7 +401,7 @@ export const docsZh = {
401
401
  name: 'isReadOnly',
402
402
  type: 'boolean',
403
403
  description:
404
- '将输入框设为只读:值以完整不透明度显示并仍随表单提交,但无法编辑。与 isDisabled 不同,只读输入框不会变暗,并保留在 Tab 顺序中。只读时所有步进方式均被禁用:方向键、滚轮和步进按钮。同时设置时 isDisabled 优先。',
404
+ '将输入框设为只读:值以完整不透明度显示并仍随表单提交,但无法编辑。与 isDisabled 不同,只读输入框不会变暗,并保留其表单值。只读时所有步进方式均被禁用:方向键、滚轮和步进按钮。同时设置时 isDisabled 优先。',
405
405
  default: 'false',
406
406
  },
407
407
  {
@@ -613,7 +613,7 @@ export const docsZh = {
613
613
  {
614
614
  guidance: false,
615
615
  description:
616
- "Wrap a disabled NumberInput in Tooltip to explain why it's disabled; disabled controls swallow the hover events the wrapper needs. Use the disabledMessage prop instead.",
616
+ "Wrap a disabled NumberInput in Tooltip to explain why it's disabled. Use the disabledMessage prop, which attaches the reason to the field itself.",
617
617
  },
618
618
  ],
619
619
  anatomy: [
@@ -687,7 +687,7 @@ export const docsDense = {
687
687
  {
688
688
  guidance: false,
689
689
  description:
690
- "Wrap a disabled NumberInput in Tooltip to explain why it's disabled; disabled controls swallow the hover events the wrapper needs. Use the disabledMessage prop instead.",
690
+ "Wrap a disabled NumberInput in Tooltip to explain why it's disabled. Use the disabledMessage prop, which attaches the reason to the field itself.",
691
691
  },
692
692
  ],
693
693
  anatomy: [
@@ -737,7 +737,7 @@ export const docsDense = {
737
737
  isRequired: 'Field required (mutually exclusive w/ isOptional).',
738
738
  isDisabled: 'Input disabled.',
739
739
  isReadOnly:
740
- 'Read-only: value visible + still submits, but not editable. Unlike isDisabled: not dimmed, stays in tab order.',
740
+ 'Read-only: value visible + still submits, but not editable. Unlike isDisabled: not dimmed.',
741
741
  disabledMessage:
742
742
  'Explains why input is disabled. With isDisabled, shows tooltip on hover/focus + keeps input focusable via aria-disabled (field becomes read-only). Use instead of wrapping a disabled NumberInput in Tooltip.',
743
743
  placeholder: 'Placeholder text.',
@@ -13,6 +13,8 @@ import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
13
13
  import {act, useState} from 'react';
14
14
  import {render, screen, fireEvent, waitFor} from '@testing-library/react';
15
15
  import userEvent from '@testing-library/user-event';
16
+ import * as stylex from '@stylexjs/stylex';
17
+ import {colorVars} from '../theme/tokens.stylex';
16
18
  import {TestIcon} from '../__tests__/TestIcon';
17
19
  import {InternationalizationProvider} from '../i18n';
18
20
  import {registerIcons, resetIcons} from '../Icon';
@@ -22,6 +24,21 @@ import {defineTheme} from '../theme/defineTheme';
22
24
  import {generateThemeCSS} from '../theme/generateThemeRules';
23
25
  import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
24
26
 
27
+ // jsdom cannot match `:focus-visible`: compare the ring's StyleX class hash.
28
+ const RING = stylex
29
+ .props(
30
+ stylex.create({
31
+ ring: {
32
+ boxShadow: {
33
+ default: null,
34
+ ':has(> [aria-disabled="true"]:focus-visible)': `inset 0px 0px 0px 2px ${colorVars['--color-accent-muted']}`,
35
+ },
36
+ },
37
+ }).ring,
38
+ )
39
+ .className!.split(' ')
40
+ .pop()!;
41
+
25
42
  // FieldStatus announces status messages through the persistent useAnnounce
26
43
  // singletons; remove them between tests so role/aria-live queries in this
27
44
  // file never match a leftover region.
@@ -149,7 +166,7 @@ describe('NumberInput', () => {
149
166
  expect(screen.getByRole('spinbutton')).not.toHaveAttribute('aria-required');
150
167
  });
151
168
 
152
- it('sets disabled attribute when isDisabled is true', () => {
169
+ it('exposes aria-disabled, not native disabled, when isDisabled is true (spec:AST-085)', () => {
153
170
  render(
154
171
  <NumberInput
155
172
  label="Quantity"
@@ -158,7 +175,76 @@ describe('NumberInput', () => {
158
175
  onChange={() => {}}
159
176
  />,
160
177
  );
161
- expect(screen.getByRole('spinbutton')).toBeDisabled();
178
+ expect(screen.getByRole('spinbutton')).toHaveAttribute(
179
+ 'aria-disabled',
180
+ 'true',
181
+ );
182
+ });
183
+
184
+ it('keeps a disabled input in the tab order and rings it (spec:AST-085 FR1, FR6)', async () => {
185
+ const user = userEvent.setup();
186
+ render(
187
+ <>
188
+ <NumberInput label="First" value={1} onChange={() => {}} />
189
+ <NumberInput label="Second" value={2} onChange={() => {}} isDisabled />
190
+ </>,
191
+ );
192
+ await user.tab();
193
+ await user.tab();
194
+ const input = screen.getByRole('spinbutton', {name: 'Second'});
195
+ expect(input).toHaveFocus();
196
+ expect(input.parentElement).toHaveClass(RING);
197
+ });
198
+
199
+ it('runs no caller handler, steps nothing and submits no form while disabled (spec:AST-085 FR2)', async () => {
200
+ const user = userEvent.setup();
201
+ const handlers = {
202
+ onChange: vi.fn(),
203
+ onEnter: vi.fn(),
204
+ onKeyDown: vi.fn(),
205
+ onPaste: vi.fn(),
206
+ };
207
+ const onSubmit = vi.fn((e: React.FormEvent) => e.preventDefault());
208
+ render(
209
+ <form onSubmit={onSubmit}>
210
+ <NumberInput
211
+ label="Quantity"
212
+ value={5}
213
+ isDisabled
214
+ hasNumberSteppers
215
+ {...handlers}
216
+ />
217
+ </form>,
218
+ );
219
+ await user.click(screen.getByRole('spinbutton'));
220
+ await user.keyboard('{ArrowUp}{ArrowDown}{Enter}');
221
+ await user.paste('9');
222
+ await user.click(screen.getByRole('button', {name: 'Increment Quantity'}));
223
+ for (const handler of [...Object.values(handlers), onSubmit]) {
224
+ expect(handler).not.toHaveBeenCalled();
225
+ }
226
+ });
227
+
228
+ it('commits nothing when a field disabled mid-entry loses focus (spec:AST-085 FR2)', async () => {
229
+ const user = userEvent.setup();
230
+ const onChange = vi.fn();
231
+ const field = (isDisabled: boolean) => (
232
+ <NumberInput
233
+ label="Quantity"
234
+ value={5}
235
+ onChange={onChange}
236
+ isDisabled={isDisabled}
237
+ />
238
+ );
239
+ const {rerender} = render(field(false));
240
+ const input = screen.getByRole('spinbutton');
241
+ await user.clear(input);
242
+ await user.type(input, '8');
243
+ onChange.mockClear();
244
+ rerender(field(true));
245
+ await user.tab();
246
+ expect(onChange).not.toHaveBeenCalled();
247
+ expect(input).toHaveValue('5');
162
248
  });
163
249
 
164
250
  it('does not fire onChange when disabled', async () => {
@@ -1424,10 +1510,10 @@ describe('NumberInput', () => {
1424
1510
  const increment = screen.getByRole('button', {
1425
1511
  name: 'Increment Quantity',
1426
1512
  });
1427
- expect(increment).toBeDisabled();
1513
+ expect(increment).toHaveAttribute('aria-disabled', 'true');
1428
1514
  expect(
1429
1515
  screen.getByRole('button', {name: 'Decrement Quantity'}),
1430
- ).toBeDisabled();
1516
+ ).toHaveAttribute('aria-disabled', 'true');
1431
1517
 
1432
1518
  fireEvent.click(increment);
1433
1519
  expect(handleChange).not.toHaveBeenCalled();
@@ -1446,7 +1532,10 @@ describe('NumberInput', () => {
1446
1532
  />
1447
1533
  </form>,
1448
1534
  );
1449
- expect(screen.getByRole('spinbutton')).toBeDisabled();
1535
+ expect(screen.getByRole('spinbutton')).toHaveAttribute(
1536
+ 'aria-disabled',
1537
+ 'true',
1538
+ );
1450
1539
  expect([
1451
1540
  ...new FormData(container.querySelector('form')!).keys(),
1452
1541
  ]).toEqual([]);
@@ -1693,7 +1782,7 @@ describe('NumberInput', () => {
1693
1782
  expect(onChange).not.toHaveBeenCalled();
1694
1783
  });
1695
1784
 
1696
- it('remains natively disabled when disabled without a reason', () => {
1785
+ it('stays focusable when disabled without a reason', () => {
1697
1786
  render(
1698
1787
  <NumberInput
1699
1788
  label="Quantity"
@@ -1703,8 +1792,8 @@ describe('NumberInput', () => {
1703
1792
  />,
1704
1793
  );
1705
1794
  const input = screen.getByRole('spinbutton');
1706
- expect(input).toBeDisabled();
1707
- expect(input).not.toHaveAttribute('aria-disabled');
1795
+ expect(input).not.toBeDisabled();
1796
+ expect(input).toHaveAttribute('aria-disabled', 'true');
1708
1797
  });
1709
1798
  });
1710
1799
  });
@@ -2006,14 +2095,14 @@ describe('NumberInput stepping', () => {
2006
2095
 
2007
2096
  const input = screen.getByRole('spinbutton');
2008
2097
  const increment = screen.getByRole('button', {name: 'Increment Amount'});
2009
- expect(increment).toBeEnabled();
2098
+ expect(increment).not.toHaveAttribute('aria-disabled');
2010
2099
 
2011
2100
  fireEvent.click(increment);
2012
2101
 
2013
2102
  expect(input).toHaveValue('99.99');
2014
2103
  expect(input).toHaveAttribute('aria-valuenow', '99.99');
2015
2104
  expect(input).not.toHaveAttribute('aria-invalid');
2016
- expect(increment).toBeDisabled();
2105
+ expect(increment).toHaveAttribute('aria-disabled', 'true');
2017
2106
  });
2018
2107
 
2019
2108
  it('allows wheel stepping by default and consumes the focused gesture', () => {
@@ -2259,10 +2348,33 @@ describe('NumberInput stepping', () => {
2259
2348
  );
2260
2349
  expect(
2261
2350
  screen.getByRole('button', {name: 'Increment Quantity'}),
2262
- ).toBeDisabled();
2351
+ ).toHaveAttribute('aria-disabled', 'true');
2263
2352
  expect(
2264
2353
  screen.getByRole('button', {name: 'Decrement Quantity'}),
2265
- ).not.toBeDisabled();
2354
+ ).not.toHaveAttribute('aria-disabled');
2355
+ });
2356
+
2357
+ it('commits nothing from a click on the stepper at the reached boundary (spec:AST-085 FR2)', async () => {
2358
+ const user = userEvent.setup();
2359
+ const onChange = vi.fn();
2360
+ render(
2361
+ <NumberInput
2362
+ label="Quantity"
2363
+ value={5}
2364
+ onChange={onChange}
2365
+ min={0}
2366
+ max={10}
2367
+ hasNumberSteppers
2368
+ />,
2369
+ );
2370
+ const input = screen.getByRole('spinbutton');
2371
+ await user.clear(input);
2372
+ await user.type(input, '10');
2373
+ onChange.mockClear();
2374
+ await user.click(
2375
+ screen.getByRole('button', {name: 'Increment Quantity'}),
2376
+ );
2377
+ expect(onChange).not.toHaveBeenCalled();
2266
2378
  });
2267
2379
 
2268
2380
  it('disables both steppers with the input', () => {
@@ -2277,10 +2389,10 @@ describe('NumberInput stepping', () => {
2277
2389
  );
2278
2390
  expect(
2279
2391
  screen.getByRole('button', {name: 'Increment Quantity'}),
2280
- ).toBeDisabled();
2392
+ ).toHaveAttribute('aria-disabled', 'true');
2281
2393
  expect(
2282
2394
  screen.getByRole('button', {name: 'Decrement Quantity'}),
2283
- ).toBeDisabled();
2395
+ ).toHaveAttribute('aria-disabled', 'true');
2284
2396
  });
2285
2397
  });
2286
2398
  });
@@ -53,6 +53,7 @@ import {useTooltip} from '../Tooltip';
53
53
  import {getInputARIA} from '../utils';
54
54
  import {interactionOverlayStyles} from '../utils/interactionOverlay.stylex';
55
55
  import {usePressFeedback} from '../hooks/usePressFeedback';
56
+ import {inputDisabledFocusStyles} from '../Field/inputDisabledFocus';
56
57
  import {useSize} from '../SizeContext/SizeContext';
57
58
  import {useInputContainer} from '../hooks/useInputContainer';
58
59
  import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
@@ -261,7 +262,7 @@ interface NumberInputPropsBase extends Omit<
261
262
  * Whether the input is read-only.
262
263
  * The value is shown at full opacity and still submits with the form, but
263
264
  * cannot be edited. Unlike `isDisabled`, a read-only input is not dimmed and
264
- * stays in the tab order — use it for a value the user should see and send
265
+ * keeps its form value — use it for a value the user should see and send
265
266
  * but not change. Stepping is off in every form while read-only: arrow keys,
266
267
  * the wheel, and the number steppers. `isDisabled` takes precedence when both
267
268
  * are set.
@@ -275,8 +276,8 @@ interface NumberInputPropsBase extends Omit<
275
276
  * keyboard and assistive technology. The field cannot be edited (it becomes
276
277
  * read-only) while disabled.
277
278
  *
278
- * Use this instead of wrapping a disabled input in `Tooltip` — disabled
279
- * controls don't emit the pointer events an external tooltip needs.
279
+ * Use this instead of wrapping a disabled input in `Tooltip`, so the reason
280
+ * is attached to the field itself.
280
281
  *
281
282
  * @example
282
283
  * ```
@@ -600,12 +601,20 @@ export function NumberInput({
600
601
  const [pendingInput, setPendingInput] = useState<string | null>(null);
601
602
  const [isFocused, setIsFocused] = useState(false);
602
603
 
603
- // Disabled-reason tooltip. Disabled controls swallow pointer events, so the
604
- // tooltip listeners attach to the input container (which already exists) and
604
+ // Disabled-reason tooltip. The tooltip listeners attach to the input container (which already exists) and
605
605
  // the input stays perceivable via aria-disabled instead of the native
606
606
  // disabled attribute. The field is made read-only so it can't be typed into,
607
607
  // and value mutation is blocked by the isDisabled guard in the handlers.
608
608
  const showsDisabledMessage = isDisabled && !!disabledMessage;
609
+ // A disabled field keeps its tab stop but, like a natively disabled one,
610
+ // runs no caller event handler other than focus and blur (`spec:AST-085` FR2).
611
+ const fieldProps = isDisabled
612
+ ? Object.fromEntries(
613
+ Object.entries(rest).filter(
614
+ ([key]) => !/^on[A-Z]/.test(key) || /^on(Focus|Blur)/.test(key),
615
+ ),
616
+ )
617
+ : rest;
609
618
  const disabledMessageTooltip = useTooltip({
610
619
  placement: 'above',
611
620
  // The container div is not naturally focusable; focusin bubbles up from
@@ -699,6 +708,12 @@ export function NumberInput({
699
708
  if (pendingInput === null) {
700
709
  return;
701
710
  }
711
+ if (isDisabled) {
712
+ // A field disabled mid-entry commits nothing; its draft is dropped, as
713
+ // a natively disabled field's was (spec:AST-085 FR2).
714
+ setPendingInput(null);
715
+ return;
716
+ }
702
717
 
703
718
  const decision = resolveNumberInputCommit(pendingInput, {
704
719
  min,
@@ -722,7 +737,17 @@ export function NumberInput({
722
737
  onChange(decision.value);
723
738
  }
724
739
  },
725
- [hasClear, isIntegerOnly, locale, max, min, onChange, pendingInput, value],
740
+ [
741
+ hasClear,
742
+ isDisabled,
743
+ isIntegerOnly,
744
+ locale,
745
+ max,
746
+ min,
747
+ onChange,
748
+ pendingInput,
749
+ value,
750
+ ],
726
751
  );
727
752
 
728
753
  // Blur ends the edit and displays the resulting committed value.
@@ -780,6 +805,13 @@ export function NumberInput({
780
805
  // Handle keyboard events
781
806
  const handleKeyDown = useCallback(
782
807
  (e: KeyboardEvent<HTMLInputElement>) => {
808
+ if (isDisabled) {
809
+ // A read-only field still submits its form on Enter.
810
+ if (e.key === 'Enter') {
811
+ e.preventDefault();
812
+ }
813
+ return;
814
+ }
783
815
  // The field is type="text" for formatted display, so an IME can compose
784
816
  // into it: Enter commits the candidate and the arrows walk the candidate
785
817
  // window. The composing keydown fires before compositionend, so without
@@ -804,7 +836,7 @@ export function NumberInput({
804
836
  }
805
837
  onKeyDown?.(e);
806
838
  },
807
- [commitPendingInput, onEnter, onKeyDown, stepValue],
839
+ [commitPendingInput, isDisabled, onEnter, onKeyDown, stepValue],
808
840
  );
809
841
 
810
842
  // React's delegated wheel listener can be passive, so use a native,
@@ -902,6 +934,7 @@ export function NumberInput({
902
934
  hasNumberSteppers && styles.wrapperWithNumberSteppers,
903
935
  sizeStyles[size],
904
936
  isDisabled && inputWrapperStyles.disabled,
937
+ isDisabled && inputDisabledFocusStyles.ring,
905
938
  status && inputStatusBorderStyles[status.type],
906
939
  status && !isDisabled && inputStatusHoverShadowStyles[status.type],
907
940
  status && inputStatusFocusWithinStyles[status.type],
@@ -914,7 +947,7 @@ export function NumberInput({
914
947
  {startIcon && renderIconSlot(startIcon, {size: 'sm', color: 'secondary'})}
915
948
  {inputGroup && <VisuallyHidden id={inputLabelID}>{label}</VisuallyHidden>}
916
949
  <input
917
- {...rest}
950
+ {...fieldProps}
918
951
  ref={mergedInputRef}
919
952
  id={id}
920
953
  name={isDisabled || formatValue ? undefined : htmlName}
@@ -928,12 +961,11 @@ export function NumberInput({
928
961
  onBlur={handleBlur}
929
962
  onKeyDown={handleKeyDown}
930
963
  placeholder={placeholder}
931
- // With a disabledMessage the input keeps focusability via aria-disabled
932
- // so the reason is focus-discoverable; readOnly + the handler guards
933
- // keep the value from changing.
934
- disabled={isDisabled && !showsDisabledMessage}
935
- aria-disabled={showsDisabledMessage ? 'true' : undefined}
936
- readOnly={isReadOnly || showsDisabledMessage || undefined}
964
+ // A disabled input keeps its place in the tab order (spec:AST-085):
965
+ // aria-disabled instead of the native attribute, with readOnly + the
966
+ // handler guards keeping the value from changing.
967
+ aria-disabled={isDisabled ? 'true' : undefined}
968
+ readOnly={isReadOnly || isDisabled || undefined}
937
969
  autoFocus={hasAutoFocus}
938
970
  data-autofocus={hasAutoFocus || undefined}
939
971
  aria-valuemin={min ?? undefined}
@@ -992,10 +1024,17 @@ export function NumberInput({
992
1024
  type="button"
993
1025
  tabIndex={-1}
994
1026
  {...pressable}
995
- disabled={isDisabled || isReadOnly || !canIncrement}
1027
+ aria-disabled={
1028
+ isDisabled || isReadOnly || !canIncrement || undefined
1029
+ }
996
1030
  aria-label={t('@astryx.numberInput.incrementLabel', {label})}
997
1031
  onPointerDown={event => event.preventDefault()}
998
1032
  onClick={() => {
1033
+ // An aria-disabled stepper does nothing, as a natively disabled
1034
+ // one did (spec:AST-085 FR2).
1035
+ if (isDisabled || isReadOnly || !canIncrement) {
1036
+ return;
1037
+ }
999
1038
  inputRef.current?.focus();
1000
1039
  stepValue(1);
1001
1040
  }}
@@ -1016,10 +1055,17 @@ export function NumberInput({
1016
1055
  type="button"
1017
1056
  tabIndex={-1}
1018
1057
  {...pressable}
1019
- disabled={isDisabled || isReadOnly || !canDecrement}
1058
+ aria-disabled={
1059
+ isDisabled || isReadOnly || !canDecrement || undefined
1060
+ }
1020
1061
  aria-label={t('@astryx.numberInput.decrementLabel', {label})}
1021
1062
  onPointerDown={event => event.preventDefault()}
1022
1063
  onClick={() => {
1064
+ // An aria-disabled stepper does nothing, as a natively disabled
1065
+ // one did (spec:AST-085 FR2).
1066
+ if (isDisabled || isReadOnly || !canDecrement) {
1067
+ return;
1068
+ }
1023
1069
  inputRef.current?.focus();
1024
1070
  stepValue(-1);
1025
1071
  }}
@@ -965,7 +965,7 @@ describe('Pagination', () => {
965
965
  />,
966
966
  );
967
967
  const box = screen.getByRole('spinbutton', {name: 'Go to page'});
968
- expect(box).toBeDisabled();
968
+ expect(box).toHaveAttribute('aria-disabled', 'true');
969
969
  // Disabled input never fires a change.
970
970
  await user.type(box, '5{Enter}');
971
971
  expect(onChange).not.toHaveBeenCalled();
@@ -999,7 +999,7 @@ describe('Pagination', () => {
999
999
  // editable box is inert rather than accepting entries it can't resolve.
1000
1000
  expect(
1001
1001
  screen.getByRole('spinbutton', {name: 'Go to page'}),
1002
- ).toBeDisabled();
1002
+ ).toHaveAttribute('aria-disabled', 'true');
1003
1003
  });
1004
1004
 
1005
1005
  it('renders the localized "Page" label by default and a custom pageLabel', () => {