@astryxdesign/core 0.3.0 → 0.4.0-canary.058f476

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 (664) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/dist/AlertDialog/AlertDialog.d.ts +10 -2
  3. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  4. package/dist/AlertDialog/AlertDialog.js +22 -3
  5. package/dist/AppShell/AppShell.d.ts +2 -2
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +40 -9
  8. package/dist/AspectRatio/AspectRatio.d.ts +13 -0
  9. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js +10 -2
  11. package/dist/AspectRatio/index.d.ts.map +1 -1
  12. package/dist/AspectRatio/index.js +1 -2
  13. package/dist/Avatar/Avatar.d.ts.map +1 -1
  14. package/dist/Avatar/Avatar.js +33 -20
  15. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  16. package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
  17. package/dist/Badge/Badge.d.ts.map +1 -1
  18. package/dist/Badge/Badge.js +1 -2
  19. package/dist/Badge/index.d.ts.map +1 -1
  20. package/dist/Badge/index.js +1 -2
  21. package/dist/Banner/Banner.d.ts +3 -0
  22. package/dist/Banner/Banner.d.ts.map +1 -1
  23. package/dist/Banner/Banner.js +32 -17
  24. package/dist/Blockquote/Blockquote.d.ts.map +1 -1
  25. package/dist/Blockquote/Blockquote.js +1 -2
  26. package/dist/Blockquote/index.d.ts.map +1 -1
  27. package/dist/Blockquote/index.js +1 -2
  28. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  29. package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
  30. package/dist/Breadcrumbs/index.d.ts +2 -1
  31. package/dist/Breadcrumbs/index.d.ts.map +1 -1
  32. package/dist/Breadcrumbs/index.js +1 -0
  33. package/dist/Button/Button.d.ts.map +1 -1
  34. package/dist/Button/Button.js +12 -16
  35. package/dist/Calendar/Calendar.d.ts.map +1 -1
  36. package/dist/Calendar/Calendar.js +2 -1
  37. package/dist/Calendar/styles.d.ts +0 -2
  38. package/dist/Calendar/styles.d.ts.map +1 -1
  39. package/dist/Calendar/styles.js +0 -2
  40. package/dist/Card/Card.d.ts.map +1 -1
  41. package/dist/Card/Card.js +1 -2
  42. package/dist/Card/index.d.ts.map +1 -1
  43. package/dist/Card/index.js +1 -2
  44. package/dist/Carousel/Carousel.d.ts.map +1 -1
  45. package/dist/Carousel/Carousel.js +8 -12
  46. package/dist/Center/Center.d.ts.map +1 -1
  47. package/dist/Center/Center.js +1 -2
  48. package/dist/Center/index.d.ts.map +1 -1
  49. package/dist/Center/index.js +1 -2
  50. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  51. package/dist/Chat/ChatDictationButton.js +2 -1
  52. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  53. package/dist/Chat/ChatLayoutScrollButton.js +3 -1
  54. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  55. package/dist/Chat/ChatSendButton.js +4 -3
  56. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  57. package/dist/Chat/ChatToolCalls.js +17 -17
  58. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  59. package/dist/Chat/useTriggerMenu.js +2 -6
  60. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  61. package/dist/CheckboxInput/CheckboxInput.js +36 -125
  62. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  63. package/dist/ClickableCard/ClickableCard.js +3 -11
  64. package/dist/Code/Code.d.ts.map +1 -1
  65. package/dist/Code/Code.js +1 -2
  66. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  67. package/dist/CodeBlock/CodeBlock.js +84 -67
  68. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  69. package/dist/Collapsible/Collapsible.js +35 -15
  70. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  71. package/dist/CommandPalette/CommandPalette.js +5 -0
  72. package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
  73. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  74. package/dist/CommandPalette/CommandPaletteItem.js +6 -3
  75. package/dist/CommandPalette/CommandPaletteList.js +1 -1
  76. package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
  77. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  78. package/dist/ComplexSelector/ComplexSelector.js +32 -31
  79. package/dist/ContextMenu/ContextMenu.d.ts +2 -2
  80. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  81. package/dist/ContextMenu/ContextMenu.js +1 -1
  82. package/dist/ContextMenu/index.d.ts +2 -1
  83. package/dist/ContextMenu/index.d.ts.map +1 -1
  84. package/dist/ContextMenu/index.js +1 -0
  85. package/dist/DateInput/DateInput.d.ts +9 -2
  86. package/dist/DateInput/DateInput.d.ts.map +1 -1
  87. package/dist/DateInput/DateInput.js +47 -33
  88. package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
  89. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  90. package/dist/DateRangeInput/DateRangeInput.js +55 -32
  91. package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
  92. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  93. package/dist/DateTimeInput/DateTimeInput.js +54 -30
  94. package/dist/Dialog/Dialog.d.ts.map +1 -1
  95. package/dist/Dialog/Dialog.js +4 -4
  96. package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
  97. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  98. package/dist/DropdownMenu/DropdownMenu.js +62 -20
  99. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
  100. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  101. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
  102. package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
  103. package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
  104. package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
  105. package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
  106. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  107. package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
  108. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
  109. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
  110. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +10 -3
  111. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
  112. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  113. package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
  114. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  115. package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
  116. package/dist/DropdownMenu/index.d.ts +2 -1
  117. package/dist/DropdownMenu/index.d.ts.map +1 -1
  118. package/dist/DropdownMenu/index.js +4 -0
  119. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  120. package/dist/DropdownMenu/renderDropdownItems.js +35 -27
  121. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  122. package/dist/EmptyState/EmptyState.js +9 -5
  123. package/dist/Field/InputClearButton.d.ts +16 -3
  124. package/dist/Field/InputClearButton.d.ts.map +1 -1
  125. package/dist/Field/InputClearButton.js +15 -4
  126. package/dist/Field/PanelSearchInput.d.ts +81 -0
  127. package/dist/Field/PanelSearchInput.d.ts.map +1 -0
  128. package/dist/Field/PanelSearchInput.js +151 -0
  129. package/dist/FileInput/FileInput.d.ts.map +1 -1
  130. package/dist/FileInput/FileInput.js +21 -10
  131. package/dist/Grid/Grid.d.ts.map +1 -1
  132. package/dist/Grid/Grid.js +1 -2
  133. package/dist/Grid/index.d.ts.map +1 -1
  134. package/dist/Grid/index.js +1 -2
  135. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  136. package/dist/HoverCard/useHoverCard.js +3 -19
  137. package/dist/Icon/globalIconRegistry.d.ts +5 -4
  138. package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
  139. package/dist/Icon/globalIconRegistry.js +5 -4
  140. package/dist/Indicator/CheckIndicator.d.ts +25 -0
  141. package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
  142. package/dist/Indicator/CheckIndicator.js +155 -0
  143. package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
  144. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
  145. package/dist/Indicator/CheckboxIndicator.js +173 -0
  146. package/dist/Indicator/RadioIndicator.d.ts +23 -0
  147. package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
  148. package/dist/Indicator/RadioIndicator.js +137 -0
  149. package/dist/Indicator/index.d.ts +24 -0
  150. package/dist/Indicator/index.d.ts.map +1 -0
  151. package/dist/Indicator/index.js +26 -0
  152. package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
  153. package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
  154. package/dist/Indicator/indicator.markers.stylex.js +21 -0
  155. package/dist/Indicator/indicatorRegistry.d.ts +71 -0
  156. package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
  157. package/dist/Indicator/indicatorRegistry.js +93 -0
  158. package/dist/Indicator/types.d.ts +177 -0
  159. package/dist/Indicator/types.d.ts.map +1 -0
  160. package/dist/Indicator/types.js +1 -0
  161. package/dist/Indicator/useIndicator.d.ts +18 -0
  162. package/dist/Indicator/useIndicator.d.ts.map +1 -0
  163. package/dist/Indicator/useIndicator.js +30 -0
  164. package/dist/Item/Item.d.ts.map +1 -1
  165. package/dist/Item/Item.js +4 -8
  166. package/dist/Layer/useLayer.d.ts +14 -0
  167. package/dist/Layer/useLayer.d.ts.map +1 -1
  168. package/dist/Layer/useLayer.js +25 -2
  169. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  170. package/dist/Lightbox/Lightbox.js +80 -103
  171. package/dist/Link/Link.d.ts.map +1 -1
  172. package/dist/Link/Link.js +4 -5
  173. package/dist/MobileNav/MobileNav.js +8 -8
  174. package/dist/MoreMenu/MoreMenu.d.ts +14 -1
  175. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  176. package/dist/MoreMenu/MoreMenu.js +4 -0
  177. package/dist/MultiSelector/MultiSelector.d.ts +8 -1
  178. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  179. package/dist/MultiSelector/MultiSelector.js +205 -170
  180. package/dist/NumberInput/NumberInput.d.ts +27 -1
  181. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  182. package/dist/NumberInput/NumberInput.js +230 -42
  183. package/dist/Outline/Outline.d.ts.map +1 -1
  184. package/dist/Outline/Outline.js +2 -3
  185. package/dist/Pagination/Pagination.d.ts.map +1 -1
  186. package/dist/Pagination/Pagination.js +61 -63
  187. package/dist/Popover/Popover.d.ts.map +1 -1
  188. package/dist/Popover/Popover.js +6 -8
  189. package/dist/Popover/usePopover.d.ts +15 -0
  190. package/dist/Popover/usePopover.d.ts.map +1 -1
  191. package/dist/Popover/usePopover.js +14 -2
  192. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  193. package/dist/PowerSearch/PowerSearch.js +1 -1
  194. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  195. package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
  196. package/dist/ProgressBar/ProgressBar.d.ts +11 -4
  197. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  198. package/dist/ProgressBar/ProgressBar.js +95 -6
  199. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  200. package/dist/RadioList/RadioListItem.js +29 -84
  201. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  202. package/dist/Resizable/ResizeHandle.js +2 -3
  203. package/dist/Section/Section.d.ts.map +1 -1
  204. package/dist/Section/Section.js +1 -2
  205. package/dist/Section/index.d.ts.map +1 -1
  206. package/dist/Section/index.js +1 -2
  207. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  208. package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
  209. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  210. package/dist/SelectableCard/SelectableCard.js +3 -11
  211. package/dist/Selector/Selector.d.ts +12 -1
  212. package/dist/Selector/Selector.d.ts.map +1 -1
  213. package/dist/Selector/Selector.js +293 -183
  214. package/dist/Selector/hooks.d.ts +18 -6
  215. package/dist/Selector/hooks.d.ts.map +1 -1
  216. package/dist/Selector/hooks.js +57 -40
  217. package/dist/SideNav/SideNav.d.ts.map +1 -1
  218. package/dist/SideNav/SideNav.js +1 -1
  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 +29 -14
  222. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  223. package/dist/SideNav/SideNavHeading.js +56 -20
  224. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  225. package/dist/SideNav/SideNavItem.js +28 -22
  226. package/dist/Skeleton/Skeleton.d.ts.map +1 -1
  227. package/dist/Skeleton/Skeleton.js +1 -2
  228. package/dist/Skeleton/index.d.ts.map +1 -1
  229. package/dist/Skeleton/index.js +1 -2
  230. package/dist/Slider/Slider.d.ts.map +1 -1
  231. package/dist/Slider/Slider.js +2 -6
  232. package/dist/Stack/stack.stylex.d.ts +3 -3
  233. package/dist/Switch/Switch.d.ts.map +1 -1
  234. package/dist/Switch/Switch.js +14 -13
  235. package/dist/TabList/Tab.d.ts.map +1 -1
  236. package/dist/TabList/Tab.js +2 -3
  237. package/dist/TabList/TabMenu.d.ts.map +1 -1
  238. package/dist/TabList/TabMenu.js +41 -19
  239. package/dist/Table/BaseTable.d.ts.map +1 -1
  240. package/dist/Table/BaseTable.js +8 -0
  241. package/dist/Table/TableRow.d.ts +1 -1
  242. package/dist/Table/TableRow.d.ts.map +1 -1
  243. package/dist/Table/TableRow.js +4 -2
  244. package/dist/Table/index.d.ts +1 -1
  245. package/dist/Table/index.d.ts.map +1 -1
  246. package/dist/Table/index.js +1 -1
  247. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  248. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  249. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
  250. package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
  251. package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
  252. package/dist/Table/plugins/rowExpansion/index.js +1 -1
  253. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
  254. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  255. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
  256. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  257. package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
  258. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  259. package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
  260. package/dist/Table/tableContextMenu.d.ts.map +1 -1
  261. package/dist/Table/tableContextMenu.js +2 -1
  262. package/dist/Table/types.d.ts +11 -0
  263. package/dist/Table/types.d.ts.map +1 -1
  264. package/dist/TextArea/TextArea.d.ts +10 -1
  265. package/dist/TextArea/TextArea.d.ts.map +1 -1
  266. package/dist/TextArea/TextArea.js +16 -6
  267. package/dist/TextInput/TextInput.d.ts +10 -1
  268. package/dist/TextInput/TextInput.d.ts.map +1 -1
  269. package/dist/TextInput/TextInput.js +13 -19
  270. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  271. package/dist/Thumbnail/Thumbnail.js +32 -26
  272. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  273. package/dist/TimeInput/TimeInput.js +14 -17
  274. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  275. package/dist/Timestamp/Timestamp.js +14 -3
  276. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
  277. package/dist/Timestamp/TimestampHoverCard.js +16 -34
  278. package/dist/Timestamp/formatInstant.d.ts +11 -1
  279. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  280. package/dist/Timestamp/formatInstant.js +3 -1
  281. package/dist/Token/Token.d.ts.map +1 -1
  282. package/dist/Token/Token.js +20 -11
  283. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  284. package/dist/Tokenizer/Tokenizer.js +4 -2
  285. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  286. package/dist/Tooltip/useTooltip.js +3 -19
  287. package/dist/TopNav/TopNav.d.ts.map +1 -1
  288. package/dist/TopNav/TopNav.js +6 -5
  289. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  290. package/dist/TopNav/TopNavHeading.js +54 -16
  291. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  292. package/dist/TopNav/TopNavItem.js +3 -9
  293. package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
  294. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  295. package/dist/TopNav/TopNavMegaMenu.js +146 -60
  296. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  297. package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
  298. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  299. package/dist/TopNav/TopNavMenu.js +83 -38
  300. package/dist/TreeList/TreeList.d.ts.map +1 -1
  301. package/dist/TreeList/TreeList.js +13 -0
  302. package/dist/TreeList/TreeListBranches.d.ts +1 -1
  303. package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
  304. package/dist/TreeList/TreeListBranches.js +14 -4
  305. package/dist/TreeList/TreeListItem.d.ts +11 -1
  306. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  307. package/dist/TreeList/TreeListItem.js +57 -30
  308. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  309. package/dist/Typeahead/BaseTypeahead.js +16 -8
  310. package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  311. package/dist/VisuallyHidden/VisuallyHidden.js +1 -2
  312. package/dist/VisuallyHidden/index.d.ts.map +1 -1
  313. package/dist/VisuallyHidden/index.js +1 -2
  314. package/dist/astryx.css +86 -96
  315. package/dist/astryx.umd.js +56 -56
  316. package/dist/astryx.umd.js.map +4 -4
  317. package/dist/hooks/containerReveal.stylex.d.ts +61 -0
  318. package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
  319. package/dist/hooks/containerReveal.stylex.js +63 -0
  320. package/dist/hooks/index.d.ts +3 -0
  321. package/dist/hooks/index.d.ts.map +1 -1
  322. package/dist/hooks/index.js +2 -0
  323. package/dist/hooks/useClipboard.d.ts +59 -0
  324. package/dist/hooks/useClipboard.d.ts.map +1 -0
  325. package/dist/hooks/useClipboard.js +106 -0
  326. package/dist/hooks/useContainerReveal.d.ts +14 -8
  327. package/dist/hooks/useContainerReveal.d.ts.map +1 -1
  328. package/dist/hooks/useContainerReveal.js +28 -69
  329. package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
  330. package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
  331. package/dist/hooks/useIndicatorFocusRing.js +96 -0
  332. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  333. package/dist/hooks/useInputStatusIcon.js +17 -4
  334. package/dist/hooks/useLongPress.d.ts.map +1 -1
  335. package/dist/hooks/useLongPress.js +12 -2
  336. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  337. package/dist/hooks/useScrollLock.js +33 -18
  338. package/dist/hooks/useStreamingText.d.ts +18 -3
  339. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  340. package/dist/hooks/useStreamingText.js +47 -7
  341. package/dist/hooks/useTreeFocus.d.ts.map +1 -1
  342. package/dist/hooks/useTreeFocus.js +9 -3
  343. package/dist/hooks/useTypeahead.d.ts +3 -2
  344. package/dist/hooks/useTypeahead.d.ts.map +1 -1
  345. package/dist/hooks/useTypeahead.js +19 -7
  346. package/dist/index.d.ts +1 -0
  347. package/dist/index.d.ts.map +1 -1
  348. package/dist/index.js +1 -0
  349. package/dist/theme/defineTheme.d.ts +18 -2
  350. package/dist/theme/defineTheme.d.ts.map +1 -1
  351. package/dist/theme/defineTheme.js +10 -1
  352. package/dist/theme/derivedVarRegistry.d.ts +8 -0
  353. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  354. package/dist/theme/derivedVarRegistry.js +14 -13
  355. package/dist/theme/expandColorScale.d.ts +3 -1
  356. package/dist/theme/expandColorScale.d.ts.map +1 -1
  357. package/dist/theme/expandColorScale.js +17 -7
  358. package/dist/theme/expandTypeScale.d.ts.map +1 -1
  359. package/dist/theme/expandTypeScale.js +17 -0
  360. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  361. package/dist/theme/generateThemeRules.js +11 -0
  362. package/dist/theme/index.d.ts +2 -1
  363. package/dist/theme/index.d.ts.map +1 -1
  364. package/dist/theme/index.js +1 -1
  365. package/dist/theme/tokens.stylex.d.ts +12 -0
  366. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  367. package/dist/theme/tokens.stylex.js +23 -0
  368. package/dist/utils/focusOutline.stylex.d.ts +122 -0
  369. package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
  370. package/dist/utils/focusOutline.stylex.js +143 -0
  371. package/dist/utils/focusReturn.d.ts +24 -0
  372. package/dist/utils/focusReturn.d.ts.map +1 -0
  373. package/dist/utils/focusReturn.js +29 -0
  374. package/dist/utils/index.d.ts +2 -0
  375. package/dist/utils/index.d.ts.map +1 -1
  376. package/dist/utils/index.js +6 -1
  377. package/dist/utils/interactionModality.d.ts +34 -0
  378. package/dist/utils/interactionModality.d.ts.map +1 -0
  379. package/dist/utils/interactionModality.js +70 -0
  380. package/dist/utils/mergeRefs.d.ts.map +1 -1
  381. package/dist/utils/mergeRefs.js +7 -5
  382. package/dist/utils/rtlStyles.d.ts +2 -2
  383. package/dist/utils/rtlStyles.js +2 -2
  384. package/dist/utils/themeProps.d.ts +20 -1
  385. package/dist/utils/themeProps.d.ts.map +1 -1
  386. package/dist/utils/themeProps.js +8 -2
  387. package/locales/en.json +52 -0
  388. package/locales/pseudo.json +39 -0
  389. package/package.json +8 -3
  390. package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
  391. package/src/AlertDialog/AlertDialog.test.tsx +208 -1
  392. package/src/AlertDialog/AlertDialog.tsx +21 -3
  393. package/src/AppShell/AppShell.doc.mjs +14 -0
  394. package/src/AppShell/AppShell.test.tsx +139 -0
  395. package/src/AppShell/AppShell.tsx +32 -22
  396. package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
  397. package/src/AspectRatio/AspectRatio.test.tsx +30 -0
  398. package/src/AspectRatio/AspectRatio.tsx +13 -2
  399. package/src/AspectRatio/index.ts +0 -2
  400. package/src/Avatar/Avatar.doc.mjs +2 -13
  401. package/src/Avatar/Avatar.test.tsx +33 -8
  402. package/src/Avatar/Avatar.tsx +52 -50
  403. package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
  404. package/src/Badge/Badge.tsx +0 -2
  405. package/src/Badge/index.ts +0 -2
  406. package/src/Banner/Banner.test.tsx +58 -1
  407. package/src/Banner/Banner.tsx +33 -11
  408. package/src/Blockquote/Blockquote.tsx +0 -2
  409. package/src/Blockquote/index.ts +0 -2
  410. package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
  411. package/src/Breadcrumbs/index.ts +5 -1
  412. package/src/Button/Button.doc.mjs +2 -2
  413. package/src/Button/Button.tsx +22 -41
  414. package/src/Calendar/Calendar.tsx +2 -1
  415. package/src/Calendar/styles.ts +0 -8
  416. package/src/Card/Card.tsx +0 -2
  417. package/src/Card/index.ts +0 -2
  418. package/src/Carousel/Carousel.doc.mjs +3 -0
  419. package/src/Carousel/Carousel.tsx +10 -6
  420. package/src/Center/Center.tsx +0 -2
  421. package/src/Center/index.ts +0 -2
  422. package/src/Chat/Chat.doc.mjs +2 -0
  423. package/src/Chat/ChatDictationButton.tsx +7 -1
  424. package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
  425. package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
  426. package/src/Chat/ChatSendButton.tsx +2 -3
  427. package/src/Chat/ChatToolCalls.test.tsx +35 -0
  428. package/src/Chat/ChatToolCalls.tsx +36 -16
  429. package/src/Chat/useTriggerMenu.tsx +2 -5
  430. package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
  431. package/src/CheckboxInput/CheckboxInput.test.tsx +120 -0
  432. package/src/CheckboxInput/CheckboxInput.tsx +45 -202
  433. package/src/ClickableCard/ClickableCard.tsx +6 -11
  434. package/src/Code/Code.tsx +0 -2
  435. package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
  436. package/src/CodeBlock/CodeBlock.test.tsx +91 -0
  437. package/src/CodeBlock/CodeBlock.tsx +57 -80
  438. package/src/Collapsible/Collapsible.tsx +22 -18
  439. package/src/CommandPalette/CommandPalette.test.tsx +83 -0
  440. package/src/CommandPalette/CommandPalette.tsx +5 -0
  441. package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
  442. package/src/CommandPalette/CommandPaletteList.tsx +2 -2
  443. package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
  444. package/src/ComplexSelector/ComplexSelector.test.tsx +73 -0
  445. package/src/ComplexSelector/ComplexSelector.tsx +41 -28
  446. package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
  447. package/src/ContextMenu/ContextMenu.test.tsx +41 -0
  448. package/src/ContextMenu/ContextMenu.tsx +3 -3
  449. package/src/ContextMenu/index.ts +5 -1
  450. package/src/DateInput/DateInput.doc.mjs +18 -3
  451. package/src/DateInput/DateInput.test.tsx +112 -11
  452. package/src/DateInput/DateInput.tsx +44 -25
  453. package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
  454. package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
  455. package/src/DateRangeInput/DateRangeInput.tsx +27 -21
  456. package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
  457. package/src/DateTimeInput/DateTimeInput.test.tsx +154 -1
  458. package/src/DateTimeInput/DateTimeInput.tsx +58 -17
  459. package/src/Dialog/Dialog.tsx +2 -9
  460. package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
  461. package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
  462. package/src/DropdownMenu/DropdownMenu.tsx +113 -52
  463. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
  464. package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
  465. package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
  466. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
  467. package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
  468. package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +2 -1
  469. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
  470. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
  471. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
  472. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
  473. package/src/DropdownMenu/index.ts +8 -1
  474. package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
  475. package/src/EmptyState/EmptyState.doc.mjs +4 -0
  476. package/src/EmptyState/EmptyState.test.tsx +62 -0
  477. package/src/EmptyState/EmptyState.tsx +16 -6
  478. package/src/Field/Field.doc.mjs +1 -0
  479. package/src/Field/InputClearButton.test.tsx +117 -0
  480. package/src/Field/InputClearButton.tsx +30 -3
  481. package/src/Field/PanelSearchInput.tsx +271 -0
  482. package/src/FileInput/FileInput.tsx +21 -8
  483. package/src/Grid/Grid.tsx +0 -2
  484. package/src/Grid/index.ts +0 -2
  485. package/src/HoverCard/useHoverCard.tsx +2 -23
  486. package/src/Icon/Icon.doc.mjs +2 -1
  487. package/src/Icon/globalIconRegistry.tsx +5 -4
  488. package/src/Indicator/CheckIndicator.tsx +174 -0
  489. package/src/Indicator/CheckboxIndicator.tsx +257 -0
  490. package/src/Indicator/Indicator.doc.mjs +344 -0
  491. package/src/Indicator/Indicator.test.tsx +393 -0
  492. package/src/Indicator/RadioIndicator.tsx +206 -0
  493. package/src/Indicator/index.ts +46 -0
  494. package/src/Indicator/indicator.markers.stylex.ts +19 -0
  495. package/src/Indicator/indicatorRegistry.test.tsx +106 -0
  496. package/src/Indicator/indicatorRegistry.ts +120 -0
  497. package/src/Indicator/types.ts +197 -0
  498. package/src/Indicator/useIndicator.ts +39 -0
  499. package/src/Item/Item.doc.mjs +1 -1
  500. package/src/Item/Item.tsx +7 -14
  501. package/src/Layer/useLayer.doc.mjs +2 -2
  502. package/src/Layer/useLayer.test.tsx +85 -0
  503. package/src/Layer/useLayer.tsx +39 -1
  504. package/src/Lightbox/Lightbox.doc.mjs +1 -1
  505. package/src/Lightbox/Lightbox.tsx +45 -49
  506. package/src/Link/Link.tsx +4 -11
  507. package/src/MobileNav/MobileNav.tsx +3 -3
  508. package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
  509. package/src/MoreMenu/MoreMenu.test.tsx +68 -1
  510. package/src/MoreMenu/MoreMenu.tsx +19 -0
  511. package/src/MultiSelector/MultiSelector.doc.mjs +18 -1
  512. package/src/MultiSelector/MultiSelector.test.tsx +387 -18
  513. package/src/MultiSelector/MultiSelector.tsx +267 -220
  514. package/src/NumberInput/NumberInput.doc.mjs +265 -50
  515. package/src/NumberInput/NumberInput.test.tsx +726 -21
  516. package/src/NumberInput/NumberInput.tsx +353 -59
  517. package/src/Outline/Outline.tsx +2 -5
  518. package/src/Pagination/Pagination.doc.mjs +1 -1
  519. package/src/Pagination/Pagination.test.tsx +22 -7
  520. package/src/Pagination/Pagination.tsx +38 -35
  521. package/src/Popover/Popover.doc.mjs +2 -0
  522. package/src/Popover/Popover.tsx +6 -7
  523. package/src/Popover/usePopover.tsx +37 -4
  524. package/src/PowerSearch/PowerSearch.tsx +1 -1
  525. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
  526. package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
  527. package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
  528. package/src/ProgressBar/ProgressBar.test.tsx +224 -1
  529. package/src/ProgressBar/ProgressBar.tsx +126 -30
  530. package/src/RadioList/RadioList.doc.mjs +4 -2
  531. package/src/RadioList/RadioListItem.tsx +31 -130
  532. package/src/Resizable/ResizeHandle.tsx +2 -9
  533. package/src/Section/Section.tsx +0 -2
  534. package/src/Section/index.ts +0 -2
  535. package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
  536. package/src/SelectableCard/SelectableCard.tsx +4 -9
  537. package/src/Selector/Selector.doc.mjs +17 -4
  538. package/src/Selector/Selector.test.tsx +1394 -100
  539. package/src/Selector/Selector.tsx +355 -212
  540. package/src/Selector/hooks.ts +77 -50
  541. package/src/SideNav/SideNav.test.tsx +46 -0
  542. package/src/SideNav/SideNav.tsx +1 -0
  543. package/src/SideNav/SideNavCollapseButton.tsx +15 -10
  544. package/src/SideNav/SideNavHeading.tsx +48 -10
  545. package/src/SideNav/SideNavItem.tsx +20 -12
  546. package/src/Skeleton/Skeleton.tsx +0 -2
  547. package/src/Skeleton/index.ts +0 -2
  548. package/src/Slider/Slider.tsx +2 -11
  549. package/src/Stack/Stack.doc.mjs +110 -0
  550. package/src/StatusDot/StatusDot.doc.mjs +12 -3
  551. package/src/Switch/Switch.test.tsx +32 -0
  552. package/src/Switch/Switch.tsx +18 -10
  553. package/src/TabList/Tab.tsx +2 -9
  554. package/src/TabList/TabMenu.tsx +14 -21
  555. package/src/Table/BaseTable.tsx +11 -0
  556. package/src/Table/Table.test.tsx +31 -0
  557. package/src/Table/TableRow.tsx +6 -0
  558. package/src/Table/index.ts +1 -4
  559. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
  560. package/src/Table/plugins/rowExpansion/index.ts +1 -4
  561. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
  562. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
  563. package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
  564. package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
  565. package/src/Table/tableContextMenu.test.tsx +27 -0
  566. package/src/Table/tableContextMenu.tsx +1 -0
  567. package/src/Table/types.ts +11 -0
  568. package/src/Table/useTableGroupedRows.doc.mjs +1 -1
  569. package/src/Table/useTableRowExpansion.doc.mjs +43 -66
  570. package/src/TextArea/TextArea.doc.mjs +42 -2
  571. package/src/TextArea/TextArea.test.tsx +219 -0
  572. package/src/TextArea/TextArea.tsx +34 -7
  573. package/src/TextInput/TextInput.doc.mjs +18 -2
  574. package/src/TextInput/TextInput.test.tsx +189 -0
  575. package/src/TextInput/TextInput.tsx +25 -31
  576. package/src/Thumbnail/Thumbnail.tsx +2 -9
  577. package/src/TimeInput/TimeInput.doc.mjs +2 -2
  578. package/src/TimeInput/TimeInput.test.tsx +84 -3
  579. package/src/TimeInput/TimeInput.tsx +26 -28
  580. package/src/Timestamp/Timestamp.doc.mjs +4 -3
  581. package/src/Timestamp/Timestamp.test.tsx +91 -14
  582. package/src/Timestamp/Timestamp.tsx +14 -2
  583. package/src/Timestamp/TimestampHoverCard.tsx +13 -35
  584. package/src/Timestamp/formatInstant.ts +16 -1
  585. package/src/Token/Token.tsx +5 -28
  586. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  587. package/src/Tokenizer/Tokenizer.test.tsx +45 -3
  588. package/src/Tokenizer/Tokenizer.tsx +10 -2
  589. package/src/Tooltip/useTooltip.tsx +2 -23
  590. package/src/TopNav/TopNav.tsx +1 -3
  591. package/src/TopNav/TopNavHeading.tsx +42 -13
  592. package/src/TopNav/TopNavItem.tsx +3 -21
  593. package/src/TopNav/TopNavMegaMenu.doc.mjs +5 -0
  594. package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
  595. package/src/TopNav/TopNavMegaMenu.tsx +118 -53
  596. package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
  597. package/src/TopNav/TopNavMenu.tsx +34 -37
  598. package/src/TreeList/TreeList.doc.mjs +5 -0
  599. package/src/TreeList/TreeList.test.tsx +208 -8
  600. package/src/TreeList/TreeList.tsx +22 -0
  601. package/src/TreeList/TreeListBranches.tsx +25 -2
  602. package/src/TreeList/TreeListItem.tsx +89 -52
  603. package/src/Typeahead/BaseTypeahead.tsx +19 -6
  604. package/src/Typeahead/Typeahead.doc.mjs +1 -0
  605. package/src/Typeahead/Typeahead.test.tsx +76 -3
  606. package/src/VisuallyHidden/VisuallyHidden.tsx +0 -2
  607. package/src/VisuallyHidden/index.ts +0 -2
  608. package/src/hooks/containerReveal.stylex.ts +102 -0
  609. package/src/hooks/index.ts +4 -0
  610. package/src/hooks/useClipboard.doc.mjs +87 -0
  611. package/src/hooks/useClipboard.test.tsx +151 -0
  612. package/src/hooks/useClipboard.ts +135 -0
  613. package/src/hooks/useContainerReveal.doc.mjs +7 -7
  614. package/src/hooks/useContainerReveal.test.tsx +42 -62
  615. package/src/hooks/useContainerReveal.ts +36 -91
  616. package/src/hooks/useImageMode.test.ts +1 -1
  617. package/src/hooks/useIndicatorFocusRing.tsx +120 -0
  618. package/src/hooks/useInputStatusIcon.tsx +8 -8
  619. package/src/hooks/useLongPress.test.tsx +18 -0
  620. package/src/hooks/useLongPress.ts +12 -2
  621. package/src/hooks/useScrollLock.test.ts +72 -0
  622. package/src/hooks/useScrollLock.ts +51 -19
  623. package/src/hooks/useStreamingText.test.ts +46 -1
  624. package/src/hooks/useStreamingText.ts +49 -7
  625. package/src/hooks/useTreeFocus.test.tsx +50 -0
  626. package/src/hooks/useTreeFocus.ts +14 -3
  627. package/src/hooks/useTypeahead.test.tsx +150 -0
  628. package/src/hooks/useTypeahead.ts +24 -9
  629. package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
  630. package/src/index.ts +1 -0
  631. package/src/serverSafeComponents.test.ts +665 -0
  632. package/src/theme/defineTheme.ts +27 -0
  633. package/src/theme/derivedVarRegistry.test.ts +21 -1
  634. package/src/theme/derivedVarRegistry.ts +19 -6
  635. package/src/theme/expandColorScale.test.ts +14 -0
  636. package/src/theme/expandColorScale.ts +24 -9
  637. package/src/theme/expandTypeScale.test.ts +43 -0
  638. package/src/theme/expandTypeScale.ts +17 -0
  639. package/src/theme/generateThemeRules.test.ts +78 -20
  640. package/src/theme/generateThemeRules.ts +11 -0
  641. package/src/theme/index.ts +15 -0
  642. package/src/theme/tokens.stylex.ts +18 -0
  643. package/src/theme/tokens.test.ts +37 -0
  644. package/src/utils/focusOutline.stylex.ts +177 -0
  645. package/src/utils/focusReturn.test.ts +42 -0
  646. package/src/utils/focusReturn.ts +31 -0
  647. package/src/utils/index.ts +5 -0
  648. package/src/utils/interactionModality.ts +74 -0
  649. package/src/utils/mergeRefs.test.ts +48 -0
  650. package/src/utils/mergeRefs.ts +12 -6
  651. package/src/utils/rtlStyles.ts +2 -2
  652. package/src/utils/themeProps.ts +26 -4
  653. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
  654. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
  655. package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
  656. package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
  657. package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
  658. package/dist/RadioList/radio.markers.stylex.js +0 -12
  659. package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
  660. package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
  661. package/dist/hooks/containerReveal.pool.stylex.js +0 -292
  662. package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
  663. package/src/RadioList/radio.markers.stylex.ts +0 -10
  664. package/src/hooks/containerReveal.pool.stylex.ts +0 -571
@@ -34,6 +34,7 @@ import {
34
34
  fontWeightVars,
35
35
  typeScaleVars,
36
36
  shadowVars,
37
+ focusVars,
37
38
  } from '../theme/tokens.stylex';
38
39
  import {Spinner} from '../Spinner';
39
40
  import {VisuallyHidden} from '../VisuallyHidden';
@@ -45,6 +46,7 @@ import {mergeProps, mergeRefs} from '../utils';
45
46
  import {useLinkComponent} from '../Link/useLinkComponent';
46
47
  import type {LinkComponentType} from '../Link/types';
47
48
  import {themeProps} from '../utils/themeProps';
49
+ import {focusOutlineProps} from '../utils/focusOutline.stylex';
48
50
  import {useTranslator} from '../i18n';
49
51
  import type {ButtonVariantMap} from './index';
50
52
 
@@ -55,6 +57,15 @@ import type {ButtonVariantMap} from './index';
55
57
  */
56
58
  const styles = stylex.create({
57
59
  base: {
60
+ // Kept as a public themeable var (documented in Button.doc.mjs) even though
61
+ // it now defaults to the shared token: removing it would break any theme
62
+ // setting it, for no gain. It overrides the shared offset, so a theme can
63
+ // still tune the ring distance on buttons specifically.
64
+ '--button-focus-offset': focusVars['--focus-outline-offset'],
65
+ outlineOffset: {
66
+ default: '0',
67
+ ':focus-visible': 'var(--button-focus-offset)',
68
+ },
58
69
  position: 'relative',
59
70
  display: 'inline-flex',
60
71
  alignItems: 'center',
@@ -179,7 +190,7 @@ const elevationStyles = stylex.create({
179
190
  * Variant styles using backgroundImage for layered colors
180
191
  * Pseudo-classes are nested within properties per StyleX recommendation
181
192
  * Overlay is stacked on top of base color using multiple linear-gradients
182
- * Focus outline color matches variant (destructive uses negative color)
193
+ * Focus outline is shared across variants for consistent keyboard affordance.
183
194
  */
184
195
  const variants = stylex.create({
185
196
  primary: {
@@ -192,15 +203,6 @@ const variants = stylex.create({
192
203
  },
193
204
  ':active': `linear-gradient(${colorVars['--color-overlay-pressed']}, ${colorVars['--color-overlay-pressed']})`,
194
205
  },
195
- outline: {
196
- default: null,
197
- ':focus-visible': `2px solid ${colorVars['--color-accent']}`,
198
- },
199
- '--button-focus-offset': '3px',
200
- outlineOffset: {
201
- default: '0',
202
- ':focus-visible': 'var(--button-focus-offset)',
203
- },
204
206
  },
205
207
  secondary: {
206
208
  backgroundColor: colorVars['--color-neutral'],
@@ -212,15 +214,6 @@ const variants = stylex.create({
212
214
  },
213
215
  ':active': `linear-gradient(${colorVars['--color-overlay-pressed']}, ${colorVars['--color-overlay-pressed']})`,
214
216
  },
215
- outline: {
216
- default: null,
217
- ':focus-visible': `2px solid ${colorVars['--color-accent']}`,
218
- },
219
- '--button-focus-offset': '3px',
220
- outlineOffset: {
221
- default: '0',
222
- ':focus-visible': 'var(--button-focus-offset)',
223
- },
224
217
  },
225
218
  ghost: {
226
219
  backgroundColor: 'transparent',
@@ -232,19 +225,14 @@ const variants = stylex.create({
232
225
  },
233
226
  ':active': `linear-gradient(${colorVars['--color-overlay-pressed']}, ${colorVars['--color-overlay-pressed']})`,
234
227
  },
235
- outline: {
236
- default: null,
237
- ':focus-visible': `2px solid ${colorVars['--color-accent']}`,
238
- },
239
- '--button-focus-offset': '3px',
240
- outlineOffset: {
241
- default: '0',
242
- ':focus-visible': 'var(--button-focus-offset)',
243
- },
244
228
  },
245
229
  destructive: {
246
230
  backgroundColor: colorVars['--color-error'],
247
231
  color: colorVars['--color-on-error'],
232
+ // The ring matches the variant it rings: an accent-colored outline on a
233
+ // red button reads as another control's focus. Only the color differs —
234
+ // width, style and offset come from the shared outline.
235
+ outlineColor: {default: null, ':focus-visible': colorVars['--color-error']},
248
236
  backgroundImage: {
249
237
  default: null,
250
238
  ':hover': {
@@ -252,15 +240,6 @@ const variants = stylex.create({
252
240
  },
253
241
  ':active': `linear-gradient(${colorVars['--color-overlay-pressed']}, ${colorVars['--color-overlay-pressed']})`,
254
242
  },
255
- outline: {
256
- default: null,
257
- ':focus-visible': `2px solid ${colorVars['--color-error']}`,
258
- },
259
- '--button-focus-offset': '3px',
260
- outlineOffset: {
261
- default: '0',
262
- ':focus-visible': 'var(--button-focus-offset)',
263
- },
264
243
  },
265
244
  });
266
245
 
@@ -676,10 +655,9 @@ export function Button({
676
655
  const edgeCompAttr = isFlat ? {[EDGE_COMP_ATTR]: ''} : null;
677
656
 
678
657
  // Shared StyleX props for both button and link rendering
679
- const sharedStylexProps = stylex.props(
658
+ const sharedStylexProps = focusOutlineProps.focusVisible(
680
659
  styles.base,
681
660
  sizeStyles[size],
682
- variants[variant],
683
661
  isIconOnly && styles.iconOnly,
684
662
  buttonDisabled && styles.disabled,
685
663
  useAriaDisabled && styles.ariaDisabled,
@@ -693,11 +671,14 @@ export function Button({
693
671
  (variant === 'primary' || variant === 'destructive') &&
694
672
  (buttonGroup.orientation === 'horizontal'
695
673
  ? groupStyles.onSolidHorizontal
696
- : groupStyles.onSolidVertical),
697
- // Standalone floating buttons only — a grouped button's elevation is owned
674
+ : groupStyles.onSolidVertical), // Standalone floating buttons only — a grouped button's elevation is owned
698
675
  // by the ButtonGroup so the shared surface lifts as one unit.
699
676
  !buttonGroup && elevationStyles[elevation],
700
677
  width != null && dynamicStyles.width(width),
678
+ // AFTER the shared focus outline: the outline supplies width/style/offset
679
+ // for every variant, and `destructive` re-colors just the ring to match
680
+ // its own surface. Ordering is the mechanism — StyleX is last-wins.
681
+ variants[variant],
701
682
  xstyle,
702
683
  );
703
684
 
@@ -58,6 +58,7 @@ import {
58
58
  DATE_FORMAT_MONTH_YEAR,
59
59
  } from '../utils/plainDate';
60
60
  import {mergeProps, composeEventHandlers, rtlStyles} from '../utils';
61
+ import {focusOutlineProps} from '../utils/focusOutline.stylex';
61
62
  import {
62
63
  computeDayCellState,
63
64
  computeRangeRounding,
@@ -1102,7 +1103,7 @@ function DayCell({
1102
1103
  // the default rendering.
1103
1104
  marker: markerState,
1104
1105
  }),
1105
- stylex.props(
1106
+ focusOutlineProps.focusVisible(
1106
1107
  dayCellStyles.day,
1107
1108
  dayCellTheme.day,
1108
1109
  isOutside && dayCellStyles.dayOutside,
@@ -258,14 +258,6 @@ export const dayCellTheme = stylex.create({
258
258
  '@media (hover: hover)': `linear-gradient(${colorVars['--color-overlay-hover']}, ${colorVars['--color-overlay-hover']})`,
259
259
  },
260
260
  },
261
- outline: {
262
- default: null,
263
- ':focus-visible': `2px solid ${colorVars['--color-accent']}`,
264
- },
265
- outlineOffset: {
266
- default: '0',
267
- ':focus-visible': '2px',
268
- },
269
261
  },
270
262
 
271
263
  // Outside days (adjacent months)
package/src/Card/Card.tsx CHANGED
@@ -1,7 +1,5 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
- 'use client';
4
-
5
3
  /**
6
4
  * @file Card.tsx
7
5
  * @input Uses container utility, StyleX
package/src/Card/index.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
- 'use client';
4
-
5
3
  /**
6
4
  * @file index.ts
7
5
  * @input Imports Card component
@@ -66,8 +66,10 @@ export const docsZh = {
66
66
  'Carousel 在项目超出可用宽度时将一行项目水平滚动。适用于卡片网格、图片画廊、产品列表,或任何希望无需占据整页即可浏览的项目集合。',
67
67
  bestPractices: [
68
68
  {guidance: true, description: '当每个项目应精确对齐到起始边缘时启用滚动吸附,例如画廊或产品列表。'},
69
+ {guidance: true, description: '在小型可循环的集合(如照片画廊)上使用 hasLoop,此时从最后一项绕回第一项的滚动更自然。'},
69
70
  {guidance: true, description: '始终提供描述轮播内容的 aria-label,例如"精选产品"或"团队成员"。'},
70
71
  {guidance: true, description: '使用一致的间距和项目宽度,让轮播看起来是有意为之,而不是内容意外溢出。'},
72
+ {guidance: true, description: '信任内置导航:触控板用户可水平滑动,鼠标用户可按住 Shift 滚动滚轮来浏览项目。'},
71
73
  {guidance: false, description: '将每位用户都必须看到的内容放入轮播。并非所有人都会水平滚动,关键内容应放在首屏。'},
72
74
  {guidance: false, description: '自动轮播项目。让用户按自己的节奏滚动。'},
73
75
  {guidance: false, description: '嵌套轮播。轮播中嵌套轮播会造成困惑并破坏键盘导航。'},
@@ -94,6 +96,7 @@ export const docsDense = {
94
96
  'Carousel scrolls items horizontally when they overflow. Use for card grids, galleries, product lists.',
95
97
  bestPractices: [
96
98
  {guidance: true, description: 'Enable scroll-snap when each item should land precisely at the start edge: gallery, product list.'},
99
+ {guidance: true, description: 'Reach for hasLoop on small cyclable sets (photo gallery) where wrapping past the last item back to the first feels natural.'},
97
100
  {guidance: true, description: 'Always provide an aria-label describing what the carousel contains: "Featured products", "Team members".'},
98
101
  {guidance: true, description: 'Use consistent gap + item width so the carousel looks intentional, not like content overflowing by accident.'},
99
102
  {guidance: true, description: 'Trust built-in navigation: trackpad users swipe horizontally, mouse users hold Shift + wheel to move through items.'},
@@ -560,9 +560,11 @@ export function Carousel({
560
560
  )}>
561
561
  <Button
562
562
  icon={
563
- <span {...stylex.props(rtlStyles.mirror)}>
564
- <Icon icon="chevronLeft" size="xsm" />
565
- </span>
563
+ <Icon
564
+ icon="chevronLeft"
565
+ size="xsm"
566
+ xstyle={rtlStyles.mirror}
567
+ />
566
568
  }
567
569
  label={t('@astryx.carousel.scrollLeft')}
568
570
  variant="ghost"
@@ -585,9 +587,11 @@ export function Carousel({
585
587
  )}>
586
588
  <Button
587
589
  icon={
588
- <span {...stylex.props(rtlStyles.mirror)}>
589
- <Icon icon="chevronRight" size="xsm" />
590
- </span>
590
+ <Icon
591
+ icon="chevronRight"
592
+ size="xsm"
593
+ xstyle={rtlStyles.mirror}
594
+ />
591
595
  }
592
596
  label={t('@astryx.carousel.scrollRight')}
593
597
  variant="ghost"
@@ -1,7 +1,5 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
- 'use client';
4
-
5
3
  /**
6
4
  * @file Center.tsx
7
5
  * @input Uses React, StyleX for centering styles, Layout padding.stylex for spacing-scale padding
@@ -1,7 +1,5 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
- 'use client';
4
-
5
3
  /**
6
4
  * @file index.ts
7
5
  * @input Imports Center component
@@ -26,6 +26,8 @@ export const docs = {
26
26
  {className: 'astryx-chat-system-message', visualProps: ['variant']},
27
27
  {className: 'astryx-chat-message-metadata'},
28
28
  {className: 'astryx-chat-send-button'},
29
+ {className: 'astryx-chat-dictation-button'},
30
+ {className: 'astryx-chat-layout-scroll-button'},
29
31
  {className: 'astryx-chat-tokenized-text'},
30
32
  {className: 'astryx-chat-tool-calls'},
31
33
  {className: 'astryx-trigger-menu'},
@@ -26,6 +26,7 @@ import {Button} from '../Button';
26
26
  import {Icon} from '../Icon';
27
27
  import {mergeProps} from '../utils';
28
28
  import type {BaseProps} from '../BaseProps';
29
+ import {themeProps} from '../utils/themeProps';
29
30
  import {useTranslator} from '../i18n';
30
31
 
31
32
  // =============================================================================
@@ -140,7 +141,12 @@ export function ChatDictationButton({
140
141
  return (
141
142
  <span
142
143
  ref={ref}
143
- {...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}
144
+ {...mergeProps(
145
+ themeProps('chat-dictation-button'),
146
+ stylex.props(styles.wrapper, xstyle),
147
+ className,
148
+ style,
149
+ )}
144
150
  {...rest}>
145
151
  {isListening && (
146
152
  <span
@@ -16,6 +16,28 @@ describe('ChatLayoutScrollButton', () => {
16
16
  expect(screen.getByTestId('scroll')).toBeTruthy();
17
17
  });
18
18
 
19
+ it('renders icon-only (no visible label text) in the default, label-less state', () => {
20
+ render(<ChatLayoutScrollButton isVisible onClick={() => {}} />);
21
+ const button = screen.getByRole('button', {name: 'Scroll to bottom'});
22
+ // The translated name must stay accessible-only. Button renders visible
23
+ // text whenever isIconOnly is false (its default), so a missing
24
+ // isIconOnly here previously rendered the full translation as clipped
25
+ // visible text inside the circular button instead of just the chevron.
26
+ expect(button.textContent).toBe('');
27
+ });
28
+
29
+ it('renders the label as visible text when provided', () => {
30
+ render(
31
+ <ChatLayoutScrollButton
32
+ isVisible
33
+ onClick={() => {}}
34
+ label="New messages"
35
+ />,
36
+ );
37
+ const button = screen.getByRole('button', {name: 'New messages'});
38
+ expect(button).toHaveTextContent('New messages');
39
+ });
40
+
19
41
  it('forwards rest props (data-*, aria-*, id) to the root element', () => {
20
42
  render(
21
43
  <ChatLayoutScrollButton
@@ -30,6 +30,7 @@ import {Icon} from '../Icon';
30
30
  import {Button} from '../Button';
31
31
  import type {BaseProps} from '../BaseProps';
32
32
  import {mergeProps} from '../utils';
33
+ import {themeProps} from '../utils/themeProps';
33
34
  import {useTranslator} from '../i18n';
34
35
 
35
36
  // =============================================================================
@@ -128,7 +129,12 @@ export function ChatLayoutScrollButton({
128
129
  return (
129
130
  <div
130
131
  ref={ref}
131
- {...mergeProps(stylex.props(styles.wrapper, xstyle), className, style)}
132
+ {...mergeProps(
133
+ themeProps('chat-layout-scroll-button'),
134
+ stylex.props(styles.wrapper, xstyle),
135
+ className,
136
+ style,
137
+ )}
132
138
  {...rest}>
133
139
  <div
134
140
  {...stylex.props(
@@ -144,6 +150,7 @@ export function ChatLayoutScrollButton({
144
150
  icon={<Icon icon="chevronDown" size="md" />}
145
151
  variant="ghost"
146
152
  size="md"
153
+ isIconOnly={!label}
147
154
  onClick={onClick}
148
155
  xstyle={[styles.button, label ? styles.buttonWithLabel : null]}>
149
156
  {label ?? undefined}
@@ -24,6 +24,7 @@ import {useIcon} from '../Icon';
24
24
  import {useChatComposerContext} from './ChatContext';
25
25
 
26
26
  import type {BaseProps} from '../BaseProps';
27
+ import {mergeProps} from '../utils';
27
28
  import {themeProps} from '../utils/themeProps';
28
29
  import {useTranslator} from '../i18n';
29
30
 
@@ -117,9 +118,7 @@ export function ChatSendButton(props: ChatSendButtonProps): ReactNode {
117
118
  isDisabled={!isStopShown && isDisabled}
118
119
  onClick={isStopShown ? onStop : handleSend}
119
120
  {...rest}
120
- {...themeProps('chat-send-button')}
121
- className={className}
122
- style={style}
121
+ {...mergeProps(themeProps('chat-send-button'), {className}, style)}
123
122
  xstyle={[styles.root, xstyle]}
124
123
  />
125
124
  );
@@ -216,4 +216,39 @@ describe('ChatToolCalls', () => {
216
216
  expect(region).toHaveTextContent('searchCode');
217
217
  expect(region).toHaveTextContent('readFile');
218
218
  });
219
+
220
+ it('compensates the grouped rows overhang on the clip boundary so the hover background is not cut off', () => {
221
+ render(
222
+ <ChatToolCalls
223
+ defaultIsExpanded={true}
224
+ calls={[
225
+ {name: 'bash', status: 'complete'},
226
+ {name: 'read', status: 'complete'},
227
+ ]}
228
+ />,
229
+ );
230
+ const regionId = screen.getByRole('button').getAttribute('aria-controls');
231
+ const groupContent = document.getElementById(regionId as string);
232
+ // groupContentInner is the overflow:hidden clip boundary required for the
233
+ // grid height animation; its direct child (`list`) pulls itself outward
234
+ // by a negative inline margin so each row's hover background can overhang
235
+ // the text column without widening the layout. Without a matching
236
+ // padding/negative-margin pair on groupContentInner itself, that overhang
237
+ // extends past the clip boundary and gets cut off (#4830) instead of
238
+ // being absorbed the same way it is for a single, unwrapped call row.
239
+ const groupContentInner = groupContent!.firstElementChild as HTMLElement;
240
+ const list = groupContentInner.firstElementChild as HTMLElement;
241
+ // jsdom's getComputedStyle doesn't resolve StyleX's generated atomic
242
+ // classes here, so assert on the classes directly instead. StyleX emits
243
+ // one atomic class per distinct property+value pair, so identical
244
+ // paddingInline/marginInline values on two elements always produce the
245
+ // exact same class names — if groupContentInner mirrors list's
246
+ // padding/margin pair, their class lists intersect on (at least) those
247
+ // two classes; if the fix is missing, groupContentInner only has its own
248
+ // unrelated overflow/minHeight classes and shares nothing with list.
249
+ const innerClasses = new Set(groupContentInner.className.split(' '));
250
+ const listClasses = new Set(list.className.split(' '));
251
+ const shared = [...listClasses].filter(c => innerClasses.has(c));
252
+ expect(shared.length).toBeGreaterThanOrEqual(2);
253
+ });
219
254
  });
@@ -134,6 +134,10 @@ const styles = stylex.create({
134
134
  width: '14px',
135
135
  height: '14px',
136
136
  color: colorVars['--color-text-disabled'],
137
+ },
138
+ // Rides on the chevron <Icon> (via `xstyle`), next to the rotation it
139
+ // animates, so one element carries both the transform and the theme target.
140
+ chevronTransition: {
137
141
  transition: {
138
142
  default: `transform ${durationVars['--duration-fast']} ${easeVars['--ease-standard']}`,
139
143
  '@media (prefers-reduced-motion: reduce)': 'none',
@@ -156,6 +160,18 @@ const styles = stylex.create({
156
160
  groupContentInner: {
157
161
  overflow: 'hidden',
158
162
  minHeight: 0,
163
+ // `list` (and, within it, each `callRowClickable` row) overhangs its own
164
+ // content box by `--spacing-1` on each inline edge via a negative margin,
165
+ // so its hover background can extend past the text column without
166
+ // widening the layout — `list`'s own matching paddingInline absorbs the
167
+ // row-level overhang, but `list`'s negative margin then overhangs *this*
168
+ // element's box by the same amount, and this is the clip boundary the
169
+ // grid height animation needs `overflow: hidden` for. Mirror the same
170
+ // padding/negative-margin pair here so that overhang is absorbed too,
171
+ // instead of clipped — matching the ungrouped single-call row, which has
172
+ // no such wrapper to clip it.
173
+ paddingInline: spacingVars['--spacing-1'],
174
+ marginInline: `calc(-1 * ${spacingVars['--spacing-1']})`,
159
175
  },
160
176
  list: {
161
177
  display: 'flex',
@@ -273,10 +289,6 @@ const styles = stylex.create({
273
289
  width: '14px',
274
290
  height: '14px',
275
291
  color: colorVars['--color-text-disabled'],
276
- transition: {
277
- default: `transform ${durationVars['--duration-fast']} ${easeVars['--ease-standard']}`,
278
- '@media (prefers-reduced-motion: reduce)': 'none',
279
- },
280
292
  marginInlineStart: 'auto',
281
293
  },
282
294
  callDetailContent: {
@@ -451,12 +463,16 @@ function CallRow({call}: {call: ChatToolCallItem}) {
451
463
  <span {...stylex.props(styles.callDuration)}>{call.duration}</span>
452
464
  )}
453
465
  {hasDetail && (
454
- <span
455
- {...stylex.props(
456
- styles.callDetailChevron,
457
- isDetailOpen && styles.chevronExpanded,
458
- )}>
459
- <Icon icon="chevronDown" size="xsm" color="inherit" />
466
+ <span {...stylex.props(styles.callDetailChevron)}>
467
+ <Icon
468
+ icon="chevronDown"
469
+ size="xsm"
470
+ color="inherit"
471
+ xstyle={[
472
+ styles.chevronTransition,
473
+ isDetailOpen && styles.chevronExpanded,
474
+ ]}
475
+ />
460
476
  </span>
461
477
  )}
462
478
  </div>
@@ -627,12 +643,16 @@ export function ChatToolCalls(props: ChatToolCallsProps) {
627
643
  </>
628
644
  )}
629
645
  </span>
630
- <span
631
- {...stylex.props(
632
- styles.chevron,
633
- isExpanded && styles.chevronExpanded,
634
- )}>
635
- <Icon icon="chevronDown" size="xsm" color="inherit" />
646
+ <span {...stylex.props(styles.chevron)}>
647
+ <Icon
648
+ icon="chevronDown"
649
+ size="xsm"
650
+ color="inherit"
651
+ xstyle={[
652
+ styles.chevronTransition,
653
+ isExpanded && styles.chevronExpanded,
654
+ ]}
655
+ />
636
656
  </span>
637
657
  </div>
638
658
 
@@ -110,10 +110,6 @@ const styles = stylex.create({
110
110
  popoverSurface: {
111
111
  minWidth: '180px',
112
112
  },
113
- popoverGap: {
114
- marginBlockStart: spacingVars['--spacing-1'],
115
- marginBlockEnd: spacingVars['--spacing-1'],
116
- },
117
113
  item: {
118
114
  boxSizing: 'border-box',
119
115
  display: 'flex',
@@ -711,7 +707,8 @@ export function useTriggerMenu(
711
707
  {
712
708
  placement: 'above',
713
709
  alignment: 'start',
714
- xstyle: [styles.popoverSurface, styles.popoverGap],
710
+ offset: spacingVars['--spacing-1'],
711
+ xstyle: styles.popoverSurface,
715
712
  },
716
713
  );
717
714
  }, [popover, listboxId, state, selectItem, getItemId, t]);
@@ -131,7 +131,8 @@ export const docs = {
131
131
  theming: {
132
132
  targets: [
133
133
  {className: 'astryx-checkbox-input', visualProps: ['size']},
134
- {className: 'astryx-checkbox', visualProps: ['size'], states: ['checked', 'disabled']},
134
+ {className: 'astryx-checkbox-indicator', visualProps: ['size'], states: ['checked', 'disabled']},
135
+ {className: 'astryx-checkbox', visualProps: ['size'], states: ['checked', 'disabled'], deprecatedFor: 'checkbox-indicator'},
135
136
  ],
136
137
  },
137
138
  usage: {
@@ -206,7 +207,8 @@ export const docsZh = {
206
207
  'size',
207
208
  ],
208
209
  },
209
- {className: 'astryx-checkbox', visualProps: ['size'], states: ['checked', 'disabled']},
210
+ {className: 'astryx-checkbox-indicator', visualProps: ['size'], states: ['checked', 'disabled']},
211
+ {className: 'astryx-checkbox', visualProps: ['size'], states: ['checked', 'disabled'], deprecatedFor: 'checkbox-indicator'},
210
212
  ],
211
213
  },
212
214
  };