@astryxdesign/core 0.7.2-canary.fe2c655 → 0.7.3-canary.02f5fe4

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 (494) hide show
  1. package/CHANGELOG.md +156 -2
  2. package/README.md +4 -4
  3. package/dist/AppShell/AppShell.d.ts.map +1 -1
  4. package/dist/AppShell/AppShell.js +40 -1
  5. package/dist/AspectRatio/AspectRatio.d.ts +6 -8
  6. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  7. package/dist/AspectRatio/AspectRatio.js +44 -3
  8. package/dist/Avatar/Avatar.d.ts.map +1 -1
  9. package/dist/Avatar/Avatar.js +8 -1
  10. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  11. package/dist/AvatarGroup/AvatarGroupOverflow.js +4 -1
  12. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  13. package/dist/BottomSheet/BottomSheet.js +8 -4
  14. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  15. package/dist/BottomSheet/BottomSheetSwitcher.js +7 -0
  16. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  17. package/dist/Breadcrumbs/BreadcrumbItem.js +5 -2
  18. package/dist/Calendar/Calendar.js +3 -2
  19. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  20. package/dist/Chat/ChatLayoutScrollButton.js +1 -0
  21. package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
  22. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  23. package/dist/CheckboxInput/CheckboxInput.js +22 -25
  24. package/dist/CheckboxList/CheckboxList.d.ts +1 -1
  25. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  26. package/dist/CheckboxList/CheckboxList.js +6 -2
  27. package/dist/CheckboxList/CheckboxListItem.d.ts +9 -1
  28. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  29. package/dist/CheckboxList/CheckboxListItem.js +4 -2
  30. package/dist/ClickableCard/ClickableCard.d.ts +2 -2
  31. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  32. package/dist/ClickableCard/ClickableCard.js +11 -9
  33. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  34. package/dist/CodeBlock/CodeBlock.js +11 -1
  35. package/dist/CommandPalette/CommandPaletteInput.d.ts +1 -1
  36. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  37. package/dist/CommandPalette/CommandPaletteInput.js +37 -5
  38. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  39. package/dist/ComplexSelector/ComplexSelector.js +23 -5
  40. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  41. package/dist/ContextMenu/ContextMenu.js +5 -2
  42. package/dist/DateInput/DateInput.d.ts +4 -4
  43. package/dist/DateInput/DateInput.d.ts.map +1 -1
  44. package/dist/DateInput/DateInput.js +27 -20
  45. package/dist/DateInput/NativeDateField.d.ts.map +1 -1
  46. package/dist/DateInput/NativeDateField.js +14 -8
  47. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  48. package/dist/DateInput/TouchDateField.js +14 -10
  49. package/dist/DateRangeInput/DateRangeInput.d.ts +5 -5
  50. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  51. package/dist/DateRangeInput/DateRangeInput.js +27 -18
  52. package/dist/DateTimeInput/DateTimeInput.d.ts +5 -5
  53. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  54. package/dist/DateTimeInput/DateTimeInput.js +25 -27
  55. package/dist/DateTimeInput/NativeDateSegment.d.ts +3 -2
  56. package/dist/DateTimeInput/NativeDateSegment.d.ts.map +1 -1
  57. package/dist/DateTimeInput/NativeDateSegment.js +5 -5
  58. package/dist/DateTimeInput/NativeTimeSegment.d.ts +3 -2
  59. package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
  60. package/dist/DateTimeInput/NativeTimeSegment.js +5 -5
  61. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  62. package/dist/DateTimeInput/TouchDateTimeField.js +12 -9
  63. package/dist/Dialog/Dialog.d.ts.map +1 -1
  64. package/dist/Dialog/Dialog.js +29 -12
  65. package/dist/DropdownMenu/DropdownMenu.d.ts +1 -1
  66. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  67. package/dist/DropdownMenu/DropdownMenu.js +131 -118
  68. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +1 -1
  69. package/dist/DropdownMenu/DropdownMenuContext.d.ts +51 -1
  70. package/dist/DropdownMenu/DropdownMenuContext.d.ts.map +1 -1
  71. package/dist/DropdownMenu/DropdownMenuContext.js +36 -0
  72. package/dist/DropdownMenu/DropdownMenuDivider.d.ts +5 -3
  73. package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -1
  74. package/dist/DropdownMenu/DropdownMenuDivider.js +7 -3
  75. package/dist/DropdownMenu/DropdownMenuGroup.d.ts +6 -4
  76. package/dist/DropdownMenu/DropdownMenuGroup.d.ts.map +1 -1
  77. package/dist/DropdownMenu/DropdownMenuGroup.js +4 -3
  78. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +1 -1
  79. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +21 -2
  80. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  81. package/dist/DropdownMenu/DropdownMenuSubMenu.js +384 -40
  82. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +24 -0
  83. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -0
  84. package/dist/DropdownMenu/lazyMenuBottomSheet.js +46 -0
  85. package/dist/DropdownMenu/menuRegionStops.d.ts +38 -0
  86. package/dist/DropdownMenu/menuRegionStops.d.ts.map +1 -0
  87. package/dist/DropdownMenu/menuRegionStops.js +131 -0
  88. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  89. package/dist/EmptyState/EmptyState.js +4 -10
  90. package/dist/Field/Field.d.ts +1 -1
  91. package/dist/Field/Field.d.ts.map +1 -1
  92. package/dist/Field/Field.js +8 -4
  93. package/dist/FileInput/FileInput.d.ts.map +1 -1
  94. package/dist/FileInput/FileInput.js +14 -12
  95. package/dist/FormLayout/FormLayout.d.ts +5 -4
  96. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  97. package/dist/FormLayout/FormLayout.js +1 -1
  98. package/dist/FormLayout/FormLayoutContext.d.ts +3 -3
  99. package/dist/FormLayout/FormLayoutContext.js +3 -3
  100. package/dist/Grid/Grid.d.ts +8 -7
  101. package/dist/Grid/Grid.d.ts.map +1 -1
  102. package/dist/Grid/Grid.js +5 -4
  103. package/dist/Grid/GridSpan.d.ts +1 -1
  104. package/dist/Grid/GridSpan.d.ts.map +1 -1
  105. package/dist/Grid/GridSpan.js +1 -0
  106. package/dist/Heading/Heading.d.ts.map +1 -1
  107. package/dist/Heading/Heading.js +4 -2
  108. package/dist/Item/Item.d.ts +6 -2
  109. package/dist/Item/Item.d.ts.map +1 -1
  110. package/dist/Item/Item.js +19 -4
  111. package/dist/Link/Link.d.ts +2 -3
  112. package/dist/Link/Link.d.ts.map +1 -1
  113. package/dist/Link/Link.js +11 -19
  114. package/dist/List/List.d.ts +46 -19
  115. package/dist/List/List.d.ts.map +1 -1
  116. package/dist/List/List.js +28 -10
  117. package/dist/List/ListContext.d.ts +8 -3
  118. package/dist/List/ListContext.d.ts.map +1 -1
  119. package/dist/List/ListContext.js +7 -2
  120. package/dist/List/ListItem.d.ts +13 -5
  121. package/dist/List/ListItem.d.ts.map +1 -1
  122. package/dist/List/ListItem.js +21 -8
  123. package/dist/List/index.d.ts +1 -1
  124. package/dist/List/index.d.ts.map +1 -1
  125. package/dist/Markdown/Markdown.d.ts.map +1 -1
  126. package/dist/Markdown/Markdown.js +56 -16
  127. package/dist/Markdown/parser.d.ts.map +1 -1
  128. package/dist/Markdown/parser.js +8 -2
  129. package/dist/Markdown/plugins/headingLinks.d.ts.map +1 -1
  130. package/dist/Markdown/plugins/headingLinks.js +9 -1
  131. package/dist/MetadataList/MetadataList.d.ts.map +1 -1
  132. package/dist/MetadataList/MetadataList.js +5 -1
  133. package/dist/MetadataList/MetadataListContext.d.ts +1 -1
  134. package/dist/MetadataList/MetadataListContext.d.ts.map +1 -1
  135. package/dist/MobileNav/MobileNav.d.ts +9 -0
  136. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  137. package/dist/MobileNav/MobileNav.js +30 -3
  138. package/dist/MultiSelector/MultiSelector.d.ts +4 -4
  139. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  140. package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.d.ts +2 -0
  141. package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.d.ts.map +1 -0
  142. package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.js +48 -0
  143. package/dist/MultiSelector/MultiSelector.js +25 -18
  144. package/dist/Pagination/Pagination.d.ts.map +1 -1
  145. package/dist/Pagination/Pagination.js +5 -2
  146. package/dist/Popover/Popover.d.ts.map +1 -1
  147. package/dist/Popover/Popover.js +8 -4
  148. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  149. package/dist/PowerSearch/PowerSearch.js +5 -0
  150. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  151. package/dist/PowerSearch/PowerSearchValueEditor.js +45 -11
  152. package/dist/RadioList/RadioList.d.ts +1 -1
  153. package/dist/RadioList/RadioList.d.ts.map +1 -1
  154. package/dist/RadioList/RadioList.js +6 -2
  155. package/dist/RadioList/RadioListItem.d.ts +9 -1
  156. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  157. package/dist/RadioList/RadioListItem.js +2 -0
  158. package/dist/Selector/Selector.d.ts +4 -4
  159. package/dist/Selector/Selector.d.ts.map +1 -1
  160. package/dist/Selector/Selector.js +23 -14
  161. package/dist/Selector/SelectorOption.d.ts.map +1 -1
  162. package/dist/Selector/SelectorOption.js +1 -0
  163. package/dist/SideNav/SideNavItem.d.ts +8 -1
  164. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  165. package/dist/SideNav/SideNavItem.js +76 -10
  166. package/dist/Slider/Slider.d.ts.map +1 -1
  167. package/dist/Slider/Slider.js +7 -14
  168. package/dist/Switch/Switch.d.ts.map +1 -1
  169. package/dist/Switch/Switch.js +25 -17
  170. package/dist/Switch/switch.markers.stylex.d.ts +2 -0
  171. package/dist/Switch/switch.markers.stylex.d.ts.map +1 -1
  172. package/dist/Switch/switch.markers.stylex.js +6 -0
  173. package/dist/Text/Text.d.ts.map +1 -1
  174. package/dist/Text/Text.js +4 -2
  175. package/dist/TimeInput/TimeInput.d.ts +7 -6
  176. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  177. package/dist/TimeInput/TimeInput.js +37 -20
  178. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  179. package/dist/TimeInput/TouchTimeField.js +17 -6
  180. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  181. package/dist/Timestamp/Timestamp.js +41 -8
  182. package/dist/ToggleButton/ToggleButton.d.ts +3 -2
  183. package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
  184. package/dist/ToggleButton/ToggleButton.js +12 -1
  185. package/dist/Token/Token.d.ts.map +1 -1
  186. package/dist/Token/Token.js +9 -4
  187. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  188. package/dist/Tooltip/Tooltip.js +36 -14
  189. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  190. package/dist/Tooltip/useTooltip.js +11 -2
  191. package/dist/TopNav/TopNav.d.ts.map +1 -1
  192. package/dist/TopNav/TopNav.js +2 -2
  193. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  194. package/dist/TopNav/TopNavHeading.js +1 -0
  195. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  196. package/dist/TopNav/TopNavMegaMenu.js +5 -3
  197. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  198. package/dist/TopNav/TopNavMenu.js +5 -3
  199. package/dist/TreeList/TreeList.d.ts.map +1 -1
  200. package/dist/TreeList/TreeList.js +1 -0
  201. package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
  202. package/dist/TreeList/TreeListBranches.js +2 -2
  203. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  204. package/dist/TreeList/TreeListItem.js +65 -12
  205. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  206. package/dist/Typeahead/Typeahead.js +14 -2
  207. package/dist/astryx.css +35 -6
  208. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  209. package/dist/hooks/useGridFocus.js +10 -1
  210. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  211. package/dist/hooks/useMenuHover.js +18 -13
  212. package/dist/hooks/useMenuPress.d.ts +11 -1
  213. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  214. package/dist/hooks/useMenuPress.js +43 -5
  215. package/dist/reset.a11y.chromium.spec.js +50 -1
  216. package/dist/utils/disabledInteraction.d.ts +21 -0
  217. package/dist/utils/disabledInteraction.d.ts.map +1 -0
  218. package/dist/utils/disabledInteraction.js +33 -0
  219. package/dist/utils/plainDate.d.ts.map +1 -1
  220. package/dist/utils/plainDate.js +15 -9
  221. package/dist/utils/timeParser.d.ts +4 -0
  222. package/dist/utils/timeParser.d.ts.map +1 -1
  223. package/dist/utils/timeParser.js +9 -2
  224. package/docs.mjs +4 -4
  225. package/package.json +3 -3
  226. package/scripts/agent-doc-state.mjs +123 -14
  227. package/scripts/postinstall.mjs +44 -3
  228. package/src/AppShell/AppShell.tsx +45 -1
  229. package/src/AspectRatio/AspectRatio.test.tsx +44 -43
  230. package/src/AspectRatio/AspectRatio.tsx +38 -18
  231. package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +157 -0
  232. package/src/Avatar/Avatar.doc.mjs +5 -3
  233. package/src/Avatar/Avatar.tsx +11 -2
  234. package/src/AvatarGroup/AvatarGroup.doc.mjs +3 -2
  235. package/src/AvatarGroup/AvatarGroupOverflow.test.tsx +24 -1
  236. package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -0
  237. package/src/Banner/Banner.spec.md +37 -32
  238. package/src/BottomSheet/BottomSheet.spec.md +34 -54
  239. package/src/BottomSheet/BottomSheet.test.tsx +29 -0
  240. package/src/BottomSheet/BottomSheet.tsx +8 -4
  241. package/src/BottomSheet/BottomSheetSwitcher.spec.md +125 -58
  242. package/src/BottomSheet/BottomSheetSwitcher.test.tsx +26 -0
  243. package/src/BottomSheet/BottomSheetSwitcher.tsx +6 -0
  244. package/src/Breadcrumbs/BreadcrumbItem.tsx +4 -1
  245. package/src/Breadcrumbs/Breadcrumbs.test.tsx +30 -1
  246. package/src/Calendar/Calendar.test.tsx +68 -24
  247. package/src/Calendar/Calendar.tsx +2 -1
  248. package/src/Card/Card.doc.mjs +1 -1
  249. package/src/Chat/ChatLayoutScrollButton.test.tsx +13 -0
  250. package/src/Chat/ChatLayoutScrollButton.tsx +4 -2
  251. package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +64 -19
  252. package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +3 -1
  253. package/src/CheckboxInput/CheckboxInput.test.tsx +78 -5
  254. package/src/CheckboxInput/CheckboxInput.tsx +19 -27
  255. package/src/CheckboxInput/__tests__/Checkbox.a11y.states.ts +3 -3
  256. package/src/CheckboxList/CheckboxList.fr10.test.tsx +29 -2
  257. package/src/CheckboxList/CheckboxList.test.tsx +31 -6
  258. package/src/CheckboxList/CheckboxList.tsx +4 -1
  259. package/src/CheckboxList/CheckboxListItem.doc.mjs +16 -0
  260. package/src/CheckboxList/CheckboxListItem.tsx +10 -0
  261. package/src/ClickableCard/ClickableCard.doc.mjs +2 -2
  262. package/src/ClickableCard/ClickableCard.test.tsx +5 -4
  263. package/src/ClickableCard/ClickableCard.tsx +9 -9
  264. package/src/Code/Code.doc.mjs +1 -0
  265. package/src/CodeBlock/CodeBlock.highlightStyles.test.tsx +87 -0
  266. package/src/CodeBlock/CodeBlock.tsx +11 -1
  267. package/src/CommandPalette/CommandPalette.doc.mjs +2 -0
  268. package/src/CommandPalette/CommandPaletteInput.test.tsx +53 -4
  269. package/src/CommandPalette/CommandPaletteInput.tsx +33 -3
  270. package/src/CommandPalette/__tests__/CommandPaletteInputAudit.a11y.chromium.spec.ts +335 -0
  271. package/src/CommandPalette/__tests__/CommandPaletteItemAudit.a11y.chromium.spec.ts +292 -0
  272. package/src/ComplexSelector/ComplexSelector.focusableDisabled.test.tsx +76 -0
  273. package/src/ComplexSelector/ComplexSelector.tsx +21 -4
  274. package/src/ContextMenu/ContextMenu.doc.mjs +2 -3
  275. package/src/ContextMenu/ContextMenu.test.tsx +53 -2
  276. package/src/ContextMenu/ContextMenu.tsx +4 -1
  277. package/src/ContextMenu/__tests__/ContextMenuAudit.a11y.chromium.spec.ts +438 -0
  278. package/src/DateInput/DateInput.doc.mjs +9 -8
  279. package/src/DateInput/DateInput.test.tsx +88 -13
  280. package/src/DateInput/DateInput.tsx +49 -21
  281. package/src/DateInput/DateInputTouch.test.tsx +22 -1
  282. package/src/DateInput/NativeDateField.test.tsx +29 -3
  283. package/src/DateInput/NativeDateField.tsx +20 -7
  284. package/src/DateInput/TouchDateField.tsx +24 -9
  285. package/src/DateRangeInput/DateRangeInput.doc.mjs +6 -5
  286. package/src/DateRangeInput/DateRangeInput.spec.md +13 -13
  287. package/src/DateRangeInput/DateRangeInput.test.tsx +82 -16
  288. package/src/DateRangeInput/DateRangeInput.tsx +40 -20
  289. package/src/DateTimeInput/DateTimeInput.doc.mjs +9 -8
  290. package/src/DateTimeInput/DateTimeInput.test.tsx +126 -11
  291. package/src/DateTimeInput/DateTimeInput.tsx +42 -26
  292. package/src/DateTimeInput/DateTimeInputTouch.test.tsx +24 -0
  293. package/src/DateTimeInput/NativeDateSegment.tsx +9 -6
  294. package/src/DateTimeInput/NativePickerSegments.test.tsx +31 -0
  295. package/src/DateTimeInput/NativeTimeSegment.tsx +9 -6
  296. package/src/DateTimeInput/TouchDateTimeField.tsx +22 -7
  297. package/src/Dialog/Dialog.test.tsx +85 -0
  298. package/src/Dialog/Dialog.tsx +29 -11
  299. package/src/Dialog/__tests__/Dialog.a11y.known-failures.ts +0 -14
  300. package/src/Drawer/Drawer.doc.mjs +1 -0
  301. package/src/DropdownMenu/DropdownMenu.spec.md +33 -2
  302. package/src/DropdownMenu/DropdownMenu.ssr.test.tsx +57 -0
  303. package/src/DropdownMenu/DropdownMenu.test.tsx +79 -6
  304. package/src/DropdownMenu/DropdownMenu.tsx +163 -148
  305. package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +1 -1
  306. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +1 -1
  307. package/src/DropdownMenu/DropdownMenuContext.public.test.ts +22 -0
  308. package/src/DropdownMenu/DropdownMenuContext.tsx +63 -1
  309. package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +2 -2
  310. package/src/DropdownMenu/DropdownMenuDivider.spec.md +192 -0
  311. package/src/DropdownMenu/DropdownMenuDivider.tsx +9 -5
  312. package/src/DropdownMenu/DropdownMenuGroup.doc.mjs +169 -10
  313. package/src/DropdownMenu/DropdownMenuGroup.tsx +6 -4
  314. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +66 -7
  315. package/src/DropdownMenu/DropdownMenuItem.spec.md +209 -0
  316. package/src/DropdownMenu/DropdownMenuLazySheet.test.tsx +126 -0
  317. package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +1 -1
  318. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +1 -1
  319. package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +16 -1
  320. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +808 -1
  321. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +568 -97
  322. package/src/DropdownMenu/__tests__/DropdownMenuDividerAudit.a11y.chromium.spec.ts +280 -0
  323. package/src/DropdownMenu/__tests__/DropdownMenuGroupAudit.a11y.chromium.spec.ts +334 -0
  324. package/src/DropdownMenu/__tests__/DropdownMenuItemAudit.a11y.chromium.spec.ts +366 -0
  325. package/src/DropdownMenu/__tests__/SubMenuHeaderFooter.a11y.chromium.spec.ts +267 -0
  326. package/src/DropdownMenu/__tests__/warmMenuBottomSheet.tsx +43 -0
  327. package/src/DropdownMenu/lazyMenuBottomSheet.ts +71 -0
  328. package/src/DropdownMenu/menuRegionStops.ts +167 -0
  329. package/src/DropdownMenu/modules/useMenuPress.spec.md +9 -0
  330. package/src/EmptyState/EmptyState.doc.mjs +3 -2
  331. package/src/EmptyState/EmptyState.spec.md +189 -0
  332. package/src/EmptyState/EmptyState.test.tsx +74 -3
  333. package/src/EmptyState/EmptyState.tsx +4 -8
  334. package/src/Field/Field.doc.mjs +14 -8
  335. package/src/Field/Field.spec.md +217 -0
  336. package/src/Field/Field.test.tsx +60 -2
  337. package/src/Field/Field.tsx +17 -8
  338. package/src/Field/FieldLabel.doc.mjs +133 -26
  339. package/src/Field/FieldLabel.spec.md +172 -0
  340. package/src/Field/__tests__/FieldLabelAudit.a11y.chromium.spec.ts +296 -0
  341. package/src/FieldStatus/FieldStatus.spec.md +3 -2
  342. package/src/FileInput/FileInput.test.tsx +30 -7
  343. package/src/FileInput/FileInput.tsx +21 -11
  344. package/src/FormLayout/FormLayout.doc.mjs +6 -3
  345. package/src/FormLayout/FormLayout.spec.md +192 -0
  346. package/src/FormLayout/FormLayout.test.tsx +15 -0
  347. package/src/FormLayout/FormLayout.tsx +7 -6
  348. package/src/FormLayout/FormLayoutContext.ts +3 -3
  349. package/src/Grid/Grid.doc.mjs +7 -1
  350. package/src/Grid/Grid.spec.md +93 -113
  351. package/src/Grid/Grid.test.tsx +22 -0
  352. package/src/Grid/Grid.tsx +10 -9
  353. package/src/Grid/GridSpan.doc.mjs +3 -3
  354. package/src/Grid/GridSpan.tsx +4 -1
  355. package/src/Heading/Heading.test.tsx +57 -0
  356. package/src/Heading/Heading.tsx +6 -2
  357. package/src/Icon/Icon.doc.mjs +36 -0
  358. package/src/Indicator/Indicator.doc.mjs +3 -3
  359. package/src/Item/Item.doc.mjs +12 -8
  360. package/src/Item/Item.test.tsx +61 -0
  361. package/src/Item/Item.tsx +40 -4
  362. package/src/Layout/LayoutHeader.doc.mjs +5 -0
  363. package/src/Link/Link.test.tsx +21 -7
  364. package/src/Link/Link.tsx +16 -24
  365. package/src/Link/__tests__/Link.a11y.states.ts +1 -1
  366. package/src/List/List.doc.mjs +14 -1
  367. package/src/List/List.spec.md +129 -77
  368. package/src/List/List.test.tsx +163 -94
  369. package/src/List/List.tsx +74 -18
  370. package/src/List/ListContext.tsx +9 -3
  371. package/src/List/ListItem.doc.mjs +16 -0
  372. package/src/List/ListItem.tsx +56 -27
  373. package/src/List/index.ts +1 -1
  374. package/src/Markdown/Markdown.rerender.test.tsx +143 -0
  375. package/src/Markdown/Markdown.tsx +103 -36
  376. package/src/Markdown/parser.ts +8 -2
  377. package/src/Markdown/plugins/headingLinks.ts +9 -1
  378. package/src/MetadataList/MetadataList.doc.mjs +3 -3
  379. package/src/MetadataList/MetadataList.test.tsx +38 -0
  380. package/src/MetadataList/MetadataList.tsx +8 -1
  381. package/src/MetadataList/MetadataListContext.tsx +1 -1
  382. package/src/MobileNav/MobileNav.tsx +30 -3
  383. package/src/MobileNav/MobileNavCloseEdgeCases.test.tsx +173 -15
  384. package/src/MoreMenu/MoreMenu.test.tsx +5 -1
  385. package/src/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.ts +71 -0
  386. package/src/MultiSelector/MultiSelector.doc.mjs +5 -5
  387. package/src/MultiSelector/MultiSelector.focusableDisabled.test.tsx +121 -0
  388. package/src/MultiSelector/MultiSelector.test.tsx +49 -7
  389. package/src/MultiSelector/MultiSelector.tsx +53 -29
  390. package/src/Pagination/Pagination.test.tsx +5 -1
  391. package/src/Pagination/Pagination.tsx +3 -1
  392. package/src/Popover/Popover.test.tsx +15 -0
  393. package/src/Popover/Popover.tsx +19 -8
  394. package/src/PowerSearch/PowerSearch.test.tsx +62 -0
  395. package/src/PowerSearch/PowerSearch.tsx +9 -0
  396. package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +3 -2
  397. package/src/PowerSearch/PowerSearchToken.test.tsx +7 -5
  398. package/src/PowerSearch/PowerSearchValueEditor.test.tsx +71 -0
  399. package/src/PowerSearch/PowerSearchValueEditor.tsx +45 -0
  400. package/src/ProgressBar/ProgressBar.doc.mjs +1 -0
  401. package/src/RadioList/RadioList.fr10.test.tsx +45 -2
  402. package/src/RadioList/RadioList.test.tsx +22 -0
  403. package/src/RadioList/RadioList.tsx +4 -1
  404. package/src/RadioList/RadioListItem.doc.mjs +16 -0
  405. package/src/RadioList/RadioListItem.tsx +10 -1
  406. package/src/Resizable/useResizable.doc.mjs +2 -0
  407. package/src/ScrollableArea/ScrollableArea.doc.mjs +1 -1
  408. package/src/Selector/Selector.doc.mjs +4 -4
  409. package/src/Selector/Selector.focusableDisabled.test.tsx +127 -0
  410. package/src/Selector/Selector.spec.md +11 -11
  411. package/src/Selector/Selector.test.tsx +64 -6
  412. package/src/Selector/Selector.tsx +51 -21
  413. package/src/Selector/SelectorOption.tsx +4 -0
  414. package/src/SideNav/SideNav.spec.md +227 -0
  415. package/src/SideNav/SideNav.test.tsx +255 -0
  416. package/src/SideNav/SideNavItem.doc.mjs +2 -2
  417. package/src/SideNav/SideNavItem.tsx +99 -17
  418. package/src/Slider/Slider.spec.md +41 -20
  419. package/src/Slider/Slider.test.tsx +3 -3
  420. package/src/Slider/Slider.tsx +8 -15
  421. package/src/Spinner/Spinner.doc.mjs +1 -1
  422. package/src/Switch/Switch.test.tsx +85 -8
  423. package/src/Switch/Switch.tsx +26 -16
  424. package/src/Switch/__tests__/Switch.a11y.states.ts +2 -2
  425. package/src/Switch/switch.markers.stylex.ts +4 -0
  426. package/src/TabList/TabList.spec.md +57 -44
  427. package/src/Table/Table.spec.md +8 -1
  428. package/src/Table/plugins/activation/useTableActivation.spec.md +254 -0
  429. package/src/Table/plugins/infiniteScroll/useTableInfiniteScroll.spec.md +244 -0
  430. package/src/Table/plugins/selection/useTableSelection.test.tsx +5 -3
  431. package/src/Table/plugins/virtualization/useTableVirtualization.spec.md +266 -0
  432. package/src/Text/Text.test.tsx +57 -0
  433. package/src/Text/Text.tsx +6 -2
  434. package/src/TimeInput/NativeTimeInput.test.tsx +25 -1
  435. package/src/TimeInput/Presentation.test.tsx +23 -0
  436. package/src/TimeInput/TimeInput.doc.mjs +13 -10
  437. package/src/TimeInput/TimeInput.fr10.test.tsx +15 -0
  438. package/src/TimeInput/TimeInput.test.tsx +139 -7
  439. package/src/TimeInput/TimeInput.tsx +53 -24
  440. package/src/TimeInput/TouchTimeField.tsx +27 -5
  441. package/src/Timestamp/Timestamp.doc.mjs +2 -2
  442. package/src/Timestamp/Timestamp.test.tsx +168 -0
  443. package/src/Timestamp/Timestamp.tsx +62 -11
  444. package/src/ToggleButton/ToggleButton.test.tsx +95 -0
  445. package/src/ToggleButton/ToggleButton.tsx +12 -1
  446. package/src/ToggleButton/ToggleButtonGroup.doc.mjs +4 -0
  447. package/src/Token/Token.test.tsx +26 -4
  448. package/src/Token/Token.tsx +7 -3
  449. package/src/Token/__tests__/TokenRemoveTarget.a11y.chromium.spec.ts +86 -0
  450. package/src/Tokenizer/Tokenizer.spec.md +28 -28
  451. package/src/Toolbar/Toolbar.test.tsx +0 -8
  452. package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +163 -0
  453. package/src/Toolbar/__tests__/Toolbar.a11y.renders.tsx +63 -0
  454. package/src/Toolbar/__tests__/Toolbar.a11y.states.ts +142 -0
  455. package/src/Toolbar/__tests__/Toolbar.a11y.test.tsx +126 -0
  456. package/src/Tooltip/Tooltip.test.tsx +51 -6
  457. package/src/Tooltip/Tooltip.tsx +41 -18
  458. package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +129 -0
  459. package/src/Tooltip/__tests__/Tooltip.a11y.renders.tsx +86 -0
  460. package/src/Tooltip/__tests__/Tooltip.a11y.states.ts +132 -0
  461. package/src/Tooltip/__tests__/Tooltip.a11y.test.tsx +126 -0
  462. package/src/Tooltip/__tests__/TooltipHoverBridge.a11y.chromium.spec.ts +74 -0
  463. package/src/Tooltip/useTooltip.test.tsx +23 -0
  464. package/src/Tooltip/useTooltip.tsx +22 -9
  465. package/src/TopNav/TopNav.tsx +11 -1
  466. package/src/TopNav/TopNavHeading.tsx +1 -0
  467. package/src/TopNav/TopNavMegaMenu.test.tsx +47 -0
  468. package/src/TopNav/TopNavMegaMenu.tsx +9 -3
  469. package/src/TopNav/TopNavMenu.test.tsx +46 -1
  470. package/src/TopNav/TopNavMenu.tsx +13 -3
  471. package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +74 -0
  472. package/src/TreeList/TreeList.doc.mjs +1 -0
  473. package/src/TreeList/TreeList.test.tsx +355 -6
  474. package/src/TreeList/TreeList.tsx +5 -1
  475. package/src/TreeList/TreeListBranches.tsx +6 -0
  476. package/src/TreeList/TreeListItem.tsx +94 -15
  477. package/src/Typeahead/Typeahead.test.tsx +89 -0
  478. package/src/Typeahead/Typeahead.tsx +15 -2
  479. package/src/__tests__/DisabledTriggerFocus.a11y.chromium.spec.ts +86 -0
  480. package/src/docPropLiterals.test.ts +36 -10
  481. package/src/hooks/useGridFocus.ts +16 -1
  482. package/src/hooks/useMenuHover.ts +18 -13
  483. package/src/hooks/useMenuPress.ts +45 -7
  484. package/src/postinstall.test.mjs +79 -0
  485. package/src/reset.a11y.chromium.spec.ts +52 -1
  486. package/src/reset.css +9 -29
  487. package/src/reset.test.ts +11 -0
  488. package/src/theme/derivedVarRegistry.test.ts +7 -0
  489. package/src/unicodePropertyEscapes.source-build.test.mjs +69 -0
  490. package/src/utils/disabledInteraction.ts +40 -0
  491. package/src/utils/plainDate.test.ts +37 -1
  492. package/src/utils/plainDate.ts +15 -5
  493. package/src/utils/timeParser.test.ts +11 -0
  494. package/src/utils/timeParser.ts +9 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,159 @@
1
1
  # @xds/core
2
2
 
3
+ # 0.7.2
4
+
5
+ #### Experimental APIs
6
+
7
+ - Drawer's full-viewport mobile coverage ships as experimental: `experimental={{isFullWidthOnMobile: true}}` fills the viewport below 640px instead of keeping the 56px page reveal. Anything inside Drawer's `experimental` prop may change or be removed in a patch release; omitting it keeps the stable behavior.
8
+
9
+ #### New Components
10
+
11
+ - Promote `Drawer` and `DrawerHeader` from the canary-only Lab package to Core, imported from `@astryxdesign/core/Drawer` or the package root. The stable package now ships the full-height side panel with modal and non-modal presentation, the shared dismissal stack, Dialog's `purpose` dismissal policy, a `DrawerHeader` whose close button appears when given `onOpenChange`, and Dialog-style container padding (`--spacing-4` by default, `padding` prop, or a theme's `drawer` padding), plus Core documentation and runnable examples. Canary users importing from `@astryxdesign/lab` switch to `@astryxdesign/core/Drawer`.
12
+
13
+ #### New Features
14
+
15
+ - An integration can set the command its users run the CLI with: a new `cliCommand` field in `astryx.integration.*`, such as `cliCommand: 'acme astryx'`. In a project that loads that integration, every command the CLI prints starts with it instead of the package-manager prefix (`npx astryx`, `pnpm exec astryx`): next-step hints, errors, suggestions, Doctor fixes, `--help`, the setup reminder, the agent-docs block, and doc text. If two loaded integrations set different commands, neither is used, and the new `cli-command` check in `astryx doctor` warns. An invalid `cliCommand` is ignored with an `invalid_cli_command` warning; the rest of the manifest still loads.
16
+ Docs, including an integration's, are now written with bare `astryx ...` commands, and `astryx docs` prefixes them for the project when it prints them. JSON output keeps every command bare, as before. The install-time setup reminder from `@astryxdesign/core` and `@astryxdesign/cli` names the command the project's package manager runs, instead of always `npx @astryxdesign/cli`.
17
+ - Adds the `@astryx.diffViewer.*` keys to the `en` catalog so the lab `DiffViewer` reads its file-status badges, line counts, line-number button labels, per-line "Added"/"Removed" labels, and empty-state messages from the translation runtime. No existing string changes; locales without a translation fall back to English.
18
+ - `Item` accepts `align="first-line"`, which centers each start and end slot on the label's first line. A small status dot, radio, checkbox, or timestamp beside a wrapping label now stays level with the first line, where `center` drops it to the middle of the row and `start` leaves it above the line. A slot taller than the first line moves the text down rather than leaving the row, and a one-line row with no description looks the same as `center`. `ListItem`, `RadioListItem`, and `CheckboxListItem` accept the same `align` and pass it to their row. Themes can style these rows through the `item` target's `align` axis. The default stays `center`, so existing rows don't change.
19
+ - i18n catalog: add the English messages used by the Lab CommentComposer for its input, image upload, inline quote, emoji action, cancel action, and retry affordance.
20
+ - i18n catalog: add the English messages used by the Lab CommentThread for replies, reactions, edit history, resolution, errors, comment actions, and the unsaved-draft warning it announces when a dismissal would discard a reply or edit.
21
+ - i18n catalog: add the English messages used by the Lab Comments panel for its region, empty/loading states, pagination, and posting errors.
22
+ - i18n catalog: add the English messages used by the Lab EmojiPicker so locale catalogs and provider overrides can replace its labels, search status, loading state, and group names.
23
+ - `List`: add `edge` to choose where each row's text, dividers, and hover and selection backgrounds sit. `padded` (default) keeps today's look. `flush` drops the rows' side padding, so text and dividers start on the same line as the list header and a heading above, with no container needed. `outset` keeps backgrounds' room around the text while reaching into the padding of a Card, Section, or Dialog, so text lands on the heading's line. `bleed` reaches rows to the container's edges with square corners, like Table rows in a Card. `edgeCompensation="inline"` is deprecated in favor of `edge="outset"` and keeps working; its rows' outer room is no longer cut off by the list's swipe clip. Run `astryx upgrade` to rename it.
24
+ - `Pagination`: `variant="compact"` shows first/last buttons around previous/next when `hasFirstLast` is `true` and the page count is known. Compact still omits them by default, and the `input` variant still shows them unless `hasFirstLast` is `false`.
25
+ - `reset.css`: in Chromium, the dropdown marker of an `<input>` with a `list` sits in the middle of the field. Chromium sets the marker on the field's line-height, so above a line-height of 1 it sits low, and the reset makes every field inherit the page's 1.5: the marker sat 3.5px below the middle of a 40px field, and further down on taller lines. Date and time fields, whose calendar icon uses the same part, keep their icon where it was. To keep the old placement, add `input[list]::-webkit-calendar-picker-indicator { line-height: inherit; }` after the reset.
26
+ - `SideNavItem`: nested items now span the full width of the nav list, like top-level items, so their hover and selected fill lines up with the rows above them. Before, a nested item started 24px in from the list edge. The indent now sits inside the row, one `--spacing-6` step per nesting level, so icons and labels stay exactly where they were. The indent area is now part of the nested row, so it shows hover feedback and clicking it activates the item. Content placed directly inside a `SideNavItem` that is not itself a `SideNavItem` is no longer inset by the children group. There is no supported way to keep the old inset look.
27
+ - `TabMenu` passes host attributes and DOM event handlers to its trigger button. The trigger keeps its button semantics, tab stop, and menu disclosure attributes; a caller's `onClick` runs after the menu toggle.
28
+ - Tables draw a line on every cell edge, not only between rows, on both `Markdown` and the RichText surfaces, and the grid closes at the table's rim. A reader following one row across never needed vertical lines, but someone editing a table has to aim at a cell and judge where a selection stops, and the empty 3×3 a toolbar insert produces was three horizontal rules with no sign it had three columns. The line is the same `--color-border` already used between rows, the rim merges with it into one rule rather than doubling at the edge, and both surfaces move together — the read and edit renderings match block for block, more closely than before.
29
+ - `TreeList`: nested rows now span the full width of the list, like root rows, so their hover and selected fill lines up with the rows above them. Before, a nested row started at its indent. The indent now sits inside the row, so chevrons, icons and labels stay exactly where they were. The indent area is now part of the row, so it shows hover feedback, and clicking it activates the row: clicking a folder's indent toggles the folder, and clicking a row whose only action is its link anywhere outside its label follows the link, as Enter already did: modifier keys are kept, so Cmd/Ctrl-click opens a new tab, and a middle-click opens one too. Controls in a row's start or end content keep their own clicks, including role-based ones such as a `role="switch"` element, which no longer also toggle the row or run its `onClick`. Guide lines draw above the rows, so a hover or selected fill doesn't break them, and they let clicks pass through to the row underneath. The one exception is a row with keyboard focus: it draws above the guides so they never cut its focus ring, which means that if it is also filled (selected or hovered), its fill covers the guides at that row. Padding set on a row through the `tree-list-item` theme target or an item's `className`, `style` or `xstyle` still composes with the indent. `--tree-list-indent` still retunes the indent step. There is no supported way to keep the old inset rows.
30
+
31
+ #### Fixes
32
+
33
+ - Allow MetadataList label width without an explicit position while preserving single- and multi-column label defaults (#6310)
34
+ - AppShell: defer hiding the mobile nav's Activity boundary until its close animation finishes (#5701)
35
+ `AppShell` mounts the mobile nav drawer inside a `React.Activity` boundary that flipped to `mode="hidden"` in the same commit as the drawer closing. React's `Activity` hides its subtree with `display: none !important` synchronously and re-runs the cleanup of every effect inside it, which cut off `MobileNav`'s own slide-out CSS transition and cancelled its delayed `dialog.close()` before either could run. The drawer still closed correctly (a safety-net effect force-closed the native dialog on that same cleanup), just with the close animation skipped entirely.
36
+
37
+ `AppShell` now holds the `Activity` boundary visible for a beat after the drawer closes, strictly longer than `MobileNav`'s own worst-case close delay, so `MobileNav`'s normal close effect gets a real chance to run its transition and its own timed `dialog.close()` before `Activity` ever hides the subtree.
38
+
39
+ `MobileNav` also keeps its dialog rendered from the commit that closes it until its delayed `close()` has run, instead of relying on the dialog's discrete `display` transition to do so. A browser that does not hold that transition (WebKit) dropped the dialog to `display: none` at once while it was still an open modal, so for about 200ms nothing was visible and the page stayed inert. The slide-out itself is unchanged.
40
+
41
+ - `AspectRatio`'s `fit="cover"` and `fit="contain"` now fill the box on the documented Tailwind setups. The fit rules lived in `reset.css`, in the `reset` layer, and the setup guides put Tailwind's preflight in a layer above it, so preflight's `img, video { height: auto }` won and a fitted image kept its own aspect ratio. The fit sizing now ships with the component's own styles in `astryx-base`: above preflight, and below Tailwind's utilities, so a utility class on the child still wins. `reset.css` no longer carries AspectRatio rules.
42
+ With `fit="cover"` or `fit="contain"`, a direct child's own Astryx styles (an Astryx component's own size or `object-fit`) no longer override the fill. To keep a child's own size, set it with an inline style, unlayered CSS or a rule in a later layer, or leave `fit` unset.
43
+ - The static `AvatarGroupOverflow` chip (no `onClick`) is exposed to assistive technology as an image named by its count label ("5 more"). Before, it was a span with an `aria-label` but no role, a name the generic role does not allow, so screen readers could skip the count. This meets WCAG 2.2 SC 4.1.2 Name, Role, Value. Nothing changes visually; the clickable chip stays a button, and a `role` passed by the caller still wins.
44
+ - `Button` (and `IconButton`) no longer use the native `disabled` attribute while a busy state (`isLoading`, or a non-interruptible `clickAction` in flight) is the only reason the button can't be clicked. A natively disabled element can't hold focus, so the browser moved focus to `<body>` the instant an action started and never restored it — the classic reason busy state should be visual-only. Busy now uses `aria-disabled` (button stays focusable) with `aria-busy` and the spinner, matching the documented "Disabled vs Busy" API convention and the behavior input components already follow. `isDisabled` (and `isDisabled` together with a busy state) is unchanged — that still uses native `disabled`. `isInterruptible` is also unchanged.
45
+ `aria-disabled`, unlike native `disabled`, still lets the button dispatch a click — the busy guard already called `preventDefault()` to block the button's own action, but a click on a busy button could still bubble to a wrapping ancestor's own click handler (a clickable row, card, or backdrop), which the previous native-`disabled` behavior never allowed. `handleClick` now also calls `stopPropagation()` in that guard, containing an unavailable click at the Button boundary the way a natively disabled control always did.
46
+
47
+ The `href`-rendered anchor path had the same gap for keyboard activation: it only wired `onClick` to the busy guard, not `onKeyDown`, so a consumer's own `onKeyDown` still received Enter/Space on a busy-only anchor Button while it was announced `aria-disabled`. The anchor path now wires the same `handleKeyDown` suppression the button path already had, so Enter/Space are swallowed and every other key still reaches the consumer, on both render paths.
48
+
49
+ - `ChatLayoutScrollButton`: the scroll-to-bottom pill now gives up keyboard focus, and refuses new focus, as soon as it starts to hide. Previously focus stayed on the fading pill for about half a second, until `visibility: hidden` applied, so it could sit on a control that was fading out or already transparent (WCAG 2.2 SC 2.4.7 Focus Visible). (#7738)
50
+ - Preserve caller-provided IDs on CheckboxInput and keep labels associated with the native input.
51
+ - CheckboxList keeps a caller's `aria-labelledby`. The group always replaced it with its own label id, so the caller's ids never reached the accessible name. The group is now named by its label and then the caller's ids, the same order RadioList and TimeInput use.
52
+ - The setup reminder, the swizzle StyleX note, and one doctor line say only what is true
53
+ - `CommandPaletteInput`: the query field now draws the shared keyboard focus ring. Previously it suppressed the browser outline without replacing it, so keyboard users could not see which field held focus.
54
+ - Source builds through Next.js's Babel no longer fail with `Unknown property: L` (or `Zs`, `Letter`) when the app sets no browserslist or targets a browser without Unicode property escapes. `Avatar`'s initials and the Markdown parser's emphasis and heading-link rules now build their `\p{…}` regular expressions at runtime, as `NumberInput` already does, so there is no literal for Babel to rewrite. Matching is unchanged.
55
+ - `DrawerHeader` now renders numeric zero `startContent` inside its start slot and preserves numeric zero `endContent` when no close button is present.
56
+ - `Drawer` now slides from the correct logical edge when `dir="rtl"` is set directly on the drawer, matching inherited right-to-left regions.
57
+ - `DropdownMenuDivider` now forwards host attributes and DOM handlers (`id`, `data-*`, `aria-*`, event handlers) to its separator, as other DOM-owning components do. Before, it accepted only `xstyle`, `className`, `style` and `ref` and dropped everything else, so a separator could not carry a test id or an accessible label. Its `role="separator"` and orientation stay component-owned.
58
+ - DropdownMenu: load the touch bottom sheet only when a menu shows it
59
+ `DropdownMenu` imported its touch sheet (BottomSheet, its gestures, and the touch action list) up front, so every page with a dropdown shipped it, even when the menu only ever opens as an anchored popover. The sheet now loads on demand, the way `ContextMenu` already loads it. A popover-only dropdown's own code drops by about a third (about 23 KB gzipped). Bottom-sheet and adaptive menus behave as before. The sheet starts loading when the trigger mounts, and a menu opened from the keyboard before it arrives still focuses its first action once it loads.
60
+ - `EmptyState` no longer leaves blank icon or action spacing when those optional slots receive a boolean or an empty string. An empty description also omits its theme target. The docs now describe configurable heading levels and map the container anatomy to the public theme target.
61
+ - Keep `Field`'s horizontal-label layout marker authoritative when callers pass conflicting data attributes, and keep hidden descriptions visually hidden in that layout. Correct its custom label-icon type, all three status placements, complete anatomy, and guidance for controls that cannot safely use attached status.
62
+ - `FieldStatus` (and any element using `useEntryAnimation`) no longer causes a hydration mismatch on server-rendered pages. An element that arrives in the server's HTML now hydrates without the entry style and never plays its entry animation, even when hydration runs after the page has painted; elements mounted after hydration still animate. `useEntryAnimation` no longer documents server rendering as unsupported.
63
+ - Keep `FormLayout`'s direction metadata authoritative when callers pass conflicting data attributes.
64
+ - `GridSpan` keeps its content inside the span. A child whose min-content width is wider than the span, such as a `Tokenizer` with a long token, used to stretch the span's column past the grid cell; it now gets the span's width and truncates the way it does outside a Grid (#7438)
65
+ - Keep `Grid`'s theming metadata authoritative when callers pass conflicting data attributes.
66
+ - `useHoverCard`: closing a hover card with `hide()` or Escape while the pointer rests on the card no longer leaves the next open stuck. The hook kept believing the pointer was still over the card, because a card closed that way unmounts without a `mouseleave`, so the trigger's next hover-open never closed on leave or after `hideDelay`. Both paths now clear that state, as the touch dismissal already did.
67
+ - Compute ISO week numbers (`Calendar hasWeekNumbers`, `getWeekNumber`) on UTC anchors instead of local-time `Date` arithmetic. In timezones whose DST ends after New Year (Sydney, Auckland, Santiago), the local-millisecond difference between the week's Thursday and January 1 carried the DST offset, and in years whose January 1 is a Friday that extra hour rounded a whole week up: the entire ISO week 14 of April 2021 displayed as week 15. Week numbers are now identical in every timezone.
68
+ - Anchored layers (`Popover`, `DropdownMenu`, and every component built on them) now keep their safe-area gutter and dynamic-viewport size cap in the shipped stylesheet. The compiled CSS referenced an undefined variable for the preferred value, so every browser used the fallback: on a phone with a dynamic toolbar or a notch, a tall layer could run past the visible screen or under a declared bottom bar. Desktop sizes are unchanged.
69
+ - `createMarkdownFrontmatter` now hands its `parse` function a plain object, so a parser that returns the decoded fields unchanged (`parse: fields => fields`) is accepted as metadata. Before, the record had no prototype, failed the JSON-like metadata check, and the document fell back to readable text with its frontmatter still showing.
70
+ - `MultiSelector`: the row action cell the keyboard reaches with the inline-end arrow draws the standard focus ring. Before, its outline read four CSS variables that nothing declared, so no ring showed on the active action cell.
71
+ - PowerSearch: clear every filter with one press of the clear-all button instead of removing only the last filter.
72
+ - Prevent pressing a built-in PowerSearch filter token with the mouse from opening search suggestions before the filter editor. Token editing, removal, and keyboard navigation retain their existing behavior.
73
+ - Keep built-in PowerSearch value controls disabled in read-only filter editors, matching custom editors.
74
+ - RadioList keeps a caller's `aria-labelledby`. The radiogroup always replaced it with its own label id, so the caller's ids never reached the accessible name. The group is now named by its label and then the caller's ids, the same order TimeInput uses.
75
+ - Restore focus to the element that opened a Dialog when its content mounts in the open commit. The opener was captured in the Dialog's passive effect, which runs after a freshly mounted DialogHeader's autofocus effect had already moved focus to the dialog's own title — closing then restored focus to that detached title and the user's focus landed on `<body>`. The capture now runs in a layout effect, before any descendant's passive effect. (#5637)
76
+ - `astryx search` finds more of what a reader means when the words differ from the catalog's.
77
+ - `astryx search` ranks a match on more of your words above a shorter named entry.
78
+ - `SideNavItem` keeps a caller's `className` on its row element (the link or button, and the collapsed rail item) next to its own classes. Before, the row's generated class replaced it, so a class passed to style the row (for example, a cursor while a row is dragged) never reached the DOM, even though `style`, ARIA, data attributes and handlers did.
79
+ - Shrink Token's invisible remove-button target from 44px to 24px without changing the visible icon. Clicking adjacent text or values in PowerSearch now edits the filter instead of accidentally removing it.
80
+ - DropdownMenu submenu flyouts close with their menu when it is light-dismissed: previously a submenu opened by tap or a fast click stayed open (and re-anchored to the viewport corner) after the menu was dismissed and reopened. A hover-open scheduled on a submenu trigger before the menu closed from elsewhere is also cancelled, so it can no longer reopen a flyout behind the dismissed menu
81
+ - `Switch` now adds a caller's `aria-describedby` to the switch control, ahead of its own description, status, and disabled-reason ids. Before, the value landed on the field wrapper, so a hint rendered elsewhere on the page could not describe the switch to assistive technology.
82
+ - `Switch` now puts a caller's `aria-labelledby` on the switch control. Before, the value landed on the field wrapper, so a visible title elsewhere in the row could not name the switch for assistive technology.
83
+ - A truncated `Text` or `Heading` (`maxLines`) now re-measures when its content changes, not only when its box resizes. A fixed-width single-line status whose message changed kept showing the first message in its truncation tooltip, and a new short message could keep a tooltip while a new long one lacked one. `useTruncation` now also observes the element's text, so the tooltip text and the truncated state follow the current content.
84
+ - `ToggleButton` keeps toggling when it also receives an `onClick`, for example from a wrapper that renders it as its trigger. That `onClick` used to replace the toggle's own click handling, so `onPressedChange` never ran and a `ToggleButtonGroup` member never asked its group to toggle (`pressedChangeAction` still ran). The caller's `onClick` now runs first and the toggle request follows. On a standalone `ToggleButton`, calling `preventDefault()` in that `onClick` cancels the request: neither `onPressedChange` nor `pressedChangeAction` runs.
85
+ - `useTooltip` (and every component built on it, such as `Button`'s `tooltip` prop) now drops a show that is still waiting out its delay when `isEnabled` turns `false`. Before, hovering a trigger and then disabling its tooltip within the delay let the timer fire anyway: the tooltip opened after its triggers were turned off, with no pointer-leave listener left to close it. A pending hide still runs, and an enabled tooltip is unchanged.
86
+ - Tooltip: an icon-only trigger now opens instead of throwing. The layer passed its trigger to `showPopover` as the invoker `source`, which the Popover API declares as an `HTMLElement`; a caller-rendered icon is an `SVGElement`, whose dictionary conversion throws before the popover opens, so the hint never appeared. An icon trigger now reaches `showPopover` without a source — positioning is unchanged, since the layer is anchored by its anchor-name pair, and only the invoker's focus order is given up.
87
+ - A collapsed `TopNavMenu` or `TopNavMegaMenu` section in the mobile drawer is now `inert` and hidden from assistive technology, so Tab no longer moves focus onto links that are not shown and screen readers no longer list them under a section announced as collapsed.
88
+ - An expanded `TopNavMenu` or `TopNavMegaMenu` section in the mobile drawer no longer clips the focus ring of its items. The section still clips while collapsed and while it animates open or closed.
89
+ - `Typeahead`, `Tokenizer`, and `PowerSearch`: clear loading state and stop busy indicator when search source is replaced (#7457)
90
+
91
+ #### Performance
92
+
93
+ - `Text` and `Heading` with `maxLines` and `hasTruncateTooltip={false}` no longer measure their text or observe it for resizes and content changes. Only the tooltip uses that measurement, so with the tooltip off the text is cut by CSS alone, and a long table of truncated cells no longer pays a layout read per cell. Rendering is unchanged; with the tooltip enabled (the default) nothing changes.
94
+
95
+ #### Documentation
96
+
97
+ - `Avatar` and `AvatarGroup` docs list the numeric sizes `size` accepts (16, 20, 24, 32, 36, 40, 48, 60, 64, 72, 96, 128, 144, 180) instead of implying any pixel value, and say that an `AvatarGroup`'s size always overrides a child `Avatar`'s size, including the group's default.
98
+ - Docs and CLI examples import each Core export from the path `astryx component <Name>` prints.
99
+ - `ContextMenu` docs now state that data-driven `items` and compound `menuContent` are mutually exclusive choices instead of marking `items` as unconditionally required.
100
+ - Document DropdownMenuGroup's complete wrapper props, group semantics, and non-interactive heading guidance.
101
+ - Document FieldLabel's complete public prop surface, group-label semantics, and supporting descriptions.
102
+ - Make `FormLayout` documentation match logical fractional grid tracks and viewport collapse, and make the public layout target discoverable from component anatomy.
103
+ - Make `Grid` and `GridSpan` documentation match fractional track sizing, responsive repeat behavior, implicit rows, and explicit-column spans.
104
+ - `useCombobox`, the single-select combobox hook exported from `@astryxdesign/core/Selector` that powers `Selector` and `CommandPalette`, now has hook docs, so `astryx hook useCombobox` and `astryx search combobox` return it with its options, its return fields, and how to wire `aria-activedescendant` while focus stays on the control.
105
+ - The `useMultiCombobox` hook docs now say that ArrowDown or ArrowUp opening the list lands on the first or last option even with `hasSearch` or a disabled end option, and that the hook still handles Home and End with `hasSearch`, so a search input that keeps those keys for the caret stops them first and relies on PageUp and PageDown.
106
+ - `useMultiCombobox`, the multi-select combobox hook exported from `@astryxdesign/core/MultiSelector` that powers `MultiSelector`, now has hook docs, so `astryx hook useMultiCombobox` and `astryx search combobox` return it with its options, including the grid rows with an action cell, its return fields, and how to wire `aria-activedescendant` while focus stays on the control.
107
+ - InternationalizationProvider documentation now names its nonvisual provider boundary so the new component contract can map its anatomy without implying rendered DOM. (#6048)
108
+ - `ListItem`'s docs now list `label` as a `ReactNode`, matching its props type: a string is truncated to one line, and any other node renders as given. They used to say `string`, which told readers a rich label had to be restructured away.
109
+
110
+ #### Other Changes
111
+
112
+ - `VStack` and `HStack` come from `@astryxdesign/core/VStack` and `@astryxdesign/core/HStack`, `Heading` from `@astryxdesign/core/Heading`, `Text` from `@astryxdesign/core/Text`, and `Theme` and `defineTheme` from `@astryxdesign/core/theme`.
113
+ - This covers the guides, the `Card` docs, the next steps `astryx init` prints, the install example `astryx theme build` prints, the wiring example `theme add` prints, the build rules, the theme-module fix `astryx doctor` prints, and the annotated theme template.
114
+ - Every path was already exported. Nothing else changes.
115
+ - The "run init to finish setup" reminder no longer prints where agents already have the Astryx prompt. In a git repository it looks for init's block in the agent docs from the project up to the repository root, because coding agents read every agent doc in between, so a package in a monorepo that ran `init` at its root stays quiet. This holds for every command and for the reminder printed when `@astryxdesign/core` or `@astryxdesign/cli` is installed. Running the CLI from its own source checkout, inside that checkout, prints no reminder. A project with no block in reach still gets it, and `--json` never prints it.
116
+ - `astryx swizzle` no longer says StyleX components "render unstyled (no error)" without a StyleX compiler. Importing them throws StyleX's "Unexpected 'stylex.create' call at runtime" error and the page does not render, and the note now says so.
117
+ - In an integration package, where the package's own manifest loads, `astryx doctor`'s implicit-integrations line no longer says that "every loaded integration is named in astryx.config". It names the package's own manifest: as the only loaded integration, or beside the integrations astryx.config names.
118
+
119
+ Classification: contract-restoring. Only message text changes: JSON keys, check ids, statuses, and exit codes are unchanged. The doctor line's new text also appears in its `--json` `message`.
120
+
121
+ - Internal groundwork for a sub-menu's header and footer: `DropdownMenu`'s Tab walk through its header, menu and footer moves, unchanged, into a module of its own, so another menu level with regions can share it. `DropdownMenu`'s behavior does not change.
122
+ - Adjacent query words that join into a component, hook, or template name, or into a one-word keyword, match it: `table header cell with sort arrow` finds `TableHeaderCell`, `tree view folders` the `treeview` keyword, and a hook answers to its words without `use`. Most of a name, a name's leading words, or a run of its words also count for components and hooks, a step below the full name.
123
+ - A query that is one camelCase identifier and matches nothing as typed is read as the words it spells, so an unknown API name such as `useTablePaginationState` reaches `useTablePagination`. In a query of several words each identifier stays one term.
124
+ - When the whole query is an entry's name, these readings add no near siblings beside it. A match on a joined keyword never ranks above an entry the query names, and a match on part of another name does only when it spans more query words than that entry's name.
125
+ - A gerund matches its verb (`spacing` and `space`, `dragging` and `drag`), and a plural can start a longer word through its singular (`tokens` and `Tokenizer`).
126
+ - Core component docs declare more keywords: other libraries' names (`scrollarea`, `togglegroup`, `pageheader`, `splitpane`, `circularprogress`, `linearprogress`, `commandmenu`, `relativetime`, `sidesheet`, `descriptionlist`, `inlinecode`) and common glyph names on `Icon`, since any icon library's glyph renders through it.
127
+ - The JSON shape is unchanged.
128
+ - A match on part of a longer name that reads more of the query than the entry the query names is no longer held below it: `dropdown menu radio options` leads with `DropdownMenuRadioItem`, not `DropdownMenu`.
129
+ - `useResizable` drops the `splitview` keyword, which put it ahead of the side-panels guide.
130
+
131
+ #### Contributors
132
+
133
+ Thanks to everyone who contributed to this release:
134
+
135
+ - @azure-553
136
+ - @cixzhang
137
+ - @ernestt
138
+ - @Geervan
139
+ - @harjothkhara
140
+ - @HelloOjasMutreja
141
+ - @imdreamrunner
142
+ - @josephfarina
143
+ - @kentonquatman
144
+ - @korkt-kim
145
+ - @kyu-rong
146
+ - @latxh
147
+ - @ManoharPaturi
148
+ - @nynexman4464
149
+ - @potatowagon
150
+ - @Pushpak731
151
+ - @rapsealk
152
+ - @vjeux
153
+ - @WeAreResilience
154
+
155
+ ---
156
+
3
157
  # 0.7.1
4
158
 
5
159
  #### New Features
@@ -12,9 +166,9 @@
12
166
  - `CodeBlock` gains `isDiff`, a diff layer over any `language`, and Markdown renders a ```diff fence as tinted diff rows instead of plain text. (#7389)
13
167
  With `isDiff`, lines starting with `+` sit on a success-tinted row, `-` on an error-tinted row, `@@` hunk headers (and a `--- `/`+++ ` file-header pair directly before one) on a quiet muted row, and the rest of every line keeps the language's syntax highlighting. The glyph renders in its own column so the code's indentation lines up on every row and stays in the copied text. A changed row's margin reads the change: the tint runs under the line-number gutter too and spans the full scroll width of a long line, and the line number and the glyph take the row's marker colour, while the code keeps the syntax theme's colours. These are five new syntax-theme slots — `--color-syntax-added`, `--color-syntax-removed`, `--color-syntax-diff-header` (row paints, defaulting to `--color-success-muted` and `--color-error-muted` at 25% strength and to `--color-background-muted`; a defined syntax theme that leaves the header paint unset gets none, its header rows sitting on its own background in its punctuation colour) and `--color-syntax-added-marker`, `--color-syntax-removed-marker` (defaulting to `--color-text-green` and `--color-text-red` in the default syntax theme; a defined syntax theme that leaves them unset keeps its own line-number colour) — so existing and custom syntax themes need no change and may override them.
14
168
 
15
- Markdown maps a ```diff-<lang> fence to the layer over `<lang>` (labelled `<lang> diff`) and a ```diff fence to the layer over plaintext (labelled `diff`), so a diff keeps its header, copy button, disclosure, and a viewport name that still says `diff`.
169
+ Markdown maps a ``diff-<lang> fence to the layer over `<lang>` (labelled `<lang> diff`) and a ``diff fence to the layer over plaintext (labelled `diff`), so a diff keeps its header, copy button, disclosure, and a viewport name that still says `diff`.
16
170
 
17
- A ```diff fence that should stay plain text can use ```text. A custom `components.code` renderer is unchanged: it keeps receiving the fence's leading word characters in `language` (`diff` for both ```diff and ```diff-tsx, as today), so an existing `language === 'diff'` check still matches, and receives nothing new.
171
+ A `diff fence that should stay plain text can use `text. A custom `components.code` renderer is unchanged: it keeps receiving the fence's leading word characters in `language` (`diff` for both `diff and `diff-tsx, as today), so an existing `language === 'diff'` check still matches, and receives nothing new.
18
172
 
19
173
  - Clearable inputs: the clear button's tooltip now reads just "Clear" (localized) instead of repeating the field's label, so a long label no longer turns into awkward tooltip copy such as "Clear Assigned engineering partner". The button's accessible name is unchanged and still names the field, such as "Clear Search". Applies to every input that renders the shared clear button, including `TextInput`, `NumberInput`, the date and time inputs, `FileInput`, `Selector`, `MultiSelector`, `Typeahead`, and `Tokenizer`. Override the new `@astryx.inputClearButton.tooltip` catalog key to change the wording. (#7476)
20
174
  - `Markdown` fenced code blocks wrap long lines instead of scrolling them sideways. A reader on a narrow screen sees the whole line without a horizontal scroll, and where `Markdown` and RichText give a code block the same width, a long line takes the same number of lines in both. Only the appearance changes: the code's text, line numbers, syntax colours and what Copy returns are unchanged, and a code block whose lines no longer overflow also no longer takes the scroll region's Tab stop, as a code block that fits never has. To keep the old sideways-scrolling look, render code yourself through the `components.code` prop with a `CodeBlock` that leaves `isWrapped` off. (#7564)
package/README.md CHANGED
@@ -6,10 +6,10 @@ Core UI components, theme system, and utilities for the Astryx design system. Fo
6
6
  >
7
7
  > ```bash
8
8
  > npm install -D @astryxdesign/cli # or: pnpm add -D / yarn add -D / bun add -d
9
- > npx astryx init # resolves to the CLI you just installed
9
+ > npx @astryxdesign/cli init # the CLI you just installed
10
10
  > ```
11
11
  >
12
- > `init` writes the Astryx component index into your `AGENTS.md`/`CLAUDE.md` so your agent discovers components, templates, and design tokens instead of guessing. Need a single command without installing? Use the scoped package directly — `npx @astryxdesign/cli <cmd>` (or `pnpm dlx`/`bunx @astryxdesign/cli`). Bare `npx astryx` only works once `@astryxdesign/cli` is a dependency; before that npm resolves it to an unrelated package. See [XDS CLI](#xds-cli).
12
+ > `init` writes the Astryx component index into your `AGENTS.md`/`CLAUDE.md` so your agent discovers components, templates, and design tokens instead of guessing. Need a single command without installing? The same scoped command works: `npx @astryxdesign/cli <cmd>`. Always use the scoped name: the unscoped `astryx` resolves to an unrelated npm package until `@astryxdesign/cli` is a dependency. See [XDS CLI](#xds-cli).
13
13
 
14
14
  ## Component Docs
15
15
 
@@ -21,7 +21,7 @@ npx @astryxdesign/cli component Button # full docs for a component
21
21
  npx @astryxdesign/cli component --list # list all components
22
22
  ```
23
23
 
24
- > Use the scoped `@astryxdesign/cli` to run without installing; bare `npx astryx` only resolves once the CLI is a dependency.
24
+ > Use the scoped `@astryxdesign/cli`: it runs with or without installing, while the unscoped `astryx` resolves to an unrelated npm package until the CLI is a dependency.
25
25
 
26
26
  ## Page Layouts
27
27
 
@@ -57,7 +57,7 @@ astryx discover # discover external Astryx packages
57
57
  astryx gap-report # report a missing capability
58
58
  ```
59
59
 
60
- > Prefix these with your runner: `npx astryx …` / `pnpm exec astryx …` once the CLI is installed, or `npx @astryxdesign/cli …` to run without installing.
60
+ > Run these as `npx @astryxdesign/cli …`, or `pnpm exec astryx …` (or your package manager's equivalent) once the CLI is installed.
61
61
 
62
62
  ## Related Packages
63
63
 
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAQ5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAwBhD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAE9D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAkLD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBA6Zf;yBA5ae,QAAQ"}
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAoBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAQ5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAsChD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAE9D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAkLD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBA0bf;yBAzce,QAAQ"}
@@ -29,6 +29,7 @@ import { LayoutHeader } from "../Layout/LayoutHeader.js";
29
29
  import { LayoutPanel } from "../Layout/LayoutPanel.js";
30
30
  import { LayoutContent } from "../Layout/LayoutContent.js";
31
31
  import { MobileNavToggle } from "../MobileNav/MobileNavToggle.js";
32
+ import { MAX_CLOSE_DELAY_MS as MOBILE_NAV_MAX_CLOSE_DELAY_MS } from "../MobileNav/MobileNav.js";
32
33
  import { SideNavRenderContext } from "../SideNav/SideNavRenderContext.js";
33
34
  import { TopNavRenderContext } from "../TopNav/TopNavRenderContext.js";
34
35
  import { TopNavMobileContentContext } from "../TopNav/TopNavMobileContentContext.js";
@@ -62,6 +63,20 @@ const ActivityWrapper = HasActivity ? ({
62
63
 
63
64
  const MAIN_CONTENT_ID = 'astryx-app-shell-main';
64
65
 
66
+ /**
67
+ * Extra time, on top of MobileNav's own worst-case close delay, that
68
+ * AppShell waits before flipping its `Activity` boundary to `'hidden'`.
69
+ *
70
+ * React's `Activity` hides its subtree with `display: none !important`
71
+ * synchronously in the same commit as the mode flip, and re-runs the
72
+ * cleanup of every effect inside it — which would otherwise clear
73
+ * MobileNav's own scheduled `dialog.close()` before it fires, or cut off
74
+ * its slide-out CSS transition before it plays (#5701). Waiting strictly
75
+ * longer than MobileNav's own cap, rather than the same duration, means
76
+ * this never turns into a race decided by browser timer-firing order.
77
+ */
78
+ const ACTIVITY_HIDE_BUFFER_MS = 50;
79
+
65
80
  // =============================================================================
66
81
  // Types
67
82
  // =============================================================================
@@ -259,6 +274,30 @@ export function AppShell({
259
274
  const isBelowBreakpoint = useMediaQuery(breakpointQuery, sideNavBreakpoint === 'none' ? false : mobileNavConfig?.defaultIsMobile);
260
275
  const [uncontrolledMobileOpen, setUncontrolledMobileOpen] = useState(false);
261
276
  const isMobileNavOpen = mobileNavConfig?.isOpen ?? uncontrolledMobileOpen;
277
+
278
+ // Holds the mobile nav's `Activity` boundary visible for a beat after a
279
+ // close, so MobileNav's own close effect gets a real chance to run its
280
+ // slide-out transition and schedule its delayed `dialog.close()` before
281
+ // Activity hides the subtree (#5701). Only the CLOSE is deferred: opening
282
+ // reads `isMobileNavOpen` directly below, so a controlled open is visible in
283
+ // the commit that carries it instead of one effect later.
284
+ const [isMobileNavCloseHeld, setIsMobileNavCloseHeld] = useState(isMobileNavOpen);
285
+ // Arm the hold during render, from the open state itself, so no Effect has
286
+ // to copy props into state; the Effect below only owns the release timer.
287
+ if (isMobileNavOpen && !isMobileNavCloseHeld) {
288
+ setIsMobileNavCloseHeld(true);
289
+ }
290
+ useEffect(() => {
291
+ if (!HasActivity || isMobileNavOpen) {
292
+ return;
293
+ }
294
+ const delayMs = window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 0 : MOBILE_NAV_MAX_CLOSE_DELAY_MS + ACTIVITY_HIDE_BUFFER_MS;
295
+ const timeout = setTimeout(() => {
296
+ setIsMobileNavCloseHeld(false);
297
+ }, delayMs);
298
+ return () => clearTimeout(timeout);
299
+ }, [isMobileNavOpen]);
300
+ const isMobileNavActivityVisible = isMobileNavOpen || isMobileNavCloseHeld;
262
301
  const mobileNavOnOpenChange = mobileNavConfig?.onOpenChange;
263
302
  const setMobileNavOpen = useCallback(open => {
264
303
  if (!mobileNavIsControlled) {
@@ -520,7 +559,7 @@ export function AppShell({
520
559
  start: sideNavContent,
521
560
  content: mainContent
522
561
  }), shouldRenderMobileNavReactNode && mobileNavReactNode, shouldRenderConfigContent && mobileNavConfigContent, isBelowBreakpoint && !mobileNavDisabled && mobileNavReactNode == null && !mobileNavConfigContent && /*#__PURE__*/_jsxs(ActivityWrapper, {
523
- mode: isMobileNavOpen ? 'visible' : 'hidden',
562
+ mode: isMobileNavActivityVisible ? 'visible' : 'hidden',
524
563
  children: [hasSideNav && !hasTopNav && /*#__PURE__*/_jsx(SideNavRenderContext, {
525
564
  value: "drawer",
526
565
  children: sideNav
@@ -7,7 +7,6 @@
7
7
  * SYNC: When modified, update these files to stay in sync:
8
8
  * - /packages/core/src/AspectRatio/AspectRatio.doc.mjs
9
9
  * - /packages/core/src/AspectRatio/AspectRatio.test.tsx
10
- * - /packages/core/src/reset.css (AspectRatio fit baseline rules)
11
10
  * - /apps/storybook/stories/AspectRatio.stories.tsx
12
11
  * - /packages/cli/assets/templates/blocks/components/AspectRatio/ (showcase blocks)
13
12
  */
@@ -80,13 +79,12 @@ export interface AspectRatioProps extends BaseProps<HTMLDivElement> {
80
79
  * (`object-fit: contain`).
81
80
  * - `center`: child keeps its natural size, centered in the box.
82
81
  *
83
- * `cover`/`contain` child sizing ships as zero-specificity baseline rules
84
- * in `reset.css`, keyed on the `data-astryx-aspect-ratio-override`
85
- * attribute the component sets on the child's direct parent. Any styles
86
- * the child sets itself still win, so children that already size
87
- * themselves keep their behavior. When omitted, the child is left
88
- * unstyled (the pre-existing contract). `fit` is structural, not visual,
89
- * so it is not exposed on the theming surface.
82
+ * `cover`/`contain` size the child from the component's own styles, in
83
+ * the `astryx-base` cascade layer. Styles in a later layer (Tailwind
84
+ * utilities, `astryx-theme`), unlayered CSS, and inline styles on the
85
+ * child still win. When omitted, the child is left unstyled (the
86
+ * pre-existing contract). `fit` is structural, not visual, so it is not
87
+ * exposed on the theming surface.
90
88
  *
91
89
  * @example
92
90
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"AspectRatio.d.ts","sourceRoot":"","sources":["../../src/AspectRatio/AspectRatio.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAI5C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,GAAG,CAAC,EAAE,cAAc,CAAC;IAErB;;;;;;;OAOG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAgDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAmB,EACnB,GAAG,EACH,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,+BA4BlB;yBAtCe,WAAW"}
1
+ {"version":3,"file":"AspectRatio.d.ts","sourceRoot":"","sources":["../../src/AspectRatio/AspectRatio.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAI5C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,CAAC,EAAE,cAAc,CAAC;IAErB;;;;;;;OAOG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAkED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAmB,EACnB,GAAG,EACH,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAgClB;yBA1Ce,WAAW"}
@@ -9,7 +9,6 @@
9
9
  * SYNC: When modified, update these files to stay in sync:
10
10
  * - /packages/core/src/AspectRatio/AspectRatio.doc.mjs
11
11
  * - /packages/core/src/AspectRatio/AspectRatio.test.tsx
12
- * - /packages/core/src/reset.css (AspectRatio fit baseline rules)
13
12
  * - /apps/storybook/stories/AspectRatio.stories.tsx
14
13
  * - /packages/cli/assets/templates/blocks/components/AspectRatio/ (showcase blocks)
15
14
  */
@@ -132,10 +131,52 @@ export function AspectRatio({
132
131
  0: {
133
132
  className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d"
134
133
  },
135
- 1: {
134
+ 8: {
136
135
  className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k"
136
+ },
137
+ 4: {
138
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d xyz6fim x1m6kvgq"
139
+ },
140
+ 12: {
141
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k xyz6fim x1m6kvgq"
142
+ },
143
+ 2: {
144
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x492jj3"
145
+ },
146
+ 10: {
147
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k x492jj3"
148
+ },
149
+ 6: {
150
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d xyz6fim x1m6kvgq x492jj3"
151
+ },
152
+ 14: {
153
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k xyz6fim x1m6kvgq x492jj3"
154
+ },
155
+ 1: {
156
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x16lv2iq"
157
+ },
158
+ 9: {
159
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k x16lv2iq"
160
+ },
161
+ 5: {
162
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d xyz6fim x1m6kvgq x16lv2iq"
163
+ },
164
+ 13: {
165
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k xyz6fim x1m6kvgq x16lv2iq"
166
+ },
167
+ 3: {
168
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x16lv2iq"
169
+ },
170
+ 11: {
171
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k x16lv2iq"
172
+ },
173
+ 7: {
174
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d xyz6fim x1m6kvgq x16lv2iq"
175
+ },
176
+ 15: {
177
+ className: "x10l6tqk x13vifvy x1o0tod xh8yej3 x5yr21d x78zum5 x6s0dn4 xl56j7k xyz6fim x1m6kvgq x16lv2iq"
137
178
  }
138
- }[!!(fit === 'center') << 0],
179
+ }[!!(fit === 'center') << 3 | !!(fit === 'cover' || fit === 'contain') << 2 | !!(fit === 'cover') << 1 | !!(fit === 'contain') << 0],
139
180
  children: children
140
181
  })
141
182
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/Avatar/Avatar.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAqB3C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AA4BrD;;;;;;GAMG;AACH,KAAK,eAAe,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzD;;GAEG;AACH,KAAK,iBAAiB,GACpB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAgBpD;AASD,eAAO,MAAM,WAAW;;;;;;;;;;EAUtB,CAAC;AA8IH,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;CAChD;AA6ID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAG,EACH,aAAa,EAAE,MAAM,EACrB,WAAW,EACX,IAAI,EACJ,IAAW,EACX,KAAgB,EAChB,GAAG,EACH,MAAM,EACN,OAAc,EACd,IAAI,EACJ,EAAE,EACF,MAAM,EACN,GAAG,EACH,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,+BAyVb;yBA7We,MAAM"}
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/Avatar/Avatar.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAqB3C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AA4BrD;;;;;;GAMG;AACH,KAAK,eAAe,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzD;;GAEG;AACH,KAAK,iBAAiB,GACpB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAgBpD;AASD,eAAO,MAAM,WAAW;;;;;;;;;;EAUtB,CAAC;AA8IH,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;CAChD;AAsJD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAG,EACH,aAAa,EAAE,MAAM,EACrB,WAAW,EACX,IAAI,EACJ,IAAW,EACX,KAAgB,EAChB,GAAG,EACH,MAAM,EACN,OAAc,EACd,IAAI,EACJ,EAAE,EACF,MAAM,EACN,GAAG,EACH,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,+BAyVb;yBA7We,MAAM"}
@@ -232,8 +232,15 @@ const groupDynamicStyles = {
232
232
  /**
233
233
  * A character that can stand for a word in initials: a letter, a digit, or an
234
234
  * emoji. Punctuation and other symbols, such as `(`, `"` or `-`, cannot.
235
+ *
236
+ * Built at runtime, not written as a literal: for targets without property
237
+ * escapes, or when no browserslist is set, Babel's
238
+ * transform-unicode-property-regex rewrites a `\p{…}` literal, and the copy
239
+ * bundled with Next.js lacks the Unicode data it needs, so a source build fails
240
+ * with "Unknown property". A literal is safe once Next's bundled Babel ships
241
+ * that data.
235
242
  */
236
- const INITIAL_CHARACTER = /[\p{L}\p{N}\p{Extended_Pictographic}\p{Regional_Indicator}]/u;
243
+ const INITIAL_CHARACTER = new RegExp('[\\p{L}\\p{N}\\p{Extended_Pictographic}\\p{Regional_Indicator}]', 'u');
237
244
 
238
245
  /**
239
246
  * The first character of a word that can stand for it in initials, skipping
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroupOverflow.d.ts","sourceRoot":"","sources":["../../src/AvatarGroup/AvatarGroupOverflow.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAa5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CACpD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA8ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EACH,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,wBAAwB,GAAG,SAAS,CAqEtC;yBA9Ee,mBAAmB"}
1
+ {"version":3,"file":"AvatarGroupOverflow.d.ts","sourceRoot":"","sources":["../../src/AvatarGroup/AvatarGroupOverflow.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAa5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CACpD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA8ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EACH,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,wBAAwB,GAAG,SAAS,CAuEtC;yBAhFe,mBAAmB"}
@@ -142,7 +142,10 @@ export function AvatarGroupOverflow({
142
142
  });
143
143
  }
144
144
  return /*#__PURE__*/_jsx("span", {
145
- ref: ref,
145
+ ref: ref
146
+ // Before the caller's props so a caller-supplied role still wins.
147
+ ,
148
+ role: "img",
146
149
  ...rest,
147
150
  "aria-label": label,
148
151
  ...mergeProps(themeProps('avatar-group-overflow', {
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAmBhD,YAAY,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AA0EhF,UAAU,sBAAuB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,qDAAqD;IACrD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,wGAAwG;IACxG,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;IAE7C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAC1B,0BAA0B,GAAG,wBAAwB,CAAC;AAsYxD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA6BlD;yBA7Be,WAAW"}
1
+ {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAmBhD,YAAY,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AA0EhF,UAAU,sBAAuB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,qDAAqD;IACrD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,wGAAwG;IACxG,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;IAE7C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAC1B,0BAA0B,GAAG,wBAAwB,CAAC;AA0YxD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA6BlD;yBA7Be,WAAW"}
@@ -203,11 +203,15 @@ function StandaloneBottomSheet({
203
203
  });
204
204
 
205
205
  // The native `cancel` event is a close request the stack never saw a press
206
- // for (Android back, the platform close watcher). Always preventDefault so
207
- // the browser cannot close the controlled <dialog>, then answer with the
208
- // stack's rules: only the top-most layer dismisses, and nothing dismisses
209
- // during an IME composition.
206
+ // for (Android back, the platform close watcher). One that bubbles up from
207
+ // inside is not: a file input fires it when its picker is dismissed, so it is
208
+ // left alone. Otherwise always preventDefault so the browser cannot close the
209
+ // controlled <dialog>, then answer with the stack's rules: only the top-most
210
+ // layer dismisses, and nothing dismisses during an IME composition.
210
211
  const handleCancel = useCallback(event => {
212
+ if (event.target !== event.currentTarget) {
213
+ return;
214
+ }
211
215
  event.preventDefault();
212
216
  if (shouldDismissOnCloseRequest()) {
213
217
  dismissOnEscape();
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheetSwitcher.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheetSwitcher.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwI5C,MAAM,WAAW,wBAAyB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC5E,iDAAiD;IACjD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,iEAAiE;IACjE,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,mBAAmB,EACnB,QAAe,EACf,QAAQ,EACR,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,wBAAwB,+BAma1B;yBAhbe,mBAAmB"}
1
+ {"version":3,"file":"BottomSheetSwitcher.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheetSwitcher.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwI5C,MAAM,WAAW,wBAAyB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC5E,iDAAiD;IACjD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,iEAAiE;IACjE,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,mBAAmB,EACnB,QAAe,EACf,QAAQ,EACR,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,wBAAwB,+BAya1B;yBAtbe,mBAAmB"}
@@ -404,7 +404,14 @@ export function BottomSheetSwitcher({
404
404
  onSheetScrimOpacityChange
405
405
  }), [activeSheet, getSheetAlignmentOffset, getSheetPhase, hasScrim, onActiveSheetChange, onSheetEnterStart, onSheetScrimOpacityChange, onSheetTransitionComplete, registerSheetElement, registerSheetLabel, registerSheetPurpose]);
406
406
  const activeLabel = (activeSheet == null ? null : sheetLabels.get(activeSheet)) ?? (visibleTransition.retainedSheet == null ? undefined : sheetLabels.get(visibleTransition.retainedSheet));
407
+
408
+ // A `cancel` that bubbles up from a step is not a close request for the
409
+ // flow: a file input fires one when its picker is dismissed, and a step
410
+ // renders no dialog of its own, so it lands here. It is left alone.
407
411
  const handleCancel = useCallback(event => {
412
+ if (event.target !== event.currentTarget) {
413
+ return;
414
+ }
408
415
  event.preventDefault();
409
416
  if (shouldDismissOnCloseRequest()) {
410
417
  dismissOnEscape();
@@ -1 +1 @@
1
- {"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAOrE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAsID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,mBAAmB,qBAgMrB;yBA/Me,cAAc"}
1
+ {"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAOrE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAsID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,mBAAmB,qBAgMrB;yBA/Me,cAAc"}
@@ -37,7 +37,7 @@ import { useListFocus } from "../hooks/useListFocus.js";
37
37
  import { useTypeahead } from "../hooks/useTypeahead.js";
38
38
  import { layerAnimations } from "../Layer/layerAnimations.stylex.js";
39
39
  import { renderDropdownItems } from "../DropdownMenu/renderDropdownItems.js";
40
- import { DropdownMenuContext } from "../DropdownMenu/DropdownMenuContext.js";
40
+ import { DropdownMenuContext, DropdownMenuRootOpenContext } from "../DropdownMenu/DropdownMenuContext.js";
41
41
  import { MENU_ITEM_ROLES, MENU_ITEM_SELECTOR, MENU_BOUNDARY_SELECTOR } from "../DropdownMenu/menuItemRoles.js";
42
42
  import { useMergedRefs } from "../hooks/useMergedRefs.js";
43
43
  // =============================================================================
@@ -454,7 +454,10 @@ function BreadcrumbMenuTrigger({
454
454
  }),
455
455
  children: /*#__PURE__*/_jsx(DropdownMenuContext, {
456
456
  value: contextValue,
457
- children: menuContent
457
+ children: /*#__PURE__*/_jsx(DropdownMenuRootOpenContext, {
458
+ value: popover.isOpen,
459
+ children: menuContent
460
+ })
458
461
  })
459
462
  }), {
460
463
  placement: 'below',
@@ -939,8 +939,9 @@ function DayCell({
939
939
  // Mark today's cell programmatically (APG date-picker pattern), not just
940
940
  // visually, so screen-reader users can identify the current date.
941
941
  ,
942
- "aria-current": state.isToday ? 'date' : undefined,
943
- disabled: isDisabled
942
+ "aria-current": state.isToday ? 'date' : undefined
943
+ // A disabled day stays focusable through aria-disabled (spec:AST-085
944
+ // FR1); arrows still skip it and its click and hover are guarded.
944
945
  // Initial roving tab-stop seed; useGridFocus owns it after mount.
945
946
  ,
946
947
  tabIndex: isTabbableDay ? 0 : -1,
@@ -1 +1 @@
1
- {"version":3,"file":"ChatLayoutScrollButton.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatLayoutScrollButton.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CACvD,SAAS,CAAC,cAAc,CAAC,EACzB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAsED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,GAAG,EACH,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,2BAA2B,qBAuC7B;yBAhDe,sBAAsB"}
1
+ {"version":3,"file":"ChatLayoutScrollButton.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatLayoutScrollButton.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CACvD,SAAS,CAAC,cAAc,CAAC,EACzB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAuED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,GAAG,EACH,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,2BAA2B,qBAwC7B;yBAjDe,sBAAsB"}
@@ -89,6 +89,7 @@ export function ChatLayoutScrollButton({
89
89
  ...mergeProps(stylex.props(styles.wrapper, xstyle), className, style),
90
90
  ...rest,
91
91
  children: /*#__PURE__*/_jsx("div", {
92
+ inert: !isVisible,
92
93
  ...mergeProps(themeProps('chat-layout-scroll-button'), {
93
94
  0: {
94
95
  className: "xawy1a7 xb3r6kr xjspbzw x1prclbq x14hfi27 x1ueg155 xrgg2z9 xlr8y92 x2rcmwa x12w9bfk xg01cxk x47corl xlshs6z x1jys5uj"
@@ -158,7 +158,7 @@ export interface CheckboxInputProps extends Omit<BaseProps, 'onChange'> {
158
158
  * />
159
159
  * ```
160
160
  */
161
- export declare function CheckboxInput({ label, isLabelHidden, description, onChange, changeAction, isLoading, value, isDisabled, htmlName, disabledMessage, isReadOnly, isOptional, isRequired, size, onFocus, onBlur, labelIcon, status, width, xstyle, className, style, ref, 'aria-describedby': ariaDescribedByProp, ...rest }: CheckboxInputProps): import("react").JSX.Element;
161
+ export declare function CheckboxInput({ id: idProp, label, isLabelHidden, description, onChange, changeAction, isLoading, value, isDisabled, htmlName, disabledMessage, isReadOnly, isOptional, isRequired, size, onFocus, onBlur, labelIcon, status, width, xstyle, className, style, ref, 'aria-describedby': ariaDescribedByProp, ...rest }: CheckboxInputProps): import("react").JSX.Element;
162
162
  export declare namespace CheckboxInput {
163
163
  var displayName: string;
164
164
  }