@astryxdesign/core 0.3.0 → 0.4.0-canary.3112e99

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 (594) 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 +9 -0
  11. package/dist/Avatar/Avatar.d.ts.map +1 -1
  12. package/dist/Avatar/Avatar.js +33 -20
  13. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  14. package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
  15. package/dist/Banner/Banner.d.ts +3 -0
  16. package/dist/Banner/Banner.d.ts.map +1 -1
  17. package/dist/Banner/Banner.js +32 -17
  18. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  19. package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
  20. package/dist/Breadcrumbs/index.d.ts +2 -1
  21. package/dist/Breadcrumbs/index.d.ts.map +1 -1
  22. package/dist/Breadcrumbs/index.js +1 -0
  23. package/dist/Button/Button.d.ts.map +1 -1
  24. package/dist/Button/Button.js +12 -16
  25. package/dist/Calendar/Calendar.d.ts.map +1 -1
  26. package/dist/Calendar/Calendar.js +2 -1
  27. package/dist/Calendar/styles.d.ts +0 -2
  28. package/dist/Calendar/styles.d.ts.map +1 -1
  29. package/dist/Calendar/styles.js +0 -2
  30. package/dist/Carousel/Carousel.d.ts.map +1 -1
  31. package/dist/Carousel/Carousel.js +8 -12
  32. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  33. package/dist/Chat/ChatDictationButton.js +2 -1
  34. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  35. package/dist/Chat/ChatLayoutScrollButton.js +3 -1
  36. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  37. package/dist/Chat/ChatSendButton.js +4 -3
  38. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  39. package/dist/Chat/ChatToolCalls.js +17 -17
  40. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  41. package/dist/Chat/useTriggerMenu.js +2 -6
  42. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  43. package/dist/CheckboxInput/CheckboxInput.js +36 -125
  44. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  45. package/dist/ClickableCard/ClickableCard.js +3 -11
  46. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  47. package/dist/CodeBlock/CodeBlock.js +84 -67
  48. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  49. package/dist/Collapsible/Collapsible.js +35 -15
  50. package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
  51. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  52. package/dist/CommandPalette/CommandPaletteItem.js +6 -3
  53. package/dist/CommandPalette/CommandPaletteList.js +1 -1
  54. package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
  55. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  56. package/dist/ComplexSelector/ComplexSelector.js +32 -31
  57. package/dist/ContextMenu/ContextMenu.d.ts +2 -2
  58. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  59. package/dist/ContextMenu/ContextMenu.js +1 -1
  60. package/dist/ContextMenu/index.d.ts +2 -1
  61. package/dist/ContextMenu/index.d.ts.map +1 -1
  62. package/dist/ContextMenu/index.js +1 -0
  63. package/dist/DateInput/DateInput.d.ts +9 -2
  64. package/dist/DateInput/DateInput.d.ts.map +1 -1
  65. package/dist/DateInput/DateInput.js +47 -33
  66. package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
  67. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  68. package/dist/DateRangeInput/DateRangeInput.js +55 -32
  69. package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
  70. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  71. package/dist/DateTimeInput/DateTimeInput.js +54 -30
  72. package/dist/Dialog/Dialog.d.ts.map +1 -1
  73. package/dist/Dialog/Dialog.js +4 -4
  74. package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
  75. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  76. package/dist/DropdownMenu/DropdownMenu.js +62 -20
  77. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
  78. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  79. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
  80. package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
  81. package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
  82. package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
  83. package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
  84. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  85. package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
  86. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
  87. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
  88. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +10 -3
  89. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
  90. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  91. package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
  92. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  93. package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
  94. package/dist/DropdownMenu/index.d.ts +2 -1
  95. package/dist/DropdownMenu/index.d.ts.map +1 -1
  96. package/dist/DropdownMenu/index.js +4 -0
  97. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  98. package/dist/DropdownMenu/renderDropdownItems.js +35 -27
  99. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  100. package/dist/EmptyState/EmptyState.js +9 -5
  101. package/dist/Field/InputClearButton.d.ts +16 -3
  102. package/dist/Field/InputClearButton.d.ts.map +1 -1
  103. package/dist/Field/InputClearButton.js +15 -4
  104. package/dist/FileInput/FileInput.d.ts.map +1 -1
  105. package/dist/FileInput/FileInput.js +21 -10
  106. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  107. package/dist/HoverCard/useHoverCard.js +3 -19
  108. package/dist/Indicator/CheckIndicator.d.ts +25 -0
  109. package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
  110. package/dist/Indicator/CheckIndicator.js +155 -0
  111. package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
  112. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
  113. package/dist/Indicator/CheckboxIndicator.js +173 -0
  114. package/dist/Indicator/RadioIndicator.d.ts +23 -0
  115. package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
  116. package/dist/Indicator/RadioIndicator.js +137 -0
  117. package/dist/Indicator/index.d.ts +24 -0
  118. package/dist/Indicator/index.d.ts.map +1 -0
  119. package/dist/Indicator/index.js +26 -0
  120. package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
  121. package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
  122. package/dist/Indicator/indicator.markers.stylex.js +21 -0
  123. package/dist/Indicator/indicatorRegistry.d.ts +71 -0
  124. package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
  125. package/dist/Indicator/indicatorRegistry.js +93 -0
  126. package/dist/Indicator/types.d.ts +177 -0
  127. package/dist/Indicator/types.d.ts.map +1 -0
  128. package/dist/Indicator/types.js +1 -0
  129. package/dist/Indicator/useIndicator.d.ts +18 -0
  130. package/dist/Indicator/useIndicator.d.ts.map +1 -0
  131. package/dist/Indicator/useIndicator.js +30 -0
  132. package/dist/Item/Item.d.ts.map +1 -1
  133. package/dist/Item/Item.js +4 -8
  134. package/dist/Layer/useLayer.d.ts +14 -0
  135. package/dist/Layer/useLayer.d.ts.map +1 -1
  136. package/dist/Layer/useLayer.js +25 -2
  137. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  138. package/dist/Lightbox/Lightbox.js +80 -103
  139. package/dist/Link/Link.d.ts.map +1 -1
  140. package/dist/Link/Link.js +4 -5
  141. package/dist/MobileNav/MobileNav.js +8 -8
  142. package/dist/MoreMenu/MoreMenu.d.ts +14 -1
  143. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  144. package/dist/MoreMenu/MoreMenu.js +4 -0
  145. package/dist/MultiSelector/MultiSelector.d.ts +8 -1
  146. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  147. package/dist/MultiSelector/MultiSelector.js +119 -95
  148. package/dist/NumberInput/NumberInput.d.ts +27 -1
  149. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  150. package/dist/NumberInput/NumberInput.js +230 -42
  151. package/dist/Outline/Outline.d.ts.map +1 -1
  152. package/dist/Outline/Outline.js +2 -3
  153. package/dist/Pagination/Pagination.d.ts.map +1 -1
  154. package/dist/Pagination/Pagination.js +61 -63
  155. package/dist/Popover/Popover.d.ts.map +1 -1
  156. package/dist/Popover/Popover.js +6 -8
  157. package/dist/Popover/usePopover.d.ts +15 -0
  158. package/dist/Popover/usePopover.d.ts.map +1 -1
  159. package/dist/Popover/usePopover.js +14 -2
  160. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  161. package/dist/PowerSearch/PowerSearch.js +1 -1
  162. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  163. package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
  164. package/dist/ProgressBar/ProgressBar.d.ts +11 -4
  165. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  166. package/dist/ProgressBar/ProgressBar.js +95 -6
  167. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  168. package/dist/RadioList/RadioListItem.js +29 -84
  169. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  170. package/dist/Resizable/ResizeHandle.js +2 -3
  171. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  172. package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
  173. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  174. package/dist/SelectableCard/SelectableCard.js +3 -11
  175. package/dist/Selector/Selector.d.ts +12 -1
  176. package/dist/Selector/Selector.d.ts.map +1 -1
  177. package/dist/Selector/Selector.js +222 -111
  178. package/dist/Selector/hooks.d.ts +18 -6
  179. package/dist/Selector/hooks.d.ts.map +1 -1
  180. package/dist/Selector/hooks.js +57 -40
  181. package/dist/SideNav/SideNav.d.ts.map +1 -1
  182. package/dist/SideNav/SideNav.js +1 -1
  183. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  184. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  185. package/dist/SideNav/SideNavCollapseButton.js +29 -14
  186. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  187. package/dist/SideNav/SideNavHeading.js +56 -20
  188. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  189. package/dist/SideNav/SideNavItem.js +28 -22
  190. package/dist/Slider/Slider.d.ts.map +1 -1
  191. package/dist/Slider/Slider.js +2 -6
  192. package/dist/Stack/stack.stylex.d.ts +3 -3
  193. package/dist/Switch/Switch.d.ts.map +1 -1
  194. package/dist/Switch/Switch.js +14 -13
  195. package/dist/TabList/Tab.d.ts.map +1 -1
  196. package/dist/TabList/Tab.js +2 -3
  197. package/dist/TabList/TabMenu.d.ts.map +1 -1
  198. package/dist/TabList/TabMenu.js +41 -19
  199. package/dist/Table/BaseTable.d.ts.map +1 -1
  200. package/dist/Table/BaseTable.js +8 -0
  201. package/dist/Table/TableRow.d.ts +1 -1
  202. package/dist/Table/TableRow.d.ts.map +1 -1
  203. package/dist/Table/TableRow.js +4 -2
  204. package/dist/Table/index.d.ts +1 -1
  205. package/dist/Table/index.d.ts.map +1 -1
  206. package/dist/Table/index.js +1 -1
  207. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  208. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  209. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
  210. package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
  211. package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
  212. package/dist/Table/plugins/rowExpansion/index.js +1 -1
  213. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
  214. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  215. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
  216. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  217. package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
  218. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  219. package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
  220. package/dist/Table/tableContextMenu.d.ts.map +1 -1
  221. package/dist/Table/tableContextMenu.js +2 -1
  222. package/dist/Table/types.d.ts +11 -0
  223. package/dist/Table/types.d.ts.map +1 -1
  224. package/dist/TextArea/TextArea.d.ts +10 -1
  225. package/dist/TextArea/TextArea.d.ts.map +1 -1
  226. package/dist/TextArea/TextArea.js +16 -6
  227. package/dist/TextInput/TextInput.d.ts +10 -1
  228. package/dist/TextInput/TextInput.d.ts.map +1 -1
  229. package/dist/TextInput/TextInput.js +13 -19
  230. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  231. package/dist/Thumbnail/Thumbnail.js +32 -26
  232. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  233. package/dist/TimeInput/TimeInput.js +14 -17
  234. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  235. package/dist/Timestamp/Timestamp.js +14 -3
  236. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
  237. package/dist/Timestamp/TimestampHoverCard.js +16 -34
  238. package/dist/Timestamp/formatInstant.d.ts +11 -1
  239. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  240. package/dist/Timestamp/formatInstant.js +3 -1
  241. package/dist/Token/Token.d.ts.map +1 -1
  242. package/dist/Token/Token.js +20 -11
  243. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  244. package/dist/Tokenizer/Tokenizer.js +4 -2
  245. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  246. package/dist/Tooltip/useTooltip.js +3 -19
  247. package/dist/TopNav/TopNav.d.ts.map +1 -1
  248. package/dist/TopNav/TopNav.js +6 -5
  249. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  250. package/dist/TopNav/TopNavHeading.js +54 -16
  251. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  252. package/dist/TopNav/TopNavItem.js +3 -9
  253. package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
  254. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  255. package/dist/TopNav/TopNavMegaMenu.js +146 -60
  256. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  257. package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
  258. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  259. package/dist/TopNav/TopNavMenu.js +83 -38
  260. package/dist/TreeList/TreeList.d.ts.map +1 -1
  261. package/dist/TreeList/TreeList.js +13 -0
  262. package/dist/TreeList/TreeListBranches.d.ts +1 -1
  263. package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
  264. package/dist/TreeList/TreeListBranches.js +14 -4
  265. package/dist/TreeList/TreeListItem.d.ts +11 -1
  266. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  267. package/dist/TreeList/TreeListItem.js +57 -30
  268. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  269. package/dist/Typeahead/BaseTypeahead.js +16 -8
  270. package/dist/astryx.css +84 -96
  271. package/dist/astryx.umd.js +56 -56
  272. package/dist/astryx.umd.js.map +4 -4
  273. package/dist/hooks/containerReveal.stylex.d.ts +61 -0
  274. package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
  275. package/dist/hooks/containerReveal.stylex.js +63 -0
  276. package/dist/hooks/index.d.ts +3 -0
  277. package/dist/hooks/index.d.ts.map +1 -1
  278. package/dist/hooks/index.js +2 -0
  279. package/dist/hooks/useClipboard.d.ts +59 -0
  280. package/dist/hooks/useClipboard.d.ts.map +1 -0
  281. package/dist/hooks/useClipboard.js +106 -0
  282. package/dist/hooks/useContainerReveal.d.ts +14 -8
  283. package/dist/hooks/useContainerReveal.d.ts.map +1 -1
  284. package/dist/hooks/useContainerReveal.js +28 -69
  285. package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
  286. package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
  287. package/dist/hooks/useIndicatorFocusRing.js +96 -0
  288. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  289. package/dist/hooks/useInputStatusIcon.js +17 -4
  290. package/dist/hooks/useLongPress.d.ts.map +1 -1
  291. package/dist/hooks/useLongPress.js +12 -2
  292. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  293. package/dist/hooks/useScrollLock.js +33 -18
  294. package/dist/hooks/useStreamingText.d.ts +18 -3
  295. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  296. package/dist/hooks/useStreamingText.js +47 -7
  297. package/dist/hooks/useTreeFocus.d.ts.map +1 -1
  298. package/dist/hooks/useTreeFocus.js +9 -3
  299. package/dist/hooks/useTypeahead.d.ts +3 -2
  300. package/dist/hooks/useTypeahead.d.ts.map +1 -1
  301. package/dist/hooks/useTypeahead.js +19 -7
  302. package/dist/index.d.ts +1 -0
  303. package/dist/index.d.ts.map +1 -1
  304. package/dist/index.js +1 -0
  305. package/dist/theme/defineTheme.d.ts +18 -2
  306. package/dist/theme/defineTheme.d.ts.map +1 -1
  307. package/dist/theme/defineTheme.js +10 -1
  308. package/dist/theme/derivedVarRegistry.d.ts +8 -0
  309. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  310. package/dist/theme/derivedVarRegistry.js +14 -13
  311. package/dist/theme/expandColorScale.d.ts +3 -1
  312. package/dist/theme/expandColorScale.d.ts.map +1 -1
  313. package/dist/theme/expandColorScale.js +17 -7
  314. package/dist/theme/expandTypeScale.d.ts.map +1 -1
  315. package/dist/theme/expandTypeScale.js +17 -0
  316. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  317. package/dist/theme/generateThemeRules.js +11 -0
  318. package/dist/theme/index.d.ts +2 -1
  319. package/dist/theme/index.d.ts.map +1 -1
  320. package/dist/theme/index.js +1 -1
  321. package/dist/theme/tokens.stylex.d.ts +12 -0
  322. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  323. package/dist/theme/tokens.stylex.js +23 -0
  324. package/dist/utils/focusOutline.stylex.d.ts +122 -0
  325. package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
  326. package/dist/utils/focusOutline.stylex.js +143 -0
  327. package/dist/utils/focusReturn.d.ts +24 -0
  328. package/dist/utils/focusReturn.d.ts.map +1 -0
  329. package/dist/utils/focusReturn.js +29 -0
  330. package/dist/utils/index.d.ts +2 -0
  331. package/dist/utils/index.d.ts.map +1 -1
  332. package/dist/utils/index.js +6 -1
  333. package/dist/utils/mergeRefs.d.ts.map +1 -1
  334. package/dist/utils/mergeRefs.js +7 -5
  335. package/dist/utils/rtlStyles.d.ts +2 -2
  336. package/dist/utils/rtlStyles.js +2 -2
  337. package/dist/utils/themeProps.d.ts +20 -1
  338. package/dist/utils/themeProps.d.ts.map +1 -1
  339. package/dist/utils/themeProps.js +8 -2
  340. package/locales/en.json +52 -0
  341. package/locales/pseudo.json +39 -0
  342. package/package.json +8 -3
  343. package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
  344. package/src/AlertDialog/AlertDialog.test.tsx +208 -1
  345. package/src/AlertDialog/AlertDialog.tsx +21 -3
  346. package/src/AppShell/AppShell.doc.mjs +11 -0
  347. package/src/AppShell/AppShell.test.tsx +139 -0
  348. package/src/AppShell/AppShell.tsx +32 -22
  349. package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
  350. package/src/AspectRatio/AspectRatio.test.tsx +30 -0
  351. package/src/AspectRatio/AspectRatio.tsx +13 -0
  352. package/src/Avatar/Avatar.doc.mjs +2 -13
  353. package/src/Avatar/Avatar.test.tsx +33 -8
  354. package/src/Avatar/Avatar.tsx +52 -50
  355. package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
  356. package/src/Banner/Banner.test.tsx +58 -1
  357. package/src/Banner/Banner.tsx +33 -11
  358. package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
  359. package/src/Breadcrumbs/index.ts +5 -1
  360. package/src/Button/Button.doc.mjs +2 -2
  361. package/src/Button/Button.tsx +22 -41
  362. package/src/Calendar/Calendar.tsx +2 -1
  363. package/src/Calendar/styles.ts +0 -8
  364. package/src/Carousel/Carousel.doc.mjs +3 -0
  365. package/src/Carousel/Carousel.tsx +10 -6
  366. package/src/Chat/Chat.doc.mjs +2 -0
  367. package/src/Chat/ChatDictationButton.tsx +7 -1
  368. package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
  369. package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
  370. package/src/Chat/ChatSendButton.tsx +2 -3
  371. package/src/Chat/ChatToolCalls.test.tsx +35 -0
  372. package/src/Chat/ChatToolCalls.tsx +36 -16
  373. package/src/Chat/useTriggerMenu.tsx +2 -5
  374. package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
  375. package/src/CheckboxInput/CheckboxInput.test.tsx +120 -0
  376. package/src/CheckboxInput/CheckboxInput.tsx +45 -202
  377. package/src/ClickableCard/ClickableCard.tsx +6 -11
  378. package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
  379. package/src/CodeBlock/CodeBlock.test.tsx +91 -0
  380. package/src/CodeBlock/CodeBlock.tsx +57 -80
  381. package/src/Collapsible/Collapsible.tsx +22 -18
  382. package/src/CommandPalette/CommandPalette.test.tsx +29 -0
  383. package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
  384. package/src/CommandPalette/CommandPaletteList.tsx +2 -2
  385. package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
  386. package/src/ComplexSelector/ComplexSelector.test.tsx +73 -0
  387. package/src/ComplexSelector/ComplexSelector.tsx +41 -28
  388. package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
  389. package/src/ContextMenu/ContextMenu.test.tsx +41 -0
  390. package/src/ContextMenu/ContextMenu.tsx +3 -3
  391. package/src/ContextMenu/index.ts +5 -1
  392. package/src/DateInput/DateInput.doc.mjs +18 -3
  393. package/src/DateInput/DateInput.test.tsx +112 -11
  394. package/src/DateInput/DateInput.tsx +44 -25
  395. package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
  396. package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
  397. package/src/DateRangeInput/DateRangeInput.tsx +27 -21
  398. package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
  399. package/src/DateTimeInput/DateTimeInput.test.tsx +154 -1
  400. package/src/DateTimeInput/DateTimeInput.tsx +58 -17
  401. package/src/Dialog/Dialog.tsx +2 -9
  402. package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
  403. package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
  404. package/src/DropdownMenu/DropdownMenu.tsx +113 -52
  405. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
  406. package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
  407. package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
  408. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
  409. package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
  410. package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +2 -1
  411. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
  412. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
  413. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
  414. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
  415. package/src/DropdownMenu/index.ts +8 -1
  416. package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
  417. package/src/EmptyState/EmptyState.doc.mjs +4 -0
  418. package/src/EmptyState/EmptyState.test.tsx +62 -0
  419. package/src/EmptyState/EmptyState.tsx +16 -6
  420. package/src/Field/Field.doc.mjs +1 -0
  421. package/src/Field/InputClearButton.test.tsx +117 -0
  422. package/src/Field/InputClearButton.tsx +30 -3
  423. package/src/FileInput/FileInput.tsx +21 -8
  424. package/src/HoverCard/useHoverCard.tsx +2 -23
  425. package/src/Icon/Icon.doc.mjs +2 -1
  426. package/src/Indicator/CheckIndicator.tsx +174 -0
  427. package/src/Indicator/CheckboxIndicator.tsx +257 -0
  428. package/src/Indicator/Indicator.doc.mjs +344 -0
  429. package/src/Indicator/Indicator.test.tsx +393 -0
  430. package/src/Indicator/RadioIndicator.tsx +206 -0
  431. package/src/Indicator/index.ts +46 -0
  432. package/src/Indicator/indicator.markers.stylex.ts +19 -0
  433. package/src/Indicator/indicatorRegistry.test.tsx +106 -0
  434. package/src/Indicator/indicatorRegistry.ts +120 -0
  435. package/src/Indicator/types.ts +197 -0
  436. package/src/Indicator/useIndicator.ts +39 -0
  437. package/src/Item/Item.doc.mjs +1 -1
  438. package/src/Item/Item.tsx +7 -14
  439. package/src/Layer/useLayer.doc.mjs +2 -2
  440. package/src/Layer/useLayer.test.tsx +85 -0
  441. package/src/Layer/useLayer.tsx +39 -1
  442. package/src/Lightbox/Lightbox.doc.mjs +1 -1
  443. package/src/Lightbox/Lightbox.tsx +45 -49
  444. package/src/Link/Link.tsx +4 -11
  445. package/src/MobileNav/MobileNav.tsx +3 -3
  446. package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
  447. package/src/MoreMenu/MoreMenu.test.tsx +68 -1
  448. package/src/MoreMenu/MoreMenu.tsx +19 -0
  449. package/src/MultiSelector/MultiSelector.doc.mjs +16 -1
  450. package/src/MultiSelector/MultiSelector.test.tsx +259 -16
  451. package/src/MultiSelector/MultiSelector.tsx +144 -121
  452. package/src/NumberInput/NumberInput.doc.mjs +265 -50
  453. package/src/NumberInput/NumberInput.test.tsx +726 -21
  454. package/src/NumberInput/NumberInput.tsx +353 -59
  455. package/src/Outline/Outline.tsx +2 -5
  456. package/src/Pagination/Pagination.doc.mjs +1 -1
  457. package/src/Pagination/Pagination.test.tsx +22 -7
  458. package/src/Pagination/Pagination.tsx +38 -35
  459. package/src/Popover/Popover.doc.mjs +2 -0
  460. package/src/Popover/Popover.tsx +6 -7
  461. package/src/Popover/usePopover.tsx +37 -4
  462. package/src/PowerSearch/PowerSearch.tsx +1 -1
  463. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
  464. package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
  465. package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
  466. package/src/ProgressBar/ProgressBar.test.tsx +224 -1
  467. package/src/ProgressBar/ProgressBar.tsx +126 -30
  468. package/src/RadioList/RadioList.doc.mjs +4 -2
  469. package/src/RadioList/RadioListItem.tsx +31 -130
  470. package/src/Resizable/ResizeHandle.tsx +2 -9
  471. package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
  472. package/src/SelectableCard/SelectableCard.tsx +4 -9
  473. package/src/Selector/Selector.doc.mjs +15 -4
  474. package/src/Selector/Selector.test.tsx +1234 -98
  475. package/src/Selector/Selector.tsx +254 -126
  476. package/src/Selector/hooks.ts +77 -50
  477. package/src/SideNav/SideNav.test.tsx +46 -0
  478. package/src/SideNav/SideNav.tsx +1 -0
  479. package/src/SideNav/SideNavCollapseButton.tsx +15 -10
  480. package/src/SideNav/SideNavHeading.tsx +48 -10
  481. package/src/SideNav/SideNavItem.tsx +20 -12
  482. package/src/Slider/Slider.tsx +2 -11
  483. package/src/Stack/Stack.doc.mjs +110 -0
  484. package/src/StatusDot/StatusDot.doc.mjs +12 -3
  485. package/src/Switch/Switch.test.tsx +32 -0
  486. package/src/Switch/Switch.tsx +18 -10
  487. package/src/TabList/Tab.tsx +2 -9
  488. package/src/TabList/TabMenu.tsx +14 -21
  489. package/src/Table/BaseTable.tsx +11 -0
  490. package/src/Table/Table.test.tsx +31 -0
  491. package/src/Table/TableRow.tsx +6 -0
  492. package/src/Table/index.ts +1 -4
  493. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
  494. package/src/Table/plugins/rowExpansion/index.ts +1 -4
  495. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
  496. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
  497. package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
  498. package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
  499. package/src/Table/tableContextMenu.test.tsx +27 -0
  500. package/src/Table/tableContextMenu.tsx +1 -0
  501. package/src/Table/types.ts +11 -0
  502. package/src/Table/useTableGroupedRows.doc.mjs +1 -1
  503. package/src/Table/useTableRowExpansion.doc.mjs +43 -66
  504. package/src/TextArea/TextArea.doc.mjs +42 -2
  505. package/src/TextArea/TextArea.test.tsx +219 -0
  506. package/src/TextArea/TextArea.tsx +34 -7
  507. package/src/TextInput/TextInput.doc.mjs +18 -2
  508. package/src/TextInput/TextInput.test.tsx +189 -0
  509. package/src/TextInput/TextInput.tsx +25 -31
  510. package/src/Thumbnail/Thumbnail.tsx +2 -9
  511. package/src/TimeInput/TimeInput.doc.mjs +2 -2
  512. package/src/TimeInput/TimeInput.test.tsx +84 -3
  513. package/src/TimeInput/TimeInput.tsx +26 -28
  514. package/src/Timestamp/Timestamp.doc.mjs +4 -3
  515. package/src/Timestamp/Timestamp.test.tsx +91 -14
  516. package/src/Timestamp/Timestamp.tsx +14 -2
  517. package/src/Timestamp/TimestampHoverCard.tsx +13 -35
  518. package/src/Timestamp/formatInstant.ts +16 -1
  519. package/src/Token/Token.tsx +5 -28
  520. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  521. package/src/Tokenizer/Tokenizer.test.tsx +45 -3
  522. package/src/Tokenizer/Tokenizer.tsx +10 -2
  523. package/src/Tooltip/useTooltip.tsx +2 -23
  524. package/src/TopNav/TopNav.tsx +1 -3
  525. package/src/TopNav/TopNavHeading.tsx +42 -13
  526. package/src/TopNav/TopNavItem.tsx +3 -21
  527. package/src/TopNav/TopNavMegaMenu.doc.mjs +5 -0
  528. package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
  529. package/src/TopNav/TopNavMegaMenu.tsx +118 -53
  530. package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
  531. package/src/TopNav/TopNavMenu.tsx +34 -37
  532. package/src/TreeList/TreeList.doc.mjs +5 -0
  533. package/src/TreeList/TreeList.test.tsx +208 -8
  534. package/src/TreeList/TreeList.tsx +22 -0
  535. package/src/TreeList/TreeListBranches.tsx +25 -2
  536. package/src/TreeList/TreeListItem.tsx +89 -52
  537. package/src/Typeahead/BaseTypeahead.tsx +19 -6
  538. package/src/Typeahead/Typeahead.doc.mjs +1 -0
  539. package/src/Typeahead/Typeahead.test.tsx +76 -3
  540. package/src/hooks/containerReveal.stylex.ts +102 -0
  541. package/src/hooks/index.ts +4 -0
  542. package/src/hooks/useClipboard.doc.mjs +87 -0
  543. package/src/hooks/useClipboard.test.tsx +151 -0
  544. package/src/hooks/useClipboard.ts +135 -0
  545. package/src/hooks/useContainerReveal.doc.mjs +7 -7
  546. package/src/hooks/useContainerReveal.test.tsx +42 -62
  547. package/src/hooks/useContainerReveal.ts +36 -91
  548. package/src/hooks/useImageMode.test.ts +1 -1
  549. package/src/hooks/useIndicatorFocusRing.tsx +120 -0
  550. package/src/hooks/useInputStatusIcon.tsx +8 -8
  551. package/src/hooks/useLongPress.test.tsx +18 -0
  552. package/src/hooks/useLongPress.ts +12 -2
  553. package/src/hooks/useScrollLock.test.ts +72 -0
  554. package/src/hooks/useScrollLock.ts +51 -19
  555. package/src/hooks/useStreamingText.test.ts +46 -1
  556. package/src/hooks/useStreamingText.ts +49 -7
  557. package/src/hooks/useTreeFocus.test.tsx +50 -0
  558. package/src/hooks/useTreeFocus.ts +14 -3
  559. package/src/hooks/useTypeahead.test.tsx +150 -0
  560. package/src/hooks/useTypeahead.ts +24 -9
  561. package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
  562. package/src/index.ts +1 -0
  563. package/src/theme/defineTheme.ts +27 -0
  564. package/src/theme/derivedVarRegistry.test.ts +21 -1
  565. package/src/theme/derivedVarRegistry.ts +19 -6
  566. package/src/theme/expandColorScale.test.ts +14 -0
  567. package/src/theme/expandColorScale.ts +24 -9
  568. package/src/theme/expandTypeScale.test.ts +43 -0
  569. package/src/theme/expandTypeScale.ts +17 -0
  570. package/src/theme/generateThemeRules.test.ts +78 -20
  571. package/src/theme/generateThemeRules.ts +11 -0
  572. package/src/theme/index.ts +15 -0
  573. package/src/theme/tokens.stylex.ts +18 -0
  574. package/src/theme/tokens.test.ts +37 -0
  575. package/src/utils/focusOutline.stylex.ts +177 -0
  576. package/src/utils/focusReturn.test.ts +42 -0
  577. package/src/utils/focusReturn.ts +31 -0
  578. package/src/utils/index.ts +5 -0
  579. package/src/utils/mergeRefs.test.ts +48 -0
  580. package/src/utils/mergeRefs.ts +12 -6
  581. package/src/utils/rtlStyles.ts +2 -2
  582. package/src/utils/themeProps.ts +26 -4
  583. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
  584. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
  585. package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
  586. package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
  587. package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
  588. package/dist/RadioList/radio.markers.stylex.js +0 -12
  589. package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
  590. package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
  591. package/dist/hooks/containerReveal.pool.stylex.js +0 -292
  592. package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
  593. package/src/RadioList/radio.markers.stylex.ts +0 -10
  594. package/src/hooks/containerReveal.pool.stylex.ts +0 -571
@@ -142,6 +142,21 @@ describe('Pagination', () => {
142
142
  ).toBe(true);
143
143
  });
144
144
 
145
+ it('renders the prev/next caret icons without an extra mirror wrapper span', () => {
146
+ // Regression: the RTL mirror used to wrap each chevron in a
147
+ // display:contents span, which dropped the icon out of the button's
148
+ // flex-centering context and offset the glyph vertically. The mirror now
149
+ // rides on the Icon via xstyle, so the icon renders as a direct centered
150
+ // child. jsdom has no layout engine to assert the pixel centering, but we
151
+ // can assert the structural fix: the icon carries its own class and is
152
+ // not the lone child of a bare wrapper span. (Centering is verified
153
+ // visually in Storybook.)
154
+ render(<Pagination page={3} onChange={() => {}} totalPages={5} />);
155
+ const next = screen.getByRole('button', {name: 'Go to next page'});
156
+ const icon = next.querySelector('.astryx-icon');
157
+ expect(icon).not.toBeNull();
158
+ });
159
+
145
160
  it('renders with data-testid', () => {
146
161
  render(
147
162
  <Pagination
@@ -557,7 +572,7 @@ describe('Pagination', () => {
557
572
  );
558
573
  const box = screen.getByRole('spinbutton', {name: 'Go to page'});
559
574
  expect(box).toBeInTheDocument();
560
- expect(box).toHaveValue(3);
575
+ expect(box).toHaveValue('3');
561
576
  // Visible leading "Page" label and trailing "/ N" total (10 pages).
562
577
  expect(screen.getByText('Page')).toBeInTheDocument();
563
578
  expect(screen.getByText('/ 10')).toBeInTheDocument();
@@ -594,8 +609,8 @@ describe('Pagination', () => {
594
609
  // The box is a NumberInput (a spinbutton) whose min/max clamp entries to
595
610
  // the valid page range without hand-rolled parsing in Pagination.
596
611
  const box = screen.getByRole('spinbutton', {name: 'Go to page'});
597
- expect(box).toHaveAttribute('min', '1');
598
- expect(box).toHaveAttribute('max', '10');
612
+ expect(box).toHaveAttribute('aria-valuemin', '1');
613
+ expect(box).toHaveAttribute('aria-valuemax', '10');
599
614
  });
600
615
 
601
616
  it('commits a typed page on Enter and rejects an over-range entry', async () => {
@@ -661,13 +676,13 @@ describe('Pagination', () => {
661
676
  await user.type(box, 'abc');
662
677
  await user.tab();
663
678
  expect(onChange).not.toHaveBeenCalled();
664
- expect(box).toHaveValue(3);
679
+ expect(box).toHaveValue('3');
665
680
 
666
681
  // Emptying the box and blurring reverts to the committed page too.
667
682
  await user.clear(box);
668
683
  await user.tab();
669
684
  expect(onChange).not.toHaveBeenCalled();
670
- expect(box).toHaveValue(3);
685
+ expect(box).toHaveValue('3');
671
686
  });
672
687
 
673
688
  it('announces the committed page to screen readers', async () => {
@@ -785,7 +800,7 @@ describe('Pagination', () => {
785
800
  );
786
801
  const box = screen.getByRole('spinbutton', {name: 'Go to page'});
787
802
  // The box holds the page number, and committing drives page navigation.
788
- expect(box).toHaveValue(1);
803
+ expect(box).toHaveValue('1');
789
804
  await user.clear(box);
790
805
  await user.type(box, '4{Enter}');
791
806
  expect(onChange).toHaveBeenCalledWith(4);
@@ -956,7 +971,7 @@ describe('Pagination', () => {
956
971
  // The box still holds the 1-based page number.
957
972
  expect(
958
973
  screen.getByRole('spinbutton', {name: 'Go to page'}),
959
- ).toHaveValue(3);
974
+ ).toHaveValue('3');
960
975
  });
961
976
 
962
977
  it('keeps the input page-navigating with a custom label', async () => {
@@ -43,6 +43,7 @@ import {useListFocus} from '../hooks/useListFocus';
43
43
  import {mergeProps, rtlStyles} from '../utils';
44
44
  import type {BaseProps} from '../BaseProps';
45
45
  import {themeProps} from '../utils/themeProps';
46
+ import {focusOutlineProps} from '../utils/focusOutline.stylex';
46
47
  import {useTranslator} from '../i18n/useTranslator';
47
48
  import type {PaginationVariantMap} from './index';
48
49
 
@@ -165,6 +166,9 @@ export interface PaginationProps extends Omit<
165
166
  // Styles
166
167
  // =============================================================================
167
168
 
169
+ /** Width (px) of the page-size Selector field. */
170
+ const PAGE_SIZE_SELECTOR_WIDTH = 80;
171
+
168
172
  const styles = stylex.create({
169
173
  root: {
170
174
  display: 'flex',
@@ -214,14 +218,6 @@ const styles = stylex.create({
214
218
  transitionProperty: 'background-color',
215
219
  transitionDuration: durationVars['--duration-fast'],
216
220
  transitionTimingFunction: easeVars['--ease-standard'],
217
- outline: {
218
- default: 'none',
219
- ':focus-visible': `2px solid ${colorVars['--color-accent']}`,
220
- },
221
- outlineOffset: {
222
- default: '0',
223
- ':focus-visible': '2px',
224
- },
225
221
  },
226
222
  dotSm: {
227
223
  width: spacingVars['--spacing-1-5'],
@@ -265,9 +261,6 @@ const styles = stylex.create({
265
261
  alignItems: 'center',
266
262
  gap: spacingVars['--spacing-2'],
267
263
  },
268
- pageSizeSelectorControl: {
269
- width: 80,
270
- },
271
264
  disabled: {
272
265
  opacity: 0.5,
273
266
  pointerEvents: 'none' as const,
@@ -702,7 +695,7 @@ export function Pagination({
702
695
  active: isActive ? 'active' : null,
703
696
  size,
704
697
  }),
705
- stylex.props(
698
+ focusOutlineProps.focusVisible(
706
699
  styles.dot,
707
700
  isSm && styles.dotSm,
708
701
  isActive && styles.dotActive,
@@ -791,17 +784,19 @@ export function Pagination({
791
784
  data-testid={testId}>
792
785
  {pageSizeOptions != null && pageSizeOptions.length > 0 && (
793
786
  <div {...stylex.props(styles.pageSizeSelector)}>
794
- <div {...stylex.props(styles.pageSizeSelectorControl)}>
795
- <Selector
796
- label={itemsPerPageLabel}
797
- isLabelHidden
798
- options={pageSizeOptions.map(opt => String(opt))}
799
- value={String(pageSize)}
800
- onChange={handlePageSizeChange}
801
- size={buttonSize}
802
- isDisabled={isDisabled}
803
- />
804
- </div>
787
+ <Selector
788
+ label={itemsPerPageLabel}
789
+ isLabelHidden
790
+ options={pageSizeOptions.map(opt => String(opt))}
791
+ value={String(pageSize)}
792
+ onChange={handlePageSizeChange}
793
+ size={buttonSize}
794
+ isDisabled={isDisabled}
795
+ // `width`, not `xstyle`: Selector's xstyle lands on the trigger
796
+ // box, while `width` sizes the whole field — which is what the
797
+ // removed wrapper did.
798
+ width={PAGE_SIZE_SELECTOR_WIDTH}
799
+ />
805
800
  </div>
806
801
  )}
807
802
  <div {...stylex.props(styles.controls)}>
@@ -812,9 +807,11 @@ export function Pagination({
812
807
  variant="ghost"
813
808
  size={buttonSize}
814
809
  icon={
815
- <span {...stylex.props(rtlStyles.mirror)}>
816
- <Icon icon="chevronsLeft" size={isSm ? 'sm' : 'md'} />
817
- </span>
810
+ <Icon
811
+ icon="chevronsLeft"
812
+ size={isSm ? 'sm' : 'md'}
813
+ xstyle={rtlStyles.mirror}
814
+ />
818
815
  }
819
816
  onClick={handleFirst}
820
817
  isDisabled={isDisabled || !hasPrevious}
@@ -828,9 +825,11 @@ export function Pagination({
828
825
  variant="ghost"
829
826
  size={buttonSize}
830
827
  icon={
831
- <span {...stylex.props(rtlStyles.mirror)}>
832
- <Icon icon="chevronLeft" size={isSm ? 'sm' : 'md'} />
833
- </span>
828
+ <Icon
829
+ icon="chevronLeft"
830
+ size={isSm ? 'sm' : 'md'}
831
+ xstyle={rtlStyles.mirror}
832
+ />
834
833
  }
835
834
  onClick={handlePrevious}
836
835
  isDisabled={isDisabled || !hasPrevious}
@@ -845,9 +844,11 @@ export function Pagination({
845
844
  variant="ghost"
846
845
  size={buttonSize}
847
846
  icon={
848
- <span {...stylex.props(rtlStyles.mirror)}>
849
- <Icon icon="chevronRight" size={isSm ? 'sm' : 'md'} />
850
- </span>
847
+ <Icon
848
+ icon="chevronRight"
849
+ size={isSm ? 'sm' : 'md'}
850
+ xstyle={rtlStyles.mirror}
851
+ />
851
852
  }
852
853
  onClick={handleNext}
853
854
  isDisabled={isDisabled || !hasNext}
@@ -861,9 +862,11 @@ export function Pagination({
861
862
  variant="ghost"
862
863
  size={buttonSize}
863
864
  icon={
864
- <span {...stylex.props(rtlStyles.mirror)}>
865
- <Icon icon="chevronsRight" size={isSm ? 'sm' : 'md'} />
866
- </span>
865
+ <Icon
866
+ icon="chevronsRight"
867
+ size={isSm ? 'sm' : 'md'}
868
+ xstyle={rtlStyles.mirror}
869
+ />
867
870
  }
868
871
  onClick={handleLast}
869
872
  isDisabled={isDisabled || !hasNext}
@@ -133,6 +133,7 @@ export const docs = {
133
133
  theming: {
134
134
  targets: [
135
135
  {className: 'astryx-popover'},
136
+ {className: 'astryx-popover-surface'},
136
137
  ],
137
138
  vars: [
138
139
  {name: '--_popover-radius', description: 'Border radius of the popover', default: 'var(--radius-element)', private: true},
@@ -277,6 +278,7 @@ export const docsZh = {
277
278
  theming: {
278
279
  targets: [
279
280
  {className: 'astryx-popover'},
281
+ {className: 'astryx-popover-surface'},
280
282
  ],
281
283
  vars: [
282
284
  {name: '--_popover-radius', description: 'Border radius of the popover', default: 'var(--radius-element)', private: true},
@@ -250,10 +250,6 @@ const styles = stylex.create({
250
250
  paddingInlineStart: spacingVars['--spacing-3'],
251
251
  paddingInlineEnd: spacingVars['--spacing-3'],
252
252
  },
253
- gap: {
254
- marginBlockStart: spacingVars['--spacing-1'],
255
- marginBlockEnd: spacingVars['--spacing-1'],
256
- },
257
253
  customWidth: (width: string | number) => ({
258
254
  width: typeof width === 'number' ? `${width}px` : width,
259
255
  }),
@@ -529,7 +525,8 @@ export function Popover({
529
525
  {
530
526
  placement,
531
527
  alignment,
532
- xstyle: [popoverXstyle, styles.gap, layerAnimations[placement]],
528
+ offset: spacingVars['--spacing-1'],
529
+ xstyle: [popoverXstyle, layerAnimations[placement]],
533
530
  },
534
531
  )}
535
532
  </>
@@ -565,7 +562,8 @@ export function Popover({
565
562
  {
566
563
  placement,
567
564
  alignment,
568
- xstyle: [popoverXstyle, styles.gap, layerAnimations[placement]],
565
+ offset: spacingVars['--spacing-1'],
566
+ xstyle: [popoverXstyle, layerAnimations[placement]],
569
567
  },
570
568
  )}
571
569
  </>
@@ -594,7 +592,8 @@ export function Popover({
594
592
  {
595
593
  placement,
596
594
  alignment,
597
- xstyle: [popoverXstyle, styles.gap, layerAnimations[placement]],
595
+ offset: spacingVars['--spacing-1'],
596
+ xstyle: [popoverXstyle, layerAnimations[placement]],
598
597
  },
599
598
  )}
600
599
  </>
@@ -30,6 +30,9 @@ import {Button} from '../Button';
30
30
  import {rtlStyles} from '../utils';
31
31
  import {useTranslator} from '../i18n';
32
32
  import {useDevWarning} from '../hooks/useDevWarning';
33
+ import {mergeProps} from '../utils/mergeProps';
34
+ import {themeProps} from '../utils/themeProps';
35
+ import {stableClassName} from '../naming';
33
36
 
34
37
  const styles = stylex.create({
35
38
  // Default popover surface — background, radius, shadow.
@@ -187,6 +190,22 @@ export interface UsePopoverOptions {
187
190
  * @default true
188
191
  */
189
192
  hasSurface?: boolean;
193
+
194
+ /**
195
+ * Theme-target name stamped on the popup SURFACE — the element that paints
196
+ * the background, radius and elevation — without the `astryx-` prefix
197
+ * (e.g. `'complex-selector-popup'`).
198
+ *
199
+ * The surface is created here, not by the calling component, so a component
200
+ * that wants its popup themeable cannot reach it on its own: a target it
201
+ * renders itself lands on its content INSIDE the surface, where a background
202
+ * or radius rule paints the wrong box. Name the surface through this option
203
+ * and document the class in the component's `theming.targets`.
204
+ *
205
+ * The shared `astryx-popover-surface` class is always present alongside it,
206
+ * so a theme can style every popup surface at once.
207
+ */
208
+ surfaceTarget?: string;
190
209
  }
191
210
 
192
211
  /**
@@ -312,6 +331,7 @@ export function usePopover(options: UsePopoverOptions = {}): UsePopoverReturn {
312
331
  hasEscapeDismiss = true,
313
332
  hasAutoFocus = true,
314
333
  hasSurface = true,
334
+ surfaceTarget,
315
335
  hasCloseButton = true,
316
336
  closeButtonLabel: closeButtonLabelFromProps,
317
337
  dialogLabel,
@@ -406,16 +426,28 @@ export function usePopover(options: UsePopoverOptions = {}): UsePopoverReturn {
406
426
  // Wrapped render function that includes surface styles and optional hidden close button
407
427
  const render = useCallback(
408
428
  (children: ReactNode, props?: ContextRenderProps): ReactNode => {
429
+ // `mergeProps` is positional — a third OBJECT argument is read as
430
+ // `style`, not as more props — so the surface's classes are composed
431
+ // into one props object before merging with the StyleX result.
432
+ const surfaceProps = themeProps('popover-surface');
433
+ const surfaceClassName =
434
+ surfaceTarget != null
435
+ ? `${surfaceProps.className} ${stableClassName(surfaceTarget)}`
436
+ : surfaceProps.className;
437
+
409
438
  return layer.render(
410
439
  <div
411
440
  ref={contentRef}
412
441
  role={role === 'dialog' ? 'dialog' : undefined}
413
442
  aria-modal={role === 'dialog' && isModal ? true : undefined}
414
443
  aria-label={role === 'dialog' ? dialogLabel : undefined}
415
- {...stylex.props(
416
- styles.contentWrapper,
417
- hasSurface && styles.surface,
418
- xstyle,
444
+ {...mergeProps(
445
+ {...surfaceProps, className: surfaceClassName},
446
+ stylex.props(
447
+ styles.contentWrapper,
448
+ hasSurface && styles.surface,
449
+ xstyle,
450
+ ),
419
451
  )}>
420
452
  {children}
421
453
  {hasCloseButton && (
@@ -439,6 +471,7 @@ export function usePopover(options: UsePopoverOptions = {}): UsePopoverReturn {
439
471
  layer,
440
472
  hasCloseButton,
441
473
  hasSurface,
474
+ surfaceTarget,
442
475
  closeButtonLabel,
443
476
  contentRef,
444
477
  dialogLabel,
@@ -104,7 +104,6 @@ const popoverLayerStyles = stylex.create({
104
104
  layer: {
105
105
  width: 'anchor-size(width)',
106
106
  minWidth: 400,
107
- marginTop: spacingVars['--spacing-1'],
108
107
  },
109
108
  });
110
109
 
@@ -1053,6 +1052,7 @@ export function PowerSearch({
1053
1052
  {popover.render(popoverContent, {
1054
1053
  placement: 'below',
1055
1054
  alignment: 'start',
1055
+ offset: spacingVars['--spacing-1'],
1056
1056
  xstyle: [popoverLayerStyles.layer, layerAnimations.below],
1057
1057
  })}
1058
1058
  </>
@@ -283,4 +283,46 @@ describe('PowerSearch', () => {
283
283
  // onSave should NOT be called because the event was already consumed (defaultPrevented)
284
284
  expect(onSave).not.toHaveBeenCalled();
285
285
  });
286
+
287
+ it('does not save/close on a composing Enter while typing a filter value (#4828)', () => {
288
+ const onSave = vi.fn();
289
+ const onCancel = vi.fn();
290
+
291
+ function StringValueHarness() {
292
+ const internalConfig = useInternalConfig(testConfig);
293
+ return (
294
+ <PowerSearchEditPopover
295
+ config={internalConfig}
296
+ filter={{
297
+ field: 'status',
298
+ operator: 'is',
299
+ value: {type: 'string', value: '한국어'},
300
+ }}
301
+ mode="edit"
302
+ onSave={onSave}
303
+ onCancel={onCancel}
304
+ />
305
+ );
306
+ }
307
+
308
+ const {container} = render(<StringValueHarness />);
309
+ const input = container.querySelector('input');
310
+ expect(input).not.toBeNull();
311
+
312
+ // Same composing-Enter signal as BaseTypeahead's guard: isComposing
313
+ // (modern) or legacy keyCode 229. An IME commits its composition on
314
+ // Enter too, so this keydown must not also close/save the popover.
315
+ // handleKeyDown is bound on an ancestor container div, so the keydown
316
+ // reaches it the same way it would from any real input inside — same
317
+ // dispatch mechanism the sibling defaultPrevented test above uses.
318
+ fireEvent.keyDown(input!, {key: 'Enter', isComposing: true});
319
+ expect(onSave).not.toHaveBeenCalled();
320
+
321
+ fireEvent.keyDown(input!, {key: 'Enter', keyCode: 229});
322
+ expect(onSave).not.toHaveBeenCalled();
323
+
324
+ // A real, non-composing Enter still saves normally.
325
+ fireEvent.keyDown(input!, {key: 'Enter'});
326
+ expect(onSave).toHaveBeenCalledTimes(1);
327
+ });
286
328
  });
@@ -20,6 +20,7 @@ import {HStack, VStack} from '../Stack';
20
20
  import {Icon} from '../Icon';
21
21
  import {TreeList, type TreeListItemData} from '../TreeList';
22
22
  import {useTranslator} from '../i18n';
23
+ import {isImeKeyEvent} from '../hooks/useFocusTrap';
23
24
  import {spacingVars, typeScaleVars} from '../theme/tokens.stylex';
24
25
  import {PowerSearchValueEditor} from './PowerSearchValueEditor';
25
26
  import {resolveOperatorLabel} from './resolveOperatorLabel';
@@ -702,6 +703,12 @@ export function PowerSearchEditPopover({
702
703
  // Handle Enter to save, Escape to cancel
703
704
  const handleKeyDown = useCallback(
704
705
  (e: React.KeyboardEvent) => {
706
+ // Don't treat an IME composition-commit Enter as save-to-close --
707
+ // typing a CJK filter value and pressing Enter to confirm the
708
+ // composition would otherwise close the popover mid-composition.
709
+ if (isImeKeyEvent(e.nativeEvent)) {
710
+ return;
711
+ }
705
712
  if (e.key === 'Enter' && !isSaveDisabled && !e.defaultPrevented) {
706
713
  e.preventDefault();
707
714
  handleSave();
@@ -60,7 +60,7 @@ export const docs = {
60
60
  name: 'marks',
61
61
  type: 'ReadonlyArray<{value: number; label: string}>',
62
62
  description:
63
- 'Fixed target marks drawn on the track at values in the same 0..max scale as value (e.g. a goal line). They stay visible whether progress is below or past them. Each mark requires a label — it is the mark\'s accessible name and the text revealed via a tooltip on hover/focus. Ignored when indeterminate.',
63
+ 'Fixed target marks drawn on the track at values in the same 0..max scale as value (e.g. a goal line). They stay visible whether progress is below or past them, and take their color from what they sit on: a mark inside the filled area uses the fill variant\'s on-color (on-accent, on-warning, on-error, and so on), a mark still out on the bare track uses the primary text color (the secondary one on a disabled bar, which dims everything it draws). Each mark requires a label: it is the mark\'s accessible name and the text revealed via a tooltip on hover/focus. Ignored when indeterminate.',
64
64
  },
65
65
  {
66
66
  name: 'isDisabled',
@@ -80,7 +80,18 @@ export const docs = {
80
80
  {className: 'astryx-progressbar', visualProps: ['variant']},
81
81
  {className: 'astryx-progressbar-fill', visualProps: ['variant']},
82
82
  {className: 'astryx-progressbar-track'},
83
- {className: 'astryx-progressbar-mark'},
83
+ {
84
+ className: 'astryx-progressbar-mark',
85
+ visualProps: ['variant', 'placement'],
86
+ },
87
+ ],
88
+ vars: [
89
+ {name: '--_progressbar-mark-width', description: 'Target mark tick width', default: '2px', private: true},
90
+ {name: '--_progressbar-mark-height', description: 'Target mark tick height', default: '8px', private: true},
91
+ ],
92
+ derived: [
93
+ {property: 'width', vars: ['--_progressbar-mark-width'], replaces: true},
94
+ {property: 'height', vars: ['--_progressbar-mark-height'], replaces: true},
84
95
  ],
85
96
  },
86
97
  usage: {
@@ -154,7 +165,7 @@ export const docsZh = {
154
165
  name: 'marks',
155
166
  type: 'ReadonlyArray<{value: number; label: string}>',
156
167
  description:
157
- '在轨道上按与 value 相同的 0..max 刻度绘制的固定目标标记(例如目标线)。无论进度低于还是超过它们都保持可见。每个标记都必须提供 label——它既是标记的无障碍名称,也是悬停/聚焦时通过工具提示显示的文本。不确定模式下忽略。',
168
+ '在轨道上按与 value 相同的 0..max 刻度绘制的固定目标标记(例如目标线)。无论进度低于还是超过它们都保持可见,并根据所处位置取色:位于已填充区域内的标记使用与填充变体配对的前景色(on-accent、on-warning、on-error 等),仍位于空轨道上的标记使用主文本颜色(禁用状态下会降为次要文本颜色,与其整体弱化的呈现保持一致)。每个标记都必须提供 label——它既是标记的无障碍名称,也是悬停/聚焦时通过工具提示显示的文本。不确定模式下忽略。',
158
169
  },
159
170
  {
160
171
  name: 'isDisabled',
@@ -174,7 +185,18 @@ export const docsZh = {
174
185
  {className: 'astryx-progressbar', visualProps: ['variant']},
175
186
  {className: 'astryx-progressbar-fill', visualProps: ['variant']},
176
187
  {className: 'astryx-progressbar-track'},
177
- {className: 'astryx-progressbar-mark'},
188
+ {
189
+ className: 'astryx-progressbar-mark',
190
+ visualProps: ['variant', 'placement'],
191
+ },
192
+ ],
193
+ vars: [
194
+ {name: '--_progressbar-mark-width', description: '目标标记刻度宽度', default: '2px', private: true},
195
+ {name: '--_progressbar-mark-height', description: '目标标记刻度高度', default: '8px', private: true},
196
+ ],
197
+ derived: [
198
+ {property: 'width', vars: ['--_progressbar-mark-width'], replaces: true},
199
+ {property: 'height', vars: ['--_progressbar-mark-height'], replaces: true},
178
200
  ],
179
201
  },
180
202
  usage: {
@@ -216,7 +238,7 @@ export const docsDense = {
216
238
  formatValueLabel: 'Custom value label formatter; defaults to percentage string.',
217
239
  variant: 'Semantic color variant.',
218
240
  isIndeterminate: 'Animated loading indicator for unknown progress.',
219
- marks: 'Fixed target marks ({value, label?}) drawn on the track in the 0..max scale; stay visible past the fill. A label reveals a tooltip on hover/focus. Ignored when indeterminate.',
241
+ marks: 'Fixed target marks ({value, label?}) drawn on the track in the 0..max scale; stay visible past the fill. Marks inside the fill take the variant on-color; marks on the bare track take the primary text color (secondary when disabled). A label reveals a tooltip on hover/focus. Ignored when indeterminate.',
220
242
  isDisabled: 'Visually disabled: grays out fill and text.',
221
243
  xstyle: 'StyleX styles for layout customization. Must be stylex.create() value.',
222
244
  },