@astryxdesign/core 0.2.0 → 0.3.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 (1083) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +5 -3
  3. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  4. package/dist/AlertDialog/AlertDialog.js +1 -1
  5. package/dist/AppShell/AppShell.d.ts +2 -20
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +25 -18
  8. package/dist/AppShell/index.d.ts +20 -1
  9. package/dist/AppShell/index.d.ts.map +1 -1
  10. package/dist/AppShell/index.js +14 -0
  11. package/dist/AspectRatio/AspectRatio.d.ts +1 -1
  12. package/dist/AspectRatio/AspectRatio.js +1 -1
  13. package/dist/Avatar/Avatar.d.ts +1 -1
  14. package/dist/Avatar/Avatar.d.ts.map +1 -1
  15. package/dist/Avatar/Avatar.js +4 -4
  16. package/dist/Avatar/AvatarStatusDot.d.ts +2 -26
  17. package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
  18. package/dist/Avatar/AvatarStatusDot.js +1 -22
  19. package/dist/Avatar/index.d.ts +26 -1
  20. package/dist/Avatar/index.d.ts.map +1 -1
  21. package/dist/Avatar/index.js +21 -0
  22. package/dist/AvatarGroup/AvatarGroup.d.ts +1 -1
  23. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  24. package/dist/AvatarGroup/AvatarGroup.js +4 -8
  25. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +2 -2
  26. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  27. package/dist/AvatarGroup/AvatarGroupOverflow.js +7 -3
  28. package/dist/Badge/Badge.d.ts +2 -30
  29. package/dist/Badge/Badge.d.ts.map +1 -1
  30. package/dist/Badge/Badge.js +2 -17
  31. package/dist/Badge/index.d.ts +31 -2
  32. package/dist/Badge/index.d.ts.map +1 -1
  33. package/dist/Badge/index.js +15 -1
  34. package/dist/Banner/Banner.d.ts +2 -37
  35. package/dist/Banner/Banner.d.ts.map +1 -1
  36. package/dist/Banner/Banner.js +6 -34
  37. package/dist/Banner/index.d.ts +37 -1
  38. package/dist/Banner/index.d.ts.map +1 -1
  39. package/dist/Banner/index.js +27 -0
  40. package/dist/Blockquote/Blockquote.d.ts +1 -1
  41. package/dist/Blockquote/Blockquote.js +1 -1
  42. package/dist/Breadcrumbs/BreadcrumbItem.d.ts +1 -1
  43. package/dist/Breadcrumbs/BreadcrumbItem.js +4 -3
  44. package/dist/Breadcrumbs/Breadcrumbs.d.ts +2 -18
  45. package/dist/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  46. package/dist/Breadcrumbs/Breadcrumbs.js +1 -15
  47. package/dist/Breadcrumbs/index.d.ts +18 -1
  48. package/dist/Breadcrumbs/index.d.ts.map +1 -1
  49. package/dist/Breadcrumbs/index.js +14 -0
  50. package/dist/Button/Button.d.ts +3 -21
  51. package/dist/Button/Button.d.ts.map +1 -1
  52. package/dist/Button/Button.js +6 -19
  53. package/dist/Button/index.d.ts +21 -3
  54. package/dist/Button/index.d.ts.map +1 -1
  55. package/dist/Button/index.js +15 -1
  56. package/dist/ButtonGroup/ButtonGroup.d.ts +1 -1
  57. package/dist/ButtonGroup/ButtonGroup.js +1 -1
  58. package/dist/Calendar/Calendar.js +1 -1
  59. package/dist/Calendar/index.d.ts +1 -1
  60. package/dist/Calendar/index.d.ts.map +1 -1
  61. package/dist/Calendar/index.js +1 -1
  62. package/dist/Calendar/styles.d.ts +2 -2
  63. package/dist/Calendar/styles.js +2 -2
  64. package/dist/Calendar/utils.d.ts +0 -4
  65. package/dist/Calendar/utils.d.ts.map +1 -1
  66. package/dist/Calendar/utils.js +1 -8
  67. package/dist/Card/Card.d.ts +1 -1
  68. package/dist/Card/Card.js +1 -1
  69. package/dist/Carousel/Carousel.d.ts +54 -3
  70. package/dist/Carousel/Carousel.d.ts.map +1 -1
  71. package/dist/Carousel/Carousel.js +82 -15
  72. package/dist/Carousel/index.d.ts +1 -1
  73. package/dist/Carousel/index.d.ts.map +1 -1
  74. package/dist/Center/Center.d.ts +21 -4
  75. package/dist/Center/Center.d.ts.map +1 -1
  76. package/dist/Center/Center.js +11 -3
  77. package/dist/Chat/ChatComposer.d.ts +1 -1
  78. package/dist/Chat/ChatComposer.js +9 -9
  79. package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
  80. package/dist/Chat/ChatComposerDrawer.js +5 -5
  81. package/dist/Chat/ChatComposerInput.d.ts +1 -1
  82. package/dist/Chat/ChatComposerInput.js +1 -1
  83. package/dist/Chat/ChatDictationButton.d.ts +1 -1
  84. package/dist/Chat/ChatDictationButton.js +1 -1
  85. package/dist/Chat/ChatLayout.d.ts +8 -1
  86. package/dist/Chat/ChatLayout.d.ts.map +1 -1
  87. package/dist/Chat/ChatLayout.js +15 -4
  88. package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
  89. package/dist/Chat/ChatLayoutScrollButton.js +1 -1
  90. package/dist/Chat/ChatMessage.d.ts +1 -1
  91. package/dist/Chat/ChatMessage.js +1 -1
  92. package/dist/Chat/ChatMessageBubble.d.ts +1 -1
  93. package/dist/Chat/ChatMessageBubble.js +1 -1
  94. package/dist/Chat/ChatMessageList.d.ts +1 -1
  95. package/dist/Chat/ChatMessageList.js +1 -1
  96. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  97. package/dist/Chat/ChatSendButton.js +4 -2
  98. package/dist/Chat/ChatSystemMessage.d.ts +1 -1
  99. package/dist/Chat/ChatSystemMessage.js +1 -1
  100. package/dist/Chat/ChatTokenizedText.d.ts +1 -1
  101. package/dist/Chat/ChatTokenizedText.js +1 -1
  102. package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
  103. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  104. package/dist/CheckboxInput/CheckboxInput.js +3 -3
  105. package/dist/CheckboxList/CheckboxList.d.ts +1 -1
  106. package/dist/CheckboxList/CheckboxList.js +1 -1
  107. package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
  108. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  109. package/dist/CheckboxList/CheckboxListItem.js +20 -5
  110. package/dist/Citation/Citation.d.ts +1 -1
  111. package/dist/Citation/Citation.js +1 -1
  112. package/dist/ClickableCard/ClickableCard.d.ts +3 -3
  113. package/dist/ClickableCard/ClickableCard.js +3 -3
  114. package/dist/Code/Code.d.ts +2 -2
  115. package/dist/Code/Code.js +2 -2
  116. package/dist/CodeBlock/CodeBlock.js +2 -2
  117. package/dist/Collapsible/Collapsible.d.ts +1 -1
  118. package/dist/Collapsible/Collapsible.js +3 -3
  119. package/dist/Collapsible/CollapsibleGroup.d.ts +1 -1
  120. package/dist/Collapsible/CollapsibleGroup.js +1 -1
  121. package/dist/Collapsible/CollapsibleGroupContext.js +1 -1
  122. package/dist/CommandPalette/CommandPalette.d.ts +1 -1
  123. package/dist/CommandPalette/CommandPalette.js +1 -1
  124. package/dist/CommandPalette/CommandPaletteEmpty.js +1 -1
  125. package/dist/CommandPalette/CommandPaletteFooter.js +1 -1
  126. package/dist/CommandPalette/CommandPaletteGroup.js +1 -1
  127. package/dist/CommandPalette/CommandPaletteInput.d.ts +2 -2
  128. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  129. package/dist/CommandPalette/CommandPaletteInput.js +4 -2
  130. package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
  131. package/dist/CommandPalette/CommandPaletteItem.js +1 -1
  132. package/dist/CommandPalette/CommandPaletteList.js +1 -1
  133. package/dist/ComplexSelector/ComplexSelector.d.ts +108 -0
  134. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -0
  135. package/dist/ComplexSelector/ComplexSelector.js +316 -0
  136. package/dist/ComplexSelector/index.d.ts +7 -0
  137. package/dist/ComplexSelector/index.d.ts.map +1 -0
  138. package/dist/ComplexSelector/index.js +10 -0
  139. package/dist/ContextMenu/ContextMenu.d.ts +2 -2
  140. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  141. package/dist/ContextMenu/ContextMenu.js +24 -6
  142. package/dist/DateInput/DateInput.js +1 -1
  143. package/dist/DateRangeInput/DateRangeInput.js +1 -1
  144. package/dist/DateTimeInput/DateTimeInput.js +1 -1
  145. package/dist/Dialog/Dialog.d.ts +33 -24
  146. package/dist/Dialog/Dialog.d.ts.map +1 -1
  147. package/dist/Dialog/Dialog.js +47 -31
  148. package/dist/Dialog/DialogHeader.d.ts +1 -1
  149. package/dist/Dialog/DialogHeader.js +1 -1
  150. package/dist/Dialog/index.d.ts +18 -1
  151. package/dist/Dialog/index.d.ts.map +1 -1
  152. package/dist/Dialog/index.js +14 -0
  153. package/dist/Divider/Divider.d.ts +2 -18
  154. package/dist/Divider/Divider.d.ts.map +1 -1
  155. package/dist/Divider/Divider.js +1 -15
  156. package/dist/Divider/index.d.ts +18 -1
  157. package/dist/Divider/index.d.ts.map +1 -1
  158. package/dist/Divider/index.js +14 -0
  159. package/dist/DropdownMenu/DropdownMenu.d.ts +9 -3
  160. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  161. package/dist/DropdownMenu/DropdownMenu.js +23 -19
  162. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +18 -12
  163. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  164. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +38 -63
  165. package/dist/DropdownMenu/DropdownMenuItem.d.ts +1 -1
  166. package/dist/DropdownMenu/DropdownMenuItem.js +1 -1
  167. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +8 -11
  168. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
  169. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +3 -1
  170. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +1 -1
  171. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  172. package/dist/DropdownMenu/DropdownMenuRadioItem.js +6 -2
  173. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +1 -1
  174. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  175. package/dist/DropdownMenu/DropdownMenuSubMenu.js +14 -6
  176. package/dist/DropdownMenu/menuItemHover.d.ts +1 -0
  177. package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -1
  178. package/dist/DropdownMenu/menuItemHover.js +1 -0
  179. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  180. package/dist/DropdownMenu/renderDropdownItems.js +6 -4
  181. package/dist/EmptyState/EmptyState.d.ts +1 -1
  182. package/dist/EmptyState/EmptyState.js +1 -1
  183. package/dist/Field/Field.d.ts +1 -1
  184. package/dist/Field/Field.js +1 -1
  185. package/dist/Field/FieldLabel.d.ts +4 -3
  186. package/dist/Field/FieldLabel.d.ts.map +1 -1
  187. package/dist/Field/FieldLabel.js +48 -5
  188. package/dist/FieldStatus/FieldStatus.d.ts +1 -18
  189. package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
  190. package/dist/FieldStatus/FieldStatus.js +13 -17
  191. package/dist/FieldStatus/index.d.ts +19 -1
  192. package/dist/FieldStatus/index.d.ts.map +1 -1
  193. package/dist/FieldStatus/index.js +14 -0
  194. package/dist/FileInput/FileInput.js +1 -1
  195. package/dist/FormLayout/FormLayout.d.ts +1 -1
  196. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  197. package/dist/FormLayout/FormLayout.js +1 -1
  198. package/dist/Grid/Grid.d.ts +2 -10
  199. package/dist/Grid/Grid.d.ts.map +1 -1
  200. package/dist/Grid/Grid.js +1 -10
  201. package/dist/Grid/GridSpan.d.ts +1 -1
  202. package/dist/Grid/GridSpan.js +1 -1
  203. package/dist/HStack/HStack.d.ts +1 -1
  204. package/dist/HStack/HStack.js +1 -1
  205. package/dist/Heading/Heading.d.ts +2 -2
  206. package/dist/Heading/Heading.d.ts.map +1 -1
  207. package/dist/Heading/Heading.js +5 -4
  208. package/dist/HoverCard/HoverCard.d.ts +1 -1
  209. package/dist/HoverCard/HoverCard.js +1 -1
  210. package/dist/Icon/Icon.d.ts +1 -1
  211. package/dist/Icon/Icon.d.ts.map +1 -1
  212. package/dist/Icon/Icon.js +4 -2
  213. package/dist/Icon/defaultIcons.d.ts.map +1 -1
  214. package/dist/Icon/defaultIcons.js +14 -0
  215. package/dist/Icon/globalIconRegistry.d.ts +48 -6
  216. package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
  217. package/dist/Icon/globalIconRegistry.js +74 -7
  218. package/dist/Icon/index.d.ts +4 -3
  219. package/dist/Icon/index.d.ts.map +1 -1
  220. package/dist/Icon/index.js +2 -1
  221. package/dist/Icon/useIcon.d.ts +14 -0
  222. package/dist/Icon/useIcon.d.ts.map +1 -0
  223. package/dist/Icon/useIcon.js +21 -0
  224. package/dist/IconButton/IconButton.d.ts +1 -1
  225. package/dist/IconButton/IconButton.js +1 -1
  226. package/dist/InputGroup/InputGroup.d.ts +1 -1
  227. package/dist/InputGroup/InputGroup.js +1 -1
  228. package/dist/InputGroup/InputGroupText.d.ts +1 -1
  229. package/dist/InputGroup/InputGroupText.js +1 -1
  230. package/dist/Item/Item.d.ts +17 -4
  231. package/dist/Item/Item.d.ts.map +1 -1
  232. package/dist/Item/Item.js +32 -7
  233. package/dist/Kbd/Kbd.d.ts +1 -1
  234. package/dist/Kbd/Kbd.js +1 -1
  235. package/dist/Layout/Layout.d.ts +1 -1
  236. package/dist/Layout/Layout.js +1 -1
  237. package/dist/Layout/LayoutContent.d.ts +1 -1
  238. package/dist/Layout/LayoutContent.js +1 -1
  239. package/dist/Layout/LayoutFooter.d.ts +1 -1
  240. package/dist/Layout/LayoutFooter.js +1 -1
  241. package/dist/Layout/LayoutHeader.d.ts +1 -1
  242. package/dist/Layout/LayoutHeader.js +1 -1
  243. package/dist/Layout/LayoutPanel.d.ts +1 -1
  244. package/dist/Layout/LayoutPanel.js +1 -1
  245. package/dist/Lightbox/Lightbox.d.ts +6 -4
  246. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  247. package/dist/Lightbox/Lightbox.js +117 -26
  248. package/dist/Link/Link.d.ts +1 -1
  249. package/dist/Link/Link.js +1 -1
  250. package/dist/Link/LinkProvider.d.ts +2 -2
  251. package/dist/Link/LinkProvider.js +2 -2
  252. package/dist/List/List.d.ts +1 -1
  253. package/dist/List/List.js +1 -1
  254. package/dist/List/ListItem.d.ts +12 -2
  255. package/dist/List/ListItem.d.ts.map +1 -1
  256. package/dist/List/ListItem.js +3 -1
  257. package/dist/Markdown/Markdown.d.ts.map +1 -1
  258. package/dist/Markdown/Markdown.js +35 -13
  259. package/dist/MetadataList/MetadataList.d.ts +2 -2
  260. package/dist/MetadataList/MetadataList.d.ts.map +1 -1
  261. package/dist/MetadataList/MetadataList.js +38 -12
  262. package/dist/MetadataList/MetadataListItem.d.ts +1 -1
  263. package/dist/MetadataList/MetadataListItem.js +1 -1
  264. package/dist/MobileNav/MobileNav.d.ts +1 -1
  265. package/dist/MobileNav/MobileNav.js +1 -1
  266. package/dist/MoreMenu/MoreMenu.d.ts +1 -1
  267. package/dist/MoreMenu/MoreMenu.js +3 -3
  268. package/dist/MultiSelector/MultiSelector.d.ts +13 -4
  269. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  270. package/dist/MultiSelector/MultiSelector.js +118 -24
  271. package/dist/NavIcon/NavIcon.d.ts +1 -1
  272. package/dist/NavIcon/NavIcon.js +1 -1
  273. package/dist/NavMenu/index.d.ts +0 -2
  274. package/dist/NavMenu/index.d.ts.map +1 -1
  275. package/dist/NavMenu/index.js +1 -3
  276. package/dist/NumberInput/NumberInput.d.ts +1 -1
  277. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  278. package/dist/NumberInput/NumberInput.js +16 -5
  279. package/dist/Outline/Outline.js +1 -1
  280. package/dist/OverflowList/OverflowList.d.ts +1 -1
  281. package/dist/OverflowList/OverflowList.js +1 -1
  282. package/dist/Pagination/Pagination.d.ts +26 -21
  283. package/dist/Pagination/Pagination.d.ts.map +1 -1
  284. package/dist/Pagination/Pagination.js +169 -41
  285. package/dist/Pagination/index.d.ts +22 -1
  286. package/dist/Pagination/index.d.ts.map +1 -1
  287. package/dist/Pagination/index.js +14 -0
  288. package/dist/Popover/Popover.d.ts +20 -3
  289. package/dist/Popover/Popover.d.ts.map +1 -1
  290. package/dist/Popover/Popover.js +5 -1
  291. package/dist/Popover/usePopover.d.ts.map +1 -1
  292. package/dist/Popover/usePopover.js +14 -3
  293. package/dist/PowerSearch/PowerSearch.d.ts +1 -1
  294. package/dist/PowerSearch/PowerSearch.js +1 -1
  295. package/dist/ProgressBar/ProgressBar.d.ts +49 -22
  296. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  297. package/dist/ProgressBar/ProgressBar.js +79 -22
  298. package/dist/ProgressBar/ProgressBarMarkTooltip.d.ts +27 -0
  299. package/dist/ProgressBar/ProgressBarMarkTooltip.d.ts.map +1 -0
  300. package/dist/ProgressBar/ProgressBarMarkTooltip.js +35 -0
  301. package/dist/ProgressBar/index.d.ts +21 -1
  302. package/dist/ProgressBar/index.d.ts.map +1 -1
  303. package/dist/ProgressBar/index.js +14 -0
  304. package/dist/RadioList/RadioList.d.ts +1 -1
  305. package/dist/RadioList/RadioList.js +1 -1
  306. package/dist/RadioList/RadioListItem.d.ts +1 -1
  307. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  308. package/dist/RadioList/RadioListItem.js +2 -2
  309. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  310. package/dist/Resizable/ResizeHandle.js +15 -11
  311. package/dist/Section/Section.d.ts +2 -19
  312. package/dist/Section/Section.d.ts.map +1 -1
  313. package/dist/Section/Section.js +1 -15
  314. package/dist/Section/index.d.ts +19 -1
  315. package/dist/Section/index.d.ts.map +1 -1
  316. package/dist/Section/index.js +14 -0
  317. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  318. package/dist/SegmentedControl/SegmentedControl.js +1 -1
  319. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  320. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  321. package/dist/SegmentedControl/SegmentedControlItem.js +4 -3
  322. package/dist/SelectableCard/SelectableCard.d.ts +4 -3
  323. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  324. package/dist/SelectableCard/SelectableCard.js +15 -3
  325. package/dist/Selector/Selector.d.ts +12 -3
  326. package/dist/Selector/Selector.d.ts.map +1 -1
  327. package/dist/Selector/Selector.js +109 -21
  328. package/dist/SideNav/SideNav.d.ts +1 -1
  329. package/dist/SideNav/SideNav.js +1 -1
  330. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  331. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  332. package/dist/SideNav/SideNavCollapseButton.js +4 -3
  333. package/dist/SideNav/SideNavHeading.d.ts +1 -1
  334. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  335. package/dist/SideNav/SideNavHeading.js +8 -7
  336. package/dist/SideNav/SideNavItem.d.ts +2 -2
  337. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  338. package/dist/SideNav/SideNavItem.js +6 -7
  339. package/dist/SideNav/SideNavSection.d.ts +1 -1
  340. package/dist/SideNav/SideNavSection.js +1 -1
  341. package/dist/Skeleton/Skeleton.d.ts +1 -1
  342. package/dist/Skeleton/Skeleton.d.ts.map +1 -1
  343. package/dist/Skeleton/Skeleton.js +3 -3
  344. package/dist/Slider/Slider.d.ts.map +1 -1
  345. package/dist/Slider/Slider.js +78 -68
  346. package/dist/Spinner/Spinner.d.ts +1 -1
  347. package/dist/Spinner/Spinner.js +1 -1
  348. package/dist/Stack/Stack.d.ts +1 -1
  349. package/dist/Stack/Stack.js +1 -1
  350. package/dist/Stack/StackItem.d.ts +1 -1
  351. package/dist/Stack/StackItem.js +1 -1
  352. package/dist/StatusDot/StatusDot.d.ts +1 -20
  353. package/dist/StatusDot/StatusDot.d.ts.map +1 -1
  354. package/dist/StatusDot/StatusDot.js +2 -17
  355. package/dist/StatusDot/index.d.ts +21 -1
  356. package/dist/StatusDot/index.d.ts.map +1 -1
  357. package/dist/StatusDot/index.js +14 -0
  358. package/dist/Switch/Switch.d.ts +2 -6
  359. package/dist/Switch/Switch.d.ts.map +1 -1
  360. package/dist/Switch/Switch.js +18 -10
  361. package/dist/TabList/Tab.d.ts +1 -1
  362. package/dist/TabList/Tab.js +1 -1
  363. package/dist/TabList/TabList.d.ts +1 -1
  364. package/dist/TabList/TabList.js +1 -1
  365. package/dist/TabList/TabMenu.d.ts +1 -1
  366. package/dist/TabList/TabMenu.d.ts.map +1 -1
  367. package/dist/TabList/TabMenu.js +11 -3
  368. package/dist/Table/BaseTable.d.ts +1 -1
  369. package/dist/Table/BaseTable.d.ts.map +1 -1
  370. package/dist/Table/BaseTable.js +4 -7
  371. package/dist/Table/Table.d.ts +1 -1
  372. package/dist/Table/Table.js +1 -1
  373. package/dist/Table/TableCell.d.ts +1 -1
  374. package/dist/Table/TableCell.js +4 -2
  375. package/dist/Table/TableHeaderCell.d.ts +1 -1
  376. package/dist/Table/TableHeaderCell.js +4 -2
  377. package/dist/Table/TableRow.d.ts +1 -1
  378. package/dist/Table/TableRow.js +1 -1
  379. package/dist/Table/index.d.ts +1 -1
  380. package/dist/Table/index.d.ts.map +1 -1
  381. package/dist/Table/index.js +1 -1
  382. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  383. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +1 -1
  384. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +18 -3
  385. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  386. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -4
  387. package/dist/Table/plugins/tree/useTableTreeData.d.ts +11 -0
  388. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  389. package/dist/Table/plugins/tree/useTableTreeData.js +36 -2
  390. package/dist/Table/types.d.ts +0 -9
  391. package/dist/Table/types.d.ts.map +1 -1
  392. package/dist/Text/Text.d.ts +11 -2
  393. package/dist/Text/Text.d.ts.map +1 -1
  394. package/dist/Text/Text.js +26 -3
  395. package/dist/Text/index.d.ts +31 -1
  396. package/dist/Text/index.d.ts.map +1 -1
  397. package/dist/Text/index.js +23 -0
  398. package/dist/TextArea/TextArea.d.ts +1 -1
  399. package/dist/TextArea/TextArea.d.ts.map +1 -1
  400. package/dist/TextArea/TextArea.js +107 -39
  401. package/dist/TextInput/TextInput.d.ts +1 -1
  402. package/dist/TextInput/TextInput.js +1 -1
  403. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  404. package/dist/Thumbnail/Thumbnail.js +52 -46
  405. package/dist/TimeInput/TimeInput.js +1 -1
  406. package/dist/Timestamp/Timestamp.d.ts +26 -12
  407. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  408. package/dist/Timestamp/Timestamp.js +128 -65
  409. package/dist/Timestamp/TimestampHoverCard.d.ts +45 -0
  410. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -0
  411. package/dist/Timestamp/TimestampHoverCard.js +228 -0
  412. package/dist/Timestamp/formatInstant.d.ts +3 -3
  413. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  414. package/dist/Timestamp/formatInstant.js +7 -2
  415. package/dist/Timestamp/tooltipEntries.d.ts +17 -2
  416. package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
  417. package/dist/Timestamp/tooltipEntries.js +4 -2
  418. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  419. package/dist/Toast/ToastViewport.js +61 -9
  420. package/dist/ToggleButton/ToggleButton.d.ts +1 -1
  421. package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
  422. package/dist/ToggleButton/ToggleButton.js +4 -2
  423. package/dist/ToggleButton/ToggleButtonGroup.d.ts +1 -1
  424. package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
  425. package/dist/ToggleButton/ToggleButtonGroup.js +1 -1
  426. package/dist/Token/Token.d.ts +6 -28
  427. package/dist/Token/Token.d.ts.map +1 -1
  428. package/dist/Token/Token.js +69 -58
  429. package/dist/Token/TokenLink.d.ts +62 -0
  430. package/dist/Token/TokenLink.d.ts.map +1 -0
  431. package/dist/Token/TokenLink.js +76 -0
  432. package/dist/Token/index.d.ts +27 -1
  433. package/dist/Token/index.d.ts.map +1 -1
  434. package/dist/Token/index.js +14 -0
  435. package/dist/Tokenizer/Tokenizer.d.ts +1 -1
  436. package/dist/Tokenizer/Tokenizer.js +1 -1
  437. package/dist/Toolbar/Toolbar.d.ts +1 -1
  438. package/dist/Toolbar/Toolbar.js +1 -1
  439. package/dist/Tooltip/Tooltip.d.ts +1 -1
  440. package/dist/Tooltip/Tooltip.js +1 -1
  441. package/dist/TopNav/TopNav.d.ts +1 -1
  442. package/dist/TopNav/TopNav.js +1 -1
  443. package/dist/TopNav/TopNavHeading.d.ts +2 -8
  444. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  445. package/dist/TopNav/TopNavHeading.js +8 -10
  446. package/dist/TopNav/TopNavItem.d.ts +1 -1
  447. package/dist/TopNav/TopNavItem.js +1 -1
  448. package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
  449. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  450. package/dist/TopNav/TopNavMegaMenu.js +15 -7
  451. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  452. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +1 -1
  453. package/dist/TopNav/TopNavMegaMenuItem.d.ts +1 -1
  454. package/dist/TopNav/TopNavMegaMenuItem.js +1 -1
  455. package/dist/TopNav/TopNavMenu.d.ts +1 -1
  456. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  457. package/dist/TopNav/TopNavMenu.js +5 -4
  458. package/dist/TreeList/TreeList.d.ts +1 -1
  459. package/dist/TreeList/TreeList.js +1 -1
  460. package/dist/TreeList/TreeListBranches.js +1 -1
  461. package/dist/TreeList/TreeListItem.d.ts +1 -1
  462. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  463. package/dist/TreeList/TreeListItem.js +4 -3
  464. package/dist/TreeList/TreeListTypes.d.ts +1 -17
  465. package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
  466. package/dist/TreeList/index.d.ts +18 -1
  467. package/dist/TreeList/index.d.ts.map +1 -1
  468. package/dist/TreeList/index.js +14 -0
  469. package/dist/Typeahead/BaseTypeahead.d.ts +10 -1
  470. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  471. package/dist/Typeahead/BaseTypeahead.js +3 -1
  472. package/dist/Typeahead/Typeahead.d.ts +1 -1
  473. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  474. package/dist/Typeahead/Typeahead.js +9 -2
  475. package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
  476. package/dist/Typeahead/TypeaheadItem.js +1 -1
  477. package/dist/VStack/VStack.d.ts +1 -1
  478. package/dist/VStack/VStack.js +1 -1
  479. package/dist/VisuallyHidden/VisuallyHidden.d.ts +1 -1
  480. package/dist/VisuallyHidden/VisuallyHidden.js +1 -1
  481. package/dist/astryx.css +111 -33
  482. package/dist/astryx.umd.js +50 -54
  483. package/dist/astryx.umd.js.map +4 -4
  484. package/dist/hooks/containerReveal.pool.stylex.d.ts +303 -0
  485. package/dist/hooks/containerReveal.pool.stylex.d.ts.map +1 -0
  486. package/dist/hooks/containerReveal.pool.stylex.js +292 -0
  487. package/dist/hooks/index.d.ts +2 -0
  488. package/dist/hooks/index.d.ts.map +1 -1
  489. package/dist/hooks/index.js +2 -1
  490. package/dist/hooks/useContainerReveal.d.ts +83 -0
  491. package/dist/hooks/useContainerReveal.d.ts.map +1 -0
  492. package/dist/hooks/useContainerReveal.js +123 -0
  493. package/dist/hooks/useGridFocus.d.ts +8 -6
  494. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  495. package/dist/hooks/useInputContainer.d.ts.map +1 -1
  496. package/dist/hooks/useInputContainer.js +29 -1
  497. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  498. package/dist/hooks/useInputStatusIcon.js +11 -0
  499. package/dist/hooks/useKeyboardHint.d.ts +2 -2
  500. package/dist/hooks/useKeyboardHint.d.ts.map +1 -1
  501. package/dist/hooks/useKeyboardHint.js +5 -3
  502. package/dist/hooks/useListFocus.d.ts +8 -7
  503. package/dist/hooks/useListFocus.d.ts.map +1 -1
  504. package/dist/hooks/useTreeFocus.d.ts.map +1 -1
  505. package/dist/hooks/useTreeFocus.js +13 -2
  506. package/dist/i18n/InternationalizationProvider.d.ts +6 -0
  507. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
  508. package/dist/i18n/useDirection.d.ts.map +1 -1
  509. package/dist/i18n/useDirection.js +6 -3
  510. package/dist/index.d.ts +2 -1
  511. package/dist/index.d.ts.map +1 -1
  512. package/dist/index.js +3 -3
  513. package/dist/theme/Theme.d.ts.map +1 -1
  514. package/dist/theme/Theme.js +2 -7
  515. package/dist/theme/contrast.d.ts +45 -0
  516. package/dist/theme/contrast.d.ts.map +1 -0
  517. package/dist/theme/contrast.js +88 -0
  518. package/dist/theme/defineTheme.d.ts +9 -3
  519. package/dist/theme/defineTheme.d.ts.map +1 -1
  520. package/dist/theme/defineTheme.js +6 -4
  521. package/dist/theme/expandColorScale.d.ts +29 -2
  522. package/dist/theme/expandColorScale.d.ts.map +1 -1
  523. package/dist/theme/expandColorScale.js +91 -12
  524. package/dist/theme/generateThemeRules.d.ts +0 -6
  525. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  526. package/dist/theme/generateThemeRules.js +0 -15
  527. package/dist/theme/index.d.ts +9 -7
  528. package/dist/theme/index.d.ts.map +1 -1
  529. package/dist/theme/index.js +4 -3
  530. package/dist/theme/themeRegistry.d.ts +32 -0
  531. package/dist/theme/themeRegistry.d.ts.map +1 -0
  532. package/dist/theme/themeRegistry.js +49 -0
  533. package/dist/theme/tokens.stylex.d.ts +0 -17
  534. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  535. package/dist/theme/tokens.stylex.js +0 -22
  536. package/dist/theme/types.d.ts +10 -2
  537. package/dist/theme/types.d.ts.map +1 -1
  538. package/dist/theme/useTheme.d.ts +9 -0
  539. package/dist/theme/useTheme.d.ts.map +1 -1
  540. package/dist/theme/useTheme.js +82 -27
  541. package/dist/utils/rtlStyles.d.ts +21 -0
  542. package/dist/utils/rtlStyles.d.ts.map +1 -1
  543. package/dist/utils/rtlStyles.js +26 -1
  544. package/groups.doc.mjs +2 -2
  545. package/locales/en.json +124 -0
  546. package/locales/pseudo.json +93 -0
  547. package/package.json +10 -14
  548. package/src/AlertDialog/AlertDialog.doc.mjs +3 -3
  549. package/src/AlertDialog/AlertDialog.tsx +1 -1
  550. package/src/AlertDialog/useImperativeAlertDialog.doc.mjs +1 -1
  551. package/src/AppShell/AppShell.doc.mjs +3 -3
  552. package/src/AppShell/AppShell.test.tsx +55 -0
  553. package/src/AppShell/AppShell.tsx +27 -22
  554. package/src/AppShell/index.ts +20 -1
  555. package/src/AppShell/useAppShellMobile.doc.mjs +2 -2
  556. package/src/AspectRatio/AspectRatio.doc.mjs +3 -3
  557. package/src/AspectRatio/AspectRatio.tsx +1 -1
  558. package/src/Avatar/Avatar.doc.mjs +3 -3
  559. package/src/Avatar/Avatar.tsx +8 -3
  560. package/src/Avatar/AvatarStatusDot.doc.mjs +1 -1
  561. package/src/Avatar/AvatarStatusDot.tsx +2 -27
  562. package/src/Avatar/index.ts +26 -1
  563. package/src/AvatarGroup/AvatarGroup.doc.mjs +3 -3
  564. package/src/AvatarGroup/AvatarGroup.test.tsx +21 -1
  565. package/src/AvatarGroup/AvatarGroup.tsx +3 -7
  566. package/src/AvatarGroup/AvatarGroupOverflow.doc.mjs +1 -1
  567. package/src/AvatarGroup/AvatarGroupOverflow.tsx +5 -3
  568. package/src/Badge/Badge.doc.mjs +3 -3
  569. package/src/Badge/Badge.tsx +2 -31
  570. package/src/Badge/index.ts +32 -6
  571. package/src/Banner/Banner.doc.mjs +3 -3
  572. package/src/Banner/Banner.tsx +8 -45
  573. package/src/Banner/index.ts +39 -7
  574. package/src/Blockquote/Blockquote.doc.mjs +3 -3
  575. package/src/Blockquote/Blockquote.tsx +1 -1
  576. package/src/Breadcrumbs/BreadcrumbItem.doc.mjs +1 -1
  577. package/src/Breadcrumbs/BreadcrumbItem.tsx +5 -3
  578. package/src/Breadcrumbs/Breadcrumbs.doc.mjs +3 -3
  579. package/src/Breadcrumbs/Breadcrumbs.test.tsx +1 -1
  580. package/src/Breadcrumbs/Breadcrumbs.tsx +2 -19
  581. package/src/Breadcrumbs/index.ts +19 -5
  582. package/src/Button/Button.doc.mjs +3 -3
  583. package/src/Button/Button.test.tsx +16 -0
  584. package/src/Button/Button.tsx +6 -23
  585. package/src/Button/index.ts +22 -7
  586. package/src/ButtonGroup/ButtonGroup.doc.mjs +3 -3
  587. package/src/ButtonGroup/ButtonGroup.tsx +1 -1
  588. package/src/Calendar/Calendar.doc.mjs +3 -3
  589. package/src/Calendar/Calendar.test.tsx +22 -6
  590. package/src/Calendar/Calendar.tsx +1 -1
  591. package/src/Calendar/index.ts +1 -6
  592. package/src/Calendar/styles.ts +2 -2
  593. package/src/Calendar/utils.ts +0 -11
  594. package/src/Card/Card.doc.mjs +3 -3
  595. package/src/Card/Card.tsx +1 -1
  596. package/src/Carousel/Carousel.doc.mjs +10 -3
  597. package/src/Carousel/Carousel.test.tsx +232 -1
  598. package/src/Carousel/Carousel.tsx +144 -21
  599. package/src/Carousel/index.ts +1 -1
  600. package/src/Center/Center.doc.mjs +41 -3
  601. package/src/Center/Center.test.tsx +75 -0
  602. package/src/Center/Center.tsx +38 -3
  603. package/src/Chat/Chat.doc.mjs +3 -3
  604. package/src/Chat/ChatComposer.doc.mjs +1 -1
  605. package/src/Chat/ChatComposer.tsx +5 -5
  606. package/src/Chat/ChatComposerDrawer.doc.mjs +1 -1
  607. package/src/Chat/ChatComposerDrawer.tsx +5 -5
  608. package/src/Chat/ChatComposerInput.doc.mjs +1 -1
  609. package/src/Chat/ChatComposerInput.tsx +1 -1
  610. package/src/Chat/ChatComposerTokenElement.doc.mjs +1 -1
  611. package/src/Chat/ChatDictationButton.doc.mjs +3 -3
  612. package/src/Chat/ChatDictationButton.tsx +1 -1
  613. package/src/Chat/ChatLayout.doc.mjs +1 -1
  614. package/src/Chat/ChatLayout.test.tsx +57 -0
  615. package/src/Chat/ChatLayout.tsx +23 -2
  616. package/src/Chat/ChatLayoutScrollButton.doc.mjs +1 -1
  617. package/src/Chat/ChatLayoutScrollButton.tsx +1 -1
  618. package/src/Chat/ChatMessage.doc.mjs +1 -1
  619. package/src/Chat/ChatMessage.tsx +1 -1
  620. package/src/Chat/ChatMessageBubble.doc.mjs +1 -1
  621. package/src/Chat/ChatMessageBubble.tsx +1 -1
  622. package/src/Chat/ChatMessageList.doc.mjs +1 -1
  623. package/src/Chat/ChatMessageList.tsx +1 -1
  624. package/src/Chat/ChatMessageMetadata.doc.mjs +1 -1
  625. package/src/Chat/ChatSendButton.doc.mjs +1 -1
  626. package/src/Chat/ChatSendButton.tsx +5 -3
  627. package/src/Chat/ChatSystemMessage.doc.mjs +1 -1
  628. package/src/Chat/ChatSystemMessage.tsx +1 -1
  629. package/src/Chat/ChatTokenizedText.doc.mjs +1 -1
  630. package/src/Chat/ChatTokenizedText.tsx +1 -1
  631. package/src/Chat/ChatToolCalls.doc.mjs +3 -3
  632. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  633. package/src/CheckboxInput/CheckboxInput.test.tsx +56 -0
  634. package/src/CheckboxInput/CheckboxInput.tsx +18 -3
  635. package/src/CheckboxList/CheckboxList.doc.mjs +3 -3
  636. package/src/CheckboxList/CheckboxList.test.tsx +94 -3
  637. package/src/CheckboxList/CheckboxList.tsx +1 -1
  638. package/src/CheckboxList/CheckboxListItem.doc.mjs +1 -1
  639. package/src/CheckboxList/CheckboxListItem.tsx +18 -11
  640. package/src/Citation/Citation.doc.mjs +2 -2
  641. package/src/Citation/Citation.tsx +1 -1
  642. package/src/ClickableCard/ClickableCard.doc.mjs +2 -2
  643. package/src/ClickableCard/ClickableCard.tsx +3 -3
  644. package/src/Code/Code.tsx +2 -2
  645. package/src/CodeBlock/Code.doc.mjs +1 -1
  646. package/src/CodeBlock/CodeBlock.doc.mjs +3 -3
  647. package/src/CodeBlock/CodeBlock.test.tsx +17 -0
  648. package/src/CodeBlock/CodeBlock.tsx +2 -2
  649. package/src/Collapsible/Collapsible.doc.mjs +3 -3
  650. package/src/Collapsible/Collapsible.tsx +3 -3
  651. package/src/Collapsible/CollapsibleGroup.doc.mjs +1 -1
  652. package/src/Collapsible/CollapsibleGroup.tsx +1 -1
  653. package/src/Collapsible/CollapsibleGroupContext.tsx +1 -1
  654. package/src/Collapsible/useCollapsible.doc.mjs +2 -2
  655. package/src/CommandPalette/CommandPalette.doc.mjs +4 -4
  656. package/src/CommandPalette/CommandPalette.tsx +1 -1
  657. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +1 -1
  658. package/src/CommandPalette/CommandPaletteEmpty.tsx +1 -1
  659. package/src/CommandPalette/CommandPaletteFooter.doc.mjs +1 -1
  660. package/src/CommandPalette/CommandPaletteFooter.tsx +1 -1
  661. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +1 -1
  662. package/src/CommandPalette/CommandPaletteGroup.test.tsx +6 -2
  663. package/src/CommandPalette/CommandPaletteGroup.tsx +1 -1
  664. package/src/CommandPalette/CommandPaletteInput.doc.mjs +1 -1
  665. package/src/CommandPalette/CommandPaletteInput.tsx +5 -1
  666. package/src/CommandPalette/CommandPaletteItem.doc.mjs +1 -1
  667. package/src/CommandPalette/CommandPaletteItem.tsx +1 -1
  668. package/src/CommandPalette/CommandPaletteList.doc.mjs +1 -1
  669. package/src/CommandPalette/CommandPaletteList.tsx +1 -1
  670. package/src/ComplexSelector/ComplexSelector.doc.mjs +179 -0
  671. package/src/ComplexSelector/ComplexSelector.test.tsx +156 -0
  672. package/src/ComplexSelector/ComplexSelector.tsx +429 -0
  673. package/src/ComplexSelector/index.ts +17 -0
  674. package/src/ContextMenu/ContextMenu.doc.mjs +3 -3
  675. package/src/ContextMenu/ContextMenu.test.tsx +17 -2
  676. package/src/ContextMenu/ContextMenu.tsx +27 -6
  677. package/src/ContextMenu/ContextMenuItem.doc.mjs +1 -1
  678. package/src/DateInput/DateInput.doc.mjs +3 -3
  679. package/src/DateInput/DateInput.test.tsx +7 -3
  680. package/src/DateInput/DateInput.tsx +1 -1
  681. package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
  682. package/src/DateRangeInput/DateRangeInput.test.tsx +7 -2
  683. package/src/DateRangeInput/DateRangeInput.tsx +1 -1
  684. package/src/DateTimeInput/DateTimeInput.doc.mjs +3 -3
  685. package/src/DateTimeInput/DateTimeInput.test.tsx +6 -2
  686. package/src/DateTimeInput/DateTimeInput.tsx +1 -1
  687. package/src/Dialog/Dialog.doc.mjs +7 -5
  688. package/src/Dialog/Dialog.test.tsx +46 -3
  689. package/src/Dialog/Dialog.tsx +61 -44
  690. package/src/Dialog/DialogHeader.doc.mjs +1 -1
  691. package/src/Dialog/DialogHeader.tsx +1 -1
  692. package/src/Dialog/index.ts +18 -1
  693. package/src/Dialog/useImperativeDialog.doc.mjs +1 -1
  694. package/src/Divider/Divider.doc.mjs +3 -3
  695. package/src/Divider/Divider.tsx +2 -19
  696. package/src/Divider/index.ts +19 -5
  697. package/src/DropdownMenu/DropdownMenu.doc.mjs +20 -5
  698. package/src/DropdownMenu/DropdownMenu.test.tsx +122 -0
  699. package/src/DropdownMenu/DropdownMenu.tsx +31 -20
  700. package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +1 -1
  701. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +41 -64
  702. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +1 -1
  703. package/src/DropdownMenu/DropdownMenuItem.tsx +1 -1
  704. package/src/DropdownMenu/DropdownMenuRadioGroup.doc.mjs +5 -13
  705. package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +9 -10
  706. package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +1 -1
  707. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +11 -2
  708. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +84 -2
  709. package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +1 -1
  710. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +46 -1
  711. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +24 -8
  712. package/src/DropdownMenu/menuItemHover.ts +1 -0
  713. package/src/DropdownMenu/renderDropdownItems.tsx +14 -2
  714. package/src/EmptyState/EmptyState.doc.mjs +3 -3
  715. package/src/EmptyState/EmptyState.tsx +1 -1
  716. package/src/Field/Field.doc.mjs +7 -3
  717. package/src/Field/Field.tsx +1 -1
  718. package/src/Field/FieldLabel.doc.mjs +1 -1
  719. package/src/Field/FieldLabel.test.tsx +103 -0
  720. package/src/Field/FieldLabel.tsx +61 -5
  721. package/src/FieldStatus/FieldStatus.doc.mjs +3 -2
  722. package/src/FieldStatus/FieldStatus.test.tsx +61 -0
  723. package/src/FieldStatus/FieldStatus.tsx +16 -23
  724. package/src/FieldStatus/index.ts +20 -5
  725. package/src/FileInput/FileInput.doc.mjs +3 -3
  726. package/src/FileInput/FileInput.tsx +1 -1
  727. package/src/FormLayout/FormLayout.doc.mjs +3 -3
  728. package/src/FormLayout/FormLayout.tsx +2 -5
  729. package/src/Grid/Grid.doc.mjs +3 -8
  730. package/src/Grid/Grid.tsx +1 -25
  731. package/src/Grid/GridSpan.doc.mjs +1 -1
  732. package/src/Grid/GridSpan.tsx +1 -1
  733. package/src/HStack/HStack.tsx +1 -1
  734. package/src/Heading/Heading.tsx +4 -3
  735. package/src/HoverCard/HoverCard.doc.mjs +3 -3
  736. package/src/HoverCard/HoverCard.tsx +1 -1
  737. package/src/HoverCard/useHoverCard.doc.mjs +2 -2
  738. package/src/Icon/Icon.doc.mjs +7 -6
  739. package/src/Icon/Icon.test.tsx +23 -0
  740. package/src/Icon/Icon.tsx +4 -2
  741. package/src/Icon/defaultIcons.tsx +14 -0
  742. package/src/Icon/globalIconRegistry.test.tsx +87 -1
  743. package/src/Icon/globalIconRegistry.tsx +111 -9
  744. package/src/Icon/index.ts +9 -7
  745. package/src/Icon/useIcon.ts +23 -0
  746. package/src/IconButton/IconButton.doc.mjs +2 -2
  747. package/src/IconButton/IconButton.tsx +1 -1
  748. package/src/InputGroup/InputGroup.doc.mjs +2 -2
  749. package/src/InputGroup/InputGroup.tsx +1 -1
  750. package/src/InputGroup/InputGroupText.doc.mjs +1 -1
  751. package/src/InputGroup/InputGroupText.tsx +1 -1
  752. package/src/Item/Item.doc.mjs +8 -3
  753. package/src/Item/Item.test.tsx +88 -0
  754. package/src/Item/Item.tsx +58 -12
  755. package/src/Kbd/Kbd.doc.mjs +3 -3
  756. package/src/Kbd/Kbd.tsx +1 -1
  757. package/src/Layer/Layer.doc.mjs +2 -2
  758. package/src/Layer/useLayer.doc.mjs +2 -2
  759. package/src/Layout/Layout.doc.mjs +3 -3
  760. package/src/Layout/Layout.tsx +1 -1
  761. package/src/Layout/LayoutContent.doc.mjs +1 -1
  762. package/src/Layout/LayoutContent.tsx +1 -1
  763. package/src/Layout/LayoutFooter.doc.mjs +1 -1
  764. package/src/Layout/LayoutFooter.tsx +1 -1
  765. package/src/Layout/LayoutHeader.doc.mjs +1 -1
  766. package/src/Layout/LayoutHeader.tsx +1 -1
  767. package/src/Layout/LayoutPanel.doc.mjs +1 -1
  768. package/src/Layout/LayoutPanel.tsx +1 -1
  769. package/src/Lightbox/Lightbox.doc.mjs +5 -5
  770. package/src/Lightbox/Lightbox.test.tsx +211 -0
  771. package/src/Lightbox/Lightbox.tsx +109 -22
  772. package/src/Link/Link.doc.mjs +3 -3
  773. package/src/Link/Link.tsx +1 -1
  774. package/src/Link/LinkProvider.doc.mjs +2 -2
  775. package/src/Link/LinkProvider.tsx +2 -2
  776. package/src/List/List.doc.mjs +3 -3
  777. package/src/List/List.tsx +1 -1
  778. package/src/List/ListItem.doc.mjs +13 -1
  779. package/src/List/ListItem.tsx +14 -1
  780. package/src/Markdown/Markdown.doc.mjs +81 -1
  781. package/src/Markdown/Markdown.test.tsx +92 -0
  782. package/src/Markdown/Markdown.tsx +96 -68
  783. package/src/Markdown/parser.perf.test.ts +47 -35
  784. package/src/MetadataList/MetadataList.doc.mjs +3 -3
  785. package/src/MetadataList/MetadataList.test.tsx +82 -0
  786. package/src/MetadataList/MetadataList.tsx +45 -20
  787. package/src/MetadataList/MetadataListItem.doc.mjs +1 -1
  788. package/src/MetadataList/MetadataListItem.tsx +1 -1
  789. package/src/MobileNav/MobileNav.doc.mjs +3 -3
  790. package/src/MobileNav/MobileNav.tsx +1 -1
  791. package/src/MoreMenu/MoreMenu.doc.mjs +3 -3
  792. package/src/MoreMenu/MoreMenu.tsx +3 -3
  793. package/src/MultiSelector/MultiSelector.doc.mjs +35 -10
  794. package/src/MultiSelector/MultiSelector.test.tsx +303 -3
  795. package/src/MultiSelector/MultiSelector.tsx +223 -58
  796. package/src/NavIcon/NavIcon.doc.mjs +3 -3
  797. package/src/NavIcon/NavIcon.tsx +1 -1
  798. package/src/NavMenu/NavHeadingMenu.test.tsx +0 -16
  799. package/src/NavMenu/NavMenu.doc.mjs +2 -2
  800. package/src/NavMenu/index.ts +0 -4
  801. package/src/NumberInput/NumberInput.doc.mjs +3 -6
  802. package/src/NumberInput/NumberInput.test.tsx +38 -3
  803. package/src/NumberInput/NumberInput.tsx +24 -1
  804. package/src/Outline/Outline.doc.mjs +3 -3
  805. package/src/Outline/Outline.tsx +1 -1
  806. package/src/OverflowList/OverflowList.doc.mjs +3 -3
  807. package/src/OverflowList/OverflowList.tsx +1 -1
  808. package/src/Overlay/Overlay.doc.mjs +2 -2
  809. package/src/Pagination/Pagination.doc.mjs +55 -8
  810. package/src/Pagination/Pagination.test.tsx +567 -0
  811. package/src/Pagination/Pagination.tsx +223 -41
  812. package/src/Pagination/index.ts +22 -1
  813. package/src/Popover/Popover.doc.mjs +31 -3
  814. package/src/Popover/Popover.test.tsx +41 -0
  815. package/src/Popover/Popover.tsx +25 -2
  816. package/src/Popover/usePopover.doc.mjs +2 -2
  817. package/src/Popover/usePopover.tsx +10 -4
  818. package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
  819. package/src/PowerSearch/PowerSearch.tsx +1 -1
  820. package/src/ProgressBar/ProgressBar.doc.mjs +18 -3
  821. package/src/ProgressBar/ProgressBar.test.tsx +340 -2
  822. package/src/ProgressBar/ProgressBar.tsx +153 -25
  823. package/src/ProgressBar/ProgressBarMarkTooltip.tsx +43 -0
  824. package/src/ProgressBar/index.ts +22 -1
  825. package/src/RadioList/RadioList.doc.mjs +3 -3
  826. package/src/RadioList/RadioList.test.tsx +26 -4
  827. package/src/RadioList/RadioList.tsx +1 -1
  828. package/src/RadioList/RadioListItem.doc.mjs +1 -1
  829. package/src/RadioList/RadioListItem.tsx +9 -2
  830. package/src/Resizable/Resizable.doc.mjs +2 -2
  831. package/src/Resizable/ResizeHandle.test.tsx +52 -3
  832. package/src/Resizable/ResizeHandle.tsx +25 -13
  833. package/src/Resizable/useResizable.doc.mjs +2 -2
  834. package/src/Section/Section.doc.mjs +3 -3
  835. package/src/Section/Section.tsx +2 -20
  836. package/src/Section/index.ts +20 -5
  837. package/src/SegmentedControl/SegmentedControl.doc.mjs +3 -3
  838. package/src/SegmentedControl/SegmentedControl.test.tsx +28 -0
  839. package/src/SegmentedControl/SegmentedControl.tsx +1 -1
  840. package/src/SegmentedControl/SegmentedControlItem.doc.mjs +1 -1
  841. package/src/SegmentedControl/SegmentedControlItem.tsx +21 -3
  842. package/src/SelectableCard/SelectableCard.doc.mjs +4 -2
  843. package/src/SelectableCard/SelectableCard.test.tsx +55 -0
  844. package/src/SelectableCard/SelectableCard.tsx +19 -3
  845. package/src/Selector/Selector.doc.mjs +28 -8
  846. package/src/Selector/Selector.test.tsx +222 -3
  847. package/src/Selector/Selector.tsx +202 -52
  848. package/src/Selector/SelectorOption.doc.mjs +1 -1
  849. package/src/SideNav/SideNav.doc.mjs +3 -3
  850. package/src/SideNav/SideNav.tsx +1 -1
  851. package/src/SideNav/SideNavCollapseButton.doc.mjs +1 -1
  852. package/src/SideNav/SideNavCollapseButton.tsx +4 -3
  853. package/src/SideNav/SideNavHeading.doc.mjs +1 -1
  854. package/src/SideNav/SideNavHeading.tsx +8 -9
  855. package/src/SideNav/SideNavItem.doc.mjs +1 -1
  856. package/src/SideNav/SideNavItem.tsx +5 -6
  857. package/src/SideNav/SideNavSection.doc.mjs +1 -1
  858. package/src/SideNav/SideNavSection.tsx +1 -1
  859. package/src/Skeleton/Skeleton.doc.mjs +3 -3
  860. package/src/Skeleton/Skeleton.test.tsx +16 -0
  861. package/src/Skeleton/Skeleton.tsx +14 -2
  862. package/src/Slider/Slider.doc.mjs +3 -3
  863. package/src/Slider/Slider.tsx +9 -13
  864. package/src/Spinner/Spinner.doc.mjs +3 -3
  865. package/src/Spinner/Spinner.tsx +1 -1
  866. package/src/Stack/Stack.doc.mjs +3 -3
  867. package/src/Stack/Stack.tsx +1 -1
  868. package/src/Stack/StackItem.tsx +1 -1
  869. package/src/StatusDot/StatusDot.doc.mjs +3 -3
  870. package/src/StatusDot/StatusDot.tsx +2 -22
  871. package/src/StatusDot/index.ts +22 -5
  872. package/src/Switch/Switch.doc.mjs +5 -5
  873. package/src/Switch/Switch.test.tsx +71 -25
  874. package/src/Switch/Switch.tsx +56 -18
  875. package/src/TabList/Tab.doc.mjs +1 -1
  876. package/src/TabList/Tab.tsx +1 -1
  877. package/src/TabList/TabList.doc.mjs +3 -3
  878. package/src/TabList/TabList.test.tsx +21 -18
  879. package/src/TabList/TabList.tsx +1 -1
  880. package/src/TabList/TabMenu.doc.mjs +1 -1
  881. package/src/TabList/TabMenu.tsx +11 -3
  882. package/src/Table/BaseTable.tsx +4 -5
  883. package/src/Table/Table.doc.mjs +5 -5
  884. package/src/Table/Table.test.tsx +27 -49
  885. package/src/Table/Table.tsx +1 -1
  886. package/src/Table/TableCell.doc.mjs +1 -1
  887. package/src/Table/TableCell.tsx +2 -2
  888. package/src/Table/TableHeaderCell.doc.mjs +1 -1
  889. package/src/Table/TableHeaderCell.tsx +2 -2
  890. package/src/Table/TableRow.doc.mjs +1 -1
  891. package/src/Table/TableRow.tsx +1 -1
  892. package/src/Table/index.ts +1 -1
  893. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +1 -1
  894. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +19 -0
  895. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +24 -4
  896. package/src/Table/plugins/tree/useTableTreeData.test.tsx +161 -2
  897. package/src/Table/plugins/tree/useTableTreeData.tsx +54 -1
  898. package/src/Table/types.ts +0 -9
  899. package/src/Table/useTableColumnResize.doc.mjs +1 -1
  900. package/src/Table/useTableColumnSettings.doc.mjs +1 -1
  901. package/src/Table/useTableFilterState.doc.mjs +1 -1
  902. package/src/Table/useTableFiltering.doc.mjs +1 -1
  903. package/src/Table/useTableGroupedRows.doc.mjs +2 -2
  904. package/src/Table/useTablePagination.doc.mjs +1 -1
  905. package/src/Table/useTableRowExpansion.doc.mjs +57 -4
  906. package/src/Table/useTableRowIndex.doc.mjs +2 -2
  907. package/src/Table/useTableRowStatus.doc.mjs +3 -3
  908. package/src/Table/useTableSelection.doc.mjs +1 -1
  909. package/src/Table/useTableSelectionState.doc.mjs +1 -1
  910. package/src/Table/useTableSortable.doc.mjs +1 -1
  911. package/src/Table/useTableStickyColumns.doc.mjs +1 -1
  912. package/src/Table/useTableTreeData.doc.mjs +10 -1
  913. package/src/Table/useTableTreeState.doc.mjs +1 -1
  914. package/src/Text/Heading.doc.mjs +4 -4
  915. package/src/Text/Text.doc.mjs +4 -4
  916. package/src/Text/Text.test.tsx +42 -0
  917. package/src/Text/Text.tsx +26 -2
  918. package/src/Text/index.ts +32 -6
  919. package/src/TextArea/TextArea.doc.mjs +5 -5
  920. package/src/TextArea/TextArea.test.tsx +112 -7
  921. package/src/TextArea/TextArea.tsx +143 -50
  922. package/src/TextInput/TextInput.doc.mjs +3 -3
  923. package/src/TextInput/TextInput.tsx +1 -1
  924. package/src/Thumbnail/Thumbnail.doc.mjs +2 -2
  925. package/src/Thumbnail/Thumbnail.test.tsx +24 -1
  926. package/src/Thumbnail/Thumbnail.tsx +28 -35
  927. package/src/TimeInput/TimeInput.doc.mjs +3 -3
  928. package/src/TimeInput/TimeInput.tsx +1 -1
  929. package/src/Timestamp/Timestamp.doc.mjs +29 -24
  930. package/src/Timestamp/Timestamp.test.tsx +438 -107
  931. package/src/Timestamp/Timestamp.tsx +167 -103
  932. package/src/Timestamp/TimestampHoverCard.tsx +283 -0
  933. package/src/Timestamp/formatInstant.ts +9 -4
  934. package/src/Timestamp/tooltipEntries.test.ts +9 -0
  935. package/src/Timestamp/tooltipEntries.ts +18 -2
  936. package/src/Toast/Toast.doc.mjs +3 -3
  937. package/src/Toast/ToastViewport.test.tsx +218 -8
  938. package/src/Toast/ToastViewport.tsx +71 -12
  939. package/src/Toast/useToast.doc.mjs +2 -2
  940. package/src/ToggleButton/ToggleButton.doc.mjs +3 -3
  941. package/src/ToggleButton/ToggleButton.test.tsx +24 -0
  942. package/src/ToggleButton/ToggleButton.tsx +20 -2
  943. package/src/ToggleButton/ToggleButtonGroup.doc.mjs +1 -1
  944. package/src/ToggleButton/ToggleButtonGroup.tsx +3 -6
  945. package/src/Token/Token.doc.mjs +3 -3
  946. package/src/Token/Token.test.tsx +145 -0
  947. package/src/Token/Token.tsx +75 -61
  948. package/src/Token/TokenLink.tsx +107 -0
  949. package/src/Token/index.ts +28 -1
  950. package/src/Tokenizer/Tokenizer.doc.mjs +3 -3
  951. package/src/Tokenizer/Tokenizer.tsx +1 -1
  952. package/src/Toolbar/Toolbar.doc.mjs +3 -3
  953. package/src/Toolbar/Toolbar.tsx +1 -1
  954. package/src/Tooltip/Tooltip.doc.mjs +3 -3
  955. package/src/Tooltip/Tooltip.tsx +1 -1
  956. package/src/Tooltip/useTooltip.doc.mjs +2 -2
  957. package/src/TopNav/TopNav.doc.mjs +3 -3
  958. package/src/TopNav/TopNav.test.tsx +2 -2
  959. package/src/TopNav/TopNav.tsx +1 -1
  960. package/src/TopNav/TopNavHeading.doc.mjs +1 -12
  961. package/src/TopNav/TopNavHeading.tsx +8 -18
  962. package/src/TopNav/TopNavItem.doc.mjs +1 -1
  963. package/src/TopNav/TopNavItem.tsx +1 -1
  964. package/src/TopNav/TopNavMegaMenu.doc.mjs +1 -1
  965. package/src/TopNav/TopNavMegaMenu.tsx +32 -6
  966. package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +1 -1
  967. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +1 -1
  968. package/src/TopNav/TopNavMegaMenuItem.doc.mjs +1 -1
  969. package/src/TopNav/TopNavMegaMenuItem.tsx +1 -1
  970. package/src/TopNav/TopNavMenu.doc.mjs +1 -1
  971. package/src/TopNav/TopNavMenu.tsx +5 -4
  972. package/src/TreeList/TreeList.doc.mjs +3 -3
  973. package/src/TreeList/TreeList.test.tsx +10 -6
  974. package/src/TreeList/TreeList.tsx +1 -1
  975. package/src/TreeList/TreeListBranches.tsx +1 -1
  976. package/src/TreeList/TreeListItem.tsx +4 -3
  977. package/src/TreeList/TreeListTypes.ts +1 -18
  978. package/src/TreeList/index.ts +19 -1
  979. package/src/Typeahead/BaseTypeahead.doc.mjs +1 -1
  980. package/src/Typeahead/BaseTypeahead.tsx +13 -1
  981. package/src/Typeahead/Typeahead.doc.mjs +3 -3
  982. package/src/Typeahead/Typeahead.test.tsx +62 -0
  983. package/src/Typeahead/Typeahead.tsx +7 -1
  984. package/src/Typeahead/TypeaheadItem.doc.mjs +1 -1
  985. package/src/Typeahead/TypeaheadItem.tsx +1 -1
  986. package/src/VStack/VStack.tsx +1 -1
  987. package/src/VisuallyHidden/VisuallyHidden.doc.mjs +3 -3
  988. package/src/VisuallyHidden/VisuallyHidden.tsx +1 -1
  989. package/src/__tests__/babelPluginAddExtensions.test.ts +190 -0
  990. package/src/__tests__/forcedColors.ts +60 -0
  991. package/src/__tests__/inputWidthContract.test.tsx +8 -1
  992. package/src/doc-mjs.d.ts +5 -2
  993. package/src/docPropLiterals.test.ts +1 -1
  994. package/src/docPropReferences.test.ts +1 -1
  995. package/src/hooks/containerReveal.pool.stylex.ts +571 -0
  996. package/src/hooks/index.ts +7 -0
  997. package/src/hooks/useClickableContainer.doc.mjs +2 -2
  998. package/src/hooks/useContainerReveal.doc.mjs +75 -0
  999. package/src/hooks/useContainerReveal.test.tsx +116 -0
  1000. package/src/hooks/useContainerReveal.ts +181 -0
  1001. package/src/hooks/useEntryAnimation.doc.mjs +2 -2
  1002. package/src/hooks/useFocusTrap.doc.mjs +2 -2
  1003. package/src/hooks/useGridFocus.doc.mjs +2 -2
  1004. package/src/hooks/useGridFocus.ts +8 -6
  1005. package/src/hooks/useHotkeys.doc.mjs +2 -2
  1006. package/src/hooks/useImageMode.doc.mjs +2 -2
  1007. package/src/hooks/useInputContainer.doc.mjs +2 -2
  1008. package/src/hooks/useInputContainer.test.tsx +180 -0
  1009. package/src/hooks/useInputContainer.ts +36 -1
  1010. package/src/hooks/useInputStatusIcon.test.tsx +59 -0
  1011. package/src/hooks/useInputStatusIcon.tsx +12 -1
  1012. package/src/hooks/useKeyboardHint.doc.mjs +2 -2
  1013. package/src/hooks/useKeyboardHint.test.tsx +22 -0
  1014. package/src/hooks/useKeyboardHint.tsx +7 -3
  1015. package/src/hooks/useListFocus.doc.mjs +2 -2
  1016. package/src/hooks/useListFocus.ts +8 -7
  1017. package/src/hooks/useMediaQuery.doc.mjs +2 -2
  1018. package/src/hooks/useOverflow.doc.mjs +2 -2
  1019. package/src/hooks/useScrollLock.doc.mjs +2 -2
  1020. package/src/hooks/useScrollOverflow.doc.mjs +2 -2
  1021. package/src/hooks/useStreamingText.doc.mjs +2 -2
  1022. package/src/hooks/useTreeFocus.doc.mjs +2 -2
  1023. package/src/hooks/useTreeFocus.test.tsx +53 -1
  1024. package/src/hooks/useTreeFocus.ts +13 -2
  1025. package/src/i18n/InternationalizationProvider.doc.mjs +14 -2
  1026. package/src/i18n/InternationalizationProvider.tsx +6 -0
  1027. package/src/i18n/useDirection.ts +6 -3
  1028. package/src/i18n/useTranslator.doc.mjs +2 -2
  1029. package/src/index.ts +2 -18
  1030. package/src/theme/MediaTheme.doc.mjs +2 -2
  1031. package/src/theme/SyntaxTheme.doc.mjs +2 -2
  1032. package/src/theme/Theme.doc.mjs +2 -2
  1033. package/src/theme/Theme.tsx +3 -7
  1034. package/src/theme/contrast.test.ts +94 -0
  1035. package/src/theme/contrast.ts +99 -0
  1036. package/src/theme/defineTheme.test.ts +29 -30
  1037. package/src/theme/defineTheme.ts +11 -5
  1038. package/src/theme/expandColorScale.test.ts +387 -1
  1039. package/src/theme/expandColorScale.ts +126 -17
  1040. package/src/theme/generateThemeRules.ts +0 -15
  1041. package/src/theme/index.ts +11 -13
  1042. package/src/theme/themeRegistry.test.ts +59 -0
  1043. package/src/theme/themeRegistry.ts +53 -0
  1044. package/src/theme/tokens.stylex.ts +0 -19
  1045. package/src/theme/types.ts +14 -13
  1046. package/src/theme/useTheme.doc.mjs +2 -2
  1047. package/src/theme/useTheme.test.tsx +48 -3
  1048. package/src/theme/useTheme.ts +100 -29
  1049. package/src/utils/rtlStyles.ts +22 -0
  1050. package/dist/NavMenu/NavMenuItem.d.ts +0 -13
  1051. package/dist/NavMenu/NavMenuItem.d.ts.map +0 -1
  1052. package/dist/NavMenu/NavMenuItem.js +0 -16
  1053. package/dist/Thumbnail/thumbnail.markers.stylex.d.ts +0 -9
  1054. package/dist/Thumbnail/thumbnail.markers.stylex.d.ts.map +0 -1
  1055. package/dist/Thumbnail/thumbnail.markers.stylex.js +0 -14
  1056. package/dist/authoring/doc.d.ts +0 -145
  1057. package/dist/authoring/doc.d.ts.map +0 -1
  1058. package/dist/authoring/doc.js +0 -100
  1059. package/dist/authoring/index.d.ts +0 -29
  1060. package/dist/authoring/index.d.ts.map +0 -1
  1061. package/dist/authoring/index.js +0 -28
  1062. package/dist/authoring/integration.d.ts +0 -35
  1063. package/dist/authoring/integration.d.ts.map +0 -1
  1064. package/dist/authoring/integration.js +0 -30
  1065. package/dist/authoring/template.d.ts +0 -66
  1066. package/dist/authoring/template.d.ts.map +0 -1
  1067. package/dist/authoring/template.js +0 -55
  1068. package/dist/config.d.ts +0 -80
  1069. package/dist/config.d.ts.map +0 -1
  1070. package/dist/config.js +0 -40
  1071. package/dist/docs-types.d.ts +0 -969
  1072. package/dist/docs-types.d.ts.map +0 -1
  1073. package/dist/docs-types.js +0 -1
  1074. package/src/NavMenu/NavMenuItem.tsx +0 -19
  1075. package/src/Thumbnail/thumbnail.markers.stylex.ts +0 -12
  1076. package/src/authoring/doc.ts +0 -164
  1077. package/src/authoring/index.test.ts +0 -52
  1078. package/src/authoring/index.ts +0 -50
  1079. package/src/authoring/integration.ts +0 -42
  1080. package/src/authoring/template.ts +0 -74
  1081. package/src/config.test.ts +0 -16
  1082. package/src/config.ts +0 -92
  1083. package/src/docs-types.ts +0 -1108
@@ -1,12 +1,30 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
- import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
4
- import {render, screen, act, waitFor} from '@testing-library/react';
3
+ import {
4
+ describe,
5
+ it,
6
+ expect,
7
+ vi,
8
+ beforeAll,
9
+ beforeEach,
10
+ afterEach,
11
+ } from 'vitest';
12
+ import {render, screen, act, waitFor, fireEvent} from '@testing-library/react';
5
13
  import userEvent from '@testing-library/user-event';
6
14
  import {Timestamp} from './Timestamp';
7
15
  import {formatTooltipLines} from './tooltipEntries';
16
+ import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
17
+ import {InternationalizationProvider} from '../i18n';
8
18
 
9
19
  describe('Timestamp', () => {
20
+ // The hover card is loaded lazily (React.lazy + Suspense), so its chunk
21
+ // resolves asynchronously the first time a card renders. Warm the module
22
+ // cache once up front so findByRole('dialog') never races the cold import's
23
+ // resolution against its default 1s timeout.
24
+ beforeAll(async () => {
25
+ await import('./TimestampHoverCard');
26
+ });
27
+
10
28
  beforeEach(() => {
11
29
  vi.useFakeTimers();
12
30
  vi.setSystemTime(new Date('2026-03-25T12:00:00Z'));
@@ -88,6 +106,137 @@ describe('Timestamp', () => {
88
106
  expect(screen.getByText('yesterday')).toBeInTheDocument();
89
107
  });
90
108
 
109
+ // --- relative_short format ---
110
+
111
+ describe('relative_short format', () => {
112
+ it('renders "now" for very recent times', () => {
113
+ render(
114
+ <Timestamp value={Date.now() / 1000 - 5} format="relative_short" />,
115
+ );
116
+ expect(screen.getByText('now')).toBeInTheDocument();
117
+ });
118
+
119
+ it('abbreviates each past tier (s/m/h/d/mo/y)', () => {
120
+ const {rerender} = render(
121
+ <Timestamp value={Date.now() / 1000 - 30} format="relative_short" />,
122
+ );
123
+ expect(screen.getByText('30s ago')).toBeInTheDocument();
124
+
125
+ rerender(
126
+ <Timestamp
127
+ value={Date.now() / 1000 - 5 * 60}
128
+ format="relative_short"
129
+ />,
130
+ );
131
+ expect(screen.getByText('5m ago')).toBeInTheDocument();
132
+
133
+ rerender(
134
+ <Timestamp
135
+ value={Date.now() / 1000 - 2 * 3600}
136
+ format="relative_short"
137
+ />,
138
+ );
139
+ expect(screen.getByText('2h ago')).toBeInTheDocument();
140
+
141
+ rerender(
142
+ <Timestamp
143
+ value={Date.now() / 1000 - 3 * 86400}
144
+ format="relative_short"
145
+ />,
146
+ );
147
+ expect(screen.getByText('3d ago')).toBeInTheDocument();
148
+
149
+ rerender(
150
+ <Timestamp
151
+ value={Date.now() / 1000 - 90 * 86400}
152
+ format="relative_short"
153
+ />,
154
+ );
155
+ expect(screen.getByText('3mo ago')).toBeInTheDocument();
156
+
157
+ rerender(
158
+ <Timestamp
159
+ value={Date.now() / 1000 - 730 * 86400}
160
+ format="relative_short"
161
+ />,
162
+ );
163
+ expect(screen.getByText('2y ago')).toBeInTheDocument();
164
+ });
165
+
166
+ it('uses "mo" for months so it never collides with "m" (minutes)', () => {
167
+ // 45 days → months tier. A bare "m" here would be indistinguishable from
168
+ // the minutes unit, so months must render as "mo".
169
+ render(
170
+ <Timestamp
171
+ value={Date.now() / 1000 - 45 * 86400}
172
+ format="relative_short"
173
+ />,
174
+ );
175
+ expect(screen.getByText('1mo ago')).toBeInTheDocument();
176
+ });
177
+
178
+ it('renders a single day as "1d ago" (no "yesterday" idiom in short form)', () => {
179
+ render(
180
+ <Timestamp
181
+ value={Date.now() / 1000 - 100000}
182
+ format="relative_short"
183
+ />,
184
+ );
185
+ expect(screen.getByText('1d ago')).toBeInTheDocument();
186
+ });
187
+
188
+ it('renders future times with the "in" prefix and abbreviated units', () => {
189
+ const {rerender} = render(
190
+ <Timestamp
191
+ value={Date.now() / 1000 + 5 * 60}
192
+ format="relative_short"
193
+ />,
194
+ );
195
+ expect(screen.getByText('in 5m')).toBeInTheDocument();
196
+
197
+ rerender(
198
+ <Timestamp
199
+ value={Date.now() / 1000 + 2 * 3600}
200
+ format="relative_short"
201
+ />,
202
+ );
203
+ expect(screen.getByText('in 2h')).toBeInTheDocument();
204
+ });
205
+
206
+ it('does not round a tier up past its own boundary', () => {
207
+ const {rerender} = render(
208
+ <Timestamp value={Date.now() / 1000 - 3599} format="relative_short" />,
209
+ );
210
+ expect(screen.getByText('59m ago')).toBeInTheDocument();
211
+
212
+ rerender(
213
+ <Timestamp value={Date.now() / 1000 - 86399} format="relative_short" />,
214
+ );
215
+ expect(screen.getByText('23h ago')).toBeInTheDocument();
216
+ });
217
+
218
+ it('treats a hair in the future as "now" (clock skew)', () => {
219
+ render(
220
+ <Timestamp value={Date.now() / 1000 + 2} format="relative_short" />,
221
+ );
222
+ expect(screen.getByText('now')).toBeInTheDocument();
223
+ });
224
+
225
+ it('keeps the full absolute date as the accessible name', () => {
226
+ render(
227
+ <Timestamp
228
+ value={Date.now() / 1000 - 2 * 3600}
229
+ format="relative_short"
230
+ />,
231
+ );
232
+ const el = screen.getByText('2h ago');
233
+ // Same a11y contract as the long relative form: the visible short label
234
+ // is backed by the full absolute date for screen readers.
235
+ expect(el).toHaveAttribute('aria-label');
236
+ expect(el.getAttribute('aria-label')).not.toBe('2h ago');
237
+ });
238
+ });
239
+
91
240
  // --- Standard display formats ---
92
241
 
93
242
  it('renders date format', () => {
@@ -194,6 +343,26 @@ describe('Timestamp', () => {
194
343
  expect(el.textContent).toMatch(/\d{2}:\d{2}:\d{2}/);
195
344
  });
196
345
 
346
+ it('renders unix_seconds format as whole epoch seconds (zone-independent)', () => {
347
+ // 2026-02-19T17:00:00Z is 1771520400 seconds since the epoch. The value is
348
+ // absolute, so it is the same regardless of the viewer's zone.
349
+ render(
350
+ <Timestamp
351
+ value="2026-02-19T17:00:00Z"
352
+ format="unix_seconds"
353
+ data-testid="ts"
354
+ />,
355
+ );
356
+ expect(screen.getByTestId('ts').textContent).toBe('1771520400');
357
+ });
358
+
359
+ it('renders unix_seconds from a Unix-seconds value input unchanged', () => {
360
+ render(
361
+ <Timestamp value={1771520400} format="unix_seconds" data-testid="ts" />,
362
+ );
363
+ expect(screen.getByTestId('ts').textContent).toBe('1771520400');
364
+ });
365
+
197
366
  // --- Auto format ---
198
367
 
199
368
  it('auto format uses relative for recent times', () => {
@@ -373,17 +542,17 @@ describe('Timestamp', () => {
373
542
  }
374
543
  });
375
544
 
376
- // --- Tooltip keyboard reachability (WCAG 1.4.13 / 2.1.1) ---
545
+ // --- Hover card keyboard reachability (WCAG 1.4.13 / 2.1.1) ---
377
546
 
378
- describe('tooltip keyboard reachability', () => {
547
+ describe('hover card keyboard reachability', () => {
379
548
  const originalMatches = HTMLElement.prototype.matches;
380
549
  const originalShowPopover = HTMLElement.prototype.showPopover;
381
550
  const originalHidePopover = HTMLElement.prototype.hidePopover;
382
551
 
383
552
  beforeEach(() => {
384
- // The tooltip is lazy-loaded via a dynamic import; real timers let the
385
- // import promise and RTL's waitFor resolve naturally (the outer
386
- // beforeEach installs fake timers, which would stall them).
553
+ // The card content renders inline in a (mocked) popover; real timers let
554
+ // RTL's findBy* and the async paths resolve (the outer beforeEach
555
+ // installs fake timers, which would stall them).
387
556
  vi.useRealTimers();
388
557
 
389
558
  // Mock the Popover API, which jsdom does not implement.
@@ -391,7 +560,7 @@ describe('Timestamp', () => {
391
560
  HTMLElement.prototype.hidePopover = vi.fn();
392
561
 
393
562
  // jsdom does not derive :focus-visible from keyboard focus for a <time>
394
- // element; treat the focused element as focus-visible so the tooltip's
563
+ // element; treat the focused element as focus-visible so the card's
395
564
  // keyboard-focus path can be exercised.
396
565
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
397
566
  (HTMLElement.prototype as any).matches = function (
@@ -411,7 +580,7 @@ describe('Timestamp', () => {
411
580
  HTMLElement.prototype.hidePopover = originalHidePopover;
412
581
  });
413
582
 
414
- it('makes the <time> element focusable while the tooltip is attached', () => {
583
+ it('makes the <time> element focusable while the hover card is attached', () => {
415
584
  render(
416
585
  <Timestamp
417
586
  value={Date.now() / 1000 - 3600}
@@ -422,7 +591,7 @@ describe('Timestamp', () => {
422
591
  expect(screen.getByTestId('ts')).toHaveAttribute('tabindex', '0');
423
592
  });
424
593
 
425
- it('shows the tooltip when the timestamp receives keyboard focus', async () => {
594
+ it('shows the hover card when the timestamp receives keyboard focus', async () => {
426
595
  const user = userEvent.setup();
427
596
  render(
428
597
  <Timestamp
@@ -433,13 +602,13 @@ describe('Timestamp', () => {
433
602
  );
434
603
  const el = screen.getByTestId('ts');
435
604
 
436
- // Wait for the lazy-loaded tooltip layer to mount and confirm it
437
- // carries the full absolute time (same string as the aria-label).
605
+ // The card layer mounts inline and carries the full absolute time (the
606
+ // same string as the aria-label) as its single default copyable row.
438
607
  // Compare with normalized whitespace: Intl output can contain narrow
439
608
  // no-break spaces that jest-dom's matcher normalization would break on.
440
- const layer = await screen.findByRole('tooltip', {hidden: true});
609
+ const card = await screen.findByRole('dialog', {hidden: true});
441
610
  const normalize = (s: string) => s.replace(/\s+/g, ' ');
442
- expect(normalize(layer.textContent ?? '')).toContain(
611
+ expect(normalize(card.textContent ?? '')).toContain(
443
612
  normalize(el.getAttribute('aria-label') ?? '\0'),
444
613
  );
445
614
 
@@ -451,7 +620,7 @@ describe('Timestamp', () => {
451
620
  });
452
621
  });
453
622
 
454
- it('does not add a tab stop when the tooltip is disabled', () => {
623
+ it('does not add a tab stop when the hover card is disabled', () => {
455
624
  render(
456
625
  <Timestamp
457
626
  value={Date.now() / 1000 - 3600}
@@ -463,7 +632,7 @@ describe('Timestamp', () => {
463
632
  expect(screen.getByTestId('ts')).not.toHaveAttribute('tabindex');
464
633
  });
465
634
 
466
- it('does not add a tab stop for absolute formats (no tooltip)', () => {
635
+ it('does not add a tab stop for absolute formats (no hover card)', () => {
467
636
  render(
468
637
  <Timestamp
469
638
  value="2026-02-19T17:00:00Z"
@@ -474,7 +643,7 @@ describe('Timestamp', () => {
474
643
  expect(screen.getByTestId('ts')).not.toHaveAttribute('tabindex');
475
644
  });
476
645
 
477
- it('keeps the full absolute aria-label while the tooltip is attached', () => {
646
+ it('keeps the full absolute aria-label while the hover card is attached', () => {
478
647
  render(
479
648
  <Timestamp
480
649
  value={Date.now() / 1000 - 3600}
@@ -489,30 +658,33 @@ describe('Timestamp', () => {
489
658
  });
490
659
  });
491
660
 
492
- // --- Multi-zone / multi-format tooltip entries ---
493
-
494
- describe('tooltipEntries', () => {
495
- // A fixed instant that lands on a different calendar day in Tokyo, so a
496
- // zone-blind implementation is visible in the output.
497
- const VALUE = '2026-02-19T17:00:00Z';
661
+ // --- Default hover card (no tooltipEntries) ---
498
662
 
663
+ describe('default hover card (no tooltipEntries)', () => {
499
664
  const originalShowPopover = HTMLElement.prototype.showPopover;
500
665
  const originalHidePopover = HTMLElement.prototype.hidePopover;
501
666
 
502
667
  beforeEach(() => {
503
- // The tooltip is lazy-loaded; real timers let the dynamic import and
504
- // RTL's findBy* resolve (the outer beforeEach installs fake timers).
668
+ // The card content renders inline in a (mocked) popover; real timers let
669
+ // RTL's findBy* and the async clipboard write resolve (the outer
670
+ // beforeEach installs fake timers).
505
671
  vi.useRealTimers();
506
672
  HTMLElement.prototype.showPopover = vi.fn();
507
673
  HTMLElement.prototype.hidePopover = vi.fn();
674
+ // jsdom does not implement the async Clipboard API.
675
+ Object.defineProperty(navigator, 'clipboard', {
676
+ value: {writeText: vi.fn().mockResolvedValue(undefined)},
677
+ configurable: true,
678
+ });
508
679
  });
509
680
 
510
681
  afterEach(() => {
511
682
  HTMLElement.prototype.showPopover = originalShowPopover;
512
683
  HTMLElement.prototype.hidePopover = originalHidePopover;
684
+ __resetLiveRegionsForTest();
513
685
  });
514
686
 
515
- it('leaves the default tooltip as a single unwrapped line', async () => {
687
+ it('renders the unified copyable card with a single default absolute row', async () => {
516
688
  render(
517
689
  <Timestamp
518
690
  value={Date.now() / 1000 - 3600}
@@ -520,18 +692,123 @@ describe('Timestamp', () => {
520
692
  data-testid="ts"
521
693
  />,
522
694
  );
523
- const layer = await screen.findByRole('tooltip', {hidden: true});
524
- // No entries configured — the tooltip content stays the bare string it
525
- // has always been, with no list wrapper introduced around it.
526
- expect(layer.querySelector('dl')).toBeNull();
695
+ // With no entries the hover surface is still the copyable card — one
696
+ // surface, one stylingnever the old read-only tooltip. (The copy
697
+ // button carries its own small "Copy" tooltip; that is not the hover
698
+ // surface, so exclude it.)
699
+ expect(
700
+ screen
701
+ .queryAllByRole('tooltip', {hidden: true})
702
+ .filter(el => !/^(Copy|Copied)$/.test(el.textContent?.trim() ?? '')),
703
+ ).toHaveLength(0);
704
+ const card = await screen.findByRole('dialog', {hidden: true});
705
+ // The default card is the named details card, exactly as the configured
706
+ // one is.
707
+ expect(card).toHaveAttribute('aria-label', 'Timestamp details');
708
+ // Exactly one row, carrying the full absolute time (the same string as
709
+ // the aria-label) with its own copy button.
710
+ expect(card.querySelectorAll('dd')).toHaveLength(1);
711
+ expect(card.querySelectorAll('button')).toHaveLength(1);
527
712
 
528
713
  const normalize = (s: string) => s.replace(/\s+/g, ' ');
529
- expect(normalize(layer.textContent ?? '')).toContain(
714
+ expect(normalize(card.textContent ?? '')).toContain(
530
715
  normalize(screen.getByTestId('ts').getAttribute('aria-label') ?? '\0'),
531
716
  );
532
717
  });
533
718
 
534
- it('renders one tooltip line per configured entry', async () => {
719
+ it("copies the default absolute row's value", async () => {
720
+ render(<Timestamp value={Date.now() / 1000 - 3600} format="relative" />);
721
+ const card = await screen.findByRole('dialog', {hidden: true});
722
+ const rowValue = card.querySelector('dd')?.textContent ?? '';
723
+ expect(rowValue).toBeTruthy();
724
+ fireEvent.click(card.querySelector('button')!);
725
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith(rowValue);
726
+ // Let the async copy resolve and flip the button into its copied state
727
+ // so the state update settles inside act().
728
+ await waitFor(() => {
729
+ expect(
730
+ screen.getByRole('button', {name: 'Copied', hidden: true}),
731
+ ).toBeInTheDocument();
732
+ });
733
+ });
734
+
735
+ it("shows a 'Copy' tooltip on the copy button, flipping to 'Copied' after a copy", async () => {
736
+ render(<Timestamp value={Date.now() / 1000 - 3600} format="relative" />);
737
+ const card = await screen.findByRole('dialog', {hidden: true});
738
+ const button = card.querySelector('button')!;
739
+ // The visible tooltip content defaults to the short imperative 'Copy'
740
+ // (the full "Copy <value>" string stays the button's aria-label).
741
+ await waitFor(() =>
742
+ expect(
743
+ screen.getByText('Copy', {
744
+ selector: '[role="tooltip"] *, [role="tooltip"]',
745
+ }),
746
+ ).toBeInTheDocument(),
747
+ );
748
+ fireEvent.click(button);
749
+ // After a successful copy the tooltip content flips to 'Copied' in step
750
+ // with the icon/aria-label.
751
+ await waitFor(() =>
752
+ expect(
753
+ screen.getByText('Copied', {
754
+ selector: '[role="tooltip"] *, [role="tooltip"]',
755
+ }),
756
+ ).toBeInTheDocument(),
757
+ );
758
+ });
759
+ });
760
+
761
+ // --- Multi-zone / multi-format copyable hover card (tooltipEntries) ---
762
+
763
+ describe('tooltipEntries copyable hover card', () => {
764
+ // A fixed instant that lands on a different calendar day in Tokyo, so a
765
+ // zone-blind implementation is visible in the output.
766
+ const VALUE = '2026-02-19T17:00:00Z';
767
+
768
+ const originalShowPopover = HTMLElement.prototype.showPopover;
769
+ const originalHidePopover = HTMLElement.prototype.hidePopover;
770
+
771
+ beforeEach(() => {
772
+ // The card content renders inline in a (mocked) popover, so its rows are
773
+ // in the DOM without opening it. Real timers so RTL's findBy* and the
774
+ // async clipboard write resolve (the outer beforeEach installs fake ones).
775
+ vi.useRealTimers();
776
+ HTMLElement.prototype.showPopover = vi.fn();
777
+ HTMLElement.prototype.hidePopover = vi.fn();
778
+ // jsdom does not implement the async Clipboard API.
779
+ Object.defineProperty(navigator, 'clipboard', {
780
+ value: {writeText: vi.fn().mockResolvedValue(undefined)},
781
+ configurable: true,
782
+ });
783
+ });
784
+
785
+ afterEach(() => {
786
+ HTMLElement.prototype.showPopover = originalShowPopover;
787
+ HTMLElement.prototype.hidePopover = originalHidePopover;
788
+ __resetLiveRegionsForTest();
789
+ });
790
+
791
+ it('presents configured entries as a named card, not a read-only tooltip', async () => {
792
+ render(
793
+ <Timestamp
794
+ value={VALUE}
795
+ format="relative"
796
+ tooltipEntries={[{label: 'Local'}, {timezoneID: 'UTC', label: 'UTC'}]}
797
+ />,
798
+ );
799
+ // Entries present — the surface is the interactive card, never the
800
+ // lightweight read-only tooltip. (The copy button's own "Copy" tooltip
801
+ // is not the hover surface, so exclude it.)
802
+ expect(
803
+ screen
804
+ .queryAllByRole('tooltip', {hidden: true})
805
+ .filter(el => !/^(Copy|Copied)$/.test(el.textContent?.trim() ?? '')),
806
+ ).toHaveLength(0);
807
+ const card = await screen.findByRole('dialog', {hidden: true});
808
+ expect(card).toHaveAttribute('aria-label', 'Timestamp details');
809
+ });
810
+
811
+ it('renders one row per configured entry, read-only by default', async () => {
535
812
  render(
536
813
  <Timestamp
537
814
  value={VALUE}
@@ -543,11 +820,37 @@ describe('Timestamp', () => {
543
820
  ]}
544
821
  />,
545
822
  );
546
- const layer = await screen.findByRole('tooltip', {hidden: true});
547
- expect(layer.querySelectorAll('dd')).toHaveLength(3);
548
- expect(layer.textContent).toContain('Local');
549
- expect(layer.textContent).toContain('UTC');
550
- expect(layer.textContent).toContain('Tokyo');
823
+ const card = await screen.findByRole('dialog', {hidden: true});
824
+ expect(card.querySelectorAll('dd')).toHaveLength(3);
825
+ // Entries are read-only unless they opt in, so no copy buttons and no
826
+ // trailing action column are rendered.
827
+ expect(card.querySelectorAll('button')).toHaveLength(0);
828
+ expect(card.textContent).toContain('Local');
829
+ expect(card.textContent).toContain('UTC');
830
+ expect(card.textContent).toContain('Tokyo');
831
+ });
832
+
833
+ it('renders a copy button only on rows that opt into isCopyable', async () => {
834
+ render(
835
+ <Timestamp
836
+ value={VALUE}
837
+ format="relative"
838
+ tooltipEntries={[
839
+ {label: 'Local'},
840
+ {timezoneID: 'UTC', label: 'UTC'},
841
+ {
842
+ timezoneID: 'UTC',
843
+ format: 'system_date_time',
844
+ label: 'ISO',
845
+ isCopyable: true,
846
+ },
847
+ ]}
848
+ />,
849
+ );
850
+ const card = await screen.findByRole('dialog', {hidden: true});
851
+ // Three rows, but only the opted-in row carries a copy button.
852
+ expect(card.querySelectorAll('dd')).toHaveLength(3);
853
+ expect(card.querySelectorAll('button')).toHaveLength(1);
551
854
  });
552
855
 
553
856
  it('renders each entry in the time zone it names', async () => {
@@ -565,8 +868,8 @@ describe('Timestamp', () => {
565
868
  ]}
566
869
  />,
567
870
  );
568
- const layer = await screen.findByRole('tooltip', {hidden: true});
569
- const values = Array.from(layer.querySelectorAll('dd')).map(
871
+ const card = await screen.findByRole('dialog', {hidden: true});
872
+ const values = Array.from(card.querySelectorAll('dd')).map(
570
873
  el => el.textContent,
571
874
  );
572
875
  // Machine formats are locale- and host-timezone-independent, so these
@@ -574,7 +877,62 @@ describe('Timestamp', () => {
574
877
  expect(values).toEqual(['2026-02-19 17:00:00', '2026-02-20 02:00:00']);
575
878
  });
576
879
 
577
- it('shows a tooltip for absolute formats once entries are configured', async () => {
880
+ it("copies an opted-in row's value and flips the button to the copied state", async () => {
881
+ render(
882
+ <Timestamp
883
+ value={VALUE}
884
+ format="relative"
885
+ tooltipEntries={[
886
+ {
887
+ label: 'ISO',
888
+ format: 'system_date_time',
889
+ timezoneID: 'UTC',
890
+ isCopyable: true,
891
+ },
892
+ ]}
893
+ />,
894
+ );
895
+ const card = await screen.findByRole('dialog', {hidden: true});
896
+ const [rowValue] = Array.from(card.querySelectorAll('dd')).map(
897
+ el => el.textContent ?? '',
898
+ );
899
+ const copyButton = card.querySelectorAll('button')[0];
900
+
901
+ fireEvent.click(copyButton);
902
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith(rowValue);
903
+
904
+ // The button announces and flips its icon/label to the copied state.
905
+ await waitFor(() => {
906
+ expect(
907
+ screen.getByRole('button', {name: 'Copied', hidden: true}),
908
+ ).toBeInTheDocument();
909
+ });
910
+ });
911
+
912
+ it('announces the copy to a polite live region through the i18n catalog', async () => {
913
+ render(
914
+ <InternationalizationProvider
915
+ locale="fr"
916
+ overrides={{fr: {'@astryx.timestamp.copied': 'Copié'}}}>
917
+ <Timestamp
918
+ value={VALUE}
919
+ format="relative"
920
+ tooltipEntries={[
921
+ {timezoneID: 'UTC', label: 'UTC', isCopyable: true},
922
+ ]}
923
+ />
924
+ </InternationalizationProvider>,
925
+ );
926
+ const card = await screen.findByRole('dialog', {hidden: true});
927
+ fireEvent.click(card.querySelector('button')!);
928
+ await waitFor(() => {
929
+ expect(
930
+ document.querySelector('[data-astryx-live-region="polite"]'),
931
+ ).toHaveTextContent('Copié');
932
+ });
933
+ });
934
+
935
+ it('shows the card for absolute formats once entries are configured', async () => {
578
936
  render(
579
937
  <Timestamp
580
938
  value={VALUE}
@@ -583,10 +941,10 @@ describe('Timestamp', () => {
583
941
  data-testid="ts"
584
942
  />,
585
943
  );
586
- // Without entries an absolute format has no tooltip at all; configuring
587
- // entries must not be silently ignored.
588
- const layer = await screen.findByRole('tooltip', {hidden: true});
589
- expect(layer.textContent).toContain('UTC');
944
+ // Without entries an absolute format has no hover surface at all;
945
+ // configuring entries must not be silently ignored.
946
+ const card = await screen.findByRole('dialog', {hidden: true});
947
+ expect(card.textContent).toContain('UTC');
590
948
  // ...and the anchor becomes keyboard-reachable, as it is for relative.
591
949
  expect(screen.getByTestId('ts')).toHaveAttribute('tabindex', '0');
592
950
  });
@@ -600,25 +958,37 @@ describe('Timestamp', () => {
600
958
  data-testid="ts"
601
959
  />,
602
960
  );
603
- // `hasTooltip` stays the only on/off switch an empty array is not a
604
- // second way to spell "off", and it must not widen the gate either.
961
+ // An empty array is not a way to configure the card with no lines to
962
+ // show, an absolute format stays surface-less (no tab stop, no card).
605
963
  expect(screen.getByTestId('ts')).not.toHaveAttribute('tabindex');
964
+ expect(screen.queryByRole('dialog', {hidden: true})).toBeNull();
606
965
  });
607
966
 
608
- it('still honors hasTooltip={false} when entries are configured', () => {
967
+ it('stays inert when hasTooltip is false even with entries configured', () => {
609
968
  render(
610
969
  <Timestamp
611
970
  value={VALUE}
612
- format="date_time"
971
+ format="relative"
613
972
  hasTooltip={false}
614
- tooltipEntries={[{timezoneID: 'UTC'}]}
973
+ tooltipEntries={[{timezoneID: 'UTC', label: 'UTC'}]}
615
974
  data-testid="ts"
616
975
  />,
617
976
  );
977
+ // hasTooltip stays the on/off switch: false suppresses the surface even
978
+ // when entries would otherwise upgrade it to the card.
979
+ expect(screen.queryByRole('dialog', {hidden: true})).toBeNull();
980
+ expect(
981
+ screen
982
+ .queryAllByRole('tooltip', {hidden: true})
983
+ .filter(el => !/^(Copy|Copied)$/.test(el.textContent?.trim() ?? '')),
984
+ ).toHaveLength(0);
618
985
  expect(screen.getByTestId('ts')).not.toHaveAttribute('tabindex');
986
+ expect(
987
+ screen.getByTestId('ts').getAttribute('aria-describedby'),
988
+ ).toBeNull();
619
989
  });
620
990
 
621
- it('leaves the accessible name unchanged when entries are configured', async () => {
991
+ it('leaves the accessible name unchanged when entries are configured', () => {
622
992
  const value = Date.now() / 1000 - 3600;
623
993
  const {unmount} = render(
624
994
  <Timestamp value={value} format="relative" data-testid="a" />,
@@ -635,8 +1005,8 @@ describe('Timestamp', () => {
635
1005
  />,
636
1006
  );
637
1007
  // The accessible name stays the canonical absolute time in the viewer's
638
- // own zone; the extra zones reach assistive tech through the tooltip's
639
- // aria-describedby, not by being stuffed into the name.
1008
+ // own zone; the extra zones reach assistive tech through the card, not
1009
+ // by being stuffed into the name.
640
1010
  expect(screen.getByTestId('b').getAttribute('aria-label')).toBe(before);
641
1011
  });
642
1012
 
@@ -661,8 +1031,8 @@ describe('Timestamp', () => {
661
1031
  tooltipEntries={[{timezoneID: 'UTC', label: 'UTC'}]}
662
1032
  />,
663
1033
  );
664
- // The invalid-value bail-out runs before any tooltip work, so there is
665
- // no half-rendered tooltip anchored to nothing.
1034
+ // The invalid-value bail-out runs before any hover-surface work, so
1035
+ // there is no half-rendered card anchored to nothing.
666
1036
  expect(container).toBeEmptyDOMElement();
667
1037
  } finally {
668
1038
  warn.mockRestore();
@@ -682,8 +1052,8 @@ describe('Timestamp', () => {
682
1052
  />,
683
1053
  );
684
1054
  // autoThreshold={0} forces the absolute branch regardless of the clock.
685
- const layer = await screen.findByRole('tooltip', {hidden: true});
686
- expect(layer.textContent).toContain('2026-02-19 17:00:00');
1055
+ const card = await screen.findByRole('dialog', {hidden: true});
1056
+ expect(card.textContent).toContain('2026-02-19 17:00:00');
687
1057
  expect(screen.getByTestId('ts')).toHaveAttribute('tabindex', '0');
688
1058
  });
689
1059
 
@@ -697,8 +1067,8 @@ describe('Timestamp', () => {
697
1067
  ]}
698
1068
  />,
699
1069
  );
700
- const layer = await screen.findByRole('tooltip', {hidden: true});
701
- expect(layer.textContent).toContain('2026-02-19 17:00:00');
1070
+ const card = await screen.findByRole('dialog', {hidden: true});
1071
+ expect(card.textContent).toContain('2026-02-19 17:00:00');
702
1072
  });
703
1073
 
704
1074
  it('pairs exactly one label cell with one value cell per entry', async () => {
@@ -713,12 +1083,12 @@ describe('Timestamp', () => {
713
1083
  ]}
714
1084
  />,
715
1085
  );
716
- const layer = await screen.findByRole('tooltip', {hidden: true});
717
- // An unlabeled entry still emits its label cell, so the two-column grid
718
- // stays aligned and the <dl> stays valid markup.
719
- expect(layer.querySelectorAll('dt')).toHaveLength(3);
720
- expect(layer.querySelectorAll('dd')).toHaveLength(3);
721
- expect(layer.querySelectorAll('dt')[1].textContent).toBe('');
1086
+ const card = await screen.findByRole('dialog', {hidden: true});
1087
+ // An unlabeled entry still emits its label cell, so the grid stays
1088
+ // aligned and the <dl> stays valid markup.
1089
+ expect(card.querySelectorAll('dt')).toHaveLength(3);
1090
+ expect(card.querySelectorAll('dd')).toHaveLength(3);
1091
+ expect(card.querySelectorAll('dt')[1].textContent).toBe('');
722
1092
  });
723
1093
 
724
1094
  it('gives the tab stop back when entries are removed', () => {
@@ -733,50 +1103,11 @@ describe('Timestamp', () => {
733
1103
  expect(screen.getByTestId('ts')).toHaveAttribute('tabindex', '0');
734
1104
 
735
1105
  rerender(<Timestamp value={VALUE} format="date_time" data-testid="ts" />);
736
- // The widened gate is driven purely by entry presence, so dropping the
737
- // prop must also drop the tab stop rather than stranding one.
1106
+ // The surface is driven purely by entry presence, so dropping the prop
1107
+ // must also drop the tab stop rather than stranding one.
738
1108
  expect(screen.getByTestId('ts')).not.toHaveAttribute('tabindex');
739
1109
  });
740
1110
 
741
- it('describes an absolute-format timestamp with its tooltip', async () => {
742
- render(
743
- <Timestamp
744
- value={VALUE}
745
- format="date_time"
746
- tooltipEntries={[{timezoneID: 'UTC', label: 'UTC'}]}
747
- data-testid="ts"
748
- />,
749
- );
750
- const layer = await screen.findByRole('tooltip', {hidden: true});
751
- const el = screen.getByTestId('ts');
752
- // An absolute format carries no aria-label, so aria-describedby is the
753
- // only route the configured zones have to assistive tech.
754
- expect(el.getAttribute('aria-label')).toBeNull();
755
- await waitFor(() => {
756
- expect(el.getAttribute('aria-describedby')).toBe(layer.id);
757
- });
758
- expect(layer.id).toBeTruthy();
759
- });
760
-
761
- it('leaves no tooltip and no description when hasTooltip is false', () => {
762
- render(
763
- <Timestamp
764
- value={VALUE}
765
- format="relative"
766
- hasTooltip={false}
767
- tooltipEntries={[{timezoneID: 'UTC', label: 'UTC'}]}
768
- data-testid="ts"
769
- />,
770
- );
771
- expect(
772
- screen.queryByRole('tooltip', {hidden: true}),
773
- ).not.toBeInTheDocument();
774
- // No orphaned reference pointing at a tooltip that was never rendered.
775
- expect(
776
- screen.getByTestId('ts').getAttribute('aria-describedby'),
777
- ).toBeNull();
778
- });
779
-
780
1111
  it('does not crash on an unknown time zone', async () => {
781
1112
  const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
782
1113
  try {
@@ -790,8 +1121,8 @@ describe('Timestamp', () => {
790
1121
  ]}
791
1122
  />,
792
1123
  );
793
- const layer = await screen.findByRole('tooltip', {hidden: true});
794
- const values = Array.from(layer.querySelectorAll('dd')).map(
1124
+ const card = await screen.findByRole('dialog', {hidden: true});
1125
+ const values = Array.from(card.querySelectorAll('dd')).map(
795
1126
  el => el.textContent,
796
1127
  );
797
1128
  expect(values).toHaveLength(2);