@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +18 -20
  4. package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
  5. package/dist/AppShell/AppShell.d.ts +1 -1
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +53 -55
  8. package/dist/AspectRatio/AspectRatio.d.ts +10 -48
  9. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js +12 -33
  11. package/dist/AspectRatio/index.d.ts +1 -1
  12. package/dist/AspectRatio/index.d.ts.map +1 -1
  13. package/dist/Avatar/Avatar.d.ts.map +1 -1
  14. package/dist/Avatar/Avatar.js +25 -27
  15. package/dist/Avatar/AvatarStatusDot.js +5 -5
  16. package/dist/AvatarGroup/AvatarGroup.js +5 -5
  17. package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
  18. package/dist/Badge/Badge.js +3 -3
  19. package/dist/Banner/Banner.d.ts.map +1 -1
  20. package/dist/Banner/Banner.js +25 -32
  21. package/dist/Blockquote/Blockquote.js +7 -7
  22. package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
  23. package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
  24. package/dist/Button/Button.js +19 -19
  25. package/dist/ButtonGroup/ButtonGroup.js +7 -7
  26. package/dist/Calendar/Calendar.d.ts.map +1 -1
  27. package/dist/Calendar/Calendar.js +48 -68
  28. package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
  29. package/dist/Calendar/styles.d.ts +2 -2
  30. package/dist/Calendar/styles.d.ts.map +1 -1
  31. package/dist/Calendar/styles.js +2 -2
  32. package/dist/Card/Card.d.ts +2 -4
  33. package/dist/Card/Card.d.ts.map +1 -1
  34. package/dist/Card/Card.js +10 -18
  35. package/dist/Carousel/Carousel.d.ts.map +1 -1
  36. package/dist/Carousel/Carousel.js +21 -24
  37. package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
  38. package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
  39. package/dist/Carousel/carousel.markers.stylex.js +12 -0
  40. package/dist/Center/Center.js +3 -3
  41. package/dist/Chat/ChatComposer.js +23 -23
  42. package/dist/Chat/ChatComposerDrawer.js +14 -14
  43. package/dist/Chat/ChatComposerInput.d.ts +1 -1
  44. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  45. package/dist/Chat/ChatComposerInput.js +15 -27
  46. package/dist/Chat/ChatDictationButton.d.ts +1 -1
  47. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  48. package/dist/Chat/ChatDictationButton.js +11 -13
  49. package/dist/Chat/ChatLayout.js +17 -17
  50. package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
  51. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  52. package/dist/Chat/ChatLayoutScrollButton.js +10 -12
  53. package/dist/Chat/ChatMessage.js +12 -12
  54. package/dist/Chat/ChatMessageBubble.js +7 -7
  55. package/dist/Chat/ChatMessageList.js +14 -14
  56. package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
  57. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  58. package/dist/Chat/ChatMessageMetadata.js +12 -14
  59. package/dist/Chat/ChatPastedTextToken.js +13 -13
  60. package/dist/Chat/ChatSendButton.js +3 -3
  61. package/dist/Chat/ChatSystemMessage.d.ts +1 -1
  62. package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
  63. package/dist/Chat/ChatSystemMessage.js +17 -17
  64. package/dist/Chat/ChatTokenizedText.d.ts +1 -1
  65. package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
  66. package/dist/Chat/ChatTokenizedText.js +15 -24
  67. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  68. package/dist/Chat/ChatToolCalls.js +74 -81
  69. package/dist/Chat/index.d.ts +1 -1
  70. package/dist/Chat/index.d.ts.map +1 -1
  71. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  72. package/dist/Chat/useTriggerMenu.js +15 -15
  73. package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
  74. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  75. package/dist/CheckboxInput/CheckboxInput.js +23 -25
  76. package/dist/CheckboxList/CheckboxList.js +9 -9
  77. package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
  78. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  79. package/dist/CheckboxList/CheckboxListItem.js +6 -8
  80. package/dist/Citation/Citation.js +10 -10
  81. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  82. package/dist/ClickableCard/ClickableCard.js +9 -32
  83. package/dist/Code/Code.js +3 -3
  84. package/dist/CodeBlock/CodeBlock.d.ts +1 -10
  85. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  86. package/dist/CodeBlock/CodeBlock.js +52 -88
  87. package/dist/Collapsible/Collapsible.d.ts +3 -9
  88. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  89. package/dist/Collapsible/Collapsible.js +22 -110
  90. package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
  91. package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
  92. package/dist/Collapsible/CollapsibleGroup.js +12 -73
  93. package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
  94. package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
  95. package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
  96. package/dist/Collapsible/index.d.ts +0 -1
  97. package/dist/Collapsible/index.d.ts.map +1 -1
  98. package/dist/Collapsible/useCollapsible.d.ts +1 -4
  99. package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
  100. package/dist/Collapsible/useCollapsible.js +6 -20
  101. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  102. package/dist/CommandPalette/CommandPalette.js +34 -36
  103. package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
  104. package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
  105. package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
  106. package/dist/CommandPalette/CommandPaletteInput.js +13 -13
  107. package/dist/CommandPalette/CommandPaletteItem.js +3 -3
  108. package/dist/CommandPalette/CommandPaletteList.js +3 -3
  109. package/dist/ContextMenu/ContextMenu.d.ts +2 -7
  110. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  111. package/dist/ContextMenu/ContextMenu.js +43 -76
  112. package/dist/DateInput/DateInput.js +18 -18
  113. package/dist/DateRangeInput/DateRangeInput.js +21 -21
  114. package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
  115. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  116. package/dist/DateTimeInput/DateTimeInput.js +26 -30
  117. package/dist/DateTimeInput/index.d.ts +1 -1
  118. package/dist/DateTimeInput/index.d.ts.map +1 -1
  119. package/dist/Dialog/Dialog.js +9 -9
  120. package/dist/Dialog/DialogHeader.js +16 -16
  121. package/dist/Dialog/useImperativeDialog.js +3 -3
  122. package/dist/Divider/Divider.js +7 -7
  123. package/dist/DropdownMenu/DropdownMenu.js +10 -10
  124. package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
  125. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  126. package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
  127. package/dist/DropdownMenu/renderDropdownItems.js +10 -10
  128. package/dist/EmptyState/EmptyState.js +9 -9
  129. package/dist/Field/Field.js +17 -17
  130. package/dist/Field/FieldLabel.js +15 -15
  131. package/dist/Field/InputClearButton.js +5 -5
  132. package/dist/FieldStatus/FieldStatus.js +3 -3
  133. package/dist/FileInput/FileInput.js +29 -29
  134. package/dist/FormLayout/FormLayout.js +5 -5
  135. package/dist/Grid/Grid.d.ts +3 -4
  136. package/dist/Grid/Grid.d.ts.map +1 -1
  137. package/dist/Grid/Grid.js +12 -29
  138. package/dist/Grid/GridSpan.js +3 -3
  139. package/dist/HStack/HStack.js +3 -3
  140. package/dist/Heading/Heading.js +10 -10
  141. package/dist/HoverCard/HoverCard.js +9 -9
  142. package/dist/HoverCard/useHoverCard.d.ts +1 -5
  143. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  144. package/dist/HoverCard/useHoverCard.js +3 -3
  145. package/dist/Icon/Icon.d.ts.map +1 -1
  146. package/dist/Icon/Icon.js +12 -16
  147. package/dist/Icon/defaultIcons.js +116 -116
  148. package/dist/IconButton/IconButton.js +3 -3
  149. package/dist/InputGroup/InputGroup.js +11 -11
  150. package/dist/InputGroup/InputGroupText.js +3 -3
  151. package/dist/Item/Item.js +18 -18
  152. package/dist/Kbd/Kbd.js +5 -5
  153. package/dist/Layer/LayerProvider.js +7 -7
  154. package/dist/Layer/useLayer.d.ts +2 -29
  155. package/dist/Layer/useLayer.d.ts.map +1 -1
  156. package/dist/Layer/useLayer.js +31 -44
  157. package/dist/Layout/Layout.js +21 -21
  158. package/dist/Layout/LayoutContent.js +3 -3
  159. package/dist/Layout/LayoutFooter.js +5 -5
  160. package/dist/Layout/LayoutHeader.js +5 -5
  161. package/dist/Layout/LayoutPanel.js +3 -3
  162. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  163. package/dist/Lightbox/Lightbox.js +31 -55
  164. package/dist/Lightbox/useLightbox.js +3 -3
  165. package/dist/Link/Link.js +15 -15
  166. package/dist/Link/LinkProvider.js +3 -3
  167. package/dist/Link/useLinkify.js +3 -3
  168. package/dist/List/List.js +11 -11
  169. package/dist/List/ListItem.js +11 -11
  170. package/dist/Markdown/Markdown.d.ts.map +1 -1
  171. package/dist/Markdown/Markdown.js +102 -102
  172. package/dist/MetadataList/MetadataList.js +10 -10
  173. package/dist/MetadataList/MetadataListItem.js +15 -15
  174. package/dist/MobileNav/MobileNav.js +15 -15
  175. package/dist/MobileNav/MobileNavToggle.js +5 -5
  176. package/dist/MoreMenu/MoreMenu.js +3 -3
  177. package/dist/MultiSelector/MultiSelector.js +56 -56
  178. package/dist/NavIcon/NavIcon.js +3 -3
  179. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  180. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  181. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  182. package/dist/NumberInput/NumberInput.js +32 -48
  183. package/dist/Outline/Outline.js +15 -15
  184. package/dist/OverflowList/OverflowList.js +8 -8
  185. package/dist/Overlay/Overlay.js +3 -3
  186. package/dist/Overlay/OverlayScrim.js +5 -5
  187. package/dist/Overlay/useOverlay.js +3 -3
  188. package/dist/Pagination/Pagination.d.ts +1 -1
  189. package/dist/Pagination/Pagination.d.ts.map +1 -1
  190. package/dist/Pagination/Pagination.js +72 -125
  191. package/dist/Popover/Popover.js +16 -16
  192. package/dist/Popover/usePopover.js +7 -7
  193. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  194. package/dist/PowerSearch/PowerSearch.js +92 -110
  195. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  196. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  197. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  198. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  199. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  200. package/dist/ProgressBar/ProgressBar.js +18 -25
  201. package/dist/RadioList/RadioList.js +7 -7
  202. package/dist/RadioList/RadioListItem.d.ts +1 -1
  203. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  204. package/dist/RadioList/RadioListItem.js +21 -24
  205. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  206. package/dist/Resizable/ResizeHandle.js +10 -28
  207. package/dist/Section/Section.js +5 -5
  208. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  209. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  210. package/dist/SegmentedControl/SegmentedControl.js +10 -32
  211. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  212. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  213. package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
  214. package/dist/SelectableCard/SelectableCard.js +5 -5
  215. package/dist/Selector/Selector.js +46 -46
  216. package/dist/Selector/SelectorOption.js +3 -3
  217. package/dist/SideNav/SideNav.d.ts.map +1 -1
  218. package/dist/SideNav/SideNav.js +34 -38
  219. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  220. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  221. package/dist/SideNav/SideNavCollapseButton.js +6 -8
  222. package/dist/SideNav/SideNavHeading.js +87 -87
  223. package/dist/SideNav/SideNavItem.js +42 -42
  224. package/dist/SideNav/SideNavSection.d.ts +1 -1
  225. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  226. package/dist/SideNav/SideNavSection.js +16 -18
  227. package/dist/Skeleton/Skeleton.js +3 -3
  228. package/dist/Slider/Slider.js +23 -23
  229. package/dist/Spinner/Spinner.js +9 -9
  230. package/dist/StatusDot/StatusDot.js +5 -5
  231. package/dist/Switch/Switch.d.ts +4 -8
  232. package/dist/Switch/Switch.d.ts.map +1 -1
  233. package/dist/Switch/Switch.js +29 -34
  234. package/dist/TabList/Tab.js +18 -18
  235. package/dist/TabList/TabList.js +5 -5
  236. package/dist/TabList/TabMenu.d.ts.map +1 -1
  237. package/dist/TabList/TabMenu.js +30 -57
  238. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  239. package/dist/Table/BaseTable.d.ts.map +1 -1
  240. package/dist/Table/BaseTable.js +39 -50
  241. package/dist/Table/Table.js +7 -7
  242. package/dist/Table/TableBody.d.ts +1 -1
  243. package/dist/Table/TableBody.d.ts.map +1 -1
  244. package/dist/Table/TableBody.js +5 -9
  245. package/dist/Table/TableCell.js +3 -3
  246. package/dist/Table/TableFooter.d.ts +1 -1
  247. package/dist/Table/TableFooter.d.ts.map +1 -1
  248. package/dist/Table/TableFooter.js +5 -9
  249. package/dist/Table/TableHeader.d.ts +1 -1
  250. package/dist/Table/TableHeader.d.ts.map +1 -1
  251. package/dist/Table/TableHeader.js +5 -9
  252. package/dist/Table/TableHeaderCell.js +3 -3
  253. package/dist/Table/TableRow.js +5 -5
  254. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  255. package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
  256. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  257. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  258. package/dist/Table/plugins/pagination/paginateData.js +1 -5
  259. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  260. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
  261. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  262. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  263. package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
  264. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  265. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  266. package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
  267. package/dist/Table/tableContextMenu.js +9 -9
  268. package/dist/Text/Text.js +10 -10
  269. package/dist/TextArea/TextArea.js +14 -14
  270. package/dist/TextInput/TextInput.js +15 -15
  271. package/dist/Thumbnail/Thumbnail.d.ts +2 -3
  272. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  273. package/dist/Thumbnail/Thumbnail.js +29 -30
  274. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  275. package/dist/TimeInput/TimeInput.js +21 -26
  276. package/dist/Timestamp/Timestamp.d.ts +1 -1
  277. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  278. package/dist/Timestamp/Timestamp.js +26 -37
  279. package/dist/Toast/Toast.d.ts.map +1 -1
  280. package/dist/Toast/Toast.js +17 -25
  281. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  282. package/dist/Toast/ToastViewport.js +11 -23
  283. package/dist/Toast/useToast.js +4 -4
  284. package/dist/ToggleButton/ToggleButton.js +12 -12
  285. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  286. package/dist/Token/Token.js +21 -21
  287. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  288. package/dist/Tokenizer/Tokenizer.js +34 -36
  289. package/dist/Toolbar/Toolbar.js +18 -18
  290. package/dist/Tooltip/Tooltip.js +11 -11
  291. package/dist/Tooltip/useTooltip.d.ts +1 -5
  292. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  293. package/dist/Tooltip/useTooltip.js +3 -3
  294. package/dist/TopNav/TopNav.js +32 -32
  295. package/dist/TopNav/TopNavHeading.js +67 -67
  296. package/dist/TopNav/TopNavItem.js +5 -5
  297. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  298. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  299. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  300. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
  301. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  302. package/dist/TopNav/TopNavMenu.js +32 -32
  303. package/dist/TreeList/TreeList.js +8 -8
  304. package/dist/TreeList/TreeListBranches.js +11 -11
  305. package/dist/TreeList/TreeListItem.js +30 -30
  306. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  307. package/dist/Typeahead/BaseTypeahead.js +20 -23
  308. package/dist/Typeahead/Typeahead.js +12 -12
  309. package/dist/Typeahead/TypeaheadItem.js +10 -10
  310. package/dist/VStack/VStack.js +3 -3
  311. package/dist/astryx.css +0 -7
  312. package/dist/astryx.umd.js +60 -60
  313. package/dist/astryx.umd.js.map +4 -4
  314. package/dist/docs-types.d.ts +2 -8
  315. package/dist/docs-types.d.ts.map +1 -1
  316. package/dist/hooks/focusableSelector.d.ts +1 -1
  317. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  318. package/dist/hooks/focusableSelector.js +1 -1
  319. package/dist/hooks/index.d.ts +0 -2
  320. package/dist/hooks/index.d.ts.map +1 -1
  321. package/dist/hooks/index.js +0 -1
  322. package/dist/hooks/useFocusTrap.d.ts +0 -3
  323. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  324. package/dist/hooks/useFocusTrap.js +1 -38
  325. package/dist/hooks/useInteractiveRole.d.ts +2 -6
  326. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  327. package/dist/hooks/useInteractiveRole.js +2 -6
  328. package/dist/hooks/useKeyboardHint.js +9 -9
  329. package/dist/hooks/useStreamingText.d.ts +1 -3
  330. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  331. package/dist/hooks/useStreamingText.js +5 -14
  332. package/dist/theme/MediaTheme.js +3 -3
  333. package/dist/theme/Theme.js +7 -7
  334. package/dist/theme/defineTheme.d.ts +1 -1
  335. package/dist/theme/defineTheme.d.ts.map +1 -1
  336. package/dist/theme/expandColorScale.d.ts.map +1 -1
  337. package/dist/theme/expandColorScale.js +3 -10
  338. package/dist/theme/hct.d.ts +15 -0
  339. package/dist/theme/hct.d.ts.map +1 -1
  340. package/dist/theme/hct.js +9 -9
  341. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  342. package/dist/theme/tokens.d.ts +2 -10
  343. package/dist/theme/tokens.d.ts.map +1 -1
  344. package/dist/theme/tokens.js +4 -220
  345. package/dist/utils/index.d.ts +0 -3
  346. package/dist/utils/index.d.ts.map +1 -1
  347. package/dist/utils/index.js +1 -3
  348. package/dist/utils/timeParser.d.ts.map +1 -1
  349. package/dist/utils/timeParser.js +5 -8
  350. package/package.json +3 -3
  351. package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
  352. package/src/AlertDialog/AlertDialog.tsx +0 -2
  353. package/src/AppShell/AppShell.tsx +0 -2
  354. package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
  355. package/src/AspectRatio/AspectRatio.test.tsx +1 -142
  356. package/src/AspectRatio/AspectRatio.tsx +10 -70
  357. package/src/AspectRatio/index.ts +1 -5
  358. package/src/Avatar/Avatar.doc.mjs +0 -11
  359. package/src/Avatar/Avatar.test.tsx +1 -32
  360. package/src/Avatar/Avatar.tsx +20 -12
  361. package/src/Banner/Banner.doc.mjs +0 -8
  362. package/src/Banner/Banner.test.tsx +0 -38
  363. package/src/Banner/Banner.tsx +1 -8
  364. package/src/Calendar/Calendar.doc.mjs +1 -1
  365. package/src/Calendar/Calendar.test.tsx +17 -122
  366. package/src/Calendar/Calendar.tsx +5 -26
  367. package/src/Calendar/dayCellUtils.ts +1 -3
  368. package/src/Calendar/styles.ts +2 -12
  369. package/src/Card/Card.tsx +6 -16
  370. package/src/Carousel/Carousel.doc.mjs +12 -12
  371. package/src/Carousel/Carousel.test.tsx +0 -13
  372. package/src/Carousel/Carousel.tsx +2 -4
  373. package/src/Carousel/carousel.markers.stylex.ts +10 -0
  374. package/src/Chat/Chat.doc.mjs +1 -1
  375. package/src/Chat/ChatComposerInput.test.tsx +1 -27
  376. package/src/Chat/ChatComposerInput.tsx +15 -20
  377. package/src/Chat/ChatDictationButton.tsx +4 -4
  378. package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
  379. package/src/Chat/ChatMessageMetadata.tsx +6 -4
  380. package/src/Chat/ChatSystemMessage.test.tsx +11 -26
  381. package/src/Chat/ChatSystemMessage.tsx +7 -7
  382. package/src/Chat/ChatTokenizedText.test.tsx +16 -29
  383. package/src/Chat/ChatTokenizedText.tsx +8 -15
  384. package/src/Chat/ChatToolCalls.test.tsx +0 -55
  385. package/src/Chat/ChatToolCalls.tsx +12 -10
  386. package/src/Chat/index.ts +4 -1
  387. package/src/Chat/useTriggerMenu.tsx +4 -1
  388. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  389. package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
  390. package/src/CheckboxInput/CheckboxInput.tsx +0 -2
  391. package/src/CheckboxList/CheckboxList.test.tsx +0 -19
  392. package/src/CheckboxList/CheckboxListItem.tsx +2 -11
  393. package/src/Citation/Citation.doc.mjs +0 -5
  394. package/src/ClickableCard/ClickableCard.tsx +2 -45
  395. package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
  396. package/src/CodeBlock/CodeBlock.test.tsx +3 -122
  397. package/src/CodeBlock/CodeBlock.tsx +4 -62
  398. package/src/Collapsible/Collapsible.doc.mjs +4 -8
  399. package/src/Collapsible/Collapsible.tsx +10 -86
  400. package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
  401. package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
  402. package/src/Collapsible/CollapsibleGroup.tsx +9 -107
  403. package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
  404. package/src/Collapsible/index.ts +0 -4
  405. package/src/Collapsible/useCollapsible.ts +6 -20
  406. package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
  407. package/src/CommandPalette/CommandPalette.tsx +3 -5
  408. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
  409. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
  410. package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
  411. package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
  412. package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
  413. package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
  414. package/src/ContextMenu/ContextMenu.test.tsx +0 -87
  415. package/src/ContextMenu/ContextMenu.tsx +28 -87
  416. package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
  417. package/src/DateInput/DateInput.test.tsx +20 -11
  418. package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
  419. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
  420. package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
  421. package/src/DateTimeInput/DateTimeInput.tsx +2 -8
  422. package/src/DateTimeInput/index.ts +0 -1
  423. package/src/Dialog/Dialog.doc.mjs +0 -4
  424. package/src/Dialog/DialogHeader.doc.mjs +0 -45
  425. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  426. package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
  427. package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
  428. package/src/Field/Field.test.tsx +4 -1
  429. package/src/Field/FieldLabel.test.tsx +2 -2
  430. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
  431. package/src/Grid/Grid.test.tsx +18 -43
  432. package/src/Grid/Grid.tsx +9 -26
  433. package/src/HoverCard/HoverCard.doc.mjs +6 -6
  434. package/src/HoverCard/useHoverCard.doc.mjs +5 -5
  435. package/src/HoverCard/useHoverCard.tsx +2 -9
  436. package/src/Icon/Icon.test.tsx +29 -41
  437. package/src/Icon/Icon.tsx +2 -6
  438. package/src/InputGroup/InputGroup.tsx +2 -2
  439. package/src/Item/Item.tsx +1 -1
  440. package/src/Layer/useLayer.doc.mjs +2 -2
  441. package/src/Layer/useLayer.test.tsx +2 -221
  442. package/src/Layer/useLayer.tsx +30 -69
  443. package/src/Layout/LayoutContent.doc.mjs +0 -12
  444. package/src/Layout/LayoutPanel.doc.mjs +0 -40
  445. package/src/Lightbox/Lightbox.doc.mjs +0 -5
  446. package/src/Lightbox/Lightbox.test.tsx +2 -123
  447. package/src/Lightbox/Lightbox.tsx +1 -29
  448. package/src/Markdown/Markdown.tsx +7 -9
  449. package/src/Markdown/parser.perf.test.ts +12 -34
  450. package/src/NavMenu/NavMenu.doc.mjs +0 -15
  451. package/src/NumberInput/NumberInput.test.tsx +3 -48
  452. package/src/NumberInput/NumberInput.tsx +15 -32
  453. package/src/Overlay/Overlay.doc.mjs +0 -6
  454. package/src/Pagination/Pagination.test.tsx +0 -162
  455. package/src/Pagination/Pagination.tsx +26 -80
  456. package/src/Popover/Popover.doc.mjs +6 -6
  457. package/src/Popover/Popover.test.tsx +0 -65
  458. package/src/Popover/usePopover.doc.mjs +1 -1
  459. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  460. package/src/PowerSearch/PowerSearch.test.tsx +1 -109
  461. package/src/PowerSearch/PowerSearch.tsx +16 -37
  462. package/src/ProgressBar/ProgressBar.test.tsx +0 -30
  463. package/src/ProgressBar/ProgressBar.tsx +5 -12
  464. package/src/RadioList/RadioList.test.tsx +0 -19
  465. package/src/RadioList/RadioListItem.tsx +4 -9
  466. package/src/Resizable/ResizeHandle.tsx +4 -22
  467. package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
  468. package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
  469. package/src/SegmentedControl/SegmentedControl.tsx +5 -27
  470. package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
  471. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  472. package/src/Selector/Selector.test.tsx +1 -27
  473. package/src/SideNav/SideNav.doc.mjs +1 -7
  474. package/src/SideNav/SideNav.test.tsx +0 -66
  475. package/src/SideNav/SideNav.tsx +2 -6
  476. package/src/SideNav/SideNavCollapseButton.tsx +3 -4
  477. package/src/SideNav/SideNavSection.tsx +4 -6
  478. package/src/Switch/Switch.doc.mjs +7 -7
  479. package/src/Switch/Switch.test.tsx +3 -102
  480. package/src/Switch/Switch.tsx +7 -20
  481. package/src/TabList/TabList.test.tsx +1 -185
  482. package/src/TabList/TabMenu.tsx +9 -45
  483. package/src/Table/BaseTable.tsx +2 -13
  484. package/src/Table/Table.test.tsx +0 -87
  485. package/src/Table/TableBody.tsx +2 -15
  486. package/src/Table/TableFooter.tsx +2 -15
  487. package/src/Table/TableHeader.tsx +2 -15
  488. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
  489. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
  490. package/src/Table/plugins/pagination/paginateData.ts +1 -5
  491. package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
  492. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
  493. package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
  494. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
  495. package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
  496. package/src/TextArea/TextArea.test.tsx +3 -3
  497. package/src/TextInput/TextInput.test.tsx +3 -3
  498. package/src/Thumbnail/Thumbnail.test.tsx +2 -36
  499. package/src/Thumbnail/Thumbnail.tsx +2 -4
  500. package/src/TimeInput/TimeInput.test.tsx +0 -37
  501. package/src/TimeInput/TimeInput.tsx +1 -11
  502. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  503. package/src/Timestamp/Timestamp.test.tsx +0 -52
  504. package/src/Timestamp/Timestamp.tsx +16 -30
  505. package/src/Toast/Toast.tsx +3 -11
  506. package/src/Toast/ToastViewport.test.tsx +0 -64
  507. package/src/Toast/ToastViewport.tsx +0 -12
  508. package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
  509. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  510. package/src/Tokenizer/Tokenizer.test.tsx +0 -54
  511. package/src/Tokenizer/Tokenizer.tsx +4 -5
  512. package/src/Tooltip/Tooltip.doc.mjs +6 -6
  513. package/src/Tooltip/useTooltip.doc.mjs +5 -5
  514. package/src/Tooltip/useTooltip.tsx +2 -12
  515. package/src/TopNav/TopNav.doc.mjs +1 -1
  516. package/src/TopNav/TopNav.test.tsx +7 -23
  517. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
  518. package/src/TreeList/TreeList.doc.mjs +2 -2
  519. package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
  520. package/src/Typeahead/BaseTypeahead.tsx +2 -5
  521. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  522. package/src/Typeahead/Typeahead.test.tsx +1 -45
  523. package/src/docs-types.ts +1 -9
  524. package/src/hooks/focusableSelector.ts +1 -1
  525. package/src/hooks/index.ts +0 -3
  526. package/src/hooks/useFocusTrap.doc.mjs +2 -4
  527. package/src/hooks/useFocusTrap.test.tsx +1 -149
  528. package/src/hooks/useFocusTrap.ts +1 -50
  529. package/src/hooks/useInteractiveRole.ts +4 -12
  530. package/src/hooks/useStreamingText.test.ts +19 -54
  531. package/src/hooks/useStreamingText.ts +5 -16
  532. package/src/hooks/useTreeFocus.test.tsx +3 -1
  533. package/src/reset.css +0 -29
  534. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  535. package/src/theme/defineTheme.ts +13 -4
  536. package/src/theme/derivedVarRegistry.test.ts +2 -2
  537. package/src/theme/expandColorScale.test.ts +0 -29
  538. package/src/theme/expandColorScale.ts +6 -11
  539. package/src/theme/hct.ts +17 -9
  540. package/src/theme/tokens.test.ts +9 -182
  541. package/src/theme/tokens.ts +4 -239
  542. package/src/theme/useTheme.test.tsx +0 -20
  543. package/src/utils/index.ts +0 -4
  544. package/src/utils/sharedResizeObserver.test.ts +2 -2
  545. package/src/utils/timeParser.test.ts +0 -13
  546. package/src/utils/timeParser.ts +5 -8
  547. package/dist/hooks/useHotkeys.d.ts +0 -51
  548. package/dist/hooks/useHotkeys.d.ts.map +0 -1
  549. package/dist/hooks/useHotkeys.js +0 -160
  550. package/dist/utils/color.d.ts +0 -42
  551. package/dist/utils/color.d.ts.map +0 -1
  552. package/dist/utils/color.js +0 -150
  553. package/dist/utils/composeEventHandlers.d.ts +0 -30
  554. package/dist/utils/composeEventHandlers.d.ts.map +0 -1
  555. package/dist/utils/composeEventHandlers.js +0 -40
  556. package/src/Chat/ChatDictationButton.test.tsx +0 -43
  557. package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
  558. package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
  559. package/src/Collapsible/Collapsible.test.tsx +0 -405
  560. package/src/FieldStatus/FieldStatus.test.tsx +0 -282
  561. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
  562. package/src/Layout/Layout.test.tsx +0 -285
  563. package/src/Layout/LayoutSlots.test.tsx +0 -364
  564. package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
  565. package/src/OverflowList/OverflowList.test.tsx +0 -416
  566. package/src/Overlay/Overlay.test.tsx +0 -356
  567. package/src/Resizable/ResizeHandle.test.tsx +0 -218
  568. package/src/SizeContext/SizeContext.test.tsx +0 -226
  569. package/src/__tests__/TestIcon.tsx +0 -26
  570. package/src/__tests__/fastRoleQueries.ts +0 -66
  571. package/src/docPropReferences.test.ts +0 -178
  572. package/src/hooks/useHotkeys.doc.mjs +0 -52
  573. package/src/hooks/useHotkeys.test.ts +0 -245
  574. package/src/hooks/useHotkeys.ts +0 -203
  575. package/src/utils/color.test.ts +0 -133
  576. package/src/utils/color.ts +0 -148
  577. package/src/utils/composeEventHandlers.test.ts +0 -71
  578. package/src/utils/composeEventHandlers.ts +0 -44
  579. package/src/utils/mergeProps.test.ts +0 -166
@@ -25,6 +25,7 @@
25
25
 
26
26
  import {useCallback, type ReactNode} from 'react';
27
27
  import * as stylex from '@stylexjs/stylex';
28
+ import type {StyleXStyles} from '@stylexjs/stylex';
28
29
  import {renderIconSlot, type IconType} from '../Icon';
29
30
  import {Item} from '../Item';
30
31
  import {
@@ -34,7 +35,6 @@ import {
34
35
  typeScaleVars,
35
36
  } from '../theme/tokens.stylex';
36
37
  import {mergeProps} from '../utils';
37
- import type {BaseProps} from '../BaseProps';
38
38
  import {useDropdownMenuContext} from './DropdownMenuContext';
39
39
  import {themeProps} from '../utils/themeProps';
40
40
 
@@ -75,10 +75,7 @@ const itemSizeStyles = stylex.create({
75
75
  lg: {},
76
76
  });
77
77
 
78
- export interface DropdownMenuItemProps extends Pick<
79
- BaseProps,
80
- 'xstyle' | 'className' | 'style'
81
- > {
78
+ export interface DropdownMenuItemProps {
82
79
  /** Icon to display before the label. */
83
80
  icon?: ReactNode | IconType;
84
81
  /** Primary label text. */
@@ -91,6 +88,21 @@ export interface DropdownMenuItemProps extends Pick<
91
88
  isDisabled?: boolean;
92
89
  /** Additional content to render after the label/description. */
93
90
  endContent?: ReactNode;
91
+ /**
92
+ * StyleX styles for layout customization (margins, positioning, sizing).
93
+ * Must be a `stylex.create()` value — not an inline style object.
94
+ *
95
+ * @example
96
+ * ```
97
+ * const styles = stylex.create({ wrapper: { marginTop: 8 } });
98
+ * <DropdownMenuItem xstyle={styles.wrapper} />
99
+ * ```
100
+ */
101
+ xstyle?: StyleXStyles;
102
+ /** CSS class name(s) appended to the root element. */
103
+ className?: string;
104
+ /** Inline styles applied to the root element. */
105
+ style?: React.CSSProperties;
94
106
  }
95
107
 
96
108
  /**
@@ -137,7 +137,10 @@ describe('Field', () => {
137
137
 
138
138
  it('renders description without ID attribute when descriptionID is not provided', () => {
139
139
  render(
140
- <Field label="Email" inputID="email-input" description="Description text">
140
+ <Field
141
+ label="Email"
142
+ inputID="email-input"
143
+ description="Description text">
141
144
  <input id="email-input" />
142
145
  </Field>,
143
146
  );
@@ -11,7 +11,7 @@
11
11
 
12
12
  import {describe, it, expect, vi} from 'vitest';
13
13
  import {render, screen} from '@testing-library/react';
14
- import {TestIcon} from '../__tests__/TestIcon';
14
+ import {StarIcon} from '@heroicons/react/24/outline';
15
15
  import {FieldLabel} from './FieldLabel';
16
16
 
17
17
  describe('FieldLabel', () => {
@@ -49,7 +49,7 @@ describe('FieldLabel', () => {
49
49
  <FieldLabel
50
50
  label="Starred"
51
51
  inputID="starred-input"
52
- labelIcon={TestIcon}
52
+ labelIcon={StarIcon}
53
53
  />,
54
54
  );
55
55
  const svg = document.querySelector('svg');
@@ -4,6 +4,7 @@ exports[`FormLayout > matches snapshot for horizontal direction 1`] = `
4
4
  <div
5
5
  class="astryx-form-layout horizontal FormLayout__styles.base xdt5ytf x18g69wz FormLayout__styles.horizontal xrvj5dj x1mt1orb xu6a5m6"
6
6
  data-direction="horizontal"
7
+ data-style-src="@astryxdesign/core:src/FormLayout/FormLayout.tsx:40; @astryxdesign/core:src/FormLayout/FormLayout.tsx:45"
7
8
  data-testid="layout"
8
9
  >
9
10
  <input
@@ -19,6 +20,7 @@ exports[`FormLayout > matches snapshot for horizontal-labels direction 1`] = `
19
20
  <div
20
21
  class="astryx-form-layout horizontal-labels FormLayout__styles.base xdt5ytf FormLayout__styles.horizontalLabels xrvj5dj x1pmbctz xlaq8a2 x7a106z xedohl4 x1rpgqan x1a1jff"
21
22
  data-direction="horizontal-labels"
23
+ data-style-src="@astryxdesign/core:src/FormLayout/FormLayout.tsx:40; @astryxdesign/core:src/FormLayout/FormLayout.tsx:50"
22
24
  data-testid="layout"
23
25
  >
24
26
  <label>
@@ -34,6 +36,7 @@ exports[`FormLayout > matches snapshot for vertical direction 1`] = `
34
36
  <div
35
37
  class="astryx-form-layout vertical FormLayout__styles.base x78zum5 xdt5ytf x18g69wz"
36
38
  data-direction="vertical"
39
+ data-style-src="@astryxdesign/core:src/FormLayout/FormLayout.tsx:40"
37
40
  data-testid="layout"
38
41
  >
39
42
  <input
@@ -65,7 +65,7 @@ describe('Grid', () => {
65
65
  expect(templateColumns(grid)).toBe('repeat(auto-fill, minmax(250px, 1fr))');
66
66
  });
67
67
 
68
- it('renders with columns object max (count capped, tracks still fill)', () => {
68
+ it('renders with columns object max (capped via track-max)', () => {
69
69
  render(
70
70
  <Grid columns={{minWidth: 250, max: 3}} gap={4} data-testid="grid">
71
71
  <div>Item 1</div>
@@ -74,37 +74,13 @@ describe('Grid', () => {
74
74
  </Grid>,
75
75
  );
76
76
  const grid = screen.getByTestId('grid');
77
- // Cap lives on the track MIN (min(100%, max(minWidth, perColumn))); the
78
- // track MAX stays 1fr so present columns fill the row (a lone column on
79
- // mobile stretches to 100% instead of leaving dead space).
77
+ // Track max caps at (100% - 2 * gap) / 3 — no maxWidth on container
80
78
  expect(templateColumns(grid)).toBe(
81
- 'repeat(auto-fill, minmax(min(100%, max(250px, calc((100% - 2 * var(--spacing-4)) / 3))), 1fr))',
79
+ 'repeat(auto-fill, minmax(250px, calc((100% - 2 * var(--spacing-4)) / 3)))',
82
80
  );
83
81
  expect(grid.style.maxWidth).toBe('');
84
82
  });
85
83
 
86
- it('keeps track max at 1fr with a max cap so a lone column can fill (#3391)', () => {
87
- // Regression: previously the cap was applied to the track MAX
88
- // (minmax(minWidth, 100%/max)), so when fewer than `max` columns fit —
89
- // e.g. a single column on mobile — the lone column was pinned to ~100%/max
90
- // and left dead space on the right. The cap now lives on the track MIN and
91
- // the track MAX stays 1fr, so present columns always stretch to fill.
92
- render(
93
- <Grid columns={{minWidth: 360, max: 2}} gap={4} data-testid="grid">
94
- <div>Left</div>
95
- <div>Right</div>
96
- </Grid>,
97
- );
98
- const grid = screen.getByTestId('grid');
99
- const template = templateColumns(grid);
100
- // Track max must be 1fr (fills), not a fraction-of-container cap.
101
- expect(template).toMatch(/, 1fr\)\)$/);
102
- expect(template).not.toMatch(/, calc\([^)]*\/ 2\)\)\)$/);
103
- expect(template).toBe(
104
- 'repeat(auto-fill, minmax(min(100%, max(360px, calc((100% - 1 * var(--spacing-4)) / 2))), 1fr))',
105
- );
106
- });
107
-
108
84
  it('renders with columns object max using columnGap', () => {
109
85
  render(
110
86
  <Grid columns={{minWidth: 200, max: 4}} columnGap={6} data-testid="grid">
@@ -113,9 +89,9 @@ describe('Grid', () => {
113
89
  </Grid>,
114
90
  );
115
91
  const grid = screen.getByTestId('grid');
116
- // columnGap takes precedence in the perColumn floor calculation
92
+ // columnGap takes precedence for track-max calculation
117
93
  expect(templateColumns(grid)).toBe(
118
- 'repeat(auto-fill, minmax(min(100%, max(200px, calc((100% - 3 * var(--spacing-6)) / 4))), 1fr))',
94
+ 'repeat(auto-fill, minmax(200px, calc((100% - 3 * var(--spacing-6)) / 4)))',
119
95
  );
120
96
  expect(grid.style.maxWidth).toBe('');
121
97
  });
@@ -189,7 +165,7 @@ describe('Grid', () => {
189
165
  expect(templateColumns(grid)).toBe('1fr');
190
166
  });
191
167
 
192
- it('uses auto-fill with a plain 1fr track when no max specified', () => {
168
+ it('uses auto-fill without track-max cap when no max specified', () => {
193
169
  render(
194
170
  <Grid columns={{minWidth: 200}} data-testid="grid">
195
171
  <div>Item</div>
@@ -244,7 +220,7 @@ describe('Grid', () => {
244
220
 
245
221
  // --- P2: columns object + columnGap interaction (hardening #719) ---
246
222
 
247
- it('uses columnGap var in the count-cap floor when both columnGap and gap are set', () => {
223
+ it('uses columnGap var in track-max when both columnGap and gap are set', () => {
248
224
  render(
249
225
  <Grid
250
226
  columns={{minWidth: 200, max: 3}}
@@ -255,14 +231,14 @@ describe('Grid', () => {
255
231
  </Grid>,
256
232
  );
257
233
  const grid = screen.getByTestId('grid');
258
- // columnGap takes precedence over gap in the perColumn floor
234
+ // columnGap takes precedence over gap in track-max
259
235
  expect(templateColumns(grid)).toBe(
260
- 'repeat(auto-fill, minmax(min(100%, max(200px, calc((100% - 2 * var(--spacing-6)) / 3))), 1fr))',
236
+ 'repeat(auto-fill, minmax(200px, calc((100% - 2 * var(--spacing-6)) / 3)))',
261
237
  );
262
238
  expect(grid.style.maxWidth).toBe('');
263
239
  });
264
240
 
265
- it('uses gap var in the count-cap floor when columnGap is not set', () => {
241
+ it('uses gap var in track-max when columnGap is not set', () => {
266
242
  render(
267
243
  <Grid columns={{minWidth: 150, max: 2}} gap={3} data-testid="grid">
268
244
  <div>Item</div>
@@ -270,12 +246,12 @@ describe('Grid', () => {
270
246
  );
271
247
  const grid = screen.getByTestId('grid');
272
248
  expect(templateColumns(grid)).toBe(
273
- 'repeat(auto-fill, minmax(min(100%, max(150px, calc((100% - 1 * var(--spacing-3)) / 2))), 1fr))',
249
+ 'repeat(auto-fill, minmax(150px, calc((100% - 1 * var(--spacing-3)) / 2)))',
274
250
  );
275
251
  expect(grid.style.maxWidth).toBe('');
276
252
  });
277
253
 
278
- it('uses simple fraction in the count-cap floor when no gap is set', () => {
254
+ it('uses simple fraction in track-max when no gap is set', () => {
279
255
  render(
280
256
  <Grid columns={{minWidth: 100, max: 3}} data-testid="grid">
281
257
  <div>Item</div>
@@ -283,7 +259,7 @@ describe('Grid', () => {
283
259
  );
284
260
  const grid = screen.getByTestId('grid');
285
261
  expect(templateColumns(grid)).toBe(
286
- 'repeat(auto-fill, minmax(min(100%, max(100px, calc(100% / 3))), 1fr))',
262
+ 'repeat(auto-fill, minmax(100px, calc(100% / 3)))',
287
263
  );
288
264
  expect(grid.style.maxWidth).toBe('');
289
265
  });
@@ -356,7 +332,7 @@ describe('Grid', () => {
356
332
  expect(templateColumns(grid)).toBe('repeat(auto-fill, minmax(280px, 1fr))');
357
333
  });
358
334
 
359
- it('renders with columns={{minWidth, max}} capping the count while filling', () => {
335
+ it('renders with columns={{minWidth, max}} capping via track-max', () => {
360
336
  render(
361
337
  <Grid columns={{minWidth: 280, max: 3}} gap={4} data-testid="grid">
362
338
  <div>Item 1</div>
@@ -364,15 +340,14 @@ describe('Grid', () => {
364
340
  </Grid>,
365
341
  );
366
342
  const grid = screen.getByTestId('grid');
367
- // Count is capped via the track MIN; track MAX stays 1fr so present
368
- // columns fill the row (grid stays full width).
343
+ // Track-max limits columns grid stays full width
369
344
  expect(templateColumns(grid)).toBe(
370
- 'repeat(auto-fill, minmax(min(100%, max(280px, calc((100% - 2 * var(--spacing-4)) / 3))), 1fr))',
345
+ 'repeat(auto-fill, minmax(280px, calc((100% - 2 * var(--spacing-4)) / 3)))',
371
346
  );
372
347
  expect(grid.style.maxWidth).toBe('');
373
348
  });
374
349
 
375
- it('renders with columns={{minWidth, max, repeat: "fit"}} using auto-fit + count cap', () => {
350
+ it('renders with columns={{minWidth, max, repeat: "fit"}} using auto-fit + track-max', () => {
376
351
  render(
377
352
  <Grid
378
353
  columns={{minWidth: 280, max: 3, repeat: 'fit'}}
@@ -384,7 +359,7 @@ describe('Grid', () => {
384
359
  );
385
360
  const grid = screen.getByTestId('grid');
386
361
  expect(templateColumns(grid)).toBe(
387
- 'repeat(auto-fit, minmax(min(100%, max(280px, calc((100% - 2 * var(--spacing-4)) / 3))), 1fr))',
362
+ 'repeat(auto-fit, minmax(280px, calc((100% - 2 * var(--spacing-4)) / 3)))',
388
363
  );
389
364
  expect(grid.style.maxWidth).toBe('');
390
365
  });
package/src/Grid/Grid.tsx CHANGED
@@ -38,10 +38,9 @@ export type GridAlignment = 'start' | 'center' | 'end' | 'stretch';
38
38
  * - `minWidth` — minimum width (px) for each column track
39
39
  * - `repeat` — `'fill'` (default) preserves empty tracks for consistent widths;
40
40
  * `'fit'` collapses empty tracks so items stretch to fill
41
- * - `max` — caps the maximum number of columns. The grid stretches to 100%
42
- * of its parent and the columns that are present always fill the row, so a
43
- * layout collapsing to a single column on mobile stretches to full width
44
- * (no dead space on the right).
41
+ * - `max` — caps the maximum number of columns by limiting track max size.
42
+ * The grid stretches to 100% of its parent; `max` only limits how many
43
+ * columns appear.
45
44
  */
46
45
  export type GridColumns =
47
46
  | number
@@ -322,20 +321,9 @@ const spacingVarNames: Record<SpacingStep, string> = {
322
321
  };
323
322
 
324
323
  /**
325
- * Build a grid-template-columns value that caps the column *count* at `max`
326
- * while still letting the columns that are actually present stretch to fill
327
- * the row.
328
- *
329
- * The cap lives on the track's **min** size, not its max: each track is at
330
- * least `perColumn = (100% - (max-1) * gap) / max`, so more than `max` columns
331
- * can never fit. The track **max** stays `1fr`, so whenever fewer than `max`
332
- * columns fit (most importantly a lone column on mobile) they still grow to
333
- * fill the whole row — no dead space on the right.
334
- *
335
- * The track min is `max(minWidth, perColumn)` so an explicit `minWidth` is
336
- * still honored, wrapped in `min(100%, …)` so a single column on a viewport
337
- * narrower than `minWidth`/`perColumn` shrinks to the container instead of
338
- * overflowing it.
324
+ * Build a grid-template-columns value that caps columns at `max` by
325
+ * limiting each track's max size to `(100% - (max-1) * gap) / max`.
326
+ * The grid stays 100% width; the track-max prevents more than `max` columns.
339
327
  */
340
328
  function buildCappedTemplate(
341
329
  minWidth: number,
@@ -351,17 +339,12 @@ function buildCappedTemplate(
351
339
  ? spacingVarNames[gap]
352
340
  : null;
353
341
 
354
- // perColumn = (100% - (maxCols - 1) * gap) / maxCols — the width a track
355
- // would have if exactly `maxCols` columns were present. Used as a floor so
356
- // the grid never fits more than `maxCols` columns.
357
- const perColumn = gapVar
342
+ // trackMax = (100% - (maxCols - 1) * gap) / maxCols
343
+ const trackMax = gapVar
358
344
  ? `calc((100% - ${maxCols - 1} * var(${gapVar})) / ${maxCols})`
359
345
  : `calc(100% / ${maxCols})`;
360
346
 
361
- // Track min caps the count; track max stays 1fr so present columns fill.
362
- const trackMin = `min(100%, max(${minWidth}px, ${perColumn}))`;
363
-
364
- return `repeat(${repeatMode}, minmax(${trackMin}, 1fr))`;
347
+ return `repeat(${repeatMode}, minmax(${minWidth}px, ${trackMax}))`;
365
348
  }
366
349
 
367
350
  /**
@@ -46,13 +46,13 @@ export const docs = {
46
46
  {
47
47
  name: 'placement',
48
48
  type: "'above' | 'below' | 'start' | 'end'",
49
- description: "Position relative to the anchor element. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
49
+ description: 'Position relative to the anchor element.',
50
50
  default: "'above'",
51
51
  },
52
52
  {
53
53
  name: 'alignment',
54
54
  type: "'start' | 'center' | 'end'",
55
- description: "Alignment along the placement axis. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
55
+ description: 'Alignment along the placement axis.',
56
56
  default: "'center'",
57
57
  },
58
58
  {
@@ -155,13 +155,13 @@ export const docsZh = {
155
155
  {
156
156
  name: 'placement',
157
157
  type: "'above' | 'below' | 'start' | 'end'",
158
- description: '相对于锚点元素的位置。逻辑值:start/end 根据弹出层自身继承的方向解析(RTL 镜像)。',
158
+ description: '相对于锚点元素的位置。',
159
159
  default: "'above'",
160
160
  },
161
161
  {
162
162
  name: 'alignment',
163
163
  type: "'start' | 'center' | 'end'",
164
- description: '沿放置轴的对齐方式。逻辑值:start/end 根据弹出层自身继承的方向解析(RTL 镜像)。',
164
+ description: '沿放置轴的对齐方式。',
165
165
  default: "'center'",
166
166
  },
167
167
  {
@@ -246,8 +246,8 @@ export const docsDense = {
246
246
  propDescriptions: {
247
247
  children: 'Trigger element; must accept ref.',
248
248
  content: 'Hover card content.',
249
- placement: 'Position relative to anchor element. Logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
250
- alignment: 'Alignment along placement axis. Logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
249
+ placement: 'Position relative to anchor element.',
250
+ alignment: 'Alignment along placement axis.',
251
251
  delay: 'Show delay in ms.',
252
252
  hideDelay: 'Hide delay in ms.',
253
253
  focusTrigger: 'Controls when focus events trigger hover card.',
@@ -7,8 +7,8 @@ export const docs = {
7
7
  group: 'HoverCard',
8
8
  keywords: ['hovercard', 'hover', 'preview', 'card', 'tooltip', 'popup', 'floating', 'anchor'],
9
9
  params: [
10
- {name: 'placement', type: "'above' | 'below' | 'start' | 'end'", description: "Position relative to the trigger. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).", default: "'above'"},
11
- {name: 'alignment', type: "'start' | 'center' | 'end'", description: "Alignment along the placement axis. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).", default: "'center'"},
10
+ {name: 'placement', type: "'above' | 'below' | 'start' | 'end'", description: 'Position relative to the trigger.', default: "'above'"},
11
+ {name: 'alignment', type: "'start' | 'center' | 'end'", description: 'Alignment along the placement axis.', default: "'center'"},
12
12
  {name: 'delay', type: 'number', description: 'Delay before showing the hover card on hover, in milliseconds.', default: '300'},
13
13
  {name: 'hideDelay', type: 'number', description: 'Delay before hiding after mouse or focus leaves, in milliseconds.', default: '200'},
14
14
  {name: 'focusTrigger', type: "'auto' | 'always' | 'never'", description: 'When focus should open the hover card. auto only attaches focus listeners to naturally focusable elements.', default: "'auto'"},
@@ -24,7 +24,7 @@ export const docs = {
24
24
  {name: 'interactionRef', type: 'RefCallback<HTMLElement>', description: 'Ref for the hover/focus interaction element. Use with positionRef for split trigger patterns.'},
25
25
  {name: 'anchorId', type: 'string', description: 'CSS anchor name for advanced positioning cases.'},
26
26
  {name: 'describedBy', type: 'string', description: 'ID to compose into aria-describedby on the trigger.'},
27
- {name: 'renderHoverCard', type: "(children: ReactNode, props?: Omit<ContextRenderProps, 'positioning'>) => ReactNode", description: 'Render function for the anchor-positioned hover card content. The positioning opt-out is excluded: the hover card always derives its position from placement/alignment.'},
27
+ {name: 'renderHoverCard', type: '(children: ReactNode, props?: ContextRenderProps) => ReactNode', description: 'Render function for the anchor-positioned hover card content.'},
28
28
  {name: 'show', type: '() => void', description: 'Imperatively show the hover card immediately.'},
29
29
  {name: 'hide', type: '() => void', description: 'Imperatively hide the hover card immediately.'},
30
30
  ],
@@ -46,8 +46,8 @@ export const docs = {
46
46
  export const docsDense = {
47
47
  description: 'Headless hover-triggered floating cards. Builds on useLayer w/ hover/focus intent, delays, safe hover behavior, aria-describedby. Use for rich previews when trigger/content rendering needs full control.',
48
48
  paramDescriptions: {
49
- placement: 'position relative to trigger. logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
50
- alignment: 'alignment along placement axis. logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
49
+ placement: 'position relative to trigger.',
50
+ alignment: 'alignment along placement axis.',
51
51
  delay: 'show delay in ms.',
52
52
  hideDelay: 'hide delay after mouse/focus leave in ms.',
53
53
  focusTrigger: 'when focus opens hover card; auto = naturally focusable elements only.',
@@ -181,14 +181,10 @@ export interface HoverCardReturn {
181
181
  /**
182
182
  * Render function for hover card content.
183
183
  * Returns anchor-positioned popover element.
184
- *
185
- * `positioning` is excluded: the hover card always derives its position
186
- * from placement/alignment, so accepting the custom opt-out here would be
187
- * a silent no-op.
188
184
  */
189
185
  renderHoverCard: (
190
186
  children: ReactNode,
191
- props?: Omit<ContextRenderProps, 'positioning'>,
187
+ props?: ContextRenderProps,
192
188
  ) => ReactNode;
193
189
 
194
190
  /**
@@ -454,10 +450,7 @@ export function useHoverCard(options: HoverCardOptions = {}): HoverCardReturn {
454
450
 
455
451
  // Render function that wraps layer.render with hover card behavior
456
452
  const renderHoverCard = useCallback(
457
- (
458
- children: ReactNode,
459
- props?: Omit<ContextRenderProps, 'positioning'>,
460
- ): ReactNode => {
453
+ (children: ReactNode, props?: ContextRenderProps): ReactNode => {
461
454
  const renderPlacement = props?.placement ?? placement;
462
455
  const renderProps = {
463
456
  placement: renderPlacement,
@@ -11,48 +11,48 @@
11
11
 
12
12
  import {describe, it, expect, vi} from 'vitest';
13
13
  import {render, screen} from '@testing-library/react';
14
- import {TestIcon} from '../__tests__/TestIcon';
14
+ import {HomeIcon} from '@heroicons/react/24/outline';
15
15
  import {Icon} from './Icon';
16
16
 
17
17
  describe('Icon', () => {
18
18
  it('renders the icon component', () => {
19
- render(<Icon icon={TestIcon} data-testid="icon" />);
19
+ render(<Icon icon={HomeIcon} data-testid="icon" />);
20
20
  expect(screen.getByTestId('icon')).toBeInTheDocument();
21
21
  });
22
22
 
23
23
  it('renders as an SVG element', () => {
24
- render(<Icon icon={TestIcon} data-testid="icon" />);
24
+ render(<Icon icon={HomeIcon} data-testid="icon" />);
25
25
  const icon = screen.getByTestId('icon');
26
26
  expect(icon.tagName.toLowerCase()).toBe('svg');
27
27
  });
28
28
 
29
29
  it('applies aria-hidden by default', () => {
30
- render(<Icon icon={TestIcon} data-testid="icon" />);
30
+ render(<Icon icon={HomeIcon} data-testid="icon" />);
31
31
  expect(screen.getByTestId('icon')).toHaveAttribute('aria-hidden', 'true');
32
32
  });
33
33
 
34
34
  it('renders with different color variants', () => {
35
35
  const {rerender} = render(
36
- <Icon icon={TestIcon} color="primary" data-testid="icon" />,
36
+ <Icon icon={HomeIcon} color="primary" data-testid="icon" />,
37
37
  );
38
38
  expect(screen.getByTestId('icon')).toBeInTheDocument();
39
39
 
40
- rerender(<Icon icon={TestIcon} color="secondary" data-testid="icon" />);
40
+ rerender(<Icon icon={HomeIcon} color="secondary" data-testid="icon" />);
41
41
  expect(screen.getByTestId('icon')).toBeInTheDocument();
42
42
 
43
- rerender(<Icon icon={TestIcon} color="accent" data-testid="icon" />);
43
+ rerender(<Icon icon={HomeIcon} color="accent" data-testid="icon" />);
44
44
  expect(screen.getByTestId('icon')).toBeInTheDocument();
45
45
 
46
- rerender(<Icon icon={TestIcon} color="success" data-testid="icon" />);
46
+ rerender(<Icon icon={HomeIcon} color="success" data-testid="icon" />);
47
47
  expect(screen.getByTestId('icon')).toBeInTheDocument();
48
48
 
49
- rerender(<Icon icon={TestIcon} color="error" data-testid="icon" />);
49
+ rerender(<Icon icon={HomeIcon} color="error" data-testid="icon" />);
50
50
  expect(screen.getByTestId('icon')).toBeInTheDocument();
51
51
 
52
- rerender(<Icon icon={TestIcon} color="warning" data-testid="icon" />);
52
+ rerender(<Icon icon={HomeIcon} color="warning" data-testid="icon" />);
53
53
  expect(screen.getByTestId('icon')).toBeInTheDocument();
54
54
 
55
- rerender(<Icon icon={TestIcon} color="inherit" data-testid="icon" />);
55
+ rerender(<Icon icon={HomeIcon} color="inherit" data-testid="icon" />);
56
56
  expect(screen.getByTestId('icon')).toBeInTheDocument();
57
57
  });
58
58
 
@@ -70,41 +70,50 @@ describe('Icon', () => {
70
70
  'purple',
71
71
  ] as const;
72
72
  const {rerender} = render(
73
- <Icon icon={TestIcon} color={nonSemanticColors[0]} data-testid="icon" />,
73
+ <Icon
74
+ icon={HomeIcon}
75
+ color={nonSemanticColors[0]}
76
+ data-testid="icon"
77
+ />,
74
78
  );
75
79
  expect(screen.getByTestId('icon')).toBeInTheDocument();
76
80
 
77
81
  for (const c of nonSemanticColors.slice(1)) {
78
- rerender(<Icon icon={TestIcon} color={c} data-testid="icon" />);
82
+ rerender(<Icon icon={HomeIcon} color={c} data-testid="icon" />);
79
83
  expect(screen.getByTestId('icon')).toBeInTheDocument();
80
84
  }
81
85
  });
82
86
 
83
87
  it('renders with different size variants', () => {
84
88
  const {rerender} = render(
85
- <Icon icon={TestIcon} size="xsm" data-testid="icon" />,
89
+ <Icon icon={HomeIcon} size="xsm" data-testid="icon" />,
86
90
  );
87
91
  expect(screen.getByTestId('icon')).toBeInTheDocument();
88
92
 
89
- rerender(<Icon icon={TestIcon} size="sm" data-testid="icon" />);
93
+ rerender(<Icon icon={HomeIcon} size="sm" data-testid="icon" />);
90
94
  expect(screen.getByTestId('icon')).toBeInTheDocument();
91
95
 
92
- rerender(<Icon icon={TestIcon} size="md" data-testid="icon" />);
96
+ rerender(<Icon icon={HomeIcon} size="md" data-testid="icon" />);
93
97
  expect(screen.getByTestId('icon')).toBeInTheDocument();
94
98
 
95
- rerender(<Icon icon={TestIcon} size="lg" data-testid="icon" />);
99
+ rerender(<Icon icon={HomeIcon} size="lg" data-testid="icon" />);
96
100
  expect(screen.getByTestId('icon')).toBeInTheDocument();
97
101
  });
98
102
 
99
103
  it('forwards ref correctly', () => {
100
104
  const ref = vi.fn();
101
- render(<Icon icon={TestIcon} ref={ref} />);
105
+ render(<Icon icon={HomeIcon} ref={ref} />);
102
106
  expect(ref).toHaveBeenCalledWith(expect.any(SVGSVGElement));
103
107
  });
104
108
 
105
109
  it('passes additional SVG props', () => {
106
110
  render(
107
- <Icon icon={TestIcon} data-testid="icon" role="img" aria-label="Home" />,
111
+ <Icon
112
+ icon={HomeIcon}
113
+ data-testid="icon"
114
+ role="img"
115
+ aria-label="Home"
116
+ />,
108
117
  );
109
118
  const icon = screen.getByTestId('icon');
110
119
  expect(icon).toHaveAttribute('role', 'img');
@@ -112,29 +121,8 @@ describe('Icon', () => {
112
121
  });
113
122
 
114
123
  it('uses default color and size when not specified', () => {
115
- render(<Icon icon={TestIcon} data-testid="icon" />);
124
+ render(<Icon icon={HomeIcon} data-testid="icon" />);
116
125
  // The component should render without errors with defaults
117
126
  expect(screen.getByTestId('icon')).toBeInTheDocument();
118
127
  });
119
-
120
- it('applies aria-hidden by default in string (registry) mode', () => {
121
- render(<Icon icon="check" data-testid="icon" />);
122
- expect(screen.getByTestId('icon')).toHaveAttribute('aria-hidden', 'true');
123
- });
124
-
125
- it('lets a string-mode icon be made meaningful by overriding aria-hidden', () => {
126
- render(
127
- <Icon
128
- icon="check"
129
- data-testid="icon"
130
- role="img"
131
- aria-label="Done"
132
- aria-hidden={false}
133
- />,
134
- );
135
- const icon = screen.getByTestId('icon');
136
- expect(icon).toHaveAttribute('role', 'img');
137
- expect(icon).toHaveAttribute('aria-label', 'Done');
138
- expect(icon).toHaveAttribute('aria-hidden', 'false');
139
- });
140
128
  });
package/src/Icon/Icon.tsx CHANGED
@@ -281,16 +281,12 @@ function IconFromRegistry({
281
281
 
282
282
  return (
283
283
  <span
284
- // Decorative by default, but placed BEFORE the prop spread so consumers
285
- // can override it (e.g. `aria-hidden={false}` + `role="img"` +
286
- // `aria-label`) to expose a meaningful standalone icon. This matches
287
- // component-mode Icon, which already sets aria-hidden before its spread.
288
- aria-hidden="true"
289
284
  {...(spanProps as React.HTMLAttributes<HTMLSpanElement>)}
290
285
  {...mergeProps(
291
286
  themeProps('icon', {size, color}),
292
287
  stylex.props(styles.span, colorStyles[color], spanSizeStyles[size]),
293
- )}>
288
+ )}
289
+ aria-hidden="true">
294
290
  {resolvedIcon}
295
291
  </span>
296
292
  );
@@ -201,11 +201,11 @@ export function InputGroup({
201
201
  labelTooltip={labelTooltip}>
202
202
  <div
203
203
  ref={ref}
204
- data-testid={testId}
205
- {...rest}
206
204
  role="group"
207
205
  aria-labelledby={labelID}
208
206
  aria-describedby={describedByIDs}
207
+ data-testid={testId}
208
+ {...rest}
209
209
  {...mergeProps(
210
210
  themeProps('input-group', {
211
211
  size,
package/src/Item/Item.tsx CHANGED
@@ -470,9 +470,9 @@ export function Item({
470
470
  return (
471
471
  <Component
472
472
  ref={ref as React.Ref<never>}
473
- {...restProps}
474
473
  aria-selected={isSelected || undefined}
475
474
  aria-disabled={isDisabled || undefined}
475
+ {...restProps}
476
476
  {...mergeProps(
477
477
  themeProps('item', {density, align}),
478
478
  stylex.props(
@@ -78,7 +78,7 @@ export const docs = {
78
78
  name: 'render',
79
79
  type: '(children: ReactNode, props: ContextRenderProps | FixedRenderProps) => ReactNode',
80
80
  description:
81
- 'Render function for the popover element. Pass placement/alignment in context mode or x/y in fixed mode. Placement/alignment are logical: they map to the self-* position-area keyword family, which resolves against the popover\'s own inherited direction, so RTL contexts mirror automatically in pure CSS. Pass `positioning: "custom"` in context mode to author position styles yourself via `style` (e.g. explicit anchor() insets or an anchor-size() cover): the hook keeps the popover behavior and position-anchor wiring but derives no position styles — including the automatic RTL mirroring, which becomes your responsibility. In context mode, pass `as: "span"` to render an inline-safe layer (e.g. inside a paragraph). The layer renders inline in the React tree; the Popover API promotes it to the top layer when shown, so it escapes ancestor clipping and stacking without a portal.',
81
+ 'Render function for the popover element. Pass placement/alignment in context mode or x/y in fixed mode. In context mode, pass `as: "span"` to render an inline-safe layer (e.g. inside a paragraph). The layer renders inline in the React tree; the Popover API promotes it to the top layer when shown, so it escapes ancestor clipping and stacking without a portal.',
82
82
  },
83
83
  ],
84
84
  usage: {
@@ -130,7 +130,7 @@ export const docsDense = {
130
130
  hide: 'hide layer.',
131
131
  isOpen: 'whether layer is open.',
132
132
  id: 'unique ARIA id.',
133
- render: 'renders popover element; pass placement/alignment or x/y. Placement/alignment logical: mapped to self-* position-area keywords resolved against the popover\'s inherited direction (RTL mirrors in pure CSS). `positioning: "custom"` (context mode) = author position styles yourself via `style`; keeps popover behavior + position-anchor wiring, derives nothing (incl. RTL mirroring — yours). Context mode accepts `as: "span"` for inline-safe layers. Renders inline; the Popover API top layer escapes clipping/stacking without a portal.',
133
+ render: 'renders popover element; pass placement/alignment or x/y. Context mode accepts `as: "span"` for inline-safe layers. Renders inline; the Popover API top layer escapes clipping/stacking without a portal.',
134
134
  },
135
135
  usage: {
136
136
  description: