@astryxdesign/core 0.3.0-canary.e9fc2bb → 0.3.0-canary.ee705d8

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 (333) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +10 -2
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +22 -3
  4. package/dist/Avatar/Avatar.d.ts.map +1 -1
  5. package/dist/Avatar/Avatar.js +2 -10
  6. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  7. package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
  8. package/dist/Button/Button.d.ts.map +1 -1
  9. package/dist/Button/Button.js +11 -15
  10. package/dist/Calendar/Calendar.d.ts.map +1 -1
  11. package/dist/Calendar/Calendar.js +2 -1
  12. package/dist/Calendar/styles.d.ts +0 -2
  13. package/dist/Calendar/styles.d.ts.map +1 -1
  14. package/dist/Calendar/styles.js +0 -2
  15. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  16. package/dist/Chat/ChatDictationButton.js +2 -1
  17. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  18. package/dist/Chat/ChatLayoutScrollButton.js +3 -1
  19. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  20. package/dist/Chat/ChatSendButton.js +4 -3
  21. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  22. package/dist/Chat/ChatToolCalls.js +1 -1
  23. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  24. package/dist/CheckboxInput/CheckboxInput.js +36 -125
  25. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  26. package/dist/ClickableCard/ClickableCard.js +3 -11
  27. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  28. package/dist/CodeBlock/CodeBlock.js +59 -55
  29. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  30. package/dist/Collapsible/Collapsible.js +2 -3
  31. package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
  32. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  33. package/dist/CommandPalette/CommandPaletteItem.js +6 -3
  34. package/dist/CommandPalette/CommandPaletteList.js +1 -1
  35. package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
  36. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  37. package/dist/ComplexSelector/ComplexSelector.js +12 -8
  38. package/dist/ContextMenu/ContextMenu.js +1 -1
  39. package/dist/Dialog/Dialog.d.ts.map +1 -1
  40. package/dist/Dialog/Dialog.js +4 -4
  41. package/dist/DropdownMenu/DropdownMenu.d.ts +5 -0
  42. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  43. package/dist/DropdownMenu/DropdownMenu.js +46 -7
  44. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
  45. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  46. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
  47. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
  48. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  49. package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
  50. package/dist/EmptyState/EmptyState.js +1 -1
  51. package/dist/Indicator/CheckIndicator.d.ts +26 -0
  52. package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
  53. package/dist/Indicator/CheckIndicator.js +156 -0
  54. package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
  55. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
  56. package/dist/Indicator/CheckboxIndicator.js +173 -0
  57. package/dist/Indicator/RadioIndicator.d.ts +23 -0
  58. package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
  59. package/dist/Indicator/RadioIndicator.js +137 -0
  60. package/dist/Indicator/index.d.ts +24 -0
  61. package/dist/Indicator/index.d.ts.map +1 -0
  62. package/dist/Indicator/index.js +26 -0
  63. package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
  64. package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
  65. package/dist/Indicator/indicator.markers.stylex.js +21 -0
  66. package/dist/Indicator/indicatorRegistry.d.ts +71 -0
  67. package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
  68. package/dist/Indicator/indicatorRegistry.js +93 -0
  69. package/dist/Indicator/types.d.ts +160 -0
  70. package/dist/Indicator/types.d.ts.map +1 -0
  71. package/dist/Indicator/types.js +1 -0
  72. package/dist/Indicator/useIndicator.d.ts +18 -0
  73. package/dist/Indicator/useIndicator.d.ts.map +1 -0
  74. package/dist/Indicator/useIndicator.js +30 -0
  75. package/dist/Item/Item.d.ts.map +1 -1
  76. package/dist/Item/Item.js +2 -6
  77. package/dist/Link/Link.d.ts.map +1 -1
  78. package/dist/Link/Link.js +4 -5
  79. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  80. package/dist/MultiSelector/MultiSelector.js +20 -9
  81. package/dist/NumberInput/NumberInput.d.ts +10 -1
  82. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  83. package/dist/NumberInput/NumberInput.js +7 -5
  84. package/dist/Outline/Outline.d.ts.map +1 -1
  85. package/dist/Outline/Outline.js +2 -3
  86. package/dist/Pagination/Pagination.d.ts.map +1 -1
  87. package/dist/Pagination/Pagination.js +30 -26
  88. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  89. package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
  90. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  91. package/dist/RadioList/RadioListItem.js +29 -84
  92. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  93. package/dist/Resizable/ResizeHandle.js +2 -3
  94. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  95. package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
  96. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  97. package/dist/SelectableCard/SelectableCard.js +3 -11
  98. package/dist/Selector/Selector.d.ts.map +1 -1
  99. package/dist/Selector/Selector.js +85 -28
  100. package/dist/Selector/hooks.d.ts +14 -2
  101. package/dist/Selector/hooks.d.ts.map +1 -1
  102. package/dist/Selector/hooks.js +19 -21
  103. package/dist/SideNav/SideNav.d.ts.map +1 -1
  104. package/dist/SideNav/SideNav.js +1 -1
  105. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  106. package/dist/SideNav/SideNavHeading.js +1 -1
  107. package/dist/Switch/Switch.d.ts.map +1 -1
  108. package/dist/Switch/Switch.js +1 -0
  109. package/dist/TabList/Tab.d.ts.map +1 -1
  110. package/dist/TabList/Tab.js +2 -3
  111. package/dist/TabList/TabMenu.d.ts.map +1 -1
  112. package/dist/TabList/TabMenu.js +27 -11
  113. package/dist/Table/BaseTable.d.ts.map +1 -1
  114. package/dist/Table/BaseTable.js +8 -0
  115. package/dist/Table/index.d.ts +1 -1
  116. package/dist/Table/index.d.ts.map +1 -1
  117. package/dist/Table/index.js +1 -1
  118. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  119. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +1 -1
  120. package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
  121. package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
  122. package/dist/Table/plugins/rowExpansion/index.js +1 -1
  123. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
  124. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  125. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +88 -333
  126. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  127. package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
  128. package/dist/Table/tableContextMenu.d.ts.map +1 -1
  129. package/dist/Table/tableContextMenu.js +2 -1
  130. package/dist/Table/types.d.ts +11 -0
  131. package/dist/Table/types.d.ts.map +1 -1
  132. package/dist/TextArea/TextArea.d.ts +10 -1
  133. package/dist/TextArea/TextArea.d.ts.map +1 -1
  134. package/dist/TextArea/TextArea.js +12 -4
  135. package/dist/TextInput/TextInput.d.ts +10 -1
  136. package/dist/TextInput/TextInput.d.ts.map +1 -1
  137. package/dist/TextInput/TextInput.js +6 -4
  138. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  139. package/dist/Thumbnail/Thumbnail.js +32 -26
  140. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
  141. package/dist/Timestamp/TimestampHoverCard.js +16 -34
  142. package/dist/Token/Token.d.ts.map +1 -1
  143. package/dist/Token/Token.js +20 -11
  144. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  145. package/dist/TopNav/TopNavItem.js +3 -9
  146. package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
  147. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  148. package/dist/TopNav/TopNavMegaMenu.js +94 -28
  149. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  150. package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
  151. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  152. package/dist/TopNav/TopNavMenu.js +43 -11
  153. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  154. package/dist/TreeList/TreeListItem.js +12 -10
  155. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  156. package/dist/Typeahead/BaseTypeahead.js +14 -2
  157. package/dist/astryx.css +19 -27
  158. package/dist/astryx.umd.js +55 -55
  159. package/dist/astryx.umd.js.map +4 -4
  160. package/dist/hooks/index.d.ts +3 -0
  161. package/dist/hooks/index.d.ts.map +1 -1
  162. package/dist/hooks/index.js +2 -0
  163. package/dist/hooks/useClipboard.d.ts +59 -0
  164. package/dist/hooks/useClipboard.d.ts.map +1 -0
  165. package/dist/hooks/useClipboard.js +106 -0
  166. package/dist/hooks/useIndicatorFocusRing.d.ts +29 -0
  167. package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
  168. package/dist/hooks/useIndicatorFocusRing.js +97 -0
  169. package/dist/hooks/useStreamingText.d.ts +18 -3
  170. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  171. package/dist/hooks/useStreamingText.js +47 -7
  172. package/dist/hooks/useTreeFocus.d.ts.map +1 -1
  173. package/dist/hooks/useTreeFocus.js +9 -3
  174. package/dist/hooks/useTypeahead.d.ts +3 -2
  175. package/dist/hooks/useTypeahead.d.ts.map +1 -1
  176. package/dist/hooks/useTypeahead.js +19 -7
  177. package/dist/index.d.ts +1 -0
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +1 -0
  180. package/dist/theme/defineTheme.d.ts +16 -0
  181. package/dist/theme/defineTheme.d.ts.map +1 -1
  182. package/dist/theme/defineTheme.js +8 -0
  183. package/dist/theme/expandTypeScale.d.ts.map +1 -1
  184. package/dist/theme/expandTypeScale.js +17 -0
  185. package/dist/theme/index.d.ts +1 -0
  186. package/dist/theme/index.d.ts.map +1 -1
  187. package/dist/utils/focusOutline.stylex.d.ts +107 -0
  188. package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
  189. package/dist/utils/focusOutline.stylex.js +130 -0
  190. package/dist/utils/themeProps.d.ts +20 -1
  191. package/dist/utils/themeProps.d.ts.map +1 -1
  192. package/dist/utils/themeProps.js +8 -2
  193. package/package.json +7 -2
  194. package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
  195. package/src/AlertDialog/AlertDialog.test.tsx +208 -1
  196. package/src/AlertDialog/AlertDialog.tsx +21 -3
  197. package/src/Avatar/Avatar.tsx +2 -28
  198. package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
  199. package/src/Button/Button.tsx +21 -41
  200. package/src/Calendar/Calendar.tsx +2 -1
  201. package/src/Calendar/styles.ts +0 -8
  202. package/src/Chat/Chat.doc.mjs +2 -0
  203. package/src/Chat/ChatDictationButton.tsx +7 -1
  204. package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
  205. package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
  206. package/src/Chat/ChatSendButton.tsx +2 -3
  207. package/src/Chat/ChatToolCalls.test.tsx +35 -0
  208. package/src/Chat/ChatToolCalls.tsx +12 -0
  209. package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
  210. package/src/CheckboxInput/CheckboxInput.test.tsx +115 -0
  211. package/src/CheckboxInput/CheckboxInput.tsx +45 -202
  212. package/src/ClickableCard/ClickableCard.tsx +6 -11
  213. package/src/CodeBlock/CodeBlock.doc.mjs +1 -0
  214. package/src/CodeBlock/CodeBlock.test.tsx +24 -0
  215. package/src/CodeBlock/CodeBlock.tsx +32 -70
  216. package/src/Collapsible/Collapsible.tsx +2 -9
  217. package/src/CommandPalette/CommandPalette.test.tsx +29 -0
  218. package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
  219. package/src/CommandPalette/CommandPaletteList.tsx +2 -2
  220. package/src/ComplexSelector/ComplexSelector.test.tsx +25 -0
  221. package/src/ComplexSelector/ComplexSelector.tsx +17 -9
  222. package/src/ContextMenu/ContextMenu.tsx +1 -1
  223. package/src/DateInput/DateInput.doc.mjs +1 -1
  224. package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
  225. package/src/DateTimeInput/DateTimeInput.doc.mjs +1 -1
  226. package/src/Dialog/Dialog.tsx +2 -9
  227. package/src/DropdownMenu/DropdownMenu.doc.mjs +0 -5
  228. package/src/DropdownMenu/DropdownMenu.test.tsx +214 -4
  229. package/src/DropdownMenu/DropdownMenu.tsx +74 -30
  230. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
  231. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
  232. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
  233. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
  234. package/src/EmptyState/EmptyState.tsx +2 -2
  235. package/src/Indicator/CheckIndicator.tsx +175 -0
  236. package/src/Indicator/CheckboxIndicator.tsx +257 -0
  237. package/src/Indicator/Indicator.doc.mjs +287 -0
  238. package/src/Indicator/Indicator.test.tsx +369 -0
  239. package/src/Indicator/RadioIndicator.tsx +206 -0
  240. package/src/Indicator/index.ts +45 -0
  241. package/src/Indicator/indicator.markers.stylex.ts +19 -0
  242. package/src/Indicator/indicatorRegistry.test.tsx +106 -0
  243. package/src/Indicator/indicatorRegistry.ts +120 -0
  244. package/src/Indicator/types.ts +179 -0
  245. package/src/Indicator/useIndicator.ts +39 -0
  246. package/src/Item/Item.tsx +2 -12
  247. package/src/Link/Link.tsx +4 -11
  248. package/src/MoreMenu/MoreMenu.test.tsx +28 -1
  249. package/src/MultiSelector/MultiSelector.doc.mjs +6 -0
  250. package/src/MultiSelector/MultiSelector.test.tsx +172 -0
  251. package/src/MultiSelector/MultiSelector.tsx +67 -54
  252. package/src/NumberInput/NumberInput.doc.mjs +18 -2
  253. package/src/NumberInput/NumberInput.test.tsx +112 -0
  254. package/src/NumberInput/NumberInput.tsx +15 -4
  255. package/src/Outline/Outline.tsx +2 -5
  256. package/src/Pagination/Pagination.tsx +2 -9
  257. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
  258. package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
  259. package/src/ProgressBar/ProgressBar.doc.mjs +1 -1
  260. package/src/RadioList/RadioList.doc.mjs +4 -2
  261. package/src/RadioList/RadioListItem.tsx +31 -130
  262. package/src/Resizable/ResizeHandle.tsx +2 -9
  263. package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
  264. package/src/SelectableCard/SelectableCard.tsx +4 -9
  265. package/src/Selector/Selector.doc.mjs +4 -3
  266. package/src/Selector/Selector.test.tsx +650 -4
  267. package/src/Selector/Selector.tsx +140 -68
  268. package/src/Selector/hooks.ts +32 -29
  269. package/src/SideNav/SideNav.test.tsx +46 -0
  270. package/src/SideNav/SideNav.tsx +1 -0
  271. package/src/SideNav/SideNavHeading.tsx +5 -1
  272. package/src/Switch/Switch.test.tsx +32 -0
  273. package/src/Switch/Switch.tsx +1 -0
  274. package/src/TabList/Tab.tsx +2 -9
  275. package/src/TabList/TabMenu.tsx +3 -14
  276. package/src/Table/BaseTable.tsx +11 -0
  277. package/src/Table/index.ts +1 -4
  278. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +1 -1
  279. package/src/Table/plugins/rowExpansion/index.ts +1 -4
  280. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
  281. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +112 -474
  282. package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
  283. package/src/Table/tableContextMenu.test.tsx +27 -0
  284. package/src/Table/tableContextMenu.tsx +1 -0
  285. package/src/Table/types.ts +11 -0
  286. package/src/Table/useTableGroupedRows.doc.mjs +1 -1
  287. package/src/Table/useTableRowExpansion.doc.mjs +43 -66
  288. package/src/TextArea/TextArea.doc.mjs +18 -2
  289. package/src/TextArea/TextArea.test.tsx +145 -0
  290. package/src/TextArea/TextArea.tsx +20 -4
  291. package/src/TextInput/TextInput.doc.mjs +18 -2
  292. package/src/TextInput/TextInput.test.tsx +112 -0
  293. package/src/TextInput/TextInput.tsx +14 -3
  294. package/src/Thumbnail/Thumbnail.tsx +2 -9
  295. package/src/Timestamp/TimestampHoverCard.tsx +13 -35
  296. package/src/Token/Token.tsx +5 -28
  297. package/src/TopNav/TopNavItem.tsx +3 -21
  298. package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
  299. package/src/TopNav/TopNavMegaMenu.tsx +88 -33
  300. package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
  301. package/src/TopNav/TopNavMenu.tsx +6 -18
  302. package/src/TreeList/TreeList.test.tsx +7 -7
  303. package/src/TreeList/TreeListItem.tsx +18 -33
  304. package/src/Typeahead/BaseTypeahead.tsx +17 -1
  305. package/src/Typeahead/Typeahead.doc.mjs +1 -0
  306. package/src/Typeahead/Typeahead.test.tsx +76 -3
  307. package/src/hooks/index.ts +4 -0
  308. package/src/hooks/useClipboard.doc.mjs +86 -0
  309. package/src/hooks/useClipboard.test.tsx +151 -0
  310. package/src/hooks/useClipboard.ts +135 -0
  311. package/src/hooks/useIndicatorFocusRing.tsx +121 -0
  312. package/src/hooks/useStreamingText.test.ts +46 -1
  313. package/src/hooks/useStreamingText.ts +49 -7
  314. package/src/hooks/useTreeFocus.test.tsx +50 -0
  315. package/src/hooks/useTreeFocus.ts +14 -3
  316. package/src/hooks/useTypeahead.test.tsx +150 -0
  317. package/src/hooks/useTypeahead.ts +24 -9
  318. package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
  319. package/src/index.ts +1 -0
  320. package/src/theme/defineTheme.ts +24 -0
  321. package/src/theme/expandTypeScale.test.ts +43 -0
  322. package/src/theme/expandTypeScale.ts +17 -0
  323. package/src/theme/index.ts +13 -0
  324. package/src/utils/focusOutline.stylex.ts +163 -0
  325. package/src/utils/themeProps.ts +26 -4
  326. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
  327. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
  328. package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
  329. package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
  330. package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
  331. package/dist/RadioList/radio.markers.stylex.js +0 -12
  332. package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
  333. package/src/RadioList/radio.markers.stylex.ts +0 -10
@@ -15,20 +15,21 @@
15
15
  * - /apps/storybook/stories/CheckboxInput.stories.tsx (storybook stories)
16
16
  * - /packages/cli/assets/templates/blocks/components/CheckboxInput/ (showcase blocks)
17
17
  */
18
- import { useId, useCallback, use, useOptimistic, useTransition } from 'react';
18
+ import { useId, useCallback, use, useOptimistic, useRef, useTransition } from 'react';
19
19
  import * as stylex from '@stylexjs/stylex';
20
20
  import "../theme/tokens.stylex.js";
21
- import { colorVars, spacingVars, radiusVars, durationVars, easeVars, typographyVars, typeScaleVars, fontWeightVars, borderVars } from "../theme/tokens.stylex.js";
21
+ import { colorVars, spacingVars, typographyVars, typeScaleVars, fontWeightVars } from "../theme/tokens.stylex.js";
22
22
  import { FieldLabel } from "../Field/FieldLabel.js";
23
23
  import { FieldStatus } from "../FieldStatus/FieldStatus.js";
24
24
  import { Spinner } from "../Spinner/index.js";
25
25
  import { useTooltip } from "../Tooltip/index.js";
26
26
  import { mergeProps, mergeRefs } from "../utils/index.js";
27
- import "./checkbox.markers.stylex.js";
28
- import { checkboxScope } from "./checkbox.markers.stylex.js";
27
+ import { indicatorScope } from "../Indicator/indicator.markers.stylex.js";
28
+ import { useIndicatorFocusRing } from "../hooks/useIndicatorFocusRing.js";
29
+ import { useIndicator } from "../Indicator/index.js";
29
30
  import { themeProps } from "../utils/themeProps.js";
30
31
  import { CheckboxListContext } from "../CheckboxList/CheckboxListContext.js";
31
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
32
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
32
33
  const styles = {
33
34
  container: {
34
35
  k1xSpc: "x78zum5",
@@ -61,63 +62,6 @@ const styles = {
61
62
  inputDisabled: {
62
63
  kkrTdU: "x1h6gzvc",
63
64
  $$css: true
64
- },
65
- checkbox: {
66
- k1xSpc: "x78zum5",
67
- kGNEyG: "x6s0dn4",
68
- kjj79g: "xl56j7k",
69
- kMzoRj: "x1litavf",
70
- ksu8eU: "x1y0btm7",
71
- kaIpWk: "xx3sua9",
72
- k1ekBW: "xts7igz",
73
- kIyJzY: "xuedmi6 x12w9bfk",
74
- kAMwcw: "xlr8y92",
75
- $$css: true
76
- },
77
- checkboxFocus: {
78
- kI3sdo: "x1a2a7pz xkri23q",
79
- kInvED: "x81n7kt",
80
- $$css: true
81
- },
82
- checkboxUnchecked: {
83
- kMwMTN: "xqwr325",
84
- kVAM5u: "xvy26l8 x1jtjlen",
85
- kWkggS: "x10xzikg xrsv7h",
86
- $$css: true
87
- },
88
- checkboxChecked: {
89
- kMwMTN: "x17wrial",
90
- kVAM5u: "xad5do x1od6ugu",
91
- kWkggS: "x1ewilqj x6aeo4j",
92
- $$css: true
93
- },
94
- checkboxDisabled: {
95
- kSiTet: "xbyyjgo",
96
- kVAM5u: "x14i3s5s xmt8yqp",
97
- $$css: true
98
- },
99
- checkboxDisabledUnchecked: {
100
- kWkggS: "xwmxj5m x1cjfj8k",
101
- $$css: true
102
- },
103
- checkmark: {
104
- k1xSpc: "x1s85apg",
105
- kMwMTN: "x17wrial xs5hli",
106
- $$css: true
107
- },
108
- checkmarkVisible: {
109
- k1xSpc: "x1lliihq",
110
- $$css: true
111
- },
112
- indeterminateMark: {
113
- k1xSpc: "x1s85apg",
114
- kWkggS: "x1azo05 xwvh9j7",
115
- kaIpWk: "xjspbzw",
116
- $$css: true
117
- },
118
- indeterminateMarkVisible: {
119
- k1xSpc: "x1lliihq",
120
- $$css: true
121
65
  }
122
66
  };
123
67
  const wrapperSizeStyles = {
@@ -132,42 +76,6 @@ const wrapperSizeStyles = {
132
76
  $$css: true
133
77
  }
134
78
  };
135
- const checkboxSizeStyles = {
136
- sm: {
137
- kzqmXN: "xw4jnvo",
138
- kZKoxP: "x1qx5ct2",
139
- $$css: true
140
- },
141
- md: {
142
- kzqmXN: "xvy4d1p",
143
- kZKoxP: "xxk0z11",
144
- $$css: true
145
- }
146
- };
147
- const checkmarkSizeStyles = {
148
- sm: {
149
- kzqmXN: "xsmyaan",
150
- kZKoxP: "x1kpxq89",
151
- $$css: true
152
- },
153
- md: {
154
- kzqmXN: "x6jxa94",
155
- kZKoxP: "x1v9usgg",
156
- $$css: true
157
- }
158
- };
159
- const indeterminateSizeStyles = {
160
- sm: {
161
- kzqmXN: "x1fsd2vl",
162
- kZKoxP: "x36qwtl",
163
- $$css: true
164
- },
165
- md: {
166
- kzqmXN: "xsmyaan",
167
- kZKoxP: "x36qwtl",
168
- $$css: true
169
- }
170
- };
171
79
  // Dynamic field width (number -> px, string used as-is).
172
80
  const dynamicWidthStyles = {
173
81
  width: width => [{
@@ -248,9 +156,19 @@ export function CheckboxInput({
248
156
  focusTrigger: 'always',
249
157
  isEnabled: showsDisabledMessage
250
158
  });
159
+
160
+ // The checkbox visual is an indicator: a theme can restyle it through the
161
+ // `checkbox` target or replace the component outright.
162
+ const CheckboxControl = useIndicator('checkbox');
163
+ // The ring is drawn on the indicator itself: the native input is
164
+ // `opacity: 0`, and only the indicator's own element can shape the outline
165
+ // to match it. See useIndicatorFocusRing.
166
+ const indicatorRef = useRef(null);
167
+ const {
168
+ focusProps
169
+ } = useIndicatorFocusRing(indicatorRef, isDisabled);
251
170
  const isIndeterminate = optimisticValue === 'indeterminate';
252
171
  const isChecked = optimisticValue === true;
253
- const isCheckedOrIndeterminate = isChecked || isIndeterminate;
254
172
 
255
173
  // Sync the native indeterminate DOM property (can't be set via JSX
256
174
  // attribute). On a native checkbox this is the authoritative way to expose
@@ -291,9 +209,13 @@ export function CheckboxInput({
291
209
  // unconditionally is safe.
292
210
  disabledMessageTooltip.interactionRef(el);
293
211
  },
294
- ...stylex.props(styles.container, isLabelHidden && styles.containerLabelHidden, !isDisabled && checkboxScope),
212
+ ...stylex.props(styles.container, isLabelHidden && styles.containerLabelHidden,
213
+ // Hover and focus reach the checkbox visual through this ancestor
214
+ // marker rather than props, so the whole row drives it.
215
+ !isDisabled && indicatorScope),
295
216
  children: [/*#__PURE__*/_jsxs("div", {
296
217
  ...stylex.props(styles.checkboxWrapper, wrapperSizeStyles[size]),
218
+ ...focusProps,
297
219
  children: [/*#__PURE__*/_jsx("input", {
298
220
  ...rest,
299
221
  ref: mergeRefs(ref, indeterminateRef, disabledMessageTooltip.positionRef),
@@ -311,6 +233,7 @@ export function CheckboxInput({
311
233
  ,
312
234
  disabled: isDisabled && !isFocusableDisabled,
313
235
  "aria-disabled": isFocusableDisabled ? 'true' : undefined,
236
+ form: isFocusableDisabled ? '' : undefined,
314
237
  readOnly: isReadOnly,
315
238
  required: isRequired,
316
239
  onChange: e => {
@@ -333,31 +256,19 @@ export function CheckboxInput({
333
256
  "aria-invalid": status?.type === 'error' ? true : undefined,
334
257
  "aria-busy": isBusy || undefined,
335
258
  ...stylex.props(styles.input, wrapperSizeStyles[size], isDisabled && styles.inputDisabled)
336
- }), /*#__PURE__*/_jsx("div", {
337
- "aria-hidden": "true",
338
- ...mergeProps(themeProps('checkbox', {
339
- size,
340
- checked: isChecked ? 'checked' : isIndeterminate ? 'indeterminate' : null,
341
- disabled: isDisabled ? 'disabled' : null
342
- }), stylex.props(styles.checkbox, checkboxSizeStyles[size], !isDisabled && styles.checkboxFocus, isCheckedOrIndeterminate ? styles.checkboxChecked : styles.checkboxUnchecked, isDisabled && styles.checkboxDisabled, isDisabled && !isCheckedOrIndeterminate && styles.checkboxDisabledUnchecked)),
343
- children: isBusy ? /*#__PURE__*/_jsx(Spinner, {
344
- size: "sm",
345
- shade: "inherit"
346
- }) : /*#__PURE__*/_jsxs(_Fragment, {
347
- children: [/*#__PURE__*/_jsx("svg", {
348
- viewBox: "0 0 10 10",
349
- ...stylex.props(styles.checkmark, checkmarkSizeStyles[size], isChecked && styles.checkmarkVisible),
350
- children: /*#__PURE__*/_jsx("path", {
351
- d: "M8.5 2.5L4 7.5L1.5 5",
352
- stroke: "currentColor",
353
- strokeWidth: "1.5",
354
- fill: "none",
355
- strokeLinecap: "round",
356
- strokeLinejoin: "round"
357
- })
358
- }), /*#__PURE__*/_jsx("div", {
359
- ...stylex.props(styles.indeterminateMark, indeterminateSizeStyles[size], isIndeterminate && styles.indeterminateMarkVisible)
360
- })]
259
+ }), /*#__PURE__*/_jsx("span", {
260
+ ref: indicatorRef,
261
+ ...{
262
+ className: "xjp7ctv"
263
+ },
264
+ children: /*#__PURE__*/_jsx(CheckboxControl, {
265
+ state: isIndeterminate ? 'indeterminate' : isChecked ? 'checked' : 'unchecked',
266
+ size: size,
267
+ isDisabled: isDisabled,
268
+ children: isBusy ? /*#__PURE__*/_jsx(Spinner, {
269
+ size: "sm",
270
+ shade: "inherit"
271
+ }) : null
361
272
  })
362
273
  })]
363
274
  }), /*#__PURE__*/_jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"ClickableCard.d.ts","sourceRoot":"","sources":["../../src/ClickableCard/ClickableCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAE,KAAK,UAAU,EAAU,KAAK,GAAG,EAAC,MAAM,OAAO,CAAC;AASxE,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAGtE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAmG5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAE1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,yBAAyB;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,QAAQ,EACR,OAAO,EACP,OAAmB,EACnB,SAAkB,EAClB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,GAAG,EACH,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,kBAAkB,+BA+EpB;yBAlGe,aAAa"}
1
+ {"version":3,"file":"ClickableCard.d.ts","sourceRoot":"","sources":["../../src/ClickableCard/ClickableCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAE,KAAK,UAAU,EAAU,KAAK,GAAG,EAAC,MAAM,OAAO,CAAC;AASxE,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAGtE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6F5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAE1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,yBAAyB;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,QAAQ,EACR,OAAO,EACP,OAAmB,EACnB,SAAkB,EAClB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,GAAG,EACH,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,kBAAkB,+BAgFpB;yBAnGe,aAAa"}
@@ -37,6 +37,7 @@ import { Card } from "../Card/Card.js";
37
37
  import { useClickableContainer } from "../hooks/useClickableContainer.js";
38
38
  import { useLinkComponent } from "../Link/useLinkComponent.js";
39
39
  import { themeProps } from "../utils/themeProps.js";
40
+ import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
40
41
 
41
42
  // =============================================================================
42
43
  // Styles — only the interactive layer, Card handles everything else
@@ -48,12 +49,6 @@ const styles = {
48
49
  kkrTdU: "x1ypdohk",
49
50
  kybGjl: "x1hl2dhg",
50
51
  kMwMTN: "x1heor9g",
51
- kInvED: "x1hl8ikr",
52
- $$css: true
53
- },
54
- focusWithin: {
55
- kRYL1X: "x1irc7jg",
56
- koJ47v: "xdjuwb3",
57
52
  $$css: true
58
53
  },
59
54
  overlay: {
@@ -192,11 +187,8 @@ export function ClickableCard({
192
187
  elevation: elevation,
193
188
  ...mergeProps(themeProps('clickable-card', {
194
189
  variant
195
- }), {
196
- className: classNameProp,
197
- style
198
- }),
199
- xstyle: [styles.interactive, styles.focusWithin, hasBorder ? styles.bordered : styles.borderless, !isDisabled && styles.overlay, !isDisabled && styles.hoverOnPointer, !isDisabled && hasBorder && styles.borderedHoverOnPointer, isDisabled && styles.disabled, xstyleProp],
190
+ }), focusOutlineProps.focusWithin(), classNameProp, style),
191
+ xstyle: [styles.interactive, hasBorder ? styles.bordered : styles.borderless, !isDisabled && styles.overlay, !isDisabled && styles.hoverOnPointer, !isDisabled && hasBorder && styles.borderedHoverOnPointer, isDisabled && styles.disabled, xstyleProp],
200
192
  onClick: !isDisabled ? onClick : undefined,
201
193
  onMouseUp: !isDisabled ? handleMouseUp : undefined,
202
194
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlock.d.ts","sourceRoot":"","sources":["../../src/CodeBlock/CodeBlock.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA2B5C,OAAO,EAAc,KAAK,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AA2XxE,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC/D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,KACb;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAqPD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,QAAsB,EACtB,KAAK,EACL,gBAAuB,EACvB,cAAsB,EACtB,cAAc,EACd,aAAoB,EACpB,MAAM,EACN,SAAiB,EACjB,SAAS,EACT,aAAqB,EACrB,oBAAyB,EACzB,IAAW,EACX,KAAK,EAAE,SAAyB,EAChC,SAAkB,EAClB,SAAS,EAAE,eAAe,EAC1B,aAAsB,EACtB,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,qBA2OhB;yBAnQe,SAAS"}
1
+ {"version":3,"file":"CodeBlock.d.ts","sourceRoot":"","sources":["../../src/CodeBlock/CodeBlock.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6B5C,OAAO,EAAc,KAAK,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAwWxE,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC/D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,KACb;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAqPD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,QAAsB,EACtB,KAAK,EACL,gBAAuB,EACvB,cAAsB,EACtB,cAAc,EACd,aAAoB,EACpB,MAAM,EACN,SAAiB,EACjB,SAAS,EACT,aAAqB,EACrB,oBAAyB,EACzB,IAAW,EACX,KAAK,EAAE,SAAyB,EAChC,SAAkB,EAClB,SAAS,EAAE,eAAe,EAC1B,aAAsB,EACtB,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,qBAsNhB;yBA9Oe,SAAS"}
@@ -14,12 +14,14 @@ import * as stylex from '@stylexjs/stylex';
14
14
  import "../theme/tokens.stylex.js";
15
15
  import { colorVars, spacingVars, radiusVars, typographyVars, fontWeightVars, typeScaleVars, borderVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
16
16
  import { mergeProps } from "../utils/index.js";
17
- import { useAnnounce } from "../hooks/useAnnounce.js";
17
+ import { useClipboard } from "../hooks/useClipboard.js";
18
18
  import { Icon } from "../Icon/index.js";
19
+ import { IconButton } from "../IconButton/index.js";
19
20
  import { tokenize, tokenizeAsync, flatTokensToLines, SYNC_TOKENIZE_THRESHOLD } from "./tokenizer.js";
20
21
  import { ensureHighlightStyles } from "./highlightStyles.js";
21
22
  import { applyHighlightRangesChunked } from "./highlightRanges.js";
22
23
  import { themeProps } from "../utils/themeProps.js";
24
+ import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
23
25
  import { useTranslator } from "../i18n/index.js";
24
26
  import { SyntaxTheme } from "../theme/syntax/index.js";
25
27
 
@@ -80,6 +82,18 @@ const styles = {
80
82
  kVQacm: "xb3r6kr",
81
83
  $$css: true
82
84
  },
85
+ header: {
86
+ k1xSpc: "x78zum5",
87
+ kGNEyG: "x6s0dn4",
88
+ kUk6DE: "x98rzlu",
89
+ k7Eaqz: "xeuugli",
90
+ kmVPX3: "x1717udv",
91
+ kWkggS: "xjbqb8w",
92
+ kMwMTN: "x1heor9g",
93
+ kVVagm: "xln7xf2",
94
+ k9WMMc: "x1yc453h",
95
+ $$css: true
96
+ },
83
97
  collapseChevronIcon: {
84
98
  k1ekBW: "x11xpdln",
85
99
  kIyJzY: "xuedmi6",
@@ -90,6 +104,11 @@ const styles = {
90
104
  k3aq6I: "x1iffjtl",
91
105
  $$css: true
92
106
  },
107
+ headerCollapsible: {
108
+ kkrTdU: "x1ypdohk",
109
+ kfSwDN: "x87ps6o",
110
+ $$css: true
111
+ },
93
112
  code: {
94
113
  k1xSpc: "x1lliihq",
95
114
  kUk6DE: "x98rzlu",
@@ -130,6 +149,16 @@ const styles = {
130
149
  sizeMd: {
131
150
  kGuDYH: "xp03k98",
132
151
  $$css: true
152
+ },
153
+ copyButton: {
154
+ kMwMTN: "x1mjzq1q",
155
+ $$css: true
156
+ },
157
+ copyButtonAbsolute: {
158
+ kVAEAm: "x10l6tqk",
159
+ k87sOh: "xctzyg",
160
+ kt4wiu: "x72tfeb",
161
+ $$css: true
133
162
  }
134
163
  };
135
164
 
@@ -419,18 +448,15 @@ export function CodeBlock({
419
448
  ...props
420
449
  }) {
421
450
  const t = useTranslator();
422
- const [copied, setCopied] = useState(false);
423
- const copyResetTimerRef = useRef(null);
424
- const announce = useAnnounce();
425
-
426
- // Clear a pending "copied" reset when the block unmounts.
427
- useEffect(() => {
428
- return () => {
429
- if (copyResetTimerRef.current != null) {
430
- clearTimeout(copyResetTimerRef.current);
431
- }
432
- };
433
- }, []);
451
+ // Owns the clipboard write, the transient copied flag, its reset timer, and
452
+ // the polite copy announcement (a swapped aria-label alone is not reliably
453
+ // announced) — shared with Timestamp via the same hook.
454
+ const {
455
+ copy,
456
+ isCopied: copied
457
+ } = useClipboard({
458
+ announce: t('@astryx.codeBlock.copied')
459
+ });
434
460
  const useSpans = highlightMode === 'spans' || highlightMode === 'auto' && !hasHighlightAPI() || highlightMode === 'auto' && isSafari();
435
461
  const lines = useMemo(() => {
436
462
  const l = code.split('\n');
@@ -442,26 +468,11 @@ export function CodeBlock({
442
468
  const tokenLines = useTokenLines(code, language, customTokenizer);
443
469
  const highlightSet = useMemo(() => highlightLines ? new Set(highlightLines) : null, [highlightLines]);
444
470
  const handleCopy = useCallback(async () => {
445
- try {
446
- await navigator.clipboard.writeText(code);
447
- setCopied(true);
448
- // Swapping the button's aria-label alone isn't reliably announced by
449
- // screen readers, so confirm the copy via a polite live region.
450
- announce(t('@astryx.codeBlock.copied'));
471
+ const didCopy = await copy(code);
472
+ if (didCopy) {
451
473
  onCopy?.();
452
- // Restart the reset timer on every copy — otherwise a rapid re-copy
453
- // is reverted early by the previous click's timer.
454
- if (copyResetTimerRef.current != null) {
455
- clearTimeout(copyResetTimerRef.current);
456
- }
457
- copyResetTimerRef.current = setTimeout(() => {
458
- copyResetTimerRef.current = null;
459
- setCopied(false);
460
- }, 2000);
461
- } catch {
462
- // Clipboard failures leave the copied state unchanged.
463
474
  }
464
- }, [code, onCopy, announce, t]);
475
+ }, [code, copy, onCopy]);
465
476
  const sizeStyle = size === 'sm' ? styles.sizeSm : styles.sizeMd;
466
477
  // Digits in the largest line number — sizes the gutter column width.
467
478
  const maxLineDigits = String(lines.length).length;
@@ -478,28 +489,28 @@ export function CodeBlock({
478
489
  const scrollStyle = maxHeight ? {
479
490
  maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight
480
491
  } : undefined;
481
- const copyIcon = /*#__PURE__*/_jsx(Icon, {
482
- icon: copied ? 'check' : 'copy',
492
+ const copyButtonEl = hasCopyButton ? /*#__PURE__*/_jsx(IconButton, {
493
+ variant: "ghost",
483
494
  size: "sm",
484
- color: "inherit"
485
- });
486
- const copyButtonEl = hasCopyButton ? /*#__PURE__*/_jsx("button", {
487
- type: "button",
495
+ icon: /*#__PURE__*/_jsx(Icon, {
496
+ icon: copied ? 'check' : 'copy',
497
+ size: "sm",
498
+ color: "inherit"
499
+ })
500
+ // A visible "Copy" hover/focus hint via Button's built-in tooltip. It
501
+ // stays "Copy" after copying — the copy → check icon flip is the
502
+ // confirmation, not a tooltip change. The aria-label still swaps to the
503
+ // localized "Copied" for assistive tech, backed by the announcement.
504
+ ,
505
+ tooltip: t('@astryx.codeBlock.copyCode'),
506
+ label: copied ? t('@astryx.codeBlock.copied') : t('@astryx.codeBlock.copyCode'),
488
507
  onClick: e => {
489
508
  // Stop propagation so copying does not toggle the collapsible header.
490
509
  e.stopPropagation();
491
510
  void handleCopy();
492
511
  },
493
- "aria-label": copied ? t('@astryx.codeBlock.copied') : t('@astryx.codeBlock.copyCode'),
494
- ...{
495
- 0: {
496
- className: "x3nfvp2 x6s0dn4 xl56j7k x9epnlk x3kzqx6 xx3sua9 xjbqb8w xe9uy6x x1mjzq1q x1ypdohk x14ju556"
497
- },
498
- 1: {
499
- className: "x3nfvp2 x6s0dn4 xl56j7k x9epnlk x3kzqx6 xx3sua9 xjbqb8w xe9uy6x x1mjzq1q x1ypdohk x14ju556 x10l6tqk xctzyg x72tfeb"
500
- }
501
- }[!!!showHeader << 0],
502
- children: copyIcon
512
+ xstyle: [styles.copyButton, !showHeader && styles.copyButtonAbsolute],
513
+ ...themeProps('codeblock-copy-button')
503
514
  }) : null;
504
515
  const headerEl = showHeader ? /*#__PURE__*/_jsxs("div", {
505
516
  ...{
@@ -522,14 +533,7 @@ export function CodeBlock({
522
533
  setIsCollapsed(prev => !prev);
523
534
  }
524
535
  } : undefined,
525
- ...{
526
- 0: {
527
- className: "x78zum5 x6s0dn4 x98rzlu xeuugli x1717udv xjbqb8w x1heor9g xln7xf2 x1yc453h"
528
- },
529
- 1: {
530
- className: "x78zum5 x6s0dn4 x98rzlu xeuugli x1717udv xjbqb8w x1heor9g xln7xf2 x1yc453h x1ypdohk x87ps6o x17nn4n9 x1wfwxd8 x7s97pk"
531
- }
532
- }[!!canCollapse << 0],
536
+ ...focusOutlineProps.focusVisible(styles.header, canCollapse && styles.headerCollapsible),
533
537
  children: /*#__PURE__*/_jsxs("span", {
534
538
  ...{
535
539
  className: "x78zum5 x6s0dn4 x141an7d x9m5x89 x1e4wzip x1mjzq1q x1ghz6dp x1ltkj2j"
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../../src/Collapsible/Collapsible.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAa,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAiBjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA8H5C,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,OAAO,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,aAAa,EACb,MAAM,EAAE,gBAAgB,EACxB,UAAkB,EAClB,YAAY,EACZ,KAAK,EACL,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAsGlB;yBAnHe,WAAW"}
1
+ {"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../../src/Collapsible/Collapsible.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAa,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAiBjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAuH5C,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,OAAO,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,aAAa,EACb,MAAM,EAAE,gBAAgB,EACxB,UAAkB,EAClB,YAAY,EACZ,KAAK,EACL,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAsGlB;yBAnHe,WAAW"}
@@ -35,6 +35,7 @@ import { CollapsibleGroupPresentationContext } from "./CollapsibleGroupContext.j
35
35
  import { Icon } from "../Icon/index.js";
36
36
  import { mergeProps } from "../utils/index.js";
37
37
  import { themeProps } from "../utils/themeProps.js";
38
+ import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
38
39
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
39
40
  const styles = {
40
41
  root: {
@@ -54,8 +55,6 @@ const styles = {
54
55
  kMwMTN: "x1tgivj0",
55
56
  k9WMMc: "x1yc453h",
56
57
  k8WAf4: "xt970qd",
57
- kI3sdo: "x17nn4n9",
58
- kInvED: "x1wfwxd8 x7s97pk",
59
58
  $$css: true
60
59
  },
61
60
  triggerDisabled: {
@@ -249,7 +248,7 @@ export function Collapsible({
249
248
  tabIndex: isDisabled ? -1 : undefined,
250
249
  ...mergeProps(themeProps('collapsible-trigger', {
251
250
  density: density ?? undefined
252
- }), stylex.props(styles.trigger, density != null && triggerDensity[density], isDisabled && styles.triggerDisabled)),
251
+ }), focusOutlineProps.focusVisible(styles.trigger, density != null && triggerDensity[density], isDisabled && styles.triggerDisabled)),
253
252
  children: [/*#__PURE__*/_jsx("span", {
254
253
  ...{
255
254
  className: "x1b2iylo xwgcxoh"
@@ -52,7 +52,7 @@ export interface CommandPaletteItemProps extends Omit<BaseProps<HTMLDivElement>,
52
52
  * </CommandPaletteItem>
53
53
  * ```
54
54
  */
55
- export declare function CommandPaletteItem({ value, onSelect, isHighlighted: controlledHighlighted, isSelected: controlledSelected, isDisabled, children, ref, xstyle, className, style, ...props }: CommandPaletteItemProps): import("react").JSX.Element;
55
+ export declare function CommandPaletteItem({ value, onSelect, isHighlighted: controlledHighlighted, isSelected: controlledSelected, isDisabled, children, ref, xstyle, className, style, onClick: onClickProp, onMouseEnter: onMouseEnterProp, ...props }: CommandPaletteItemProps): import("react").JSX.Element;
56
56
  export declare namespace CommandPaletteItem {
57
57
  var displayName: string;
58
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPaletteItem.d.ts","sourceRoot":"","sources":["../../src/CommandPalette/CommandPaletteItem.tsx"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,EAA0C,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE9E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwD5C,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,UAAU,CACxB;IACC,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,aAAa,EAAE,qBAAqB,EACpC,UAAU,EAAE,kBAAkB,EAC9B,UAAkB,EAClB,QAAQ,EACR,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAkFzB;yBA9Fe,kBAAkB"}
1
+ {"version":3,"file":"CommandPaletteItem.d.ts","sourceRoot":"","sources":["../../src/CommandPalette/CommandPaletteItem.tsx"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,EAA0C,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE9E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAyD5C,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,UAAU,CACxB;IACC,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,aAAa,EAAE,qBAAqB,EACpC,UAAU,EAAE,kBAAkB,EAC9B,UAAkB,EAClB,QAAQ,EACR,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,gBAAgB,EAC9B,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAkFzB;yBAhGe,kBAAkB"}
@@ -14,6 +14,7 @@
14
14
  import { useCallback, useEffect, useMemo, useRef } from 'react';
15
15
  import * as stylex from '@stylexjs/stylex';
16
16
  import { mergeProps, mergeRefs } from "../utils/index.js";
17
+ import { composeEventHandlers } from "../utils/composeEventHandlers.js";
17
18
  import "../theme/tokens.stylex.js";
18
19
  import { colorVars, spacingVars, radiusVars, typographyVars, typeScaleVars } from "../theme/tokens.stylex.js";
19
20
  import { useCommandPaletteContext } from "./CommandPaletteContext.js";
@@ -87,6 +88,8 @@ export function CommandPaletteItem({
87
88
  xstyle,
88
89
  className,
89
90
  style,
91
+ onClick: onClickProp,
92
+ onMouseEnter: onMouseEnterProp,
90
93
  ...props
91
94
  }) {
92
95
  const ctx = useCommandPaletteContext();
@@ -135,15 +138,15 @@ export function CommandPaletteItem({
135
138
  }, [isDisabled, itemIndex, ctx]);
136
139
  return /*#__PURE__*/_jsx("div", {
137
140
  ref: mergeRefs(ref, itemRef),
141
+ ...props,
138
142
  id: ctx && itemIndex >= 0 ? ctx.getItemId(itemIndex) : undefined,
139
143
  role: "option",
140
144
  "aria-selected": isSelected,
141
145
  "aria-disabled": isDisabled || undefined,
142
146
  "data-value": value,
143
- onClick: handleClick,
144
- onMouseEnter: handleMouseEnter,
147
+ onClick: composeEventHandlers(onClickProp, handleClick),
148
+ onMouseEnter: composeEventHandlers(onMouseEnterProp, handleMouseEnter),
145
149
  ...mergeProps(themeProps('command-palette-item'), stylex.props(styles.item, !isDisabled && styles.itemHover, isHighlighted && styles.itemHighlighted, isSelected && styles.itemSelected, isDisabled && styles.itemDisabled, xstyle), className, style),
146
- ...props,
147
150
  children: children
148
151
  });
149
152
  }
@@ -66,11 +66,11 @@ export function CommandPaletteList({
66
66
  const ctx = useCommandPaletteContext();
67
67
  return /*#__PURE__*/_jsx("div", {
68
68
  ref: ref,
69
+ ...props,
69
70
  id: ctx?.listId,
70
71
  role: "listbox",
71
72
  "aria-label": label,
72
73
  ...mergeProps(themeProps('command-palette-list'), stylex.props(styles.list, xstyle), className, style),
73
- ...props,
74
74
  children: children
75
75
  });
76
76
  }
@@ -101,7 +101,7 @@ export interface ComplexSelectorProps<Value> extends Omit<BaseProps<HTMLDivEleme
101
101
  * </ComplexSelector>
102
102
  * ```
103
103
  */
104
- export declare function ComplexSelector<Value>({ label, value, onChange, changeAction, children, triggerLabel, placeholder: placeholderFromProps, isLabelHidden, description, isOptional, isRequired, isDisabled, isLoading, status, statusVariant, labelTooltip, size, width, placement, contentXstyle, xstyle, className, style, 'data-testid': testId, ...props }: ComplexSelectorProps<Value>): React.JSX.Element;
104
+ export declare function ComplexSelector<Value>({ label, value, onChange, changeAction, children, triggerLabel, placeholder: placeholderFromProps, isLabelHidden, description, isOptional, isRequired, isDisabled, isLoading, status, statusVariant, labelTooltip, size, width, placement, contentXstyle, xstyle, className, style, 'data-testid': testId, onClick: onClickProp, ...props }: ComplexSelectorProps<Value>): React.JSX.Element;
105
105
  export declare namespace ComplexSelector {
106
106
  var displayName: string;
107
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ComplexSelector.d.ts","sourceRoot":"","sources":["../../src/ComplexSelector/ComplexSelector.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComplexSelector.d.ts","sourceRoot":"","sources":["../../src/ComplexSelector/ComplexSelector.tsx"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ import { usePopover } from "../Popover/usePopover.js";
25
25
  import "../theme/tokens.stylex.js";
26
26
  import { colorVars, durationVars, easeVars, radiusVars, sizeVars, spacingVars, typographyVars, typeScaleVars } from "../theme/tokens.stylex.js";
27
27
  import { mergeProps } from "../utils/index.js";
28
+ import { composeEventHandlers } from "../utils/composeEventHandlers.js";
29
+ import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
28
30
  import { themeProps } from "../utils/themeProps.js";
29
31
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
30
32
  const styles = {
@@ -98,6 +100,7 @@ const styles = {
98
100
  popover: {
99
101
  k7Eaqz: "xrzjruh",
100
102
  keoZOQ: "xcsaf9d",
103
+ k1K539: "x14cgwvg",
101
104
  $$css: true
102
105
  },
103
106
  content: {
@@ -122,11 +125,6 @@ const styles = {
122
125
  disabled: {
123
126
  kkrTdU: "x1h6gzvc",
124
127
  $$css: true
125
- },
126
- focusRing: {
127
- k8PahR: "x1oqel4m",
128
- kfQpEX: "x1fanpfn",
129
- $$css: true
130
128
  }
131
129
  };
132
130
  /**
@@ -181,6 +179,7 @@ export function ComplexSelector({
181
179
  className,
182
180
  style,
183
181
  'data-testid': testId,
182
+ onClick: onClickProp,
184
183
  ...props
185
184
  }) {
186
185
  const t = useTranslator();
@@ -227,15 +226,20 @@ export function ComplexSelector({
227
226
  ref: popover.triggerRef,
228
227
  "data-testid": testId,
229
228
  ...props,
230
- onClick: () => {
229
+ onClick: composeEventHandlers(onClickProp, () => {
231
230
  if (!isDisabled) {
232
231
  popover.toggle();
233
232
  }
234
- },
233
+ }),
235
234
  ...mergeProps(themeProps('complex-selector', {
236
235
  size,
237
236
  status: status?.type ?? null
238
- }), stylex.props(inputWrapperStyles.base, styles.triggerContainer, styles[size], styles.focusRing, isDisabled && inputWrapperStyles.disabled, isDisabled && styles.disabled, triggerLabel == null && styles.placeholder, xstyle), className, style),
237
+ }), stylex.props(inputWrapperStyles.base, styles.triggerContainer, styles[size],
238
+ // The ring belongs to the wrapper (the focusable `<button>` sits
239
+ // inside it), but it must still be a KEYBOARD ring: `:focus-within`
240
+ // matched a mouse click on the trigger and drew the outline for
241
+ // pointer users too. `focusWithin` here is `:has(:focus-visible)`.
242
+ focusOutlineStyles.focusWithin, isDisabled && inputWrapperStyles.disabled, isDisabled && styles.disabled, triggerLabel == null && styles.placeholder, xstyle), className, style),
239
243
  children: [/*#__PURE__*/_jsx("button", {
240
244
  id: triggerId,
241
245
  type: "button",