@astryxdesign/core 0.3.0 → 0.4.0

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 (551) 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.map +1 -1
  16. package/dist/Banner/Banner.js +15 -14
  17. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  18. package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
  19. package/dist/Breadcrumbs/index.d.ts +2 -1
  20. package/dist/Breadcrumbs/index.d.ts.map +1 -1
  21. package/dist/Breadcrumbs/index.js +1 -0
  22. package/dist/Button/Button.d.ts.map +1 -1
  23. package/dist/Button/Button.js +11 -15
  24. package/dist/Calendar/Calendar.d.ts.map +1 -1
  25. package/dist/Calendar/Calendar.js +2 -1
  26. package/dist/Calendar/styles.d.ts +0 -2
  27. package/dist/Calendar/styles.d.ts.map +1 -1
  28. package/dist/Calendar/styles.js +0 -2
  29. package/dist/Carousel/Carousel.d.ts.map +1 -1
  30. package/dist/Carousel/Carousel.js +8 -12
  31. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  32. package/dist/Chat/ChatDictationButton.js +2 -1
  33. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  34. package/dist/Chat/ChatLayoutScrollButton.js +3 -1
  35. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  36. package/dist/Chat/ChatSendButton.js +4 -3
  37. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  38. package/dist/Chat/ChatToolCalls.js +17 -17
  39. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  40. package/dist/Chat/useTriggerMenu.js +2 -6
  41. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  42. package/dist/CheckboxInput/CheckboxInput.js +36 -125
  43. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  44. package/dist/ClickableCard/ClickableCard.js +3 -11
  45. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  46. package/dist/CodeBlock/CodeBlock.js +84 -67
  47. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  48. package/dist/Collapsible/Collapsible.js +35 -15
  49. package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
  50. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  51. package/dist/CommandPalette/CommandPaletteItem.js +6 -3
  52. package/dist/CommandPalette/CommandPaletteList.js +1 -1
  53. package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
  54. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  55. package/dist/ComplexSelector/ComplexSelector.js +35 -33
  56. package/dist/ContextMenu/ContextMenu.d.ts +2 -2
  57. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  58. package/dist/ContextMenu/ContextMenu.js +1 -1
  59. package/dist/ContextMenu/index.d.ts +2 -1
  60. package/dist/ContextMenu/index.d.ts.map +1 -1
  61. package/dist/ContextMenu/index.js +1 -0
  62. package/dist/DateInput/DateInput.d.ts +9 -2
  63. package/dist/DateInput/DateInput.d.ts.map +1 -1
  64. package/dist/DateInput/DateInput.js +24 -23
  65. package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
  66. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  67. package/dist/DateRangeInput/DateRangeInput.js +11 -16
  68. package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
  69. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  70. package/dist/DateTimeInput/DateTimeInput.js +22 -17
  71. package/dist/Dialog/Dialog.d.ts.map +1 -1
  72. package/dist/Dialog/Dialog.js +4 -4
  73. package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
  74. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  75. package/dist/DropdownMenu/DropdownMenu.js +62 -20
  76. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
  77. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  78. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
  79. package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
  80. package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
  81. package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
  82. package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
  83. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  84. package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
  85. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
  86. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  87. package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
  88. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  89. package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
  90. package/dist/DropdownMenu/index.d.ts +2 -1
  91. package/dist/DropdownMenu/index.d.ts.map +1 -1
  92. package/dist/DropdownMenu/index.js +4 -0
  93. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  94. package/dist/DropdownMenu/renderDropdownItems.js +35 -27
  95. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  96. package/dist/EmptyState/EmptyState.js +9 -5
  97. package/dist/Field/InputClearButton.d.ts +16 -3
  98. package/dist/Field/InputClearButton.d.ts.map +1 -1
  99. package/dist/Field/InputClearButton.js +15 -4
  100. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  101. package/dist/HoverCard/useHoverCard.js +3 -19
  102. package/dist/Indicator/CheckIndicator.d.ts +25 -0
  103. package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
  104. package/dist/Indicator/CheckIndicator.js +155 -0
  105. package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
  106. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
  107. package/dist/Indicator/CheckboxIndicator.js +173 -0
  108. package/dist/Indicator/RadioIndicator.d.ts +23 -0
  109. package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
  110. package/dist/Indicator/RadioIndicator.js +137 -0
  111. package/dist/Indicator/index.d.ts +24 -0
  112. package/dist/Indicator/index.d.ts.map +1 -0
  113. package/dist/Indicator/index.js +26 -0
  114. package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
  115. package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
  116. package/dist/Indicator/indicator.markers.stylex.js +21 -0
  117. package/dist/Indicator/indicatorRegistry.d.ts +71 -0
  118. package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
  119. package/dist/Indicator/indicatorRegistry.js +93 -0
  120. package/dist/Indicator/types.d.ts +167 -0
  121. package/dist/Indicator/types.d.ts.map +1 -0
  122. package/dist/Indicator/types.js +1 -0
  123. package/dist/Indicator/useIndicator.d.ts +18 -0
  124. package/dist/Indicator/useIndicator.d.ts.map +1 -0
  125. package/dist/Indicator/useIndicator.js +30 -0
  126. package/dist/Item/Item.d.ts.map +1 -1
  127. package/dist/Item/Item.js +4 -8
  128. package/dist/Layer/useLayer.d.ts +14 -0
  129. package/dist/Layer/useLayer.d.ts.map +1 -1
  130. package/dist/Layer/useLayer.js +25 -2
  131. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  132. package/dist/Lightbox/Lightbox.js +56 -53
  133. package/dist/Link/Link.d.ts.map +1 -1
  134. package/dist/Link/Link.js +4 -5
  135. package/dist/MobileNav/MobileNav.js +8 -8
  136. package/dist/MoreMenu/MoreMenu.d.ts +14 -1
  137. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  138. package/dist/MoreMenu/MoreMenu.js +4 -0
  139. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  140. package/dist/MultiSelector/MultiSelector.js +78 -75
  141. package/dist/NumberInput/NumberInput.d.ts +27 -1
  142. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  143. package/dist/NumberInput/NumberInput.js +230 -42
  144. package/dist/Outline/Outline.d.ts.map +1 -1
  145. package/dist/Outline/Outline.js +2 -3
  146. package/dist/Pagination/Pagination.d.ts.map +1 -1
  147. package/dist/Pagination/Pagination.js +61 -63
  148. package/dist/Popover/Popover.d.ts.map +1 -1
  149. package/dist/Popover/Popover.js +6 -8
  150. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  151. package/dist/PowerSearch/PowerSearch.js +1 -1
  152. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  153. package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
  154. package/dist/ProgressBar/ProgressBar.d.ts +11 -4
  155. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  156. package/dist/ProgressBar/ProgressBar.js +96 -6
  157. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  158. package/dist/RadioList/RadioListItem.js +29 -84
  159. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  160. package/dist/Resizable/ResizeHandle.js +2 -3
  161. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  162. package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
  163. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  164. package/dist/SelectableCard/SelectableCard.js +3 -11
  165. package/dist/Selector/Selector.d.ts +2 -1
  166. package/dist/Selector/Selector.d.ts.map +1 -1
  167. package/dist/Selector/Selector.js +164 -94
  168. package/dist/Selector/hooks.d.ts +18 -6
  169. package/dist/Selector/hooks.d.ts.map +1 -1
  170. package/dist/Selector/hooks.js +57 -40
  171. package/dist/SideNav/SideNav.d.ts.map +1 -1
  172. package/dist/SideNav/SideNav.js +1 -1
  173. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  174. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  175. package/dist/SideNav/SideNavCollapseButton.js +29 -14
  176. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  177. package/dist/SideNav/SideNavHeading.js +56 -20
  178. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  179. package/dist/SideNav/SideNavItem.js +28 -22
  180. package/dist/Stack/stack.stylex.d.ts +3 -3
  181. package/dist/Switch/Switch.js +11 -10
  182. package/dist/TabList/Tab.d.ts.map +1 -1
  183. package/dist/TabList/Tab.js +2 -3
  184. package/dist/TabList/TabMenu.d.ts.map +1 -1
  185. package/dist/TabList/TabMenu.js +41 -19
  186. package/dist/Table/BaseTable.d.ts.map +1 -1
  187. package/dist/Table/BaseTable.js +8 -0
  188. package/dist/Table/index.d.ts +1 -1
  189. package/dist/Table/index.d.ts.map +1 -1
  190. package/dist/Table/index.js +1 -1
  191. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  192. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  193. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
  194. package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
  195. package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
  196. package/dist/Table/plugins/rowExpansion/index.js +1 -1
  197. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
  198. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  199. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
  200. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  201. package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
  202. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  203. package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
  204. package/dist/Table/tableContextMenu.d.ts.map +1 -1
  205. package/dist/Table/tableContextMenu.js +2 -1
  206. package/dist/Table/types.d.ts +11 -0
  207. package/dist/Table/types.d.ts.map +1 -1
  208. package/dist/TextArea/TextArea.d.ts +10 -1
  209. package/dist/TextArea/TextArea.d.ts.map +1 -1
  210. package/dist/TextArea/TextArea.js +16 -6
  211. package/dist/TextInput/TextInput.d.ts +10 -1
  212. package/dist/TextInput/TextInput.d.ts.map +1 -1
  213. package/dist/TextInput/TextInput.js +13 -19
  214. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  215. package/dist/Thumbnail/Thumbnail.js +32 -26
  216. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  217. package/dist/TimeInput/TimeInput.js +7 -15
  218. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
  219. package/dist/Timestamp/TimestampHoverCard.js +16 -34
  220. package/dist/Token/Token.d.ts.map +1 -1
  221. package/dist/Token/Token.js +20 -11
  222. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  223. package/dist/Tokenizer/Tokenizer.js +4 -2
  224. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  225. package/dist/Tooltip/useTooltip.js +3 -19
  226. package/dist/TopNav/TopNav.d.ts.map +1 -1
  227. package/dist/TopNav/TopNav.js +6 -5
  228. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  229. package/dist/TopNav/TopNavHeading.js +54 -16
  230. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  231. package/dist/TopNav/TopNavItem.js +3 -9
  232. package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
  233. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  234. package/dist/TopNav/TopNavMegaMenu.js +146 -60
  235. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  236. package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
  237. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  238. package/dist/TopNav/TopNavMenu.js +83 -38
  239. package/dist/TreeList/TreeList.d.ts.map +1 -1
  240. package/dist/TreeList/TreeList.js +13 -0
  241. package/dist/TreeList/TreeListBranches.d.ts +1 -1
  242. package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
  243. package/dist/TreeList/TreeListBranches.js +14 -4
  244. package/dist/TreeList/TreeListItem.d.ts +11 -1
  245. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  246. package/dist/TreeList/TreeListItem.js +57 -30
  247. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  248. package/dist/Typeahead/BaseTypeahead.js +16 -8
  249. package/dist/astryx.css +74 -85
  250. package/dist/astryx.umd.js +56 -56
  251. package/dist/astryx.umd.js.map +4 -4
  252. package/dist/hooks/containerReveal.stylex.d.ts +61 -0
  253. package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
  254. package/dist/hooks/containerReveal.stylex.js +63 -0
  255. package/dist/hooks/index.d.ts +3 -0
  256. package/dist/hooks/index.d.ts.map +1 -1
  257. package/dist/hooks/index.js +2 -0
  258. package/dist/hooks/useClipboard.d.ts +59 -0
  259. package/dist/hooks/useClipboard.d.ts.map +1 -0
  260. package/dist/hooks/useClipboard.js +106 -0
  261. package/dist/hooks/useContainerReveal.d.ts +14 -8
  262. package/dist/hooks/useContainerReveal.d.ts.map +1 -1
  263. package/dist/hooks/useContainerReveal.js +28 -69
  264. package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
  265. package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
  266. package/dist/hooks/useIndicatorFocusRing.js +96 -0
  267. package/dist/hooks/useLongPress.d.ts.map +1 -1
  268. package/dist/hooks/useLongPress.js +12 -2
  269. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  270. package/dist/hooks/useScrollLock.js +33 -18
  271. package/dist/hooks/useStreamingText.d.ts +18 -3
  272. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  273. package/dist/hooks/useStreamingText.js +47 -7
  274. package/dist/hooks/useTreeFocus.d.ts.map +1 -1
  275. package/dist/hooks/useTreeFocus.js +9 -3
  276. package/dist/hooks/useTypeahead.d.ts +3 -2
  277. package/dist/hooks/useTypeahead.d.ts.map +1 -1
  278. package/dist/hooks/useTypeahead.js +19 -7
  279. package/dist/index.d.ts +1 -0
  280. package/dist/index.d.ts.map +1 -1
  281. package/dist/index.js +1 -0
  282. package/dist/theme/defineTheme.d.ts +16 -0
  283. package/dist/theme/defineTheme.d.ts.map +1 -1
  284. package/dist/theme/defineTheme.js +8 -0
  285. package/dist/theme/derivedVarRegistry.d.ts +8 -0
  286. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  287. package/dist/theme/derivedVarRegistry.js +14 -13
  288. package/dist/theme/expandColorScale.d.ts +3 -1
  289. package/dist/theme/expandColorScale.d.ts.map +1 -1
  290. package/dist/theme/expandColorScale.js +17 -7
  291. package/dist/theme/expandTypeScale.d.ts.map +1 -1
  292. package/dist/theme/expandTypeScale.js +17 -0
  293. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  294. package/dist/theme/generateThemeRules.js +11 -0
  295. package/dist/theme/index.d.ts +1 -0
  296. package/dist/theme/index.d.ts.map +1 -1
  297. package/dist/utils/focusOutline.stylex.d.ts +107 -0
  298. package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
  299. package/dist/utils/focusOutline.stylex.js +130 -0
  300. package/dist/utils/focusReturn.d.ts +24 -0
  301. package/dist/utils/focusReturn.d.ts.map +1 -0
  302. package/dist/utils/focusReturn.js +29 -0
  303. package/dist/utils/index.d.ts +1 -0
  304. package/dist/utils/index.d.ts.map +1 -1
  305. package/dist/utils/index.js +1 -0
  306. package/dist/utils/mergeRefs.d.ts.map +1 -1
  307. package/dist/utils/mergeRefs.js +7 -5
  308. package/dist/utils/rtlStyles.d.ts +2 -2
  309. package/dist/utils/rtlStyles.js +2 -2
  310. package/dist/utils/themeProps.d.ts +20 -1
  311. package/dist/utils/themeProps.d.ts.map +1 -1
  312. package/dist/utils/themeProps.js +8 -2
  313. package/locales/en.json +12 -0
  314. package/locales/pseudo.json +9 -0
  315. package/package.json +7 -2
  316. package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
  317. package/src/AlertDialog/AlertDialog.test.tsx +208 -1
  318. package/src/AlertDialog/AlertDialog.tsx +21 -3
  319. package/src/AppShell/AppShell.doc.mjs +11 -0
  320. package/src/AppShell/AppShell.test.tsx +139 -0
  321. package/src/AppShell/AppShell.tsx +32 -22
  322. package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
  323. package/src/AspectRatio/AspectRatio.test.tsx +30 -0
  324. package/src/AspectRatio/AspectRatio.tsx +13 -0
  325. package/src/Avatar/Avatar.doc.mjs +2 -13
  326. package/src/Avatar/Avatar.test.tsx +33 -8
  327. package/src/Avatar/Avatar.tsx +52 -50
  328. package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
  329. package/src/Banner/Banner.tsx +9 -6
  330. package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
  331. package/src/Breadcrumbs/index.ts +5 -1
  332. package/src/Button/Button.tsx +21 -41
  333. package/src/Calendar/Calendar.tsx +2 -1
  334. package/src/Calendar/styles.ts +0 -8
  335. package/src/Carousel/Carousel.doc.mjs +3 -0
  336. package/src/Carousel/Carousel.tsx +10 -6
  337. package/src/Chat/Chat.doc.mjs +2 -0
  338. package/src/Chat/ChatDictationButton.tsx +7 -1
  339. package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
  340. package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
  341. package/src/Chat/ChatSendButton.tsx +2 -3
  342. package/src/Chat/ChatToolCalls.test.tsx +35 -0
  343. package/src/Chat/ChatToolCalls.tsx +36 -16
  344. package/src/Chat/useTriggerMenu.tsx +2 -5
  345. package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
  346. package/src/CheckboxInput/CheckboxInput.test.tsx +115 -0
  347. package/src/CheckboxInput/CheckboxInput.tsx +45 -202
  348. package/src/ClickableCard/ClickableCard.tsx +6 -11
  349. package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
  350. package/src/CodeBlock/CodeBlock.test.tsx +91 -0
  351. package/src/CodeBlock/CodeBlock.tsx +57 -80
  352. package/src/Collapsible/Collapsible.tsx +22 -18
  353. package/src/CommandPalette/CommandPalette.test.tsx +29 -0
  354. package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
  355. package/src/CommandPalette/CommandPaletteList.tsx +2 -2
  356. package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
  357. package/src/ComplexSelector/ComplexSelector.test.tsx +64 -0
  358. package/src/ComplexSelector/ComplexSelector.tsx +46 -29
  359. package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
  360. package/src/ContextMenu/ContextMenu.test.tsx +41 -0
  361. package/src/ContextMenu/ContextMenu.tsx +3 -3
  362. package/src/ContextMenu/index.ts +5 -1
  363. package/src/DateInput/DateInput.doc.mjs +18 -3
  364. package/src/DateInput/DateInput.test.tsx +93 -11
  365. package/src/DateInput/DateInput.tsx +41 -19
  366. package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
  367. package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
  368. package/src/DateRangeInput/DateRangeInput.tsx +24 -12
  369. package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
  370. package/src/DateTimeInput/DateTimeInput.test.tsx +75 -0
  371. package/src/DateTimeInput/DateTimeInput.tsx +35 -8
  372. package/src/Dialog/Dialog.tsx +2 -9
  373. package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
  374. package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
  375. package/src/DropdownMenu/DropdownMenu.tsx +113 -52
  376. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
  377. package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
  378. package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
  379. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
  380. package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
  381. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
  382. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
  383. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
  384. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
  385. package/src/DropdownMenu/index.ts +8 -1
  386. package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
  387. package/src/EmptyState/EmptyState.doc.mjs +4 -0
  388. package/src/EmptyState/EmptyState.test.tsx +62 -0
  389. package/src/EmptyState/EmptyState.tsx +16 -6
  390. package/src/Field/Field.doc.mjs +1 -0
  391. package/src/Field/InputClearButton.test.tsx +117 -0
  392. package/src/Field/InputClearButton.tsx +30 -3
  393. package/src/HoverCard/useHoverCard.tsx +2 -23
  394. package/src/Icon/Icon.doc.mjs +2 -1
  395. package/src/Indicator/CheckIndicator.tsx +174 -0
  396. package/src/Indicator/CheckboxIndicator.tsx +257 -0
  397. package/src/Indicator/Indicator.doc.mjs +344 -0
  398. package/src/Indicator/Indicator.test.tsx +393 -0
  399. package/src/Indicator/RadioIndicator.tsx +206 -0
  400. package/src/Indicator/index.ts +45 -0
  401. package/src/Indicator/indicator.markers.stylex.ts +19 -0
  402. package/src/Indicator/indicatorRegistry.test.tsx +106 -0
  403. package/src/Indicator/indicatorRegistry.ts +120 -0
  404. package/src/Indicator/types.ts +186 -0
  405. package/src/Indicator/useIndicator.ts +39 -0
  406. package/src/Item/Item.doc.mjs +1 -1
  407. package/src/Item/Item.tsx +7 -14
  408. package/src/Layer/useLayer.doc.mjs +2 -2
  409. package/src/Layer/useLayer.test.tsx +85 -0
  410. package/src/Layer/useLayer.tsx +39 -1
  411. package/src/Lightbox/Lightbox.doc.mjs +1 -1
  412. package/src/Lightbox/Lightbox.tsx +43 -38
  413. package/src/Link/Link.tsx +4 -11
  414. package/src/MobileNav/MobileNav.tsx +3 -3
  415. package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
  416. package/src/MoreMenu/MoreMenu.test.tsx +68 -1
  417. package/src/MoreMenu/MoreMenu.tsx +19 -0
  418. package/src/MultiSelector/MultiSelector.doc.mjs +9 -1
  419. package/src/MultiSelector/MultiSelector.test.tsx +255 -16
  420. package/src/MultiSelector/MultiSelector.tsx +103 -99
  421. package/src/NumberInput/NumberInput.doc.mjs +265 -50
  422. package/src/NumberInput/NumberInput.test.tsx +726 -21
  423. package/src/NumberInput/NumberInput.tsx +353 -59
  424. package/src/Outline/Outline.tsx +2 -5
  425. package/src/Pagination/Pagination.doc.mjs +1 -1
  426. package/src/Pagination/Pagination.test.tsx +22 -7
  427. package/src/Pagination/Pagination.tsx +38 -35
  428. package/src/Popover/Popover.tsx +6 -7
  429. package/src/PowerSearch/PowerSearch.tsx +1 -1
  430. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
  431. package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
  432. package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
  433. package/src/ProgressBar/ProgressBar.test.tsx +224 -1
  434. package/src/ProgressBar/ProgressBar.tsx +124 -22
  435. package/src/RadioList/RadioList.doc.mjs +4 -2
  436. package/src/RadioList/RadioListItem.tsx +31 -130
  437. package/src/Resizable/ResizeHandle.tsx +2 -9
  438. package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
  439. package/src/SelectableCard/SelectableCard.tsx +4 -9
  440. package/src/Selector/Selector.doc.mjs +7 -4
  441. package/src/Selector/Selector.test.tsx +935 -25
  442. package/src/Selector/Selector.tsx +189 -106
  443. package/src/Selector/hooks.ts +77 -50
  444. package/src/SideNav/SideNav.test.tsx +46 -0
  445. package/src/SideNav/SideNav.tsx +1 -0
  446. package/src/SideNav/SideNavCollapseButton.tsx +15 -10
  447. package/src/SideNav/SideNavHeading.tsx +48 -10
  448. package/src/SideNav/SideNavItem.tsx +20 -12
  449. package/src/Stack/Stack.doc.mjs +110 -0
  450. package/src/StatusDot/StatusDot.doc.mjs +12 -3
  451. package/src/Switch/Switch.test.tsx +32 -0
  452. package/src/Switch/Switch.tsx +8 -8
  453. package/src/TabList/Tab.tsx +2 -9
  454. package/src/TabList/TabMenu.tsx +14 -21
  455. package/src/Table/BaseTable.tsx +11 -0
  456. package/src/Table/index.ts +1 -4
  457. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
  458. package/src/Table/plugins/rowExpansion/index.ts +1 -4
  459. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
  460. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
  461. package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
  462. package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
  463. package/src/Table/tableContextMenu.test.tsx +27 -0
  464. package/src/Table/tableContextMenu.tsx +1 -0
  465. package/src/Table/types.ts +11 -0
  466. package/src/Table/useTableGroupedRows.doc.mjs +1 -1
  467. package/src/Table/useTableRowExpansion.doc.mjs +43 -66
  468. package/src/TextArea/TextArea.doc.mjs +42 -2
  469. package/src/TextArea/TextArea.test.tsx +219 -0
  470. package/src/TextArea/TextArea.tsx +34 -7
  471. package/src/TextInput/TextInput.doc.mjs +18 -2
  472. package/src/TextInput/TextInput.test.tsx +189 -0
  473. package/src/TextInput/TextInput.tsx +25 -31
  474. package/src/Thumbnail/Thumbnail.tsx +2 -9
  475. package/src/TimeInput/TimeInput.doc.mjs +2 -2
  476. package/src/TimeInput/TimeInput.test.tsx +30 -3
  477. package/src/TimeInput/TimeInput.tsx +9 -26
  478. package/src/Timestamp/Timestamp.doc.mjs +4 -3
  479. package/src/Timestamp/TimestampHoverCard.tsx +13 -35
  480. package/src/Token/Token.tsx +5 -28
  481. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  482. package/src/Tokenizer/Tokenizer.test.tsx +45 -3
  483. package/src/Tokenizer/Tokenizer.tsx +10 -2
  484. package/src/Tooltip/useTooltip.tsx +2 -23
  485. package/src/TopNav/TopNav.tsx +1 -3
  486. package/src/TopNav/TopNavHeading.tsx +42 -13
  487. package/src/TopNav/TopNavItem.tsx +3 -21
  488. package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
  489. package/src/TopNav/TopNavMegaMenu.tsx +118 -53
  490. package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
  491. package/src/TopNav/TopNavMenu.tsx +34 -37
  492. package/src/TreeList/TreeList.doc.mjs +5 -0
  493. package/src/TreeList/TreeList.test.tsx +206 -7
  494. package/src/TreeList/TreeList.tsx +22 -0
  495. package/src/TreeList/TreeListBranches.tsx +25 -2
  496. package/src/TreeList/TreeListItem.tsx +89 -52
  497. package/src/Typeahead/BaseTypeahead.tsx +19 -6
  498. package/src/Typeahead/Typeahead.doc.mjs +1 -0
  499. package/src/Typeahead/Typeahead.test.tsx +76 -3
  500. package/src/hooks/containerReveal.stylex.ts +102 -0
  501. package/src/hooks/index.ts +4 -0
  502. package/src/hooks/useClipboard.doc.mjs +87 -0
  503. package/src/hooks/useClipboard.test.tsx +151 -0
  504. package/src/hooks/useClipboard.ts +135 -0
  505. package/src/hooks/useContainerReveal.doc.mjs +7 -7
  506. package/src/hooks/useContainerReveal.test.tsx +42 -62
  507. package/src/hooks/useContainerReveal.ts +36 -91
  508. package/src/hooks/useImageMode.test.ts +1 -1
  509. package/src/hooks/useIndicatorFocusRing.tsx +120 -0
  510. package/src/hooks/useLongPress.test.tsx +18 -0
  511. package/src/hooks/useLongPress.ts +12 -2
  512. package/src/hooks/useScrollLock.test.ts +72 -0
  513. package/src/hooks/useScrollLock.ts +51 -19
  514. package/src/hooks/useStreamingText.test.ts +46 -1
  515. package/src/hooks/useStreamingText.ts +49 -7
  516. package/src/hooks/useTreeFocus.test.tsx +50 -0
  517. package/src/hooks/useTreeFocus.ts +14 -3
  518. package/src/hooks/useTypeahead.test.tsx +150 -0
  519. package/src/hooks/useTypeahead.ts +24 -9
  520. package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
  521. package/src/index.ts +1 -0
  522. package/src/theme/defineTheme.ts +24 -0
  523. package/src/theme/derivedVarRegistry.test.ts +21 -1
  524. package/src/theme/derivedVarRegistry.ts +19 -6
  525. package/src/theme/expandColorScale.test.ts +14 -0
  526. package/src/theme/expandColorScale.ts +24 -9
  527. package/src/theme/expandTypeScale.test.ts +43 -0
  528. package/src/theme/expandTypeScale.ts +17 -0
  529. package/src/theme/generateThemeRules.test.ts +61 -20
  530. package/src/theme/generateThemeRules.ts +11 -0
  531. package/src/theme/index.ts +13 -0
  532. package/src/utils/focusOutline.stylex.ts +163 -0
  533. package/src/utils/focusReturn.test.ts +42 -0
  534. package/src/utils/focusReturn.ts +31 -0
  535. package/src/utils/index.ts +1 -0
  536. package/src/utils/mergeRefs.test.ts +48 -0
  537. package/src/utils/mergeRefs.ts +12 -6
  538. package/src/utils/rtlStyles.ts +2 -2
  539. package/src/utils/themeProps.ts +26 -4
  540. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
  541. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
  542. package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
  543. package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
  544. package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
  545. package/dist/RadioList/radio.markers.stylex.js +0 -12
  546. package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
  547. package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
  548. package/dist/hooks/containerReveal.pool.stylex.js +0 -292
  549. package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
  550. package/src/RadioList/radio.markers.stylex.ts +0 -10
  551. package/src/hooks/containerReveal.pool.stylex.ts +0 -571
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @file containerReveal.stylex.ts
3
+ * @input Uses StyleX, theme tokens
4
+ * @output The container style that publishes the reveal state, and the four
5
+ * content style blocks (reveal / conceal, each with a layout-preserved
6
+ * variant) that read it.
7
+ * @position Internal to useContainerReveal.
8
+ *
9
+ * HOW THE SCOPING WORKS: the container declares its own reveal state as
10
+ * inherited custom properties on itself, and content reads them. Because a
11
+ * nested container re-declares the same properties on itself, its subtree sees
12
+ * the inner value and never the ancestor's — nesting isolation falls out of the
13
+ * cascade, with one static style block for any number of containers.
14
+ *
15
+ * SYNC: When the block shape changes, update useContainerReveal.ts.
16
+ */
17
+ import * as stylex from '@stylexjs/stylex';
18
+ export declare const styles: Readonly<{
19
+ readonly container: Readonly<{
20
+ readonly '--_reveal-opacity': stylex.StyleXClassNameFor<"--_reveal-opacity", 0 | 1 | {
21
+ readonly '@media (hover: hover)': 1;
22
+ }>;
23
+ readonly '--_reveal-position': stylex.StyleXClassNameFor<"--_reveal-position", "static" | "absolute" | {
24
+ readonly '@media (hover: hover)': "static";
25
+ }>;
26
+ readonly '--_reveal-delay': stylex.StyleXClassNameFor<"--_reveal-delay", string | {
27
+ readonly '@media (hover: hover)': "0s, 0s";
28
+ }>;
29
+ readonly '--_conceal-opacity': stylex.StyleXClassNameFor<"--_conceal-opacity", 1 | {
30
+ readonly '@media (hover: hover)': 0;
31
+ }>;
32
+ }>;
33
+ readonly reveal: Readonly<{
34
+ readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity, position">;
35
+ readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", string>;
36
+ readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
37
+ readonly transitionBehavior: stylex.StyleXClassNameFor<"transitionBehavior", "allow-discrete">;
38
+ readonly transitionDelay: stylex.StyleXClassNameFor<"transitionDelay", "0s, 0s" | "var(--_reveal-delay, 0s, 0s)">;
39
+ readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_reveal-opacity, 1)">;
40
+ readonly position: stylex.StyleXClassNameFor<"position", "var(--_reveal-position, static)">;
41
+ }>;
42
+ readonly revealLayoutPreserved: Readonly<{
43
+ readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity">;
44
+ readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", "175ms" | "0s">;
45
+ readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
46
+ readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_reveal-opacity, 1)">;
47
+ }>;
48
+ readonly conceal: Readonly<{
49
+ readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity">;
50
+ readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", "175ms" | "0s">;
51
+ readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
52
+ readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_conceal-opacity, 1)">;
53
+ }>;
54
+ readonly concealLayoutPreserved: Readonly<{
55
+ readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity">;
56
+ readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", "175ms" | "0s">;
57
+ readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
58
+ readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_conceal-opacity, 1)">;
59
+ }>;
60
+ }>;
61
+ //# sourceMappingURL=containerReveal.stylex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containerReveal.stylex.d.ts","sourceRoot":"","sources":["../../src/hooks/containerReveal.stylex.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAK3C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6EjB,CAAC"}
@@ -0,0 +1,63 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file containerReveal.stylex.ts
5
+ * @input Uses StyleX, theme tokens
6
+ * @output The container style that publishes the reveal state, and the four
7
+ * content style blocks (reveal / conceal, each with a layout-preserved
8
+ * variant) that read it.
9
+ * @position Internal to useContainerReveal.
10
+ *
11
+ * HOW THE SCOPING WORKS: the container declares its own reveal state as
12
+ * inherited custom properties on itself, and content reads them. Because a
13
+ * nested container re-declares the same properties on itself, its subtree sees
14
+ * the inner value and never the ancestor's — nesting isolation falls out of the
15
+ * cascade, with one static style block for any number of containers.
16
+ *
17
+ * SYNC: When the block shape changes, update useContainerReveal.ts.
18
+ */
19
+
20
+ import * as stylex from '@stylexjs/stylex';
21
+ import "../theme/tokens.stylex.js";
22
+ import { durationVars, easeVars } from "../theme/tokens.stylex.js";
23
+ const REST_DELAY = '0s, ' + durationVars['--duration-fast'];
24
+ export const styles = {
25
+ container: {
26
+ "--_reveal-opacity": "xct0gwe x1wblmmc xi33vf3 xi7d7de",
27
+ "--_reveal-position": "xp0pj8v x106rhu xoa21yc xarvkxi",
28
+ "--_reveal-delay": "x1xiarpw xp1dr9k x1mjsb9v x1pn63d7",
29
+ "--_conceal-opacity": "x1kgmhs9 xb9fdgj",
30
+ $$css: true
31
+ },
32
+ reveal: {
33
+ k1ekBW: "x1n1p2mu",
34
+ kIyJzY: "x1tw3moq xsr0bmt",
35
+ kAMwcw: "xlr8y92",
36
+ kzIqYQ: "xd00j3c",
37
+ kIr0Dl: "x1rq8cwj x1k6wr6r",
38
+ kSiTet: "xgsobzw",
39
+ kVAEAm: "x1mf7ja4",
40
+ $$css: true
41
+ },
42
+ revealLayoutPreserved: {
43
+ k1ekBW: "x19991ni",
44
+ kIyJzY: "xuedmi6 x12w9bfk",
45
+ kAMwcw: "xlr8y92",
46
+ kSiTet: "xgsobzw",
47
+ $$css: true
48
+ },
49
+ conceal: {
50
+ k1ekBW: "x19991ni",
51
+ kIyJzY: "xuedmi6 x12w9bfk",
52
+ kAMwcw: "xlr8y92",
53
+ kSiTet: "x1wnsjo",
54
+ $$css: true
55
+ },
56
+ concealLayoutPreserved: {
57
+ k1ekBW: "x19991ni",
58
+ kIyJzY: "xuedmi6 x12w9bfk",
59
+ kAMwcw: "xlr8y92",
60
+ kSiTet: "x1wnsjo",
61
+ $$css: true
62
+ }
63
+ };
@@ -10,6 +10,8 @@ export { useFocusTrap } from './useFocusTrap';
10
10
  export type { UseFocusTrapOptions, UseFocusTrapReturn } from './useFocusTrap';
11
11
  export { useAnnounce } from './useAnnounce';
12
12
  export type { AnnounceFn, AnnouncePoliteness } from './useAnnounce';
13
+ export { useClipboard } from './useClipboard';
14
+ export type { UseClipboardOptions, UseClipboardReturn } from './useClipboard';
13
15
  export { useGridFocus } from './useGridFocus';
14
16
  export type { UseGridFocusOptions, UseGridFocusReturn } from './useGridFocus';
15
17
  export { useListFocus } from './useListFocus';
@@ -45,6 +47,7 @@ export type { InteractiveRole, UseInteractiveRoleOptions, } from './useInteracti
45
47
  export { useLongPress } from './useLongPress';
46
48
  export type { UseLongPressOptions, UseLongPressHandlers } from './useLongPress';
47
49
  export { useDevWarning } from './useDevWarning';
50
+ export { useIndicatorFocusRing } from './useIndicatorFocusRing';
48
51
  export { useContainerReveal } from './useContainerReveal';
49
52
  export type { UseContainerRevealOptions, UseContainerRevealReturn, ContentRevealOptions, } from './useContainerReveal';
50
53
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@
12
12
  */
13
13
  export { useFocusTrap } from "./useFocusTrap.js";
14
14
  export { useAnnounce } from "./useAnnounce.js";
15
+ export { useClipboard } from "./useClipboard.js";
15
16
  export { useGridFocus } from "./useGridFocus.js";
16
17
  export { useListFocus } from "./useListFocus.js";
17
18
  export { useTreeFocus } from "./useTreeFocus.js";
@@ -31,4 +32,5 @@ export { useInputStatusIcon } from "./useInputStatusIcon.js";
31
32
  export { useInteractiveRole } from "./useInteractiveRole.js";
32
33
  export { useLongPress } from "./useLongPress.js";
33
34
  export { useDevWarning } from "./useDevWarning.js";
35
+ export { useIndicatorFocusRing } from "./useIndicatorFocusRing.js";
34
36
  export { useContainerReveal } from "./useContainerReveal.js";
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Options for {@link useClipboard}.
3
+ */
4
+ export interface UseClipboardOptions {
5
+ /**
6
+ * Message announced to a polite live region on a successful copy. Swapping a
7
+ * control's `aria-label` alone is not reliably announced by screen readers,
8
+ * so pass the localized confirmation (e.g. "Copied") to have it spoken.
9
+ * Omit to skip the announcement.
10
+ */
11
+ announce?: string;
12
+ /**
13
+ * Milliseconds `isCopied` stays true after a successful copy before it
14
+ * reverts to false.
15
+ * @default 2000
16
+ */
17
+ resetAfterMs?: number;
18
+ }
19
+ /**
20
+ * Return value of {@link useClipboard}.
21
+ */
22
+ export interface UseClipboardReturn {
23
+ /**
24
+ * Write `text` to the clipboard. On success, flips `isCopied` to true,
25
+ * announces the configured message, and (re)starts the reset timer;
26
+ * resolves `true`. A clipboard rejection is a silent no-op that leaves the
27
+ * copied state unchanged and resolves `false`.
28
+ */
29
+ copy: (text: string) => Promise<boolean>;
30
+ /** True for `resetAfterMs` after the most recent successful copy. */
31
+ isCopied: boolean;
32
+ }
33
+ /**
34
+ * Copy-to-clipboard behavior: the clipboard write, a transient `isCopied`
35
+ * flag with its own reset timer, and an optional polite screen-reader
36
+ * announcement — the block otherwise re-derived at every copy affordance.
37
+ *
38
+ * Per [API Conventions → Behaviors: Hooks Over Wrappers], the behavior is a
39
+ * hook and the control (an icon button, a menu item, a value chip) is a thin
40
+ * shell over it. Rapid re-copies restart the reset timer so the confirmation
41
+ * always lasts the full duration, and the timer is cleaned up on unmount.
42
+ *
43
+ * @example
44
+ * ```
45
+ * function CopyButton({text}: {text: string}) {
46
+ * const {copy, isCopied} = useClipboard({announce: 'Copied'});
47
+ * return (
48
+ * <IconButton
49
+ * label={isCopied ? 'Copied' : 'Copy'}
50
+ * tooltip="Copy"
51
+ * icon={<Icon icon={isCopied ? 'check' : 'copy'} />}
52
+ * onClick={() => void copy(text)}
53
+ * />
54
+ * );
55
+ * }
56
+ * ```
57
+ */
58
+ export declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
59
+ //# sourceMappingURL=useClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClipboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useClipboard.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAC1B,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA2CpB"}
@@ -0,0 +1,106 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file useClipboard.ts
7
+ * @input Uses React state/effect/callback; navigator.clipboard; useAnnounce
8
+ * @output Exports useClipboard hook plus its options/return types
9
+ * @position Core behavior hook; owns the copy-to-clipboard behavior shared by
10
+ * CodeBlock and Timestamp — the clipboard write, the transient "copied"
11
+ * flag with its reset timer, and the polite screen-reader announcement — so
12
+ * each call site is a thin control over one implementation instead of
13
+ * re-deriving the timer/announce details independently.
14
+ *
15
+ * SYNC: When modified, update these files to stay in sync:
16
+ * - /packages/core/src/hooks/index.ts
17
+ * - /packages/core/src/hooks/useClipboard.doc.mjs
18
+ * - /packages/core/src/hooks/useClipboard.test.tsx
19
+ */
20
+ import { useCallback, useEffect, useRef, useState } from 'react';
21
+ import { useAnnounce } from "./useAnnounce.js";
22
+
23
+ /**
24
+ * How long `isCopied` stays true after a successful copy before reverting.
25
+ * Long enough for the copied confirmation (e.g. a copy → check icon flip) to
26
+ * register without lingering.
27
+ */
28
+ const DEFAULT_RESET_AFTER_MS = 2000;
29
+
30
+ /**
31
+ * Options for {@link useClipboard}.
32
+ */
33
+
34
+ /**
35
+ * Return value of {@link useClipboard}.
36
+ */
37
+
38
+ /**
39
+ * Copy-to-clipboard behavior: the clipboard write, a transient `isCopied`
40
+ * flag with its own reset timer, and an optional polite screen-reader
41
+ * announcement — the block otherwise re-derived at every copy affordance.
42
+ *
43
+ * Per [API Conventions → Behaviors: Hooks Over Wrappers], the behavior is a
44
+ * hook and the control (an icon button, a menu item, a value chip) is a thin
45
+ * shell over it. Rapid re-copies restart the reset timer so the confirmation
46
+ * always lasts the full duration, and the timer is cleaned up on unmount.
47
+ *
48
+ * @example
49
+ * ```
50
+ * function CopyButton({text}: {text: string}) {
51
+ * const {copy, isCopied} = useClipboard({announce: 'Copied'});
52
+ * return (
53
+ * <IconButton
54
+ * label={isCopied ? 'Copied' : 'Copy'}
55
+ * tooltip="Copy"
56
+ * icon={<Icon icon={isCopied ? 'check' : 'copy'} />}
57
+ * onClick={() => void copy(text)}
58
+ * />
59
+ * );
60
+ * }
61
+ * ```
62
+ */
63
+ export function useClipboard(options = {}) {
64
+ const {
65
+ announce: announceMessage,
66
+ resetAfterMs = DEFAULT_RESET_AFTER_MS
67
+ } = options;
68
+ const announce = useAnnounce();
69
+ const [isCopied, setIsCopied] = useState(false);
70
+ const resetTimerRef = useRef(null);
71
+
72
+ // Clear a pending "copied" reset when the consumer unmounts.
73
+ useEffect(() => {
74
+ return () => {
75
+ if (resetTimerRef.current != null) {
76
+ clearTimeout(resetTimerRef.current);
77
+ }
78
+ };
79
+ }, []);
80
+ const copy = useCallback(async text => {
81
+ try {
82
+ await navigator.clipboard.writeText(text);
83
+ setIsCopied(true);
84
+ if (announceMessage) {
85
+ announce(announceMessage);
86
+ }
87
+ // Restart the reset timer on every copy — otherwise a rapid re-copy
88
+ // is reverted early by the previous copy's timer.
89
+ if (resetTimerRef.current != null) {
90
+ clearTimeout(resetTimerRef.current);
91
+ }
92
+ resetTimerRef.current = setTimeout(() => {
93
+ resetTimerRef.current = null;
94
+ setIsCopied(false);
95
+ }, resetAfterMs);
96
+ return true;
97
+ } catch {
98
+ // Clipboard failures leave the copied state unchanged.
99
+ return false;
100
+ }
101
+ }, [announce, announceMessage, resetAfterMs]);
102
+ return {
103
+ copy,
104
+ isCopied
105
+ };
106
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @file useContainerReveal.ts
3
- * @input Uses React, the generated marker pool, useDevWarning
3
+ * @input Uses the containerReveal styles
4
4
  * @output Exports useContainerReveal — a headless hover/focus reveal primitive
5
5
  * @position Core hook. Consumed by any component that reveals (or conceals)
6
6
  * content when its container is hovered or focused — e.g. Thumbnail's remove
@@ -8,8 +8,13 @@
8
8
  *
9
9
  * Gives a container a scoped hover/focus-within trigger that reveals or
10
10
  * conceals content inside it, entirely in CSS (no hover state in JS, no
11
- * re-render on hover). The caller authors NO StyleX: the hook hands out a
12
- * marker + matching reveal styles from a pre-compiled pool.
11
+ * re-render on hover). The caller authors NO StyleX: the hook hands out the
12
+ * container style and the matching content styles.
13
+ *
14
+ * Scoping is by inheritance: the container publishes its reveal state as
15
+ * custom properties on itself and the content reads them, so a nested
16
+ * container shadows its ancestor's state for its own subtree. See
17
+ * containerReveal.stylex.ts.
13
18
  *
14
19
  * ACCESSIBILITY (WCAG 2.2 by construction):
15
20
  * - Revealed content is visually hidden at rest via position + opacity, so it
@@ -23,14 +28,15 @@
23
28
  *
24
29
  * SYNC: When modified, update:
25
30
  * - /packages/core/src/hooks/index.ts (export)
26
- * - containerReveal.pool.stylex.ts (if the slot shape changes)
31
+ * - containerReveal.stylex.ts (if the style blocks change)
27
32
  */
28
33
  import { type CSSProperties } from 'react';
29
34
  export interface UseContainerRevealOptions {
30
35
  /**
31
- * When false the hook is inert: no marker is applied and content getters
32
- * return no styles, so content is always shown. Lets a component gate on its
33
- * own prop (e.g. `revealOn === 'hover'`).
36
+ * When false the hook is inert: the container gets no styles and content
37
+ * getters return no styles, so content is always shown. Read on every
38
+ * render, so a component can flip it with its own prop (e.g.
39
+ * `revealOn === 'hover'`).
34
40
  * @default true
35
41
  */
36
42
  isEnabled?: boolean;
@@ -66,7 +72,7 @@ export interface UseContainerRevealReturn {
66
72
  * Scoped, CSS-only hover/focus reveal for content inside a container.
67
73
  *
68
74
  * @example
69
- * ```tsx
75
+ * ```
70
76
  * const {getContainerProps, getContentRevealProps} = useContainerReveal({
71
77
  * isEnabled: revealOn === 'hover',
72
78
  * });
@@ -1 +1 @@
1
- {"version":3,"file":"useContainerReveal.d.ts","sourceRoot":"","sources":["../../src/hooks/useContainerReveal.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAsB,KAAK,aAAa,EAAC,MAAM,OAAO,CAAC;AA0C9D,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,aAAa,CAAA;KAAC,CAAC;IACrE,mDAAmD;IACnD,qBAAqB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK;QACzD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,aAAa,CAAC;KACvB,CAAC;CACH;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CAiD1B"}
1
+ {"version":3,"file":"useContainerReveal.d.ts","sourceRoot":"","sources":["../../src/hooks/useContainerReveal.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAU,KAAK,aAAa,EAAC,MAAM,OAAO,CAAC;AAIlD,MAAM,WAAW,yBAAyB;IACxC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,aAAa,CAAA;KAAC,CAAC;IACrE,mDAAmD;IACnD,qBAAqB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK;QACzD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,aAAa,CAAC;KACvB,CAAC;CACH;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CA0B1B"}
@@ -4,7 +4,7 @@
4
4
 
5
5
  /**
6
6
  * @file useContainerReveal.ts
7
- * @input Uses React, the generated marker pool, useDevWarning
7
+ * @input Uses the containerReveal styles
8
8
  * @output Exports useContainerReveal — a headless hover/focus reveal primitive
9
9
  * @position Core hook. Consumed by any component that reveals (or conceals)
10
10
  * content when its container is hovered or focused — e.g. Thumbnail's remove
@@ -12,8 +12,13 @@
12
12
  *
13
13
  * Gives a container a scoped hover/focus-within trigger that reveals or
14
14
  * conceals content inside it, entirely in CSS (no hover state in JS, no
15
- * re-render on hover). The caller authors NO StyleX: the hook hands out a
16
- * marker + matching reveal styles from a pre-compiled pool.
15
+ * re-render on hover). The caller authors NO StyleX: the hook hands out the
16
+ * container style and the matching content styles.
17
+ *
18
+ * Scoping is by inheritance: the container publishes its reveal state as
19
+ * custom properties on itself and the content reads them, so a nested
20
+ * container shadows its ancestor's state for its own subtree. See
21
+ * containerReveal.stylex.ts.
17
22
  *
18
23
  * ACCESSIBILITY (WCAG 2.2 by construction):
19
24
  * - Revealed content is visually hidden at rest via position + opacity, so it
@@ -27,53 +32,18 @@
27
32
  *
28
33
  * SYNC: When modified, update:
29
34
  * - /packages/core/src/hooks/index.ts (export)
30
- * - containerReveal.pool.stylex.ts (if the slot shape changes)
35
+ * - containerReveal.stylex.ts (if the style blocks change)
31
36
  */
32
- import { useState, useEffect } from 'react';
37
+ import { useMemo } from 'react';
33
38
  import * as stylex from '@stylexjs/stylex';
34
- import { POOL, POOL_SIZE } from "./containerReveal.pool.stylex.js";
35
- import { useDevWarning } from "./useDevWarning.js";
36
-
37
- // Module-level free-list. Each mounted, enabled useContainerReveal claims a
38
- // distinct pool slot so that any two CONCURRENTLY mounted containers — in
39
- // particular a nested container inside another's revealed content — get
40
- // different markers and cannot leak hover/focus into one another. Slots are
41
- // returned on unmount. Sibling containers that would only ever collide when
42
- // the pool is exhausted are harmless (a sibling is never an ancestor), so the
43
- // pool only needs to cover the number of concurrently mounted containers, not
44
- // instances over time.
45
- const claimed = new Array(POOL_SIZE).fill(false);
46
- function claimSlot() {
47
- for (let i = 0; i < POOL_SIZE; i++) {
48
- if (!claimed[i]) {
49
- claimed[i] = true;
50
- return {
51
- index: i,
52
- isExhausted: false
53
- };
54
- }
55
- }
56
- // Exhausted: fall back to slot 0. Safe for siblings (a sibling is never an
57
- // ancestor); only nesting deeper than POOL_SIZE could reintroduce a leak.
58
- // Surfaced via useDevWarning so the pool can be grown.
59
- return {
60
- index: 0,
61
- isExhausted: true
62
- };
63
- }
64
- function releaseSlot(index, isExhausted) {
65
- // A fallback claim never owned the slot exclusively; leave it as-is.
66
- if (!isExhausted) {
67
- claimed[index] = false;
68
- }
69
- }
39
+ import { styles } from "./containerReveal.stylex.js";
70
40
  const EMPTY = Object.freeze({});
71
41
 
72
42
  /**
73
43
  * Scoped, CSS-only hover/focus reveal for content inside a container.
74
44
  *
75
45
  * @example
76
- * ```tsx
46
+ * ```
77
47
  * const {getContainerProps, getContentRevealProps} = useContainerReveal({
78
48
  * isEnabled: revealOn === 'hover',
79
49
  * });
@@ -90,34 +60,23 @@ export function useContainerReveal(options = {}) {
90
60
  const {
91
61
  isEnabled = true
92
62
  } = options;
93
-
94
- // Claim a slot for this container's lifetime. Assigned in the initializer
95
- // (not the render body) and released on unmount so the free-list stays
96
- // effect-scoped and StrictMode-safe.
97
- const [claim] = useState(() => isEnabled ? claimSlot() : null);
98
- useEffect(() => {
99
- if (claim == null) {
100
- return;
63
+ return useMemo(() => {
64
+ if (!isEnabled) {
65
+ return {
66
+ getContainerProps: () => EMPTY,
67
+ getContentRevealProps: () => EMPTY
68
+ };
101
69
  }
102
- return () => releaseSlot(claim.index, claim.isExhausted);
103
- }, [claim]);
104
- useDevWarning('useContainerReveal', `More than ${POOL_SIZE} reveal containers are mounted at once; nested ` + `containers beyond the pool may share a marker. Add markers to ` + `containerReveal.pool.stylex.ts and raise POOL_SIZE.`, claim?.isExhausted ?? false);
105
- if (claim == null) {
106
70
  return {
107
- getContainerProps: () => EMPTY,
108
- getContentRevealProps: () => EMPTY
71
+ getContainerProps: () => stylex.props(styles.container),
72
+ getContentRevealProps: (contentOptions = {}) => {
73
+ const {
74
+ isRevealInverted = false,
75
+ isLayoutPreserved = false
76
+ } = contentOptions;
77
+ const style = isRevealInverted ? isLayoutPreserved ? styles.concealLayoutPreserved : styles.conceal : isLayoutPreserved ? styles.revealLayoutPreserved : styles.reveal;
78
+ return stylex.props(style);
79
+ }
109
80
  };
110
- }
111
- const slot = POOL[claim.index];
112
- return {
113
- getContainerProps: () => stylex.props(slot.marker),
114
- getContentRevealProps: (contentOptions = {}) => {
115
- const {
116
- isRevealInverted = false,
117
- isLayoutPreserved = false
118
- } = contentOptions;
119
- const style = isRevealInverted ? isLayoutPreserved ? slot.concealLayoutPreserved : slot.conceal : isLayoutPreserved ? slot.revealLayoutPreserved : slot.reveal;
120
- return stylex.props(style);
121
- }
122
- };
81
+ }, [isEnabled]);
123
82
  }
@@ -0,0 +1,28 @@
1
+ import type { FocusEvent, RefObject } from 'react';
2
+ export interface UseIndicatorFocusRingReturn {
3
+ /** Spread onto the element that owns the focusable input. */
4
+ focusProps: {
5
+ onFocus: (event: FocusEvent<HTMLElement>) => void;
6
+ onBlur: () => void;
7
+ };
8
+ }
9
+ /**
10
+ * Draw the standard focus ring on the indicator inside `containerRef`, shaped
11
+ * by whatever that indicator actually is.
12
+ *
13
+ * @param containerRef - Wraps ONLY the indicator, so its single element child
14
+ * is unambiguously the thing to ring, whatever a theme renders there.
15
+ * @param isDisabled - Skip the ring; a disabled control is not focusable.
16
+ *
17
+ * @example
18
+ * ```
19
+ * const indicatorRef = useRef<HTMLSpanElement>(null);
20
+ * const {focusProps} = useIndicatorFocusRing(indicatorRef, isDisabled);
21
+ * <div {...focusProps}>
22
+ * <input type="checkbox" />
23
+ * <span ref={indicatorRef}><Indicator state="checked" /></span>
24
+ * </div>
25
+ * ```
26
+ */
27
+ export declare function useIndicatorFocusRing(containerRef: RefObject<HTMLElement | null>, isDisabled?: boolean): UseIndicatorFocusRingReturn;
28
+ //# sourceMappingURL=useIndicatorFocusRing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIndicatorFocusRing.d.ts","sourceRoot":"","sources":["../../src/hooks/useIndicatorFocusRing.tsx"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAMjD,MAAM,WAAW,2BAA2B;IAC1C,6DAA6D;IAC7D,UAAU,EAAE;QACV,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;QAClD,MAAM,EAAE,MAAM,IAAI,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC3C,UAAU,UAAQ,GACjB,2BAA2B,CAkC7B"}