@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4

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 (579) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +18 -20
  4. package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
  5. package/dist/AppShell/AppShell.d.ts +1 -1
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +53 -55
  8. package/dist/AspectRatio/AspectRatio.d.ts +10 -48
  9. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js +12 -33
  11. package/dist/AspectRatio/index.d.ts +1 -1
  12. package/dist/AspectRatio/index.d.ts.map +1 -1
  13. package/dist/Avatar/Avatar.d.ts.map +1 -1
  14. package/dist/Avatar/Avatar.js +25 -27
  15. package/dist/Avatar/AvatarStatusDot.js +5 -5
  16. package/dist/AvatarGroup/AvatarGroup.js +5 -5
  17. package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
  18. package/dist/Badge/Badge.js +3 -3
  19. package/dist/Banner/Banner.d.ts.map +1 -1
  20. package/dist/Banner/Banner.js +25 -32
  21. package/dist/Blockquote/Blockquote.js +7 -7
  22. package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
  23. package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
  24. package/dist/Button/Button.js +19 -19
  25. package/dist/ButtonGroup/ButtonGroup.js +7 -7
  26. package/dist/Calendar/Calendar.d.ts.map +1 -1
  27. package/dist/Calendar/Calendar.js +48 -68
  28. package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
  29. package/dist/Calendar/styles.d.ts +2 -2
  30. package/dist/Calendar/styles.d.ts.map +1 -1
  31. package/dist/Calendar/styles.js +2 -2
  32. package/dist/Card/Card.d.ts +2 -4
  33. package/dist/Card/Card.d.ts.map +1 -1
  34. package/dist/Card/Card.js +10 -18
  35. package/dist/Carousel/Carousel.d.ts.map +1 -1
  36. package/dist/Carousel/Carousel.js +21 -24
  37. package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
  38. package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
  39. package/dist/Carousel/carousel.markers.stylex.js +12 -0
  40. package/dist/Center/Center.js +3 -3
  41. package/dist/Chat/ChatComposer.js +23 -23
  42. package/dist/Chat/ChatComposerDrawer.js +14 -14
  43. package/dist/Chat/ChatComposerInput.d.ts +1 -1
  44. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  45. package/dist/Chat/ChatComposerInput.js +15 -27
  46. package/dist/Chat/ChatDictationButton.d.ts +1 -1
  47. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  48. package/dist/Chat/ChatDictationButton.js +11 -13
  49. package/dist/Chat/ChatLayout.js +17 -17
  50. package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
  51. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  52. package/dist/Chat/ChatLayoutScrollButton.js +10 -12
  53. package/dist/Chat/ChatMessage.js +12 -12
  54. package/dist/Chat/ChatMessageBubble.js +7 -7
  55. package/dist/Chat/ChatMessageList.js +14 -14
  56. package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
  57. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  58. package/dist/Chat/ChatMessageMetadata.js +12 -14
  59. package/dist/Chat/ChatPastedTextToken.js +13 -13
  60. package/dist/Chat/ChatSendButton.js +3 -3
  61. package/dist/Chat/ChatSystemMessage.d.ts +1 -1
  62. package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
  63. package/dist/Chat/ChatSystemMessage.js +17 -17
  64. package/dist/Chat/ChatTokenizedText.d.ts +1 -1
  65. package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
  66. package/dist/Chat/ChatTokenizedText.js +15 -24
  67. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  68. package/dist/Chat/ChatToolCalls.js +74 -81
  69. package/dist/Chat/index.d.ts +1 -1
  70. package/dist/Chat/index.d.ts.map +1 -1
  71. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  72. package/dist/Chat/useTriggerMenu.js +15 -15
  73. package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
  74. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  75. package/dist/CheckboxInput/CheckboxInput.js +23 -25
  76. package/dist/CheckboxList/CheckboxList.js +9 -9
  77. package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
  78. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  79. package/dist/CheckboxList/CheckboxListItem.js +6 -8
  80. package/dist/Citation/Citation.js +10 -10
  81. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  82. package/dist/ClickableCard/ClickableCard.js +9 -32
  83. package/dist/Code/Code.js +3 -3
  84. package/dist/CodeBlock/CodeBlock.d.ts +1 -10
  85. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  86. package/dist/CodeBlock/CodeBlock.js +52 -88
  87. package/dist/Collapsible/Collapsible.d.ts +3 -9
  88. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  89. package/dist/Collapsible/Collapsible.js +22 -110
  90. package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
  91. package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
  92. package/dist/Collapsible/CollapsibleGroup.js +12 -73
  93. package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
  94. package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
  95. package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
  96. package/dist/Collapsible/index.d.ts +0 -1
  97. package/dist/Collapsible/index.d.ts.map +1 -1
  98. package/dist/Collapsible/useCollapsible.d.ts +1 -4
  99. package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
  100. package/dist/Collapsible/useCollapsible.js +6 -20
  101. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  102. package/dist/CommandPalette/CommandPalette.js +34 -36
  103. package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
  104. package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
  105. package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
  106. package/dist/CommandPalette/CommandPaletteInput.js +13 -13
  107. package/dist/CommandPalette/CommandPaletteItem.js +3 -3
  108. package/dist/CommandPalette/CommandPaletteList.js +3 -3
  109. package/dist/ContextMenu/ContextMenu.d.ts +2 -7
  110. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  111. package/dist/ContextMenu/ContextMenu.js +43 -76
  112. package/dist/DateInput/DateInput.js +18 -18
  113. package/dist/DateRangeInput/DateRangeInput.js +21 -21
  114. package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
  115. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  116. package/dist/DateTimeInput/DateTimeInput.js +26 -30
  117. package/dist/DateTimeInput/index.d.ts +1 -1
  118. package/dist/DateTimeInput/index.d.ts.map +1 -1
  119. package/dist/Dialog/Dialog.js +9 -9
  120. package/dist/Dialog/DialogHeader.js +16 -16
  121. package/dist/Dialog/useImperativeDialog.js +3 -3
  122. package/dist/Divider/Divider.js +7 -7
  123. package/dist/DropdownMenu/DropdownMenu.js +10 -10
  124. package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
  125. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  126. package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
  127. package/dist/DropdownMenu/renderDropdownItems.js +10 -10
  128. package/dist/EmptyState/EmptyState.js +9 -9
  129. package/dist/Field/Field.js +17 -17
  130. package/dist/Field/FieldLabel.js +15 -15
  131. package/dist/Field/InputClearButton.js +5 -5
  132. package/dist/FieldStatus/FieldStatus.js +3 -3
  133. package/dist/FileInput/FileInput.js +29 -29
  134. package/dist/FormLayout/FormLayout.js +5 -5
  135. package/dist/Grid/Grid.d.ts +3 -4
  136. package/dist/Grid/Grid.d.ts.map +1 -1
  137. package/dist/Grid/Grid.js +12 -29
  138. package/dist/Grid/GridSpan.js +3 -3
  139. package/dist/HStack/HStack.js +3 -3
  140. package/dist/Heading/Heading.js +10 -10
  141. package/dist/HoverCard/HoverCard.js +9 -9
  142. package/dist/HoverCard/useHoverCard.d.ts +1 -5
  143. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  144. package/dist/HoverCard/useHoverCard.js +3 -3
  145. package/dist/Icon/Icon.d.ts.map +1 -1
  146. package/dist/Icon/Icon.js +12 -16
  147. package/dist/Icon/defaultIcons.js +116 -116
  148. package/dist/IconButton/IconButton.js +3 -3
  149. package/dist/InputGroup/InputGroup.js +11 -11
  150. package/dist/InputGroup/InputGroupText.js +3 -3
  151. package/dist/Item/Item.js +18 -18
  152. package/dist/Kbd/Kbd.js +5 -5
  153. package/dist/Layer/LayerProvider.js +7 -7
  154. package/dist/Layer/useLayer.d.ts +2 -29
  155. package/dist/Layer/useLayer.d.ts.map +1 -1
  156. package/dist/Layer/useLayer.js +31 -44
  157. package/dist/Layout/Layout.js +21 -21
  158. package/dist/Layout/LayoutContent.js +3 -3
  159. package/dist/Layout/LayoutFooter.js +5 -5
  160. package/dist/Layout/LayoutHeader.js +5 -5
  161. package/dist/Layout/LayoutPanel.js +3 -3
  162. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  163. package/dist/Lightbox/Lightbox.js +31 -55
  164. package/dist/Lightbox/useLightbox.js +3 -3
  165. package/dist/Link/Link.js +15 -15
  166. package/dist/Link/LinkProvider.js +3 -3
  167. package/dist/Link/useLinkify.js +3 -3
  168. package/dist/List/List.js +11 -11
  169. package/dist/List/ListItem.js +11 -11
  170. package/dist/Markdown/Markdown.d.ts.map +1 -1
  171. package/dist/Markdown/Markdown.js +102 -102
  172. package/dist/MetadataList/MetadataList.js +10 -10
  173. package/dist/MetadataList/MetadataListItem.js +15 -15
  174. package/dist/MobileNav/MobileNav.js +15 -15
  175. package/dist/MobileNav/MobileNavToggle.js +5 -5
  176. package/dist/MoreMenu/MoreMenu.js +3 -3
  177. package/dist/MultiSelector/MultiSelector.js +56 -56
  178. package/dist/NavIcon/NavIcon.js +3 -3
  179. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  180. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  181. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  182. package/dist/NumberInput/NumberInput.js +32 -48
  183. package/dist/Outline/Outline.js +15 -15
  184. package/dist/OverflowList/OverflowList.js +8 -8
  185. package/dist/Overlay/Overlay.js +3 -3
  186. package/dist/Overlay/OverlayScrim.js +5 -5
  187. package/dist/Overlay/useOverlay.js +3 -3
  188. package/dist/Pagination/Pagination.d.ts +1 -1
  189. package/dist/Pagination/Pagination.d.ts.map +1 -1
  190. package/dist/Pagination/Pagination.js +72 -125
  191. package/dist/Popover/Popover.js +16 -16
  192. package/dist/Popover/usePopover.js +7 -7
  193. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  194. package/dist/PowerSearch/PowerSearch.js +92 -110
  195. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  196. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  197. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  198. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  199. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  200. package/dist/ProgressBar/ProgressBar.js +18 -25
  201. package/dist/RadioList/RadioList.js +7 -7
  202. package/dist/RadioList/RadioListItem.d.ts +1 -1
  203. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  204. package/dist/RadioList/RadioListItem.js +21 -24
  205. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  206. package/dist/Resizable/ResizeHandle.js +10 -28
  207. package/dist/Section/Section.js +5 -5
  208. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  209. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  210. package/dist/SegmentedControl/SegmentedControl.js +10 -32
  211. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  212. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  213. package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
  214. package/dist/SelectableCard/SelectableCard.js +5 -5
  215. package/dist/Selector/Selector.js +46 -46
  216. package/dist/Selector/SelectorOption.js +3 -3
  217. package/dist/SideNav/SideNav.d.ts.map +1 -1
  218. package/dist/SideNav/SideNav.js +34 -38
  219. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  220. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  221. package/dist/SideNav/SideNavCollapseButton.js +6 -8
  222. package/dist/SideNav/SideNavHeading.js +87 -87
  223. package/dist/SideNav/SideNavItem.js +42 -42
  224. package/dist/SideNav/SideNavSection.d.ts +1 -1
  225. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  226. package/dist/SideNav/SideNavSection.js +16 -18
  227. package/dist/Skeleton/Skeleton.js +3 -3
  228. package/dist/Slider/Slider.js +23 -23
  229. package/dist/Spinner/Spinner.js +9 -9
  230. package/dist/StatusDot/StatusDot.js +5 -5
  231. package/dist/Switch/Switch.d.ts +4 -8
  232. package/dist/Switch/Switch.d.ts.map +1 -1
  233. package/dist/Switch/Switch.js +29 -34
  234. package/dist/TabList/Tab.js +18 -18
  235. package/dist/TabList/TabList.js +5 -5
  236. package/dist/TabList/TabMenu.d.ts.map +1 -1
  237. package/dist/TabList/TabMenu.js +30 -57
  238. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  239. package/dist/Table/BaseTable.d.ts.map +1 -1
  240. package/dist/Table/BaseTable.js +39 -50
  241. package/dist/Table/Table.js +7 -7
  242. package/dist/Table/TableBody.d.ts +1 -1
  243. package/dist/Table/TableBody.d.ts.map +1 -1
  244. package/dist/Table/TableBody.js +5 -9
  245. package/dist/Table/TableCell.js +3 -3
  246. package/dist/Table/TableFooter.d.ts +1 -1
  247. package/dist/Table/TableFooter.d.ts.map +1 -1
  248. package/dist/Table/TableFooter.js +5 -9
  249. package/dist/Table/TableHeader.d.ts +1 -1
  250. package/dist/Table/TableHeader.d.ts.map +1 -1
  251. package/dist/Table/TableHeader.js +5 -9
  252. package/dist/Table/TableHeaderCell.js +3 -3
  253. package/dist/Table/TableRow.js +5 -5
  254. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  255. package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
  256. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  257. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  258. package/dist/Table/plugins/pagination/paginateData.js +1 -5
  259. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  260. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
  261. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  262. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  263. package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
  264. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  265. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  266. package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
  267. package/dist/Table/tableContextMenu.js +9 -9
  268. package/dist/Text/Text.js +10 -10
  269. package/dist/TextArea/TextArea.js +14 -14
  270. package/dist/TextInput/TextInput.js +15 -15
  271. package/dist/Thumbnail/Thumbnail.d.ts +2 -3
  272. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  273. package/dist/Thumbnail/Thumbnail.js +29 -30
  274. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  275. package/dist/TimeInput/TimeInput.js +21 -26
  276. package/dist/Timestamp/Timestamp.d.ts +1 -1
  277. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  278. package/dist/Timestamp/Timestamp.js +26 -37
  279. package/dist/Toast/Toast.d.ts.map +1 -1
  280. package/dist/Toast/Toast.js +17 -25
  281. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  282. package/dist/Toast/ToastViewport.js +11 -23
  283. package/dist/Toast/useToast.js +4 -4
  284. package/dist/ToggleButton/ToggleButton.js +12 -12
  285. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  286. package/dist/Token/Token.js +21 -21
  287. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  288. package/dist/Tokenizer/Tokenizer.js +34 -36
  289. package/dist/Toolbar/Toolbar.js +18 -18
  290. package/dist/Tooltip/Tooltip.js +11 -11
  291. package/dist/Tooltip/useTooltip.d.ts +1 -5
  292. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  293. package/dist/Tooltip/useTooltip.js +3 -3
  294. package/dist/TopNav/TopNav.js +32 -32
  295. package/dist/TopNav/TopNavHeading.js +67 -67
  296. package/dist/TopNav/TopNavItem.js +5 -5
  297. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  298. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  299. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  300. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
  301. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  302. package/dist/TopNav/TopNavMenu.js +32 -32
  303. package/dist/TreeList/TreeList.js +8 -8
  304. package/dist/TreeList/TreeListBranches.js +11 -11
  305. package/dist/TreeList/TreeListItem.js +30 -30
  306. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  307. package/dist/Typeahead/BaseTypeahead.js +20 -23
  308. package/dist/Typeahead/Typeahead.js +12 -12
  309. package/dist/Typeahead/TypeaheadItem.js +10 -10
  310. package/dist/VStack/VStack.js +3 -3
  311. package/dist/astryx.css +0 -7
  312. package/dist/astryx.umd.js +60 -60
  313. package/dist/astryx.umd.js.map +4 -4
  314. package/dist/docs-types.d.ts +2 -8
  315. package/dist/docs-types.d.ts.map +1 -1
  316. package/dist/hooks/focusableSelector.d.ts +1 -1
  317. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  318. package/dist/hooks/focusableSelector.js +1 -1
  319. package/dist/hooks/index.d.ts +0 -2
  320. package/dist/hooks/index.d.ts.map +1 -1
  321. package/dist/hooks/index.js +0 -1
  322. package/dist/hooks/useFocusTrap.d.ts +0 -3
  323. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  324. package/dist/hooks/useFocusTrap.js +1 -38
  325. package/dist/hooks/useInteractiveRole.d.ts +2 -6
  326. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  327. package/dist/hooks/useInteractiveRole.js +2 -6
  328. package/dist/hooks/useKeyboardHint.js +9 -9
  329. package/dist/hooks/useStreamingText.d.ts +1 -3
  330. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  331. package/dist/hooks/useStreamingText.js +5 -14
  332. package/dist/theme/MediaTheme.js +3 -3
  333. package/dist/theme/Theme.js +7 -7
  334. package/dist/theme/defineTheme.d.ts +1 -1
  335. package/dist/theme/defineTheme.d.ts.map +1 -1
  336. package/dist/theme/expandColorScale.d.ts.map +1 -1
  337. package/dist/theme/expandColorScale.js +3 -10
  338. package/dist/theme/hct.d.ts +15 -0
  339. package/dist/theme/hct.d.ts.map +1 -1
  340. package/dist/theme/hct.js +9 -9
  341. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  342. package/dist/theme/tokens.d.ts +2 -10
  343. package/dist/theme/tokens.d.ts.map +1 -1
  344. package/dist/theme/tokens.js +4 -220
  345. package/dist/utils/index.d.ts +0 -3
  346. package/dist/utils/index.d.ts.map +1 -1
  347. package/dist/utils/index.js +1 -3
  348. package/dist/utils/timeParser.d.ts.map +1 -1
  349. package/dist/utils/timeParser.js +5 -8
  350. package/package.json +3 -3
  351. package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
  352. package/src/AlertDialog/AlertDialog.tsx +0 -2
  353. package/src/AppShell/AppShell.tsx +0 -2
  354. package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
  355. package/src/AspectRatio/AspectRatio.test.tsx +1 -142
  356. package/src/AspectRatio/AspectRatio.tsx +10 -70
  357. package/src/AspectRatio/index.ts +1 -5
  358. package/src/Avatar/Avatar.doc.mjs +0 -11
  359. package/src/Avatar/Avatar.test.tsx +1 -32
  360. package/src/Avatar/Avatar.tsx +20 -12
  361. package/src/Banner/Banner.doc.mjs +0 -8
  362. package/src/Banner/Banner.test.tsx +0 -38
  363. package/src/Banner/Banner.tsx +1 -8
  364. package/src/Calendar/Calendar.doc.mjs +1 -1
  365. package/src/Calendar/Calendar.test.tsx +17 -122
  366. package/src/Calendar/Calendar.tsx +5 -26
  367. package/src/Calendar/dayCellUtils.ts +1 -3
  368. package/src/Calendar/styles.ts +2 -12
  369. package/src/Card/Card.tsx +6 -16
  370. package/src/Carousel/Carousel.doc.mjs +12 -12
  371. package/src/Carousel/Carousel.test.tsx +0 -13
  372. package/src/Carousel/Carousel.tsx +2 -4
  373. package/src/Carousel/carousel.markers.stylex.ts +10 -0
  374. package/src/Chat/Chat.doc.mjs +1 -1
  375. package/src/Chat/ChatComposerInput.test.tsx +1 -27
  376. package/src/Chat/ChatComposerInput.tsx +15 -20
  377. package/src/Chat/ChatDictationButton.tsx +4 -4
  378. package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
  379. package/src/Chat/ChatMessageMetadata.tsx +6 -4
  380. package/src/Chat/ChatSystemMessage.test.tsx +11 -26
  381. package/src/Chat/ChatSystemMessage.tsx +7 -7
  382. package/src/Chat/ChatTokenizedText.test.tsx +16 -29
  383. package/src/Chat/ChatTokenizedText.tsx +8 -15
  384. package/src/Chat/ChatToolCalls.test.tsx +0 -55
  385. package/src/Chat/ChatToolCalls.tsx +12 -10
  386. package/src/Chat/index.ts +4 -1
  387. package/src/Chat/useTriggerMenu.tsx +4 -1
  388. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  389. package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
  390. package/src/CheckboxInput/CheckboxInput.tsx +0 -2
  391. package/src/CheckboxList/CheckboxList.test.tsx +0 -19
  392. package/src/CheckboxList/CheckboxListItem.tsx +2 -11
  393. package/src/Citation/Citation.doc.mjs +0 -5
  394. package/src/ClickableCard/ClickableCard.tsx +2 -45
  395. package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
  396. package/src/CodeBlock/CodeBlock.test.tsx +3 -122
  397. package/src/CodeBlock/CodeBlock.tsx +4 -62
  398. package/src/Collapsible/Collapsible.doc.mjs +4 -8
  399. package/src/Collapsible/Collapsible.tsx +10 -86
  400. package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
  401. package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
  402. package/src/Collapsible/CollapsibleGroup.tsx +9 -107
  403. package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
  404. package/src/Collapsible/index.ts +0 -4
  405. package/src/Collapsible/useCollapsible.ts +6 -20
  406. package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
  407. package/src/CommandPalette/CommandPalette.tsx +3 -5
  408. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
  409. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
  410. package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
  411. package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
  412. package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
  413. package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
  414. package/src/ContextMenu/ContextMenu.test.tsx +0 -87
  415. package/src/ContextMenu/ContextMenu.tsx +28 -87
  416. package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
  417. package/src/DateInput/DateInput.test.tsx +20 -11
  418. package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
  419. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
  420. package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
  421. package/src/DateTimeInput/DateTimeInput.tsx +2 -8
  422. package/src/DateTimeInput/index.ts +0 -1
  423. package/src/Dialog/Dialog.doc.mjs +0 -4
  424. package/src/Dialog/DialogHeader.doc.mjs +0 -45
  425. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  426. package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
  427. package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
  428. package/src/Field/Field.test.tsx +4 -1
  429. package/src/Field/FieldLabel.test.tsx +2 -2
  430. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
  431. package/src/Grid/Grid.test.tsx +18 -43
  432. package/src/Grid/Grid.tsx +9 -26
  433. package/src/HoverCard/HoverCard.doc.mjs +6 -6
  434. package/src/HoverCard/useHoverCard.doc.mjs +5 -5
  435. package/src/HoverCard/useHoverCard.tsx +2 -9
  436. package/src/Icon/Icon.test.tsx +29 -41
  437. package/src/Icon/Icon.tsx +2 -6
  438. package/src/InputGroup/InputGroup.tsx +2 -2
  439. package/src/Item/Item.tsx +1 -1
  440. package/src/Layer/useLayer.doc.mjs +2 -2
  441. package/src/Layer/useLayer.test.tsx +2 -221
  442. package/src/Layer/useLayer.tsx +30 -69
  443. package/src/Layout/LayoutContent.doc.mjs +0 -12
  444. package/src/Layout/LayoutPanel.doc.mjs +0 -40
  445. package/src/Lightbox/Lightbox.doc.mjs +0 -5
  446. package/src/Lightbox/Lightbox.test.tsx +2 -123
  447. package/src/Lightbox/Lightbox.tsx +1 -29
  448. package/src/Markdown/Markdown.tsx +7 -9
  449. package/src/Markdown/parser.perf.test.ts +12 -34
  450. package/src/NavMenu/NavMenu.doc.mjs +0 -15
  451. package/src/NumberInput/NumberInput.test.tsx +3 -48
  452. package/src/NumberInput/NumberInput.tsx +15 -32
  453. package/src/Overlay/Overlay.doc.mjs +0 -6
  454. package/src/Pagination/Pagination.test.tsx +0 -162
  455. package/src/Pagination/Pagination.tsx +26 -80
  456. package/src/Popover/Popover.doc.mjs +6 -6
  457. package/src/Popover/Popover.test.tsx +0 -65
  458. package/src/Popover/usePopover.doc.mjs +1 -1
  459. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  460. package/src/PowerSearch/PowerSearch.test.tsx +1 -109
  461. package/src/PowerSearch/PowerSearch.tsx +16 -37
  462. package/src/ProgressBar/ProgressBar.test.tsx +0 -30
  463. package/src/ProgressBar/ProgressBar.tsx +5 -12
  464. package/src/RadioList/RadioList.test.tsx +0 -19
  465. package/src/RadioList/RadioListItem.tsx +4 -9
  466. package/src/Resizable/ResizeHandle.tsx +4 -22
  467. package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
  468. package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
  469. package/src/SegmentedControl/SegmentedControl.tsx +5 -27
  470. package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
  471. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  472. package/src/Selector/Selector.test.tsx +1 -27
  473. package/src/SideNav/SideNav.doc.mjs +1 -7
  474. package/src/SideNav/SideNav.test.tsx +0 -66
  475. package/src/SideNav/SideNav.tsx +2 -6
  476. package/src/SideNav/SideNavCollapseButton.tsx +3 -4
  477. package/src/SideNav/SideNavSection.tsx +4 -6
  478. package/src/Switch/Switch.doc.mjs +7 -7
  479. package/src/Switch/Switch.test.tsx +3 -102
  480. package/src/Switch/Switch.tsx +7 -20
  481. package/src/TabList/TabList.test.tsx +1 -185
  482. package/src/TabList/TabMenu.tsx +9 -45
  483. package/src/Table/BaseTable.tsx +2 -13
  484. package/src/Table/Table.test.tsx +0 -87
  485. package/src/Table/TableBody.tsx +2 -15
  486. package/src/Table/TableFooter.tsx +2 -15
  487. package/src/Table/TableHeader.tsx +2 -15
  488. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
  489. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
  490. package/src/Table/plugins/pagination/paginateData.ts +1 -5
  491. package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
  492. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
  493. package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
  494. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
  495. package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
  496. package/src/TextArea/TextArea.test.tsx +3 -3
  497. package/src/TextInput/TextInput.test.tsx +3 -3
  498. package/src/Thumbnail/Thumbnail.test.tsx +2 -36
  499. package/src/Thumbnail/Thumbnail.tsx +2 -4
  500. package/src/TimeInput/TimeInput.test.tsx +0 -37
  501. package/src/TimeInput/TimeInput.tsx +1 -11
  502. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  503. package/src/Timestamp/Timestamp.test.tsx +0 -52
  504. package/src/Timestamp/Timestamp.tsx +16 -30
  505. package/src/Toast/Toast.tsx +3 -11
  506. package/src/Toast/ToastViewport.test.tsx +0 -64
  507. package/src/Toast/ToastViewport.tsx +0 -12
  508. package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
  509. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  510. package/src/Tokenizer/Tokenizer.test.tsx +0 -54
  511. package/src/Tokenizer/Tokenizer.tsx +4 -5
  512. package/src/Tooltip/Tooltip.doc.mjs +6 -6
  513. package/src/Tooltip/useTooltip.doc.mjs +5 -5
  514. package/src/Tooltip/useTooltip.tsx +2 -12
  515. package/src/TopNav/TopNav.doc.mjs +1 -1
  516. package/src/TopNav/TopNav.test.tsx +7 -23
  517. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
  518. package/src/TreeList/TreeList.doc.mjs +2 -2
  519. package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
  520. package/src/Typeahead/BaseTypeahead.tsx +2 -5
  521. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  522. package/src/Typeahead/Typeahead.test.tsx +1 -45
  523. package/src/docs-types.ts +1 -9
  524. package/src/hooks/focusableSelector.ts +1 -1
  525. package/src/hooks/index.ts +0 -3
  526. package/src/hooks/useFocusTrap.doc.mjs +2 -4
  527. package/src/hooks/useFocusTrap.test.tsx +1 -149
  528. package/src/hooks/useFocusTrap.ts +1 -50
  529. package/src/hooks/useInteractiveRole.ts +4 -12
  530. package/src/hooks/useStreamingText.test.ts +19 -54
  531. package/src/hooks/useStreamingText.ts +5 -16
  532. package/src/hooks/useTreeFocus.test.tsx +3 -1
  533. package/src/reset.css +0 -29
  534. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  535. package/src/theme/defineTheme.ts +13 -4
  536. package/src/theme/derivedVarRegistry.test.ts +2 -2
  537. package/src/theme/expandColorScale.test.ts +0 -29
  538. package/src/theme/expandColorScale.ts +6 -11
  539. package/src/theme/hct.ts +17 -9
  540. package/src/theme/tokens.test.ts +9 -182
  541. package/src/theme/tokens.ts +4 -239
  542. package/src/theme/useTheme.test.tsx +0 -20
  543. package/src/utils/index.ts +0 -4
  544. package/src/utils/sharedResizeObserver.test.ts +2 -2
  545. package/src/utils/timeParser.test.ts +0 -13
  546. package/src/utils/timeParser.ts +5 -8
  547. package/dist/hooks/useHotkeys.d.ts +0 -51
  548. package/dist/hooks/useHotkeys.d.ts.map +0 -1
  549. package/dist/hooks/useHotkeys.js +0 -160
  550. package/dist/utils/color.d.ts +0 -42
  551. package/dist/utils/color.d.ts.map +0 -1
  552. package/dist/utils/color.js +0 -150
  553. package/dist/utils/composeEventHandlers.d.ts +0 -30
  554. package/dist/utils/composeEventHandlers.d.ts.map +0 -1
  555. package/dist/utils/composeEventHandlers.js +0 -40
  556. package/src/Chat/ChatDictationButton.test.tsx +0 -43
  557. package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
  558. package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
  559. package/src/Collapsible/Collapsible.test.tsx +0 -405
  560. package/src/FieldStatus/FieldStatus.test.tsx +0 -282
  561. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
  562. package/src/Layout/Layout.test.tsx +0 -285
  563. package/src/Layout/LayoutSlots.test.tsx +0 -364
  564. package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
  565. package/src/OverflowList/OverflowList.test.tsx +0 -416
  566. package/src/Overlay/Overlay.test.tsx +0 -356
  567. package/src/Resizable/ResizeHandle.test.tsx +0 -218
  568. package/src/SizeContext/SizeContext.test.tsx +0 -226
  569. package/src/__tests__/TestIcon.tsx +0 -26
  570. package/src/__tests__/fastRoleQueries.ts +0 -66
  571. package/src/docPropReferences.test.ts +0 -178
  572. package/src/hooks/useHotkeys.doc.mjs +0 -52
  573. package/src/hooks/useHotkeys.test.ts +0 -245
  574. package/src/hooks/useHotkeys.ts +0 -203
  575. package/src/utils/color.test.ts +0 -133
  576. package/src/utils/color.ts +0 -148
  577. package/src/utils/composeEventHandlers.test.ts +0 -71
  578. package/src/utils/composeEventHandlers.ts +0 -44
  579. package/src/utils/mergeProps.test.ts +0 -166
@@ -1,356 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file Overlay.test.tsx
5
- * @input Uses vitest, @testing-library/react, Overlay + useOverlay
6
- * @output Characterization tests for the Overlay component and useOverlay hook
7
- * @position Testing; validates the overlay/scrim rendering + touch-toggle contract
8
- *
9
- * SYNC: When Overlay.tsx / useOverlay.tsx / OverlayScrim.tsx change,
10
- * update tests to match new behavior
11
- */
12
-
13
- import {describe, it, expect, beforeEach, afterEach} from 'vitest';
14
- import {render, screen, renderHook} from '@testing-library/react';
15
- import {createRef} from 'react';
16
- import {Overlay} from './Overlay';
17
- import {useOverlay} from './useOverlay';
18
-
19
- /** The scrim is the div carrying data-position (from themeProps). */
20
- function getScrim(container: HTMLElement): HTMLElement {
21
- const el = container.querySelector<HTMLElement>('[data-position]');
22
- if (!el) {
23
- throw new Error('scrim element not found');
24
- }
25
- return el;
26
- }
27
-
28
- /**
29
- * Force window.matchMedia('(hover: none)') to report a given value so we can
30
- * exercise the touch vs. pointer branches of useOverlay. Returns a restore fn.
31
- */
32
- function mockHoverNone(matches: boolean): () => void {
33
- const original = window.matchMedia;
34
- window.matchMedia = ((query: string) => ({
35
- matches: query.includes('hover: none') ? matches : false,
36
- media: query,
37
- onchange: null,
38
- addListener: () => {},
39
- removeListener: () => {},
40
- addEventListener: () => {},
41
- removeEventListener: () => {},
42
- dispatchEvent: () => false,
43
- }));
44
- return () => {
45
- window.matchMedia = original;
46
- };
47
- }
48
-
49
- describe('Overlay', () => {
50
- describe('rendering & structure', () => {
51
- it('renders the base children', () => {
52
- render(
53
- <Overlay content={<span>badge</span>}>
54
- <img alt="hero" src="x.jpg" />
55
- </Overlay>,
56
- );
57
- expect(screen.getByAltText('hero')).toBeInTheDocument();
58
- });
59
-
60
- it('renders the overlay content inside the scrim', () => {
61
- render(
62
- <Overlay content={<button type="button">Quick view</button>}>
63
- <div>base</div>
64
- </Overlay>,
65
- );
66
- expect(
67
- screen.getByRole('button', {name: 'Quick view'}),
68
- ).toBeInTheDocument();
69
- });
70
-
71
- it('renders a root div carrying the astryx-overlay class', () => {
72
- const {container} = render(
73
- <Overlay content={<span>c</span>}>
74
- <div>base</div>
75
- </Overlay>,
76
- );
77
- const root = container.firstElementChild as HTMLElement;
78
- expect(root.tagName).toBe('DIV');
79
- expect(root.className).toContain('astryx-overlay');
80
- });
81
-
82
- it('places the scrim after the base children in DOM order', () => {
83
- const {container} = render(
84
- <Overlay content={<span data-testid="ovl">c</span>}>
85
- <div data-testid="base">base</div>
86
- </Overlay>,
87
- );
88
- const root = container.firstElementChild as HTMLElement;
89
- const base = screen.getByTestId('base');
90
- const scrim = getScrim(container);
91
- // base comes before scrim
92
- expect(
93
- base.compareDocumentPosition(scrim) & Node.DOCUMENT_POSITION_FOLLOWING,
94
- ).toBeTruthy();
95
- expect(root).toContainElement(scrim);
96
- });
97
-
98
- it('applies the astryx-overlay-scrim class to the scrim', () => {
99
- const {container} = render(
100
- <Overlay content={<span>c</span>}>
101
- <div>b</div>
102
- </Overlay>,
103
- );
104
- expect(getScrim(container).className).toContain('astryx-overlay-scrim');
105
- });
106
- });
107
-
108
- describe('position', () => {
109
- it('defaults data-position to "fill"', () => {
110
- const {container} = render(
111
- <Overlay content={<span>c</span>}>
112
- <div>b</div>
113
- </Overlay>,
114
- );
115
- expect(getScrim(container).getAttribute('data-position')).toBe('fill');
116
- });
117
-
118
- it.each(['fill', 'bottom', 'top'] as const)(
119
- 'reflects position="%s" as data-position',
120
- position => {
121
- const {container} = render(
122
- <Overlay position={position} content={<span>c</span>}>
123
- <div>b</div>
124
- </Overlay>,
125
- );
126
- expect(getScrim(container).getAttribute('data-position')).toBe(
127
- position,
128
- );
129
- },
130
- );
131
- });
132
-
133
- describe('scrim mode → media theme inversion', () => {
134
- it('dark scrim (default) wraps content in a dark MediaTheme', () => {
135
- const {container} = render(
136
- <Overlay content={<span>c</span>}>
137
- <div>b</div>
138
- </Overlay>,
139
- );
140
- expect(
141
- container.querySelector('[data-astryx-media="dark"]'),
142
- ).toBeInTheDocument();
143
- });
144
-
145
- it('light scrim wraps content in a light MediaTheme', () => {
146
- const {container} = render(
147
- <Overlay scrim="light" content={<span>c</span>}>
148
- <div>b</div>
149
- </Overlay>,
150
- );
151
- expect(
152
- container.querySelector('[data-astryx-media="light"]'),
153
- ).toBeInTheDocument();
154
- expect(
155
- container.querySelector('[data-astryx-media="dark"]'),
156
- ).not.toBeInTheDocument();
157
- });
158
-
159
- it('scrim={false} renders no MediaTheme wrapper', () => {
160
- const {container} = render(
161
- <Overlay scrim={false} content={<span>c</span>}>
162
- <div>b</div>
163
- </Overlay>,
164
- );
165
- expect(
166
- container.querySelector('[data-astryx-media]'),
167
- ).not.toBeInTheDocument();
168
- });
169
- });
170
-
171
- describe('controlled visibility (isOpen)', () => {
172
- it('marks the scrim inert when isOpen is false', () => {
173
- const {container} = render(
174
- <Overlay isOpen={false} content={<span>c</span>}>
175
- <div>b</div>
176
- </Overlay>,
177
- );
178
- expect(getScrim(container).hasAttribute('inert')).toBe(true);
179
- });
180
-
181
- it('does not mark the scrim inert when isOpen is true', () => {
182
- const {container} = render(
183
- <Overlay isOpen content={<span>c</span>}>
184
- <div>b</div>
185
- </Overlay>,
186
- );
187
- expect(getScrim(container).hasAttribute('inert')).toBe(false);
188
- });
189
-
190
- it('is never inert in uncontrolled (CSS-driven) mode', () => {
191
- const {container} = render(
192
- <Overlay showOn="hover" content={<span>c</span>}>
193
- <div>b</div>
194
- </Overlay>,
195
- );
196
- expect(getScrim(container).hasAttribute('inert')).toBe(false);
197
- });
198
-
199
- it('toggles inert when the isOpen prop flips', () => {
200
- const {container, rerender} = render(
201
- <Overlay isOpen={false} content={<span>c</span>}>
202
- <div>b</div>
203
- </Overlay>,
204
- );
205
- expect(getScrim(container).hasAttribute('inert')).toBe(true);
206
- rerender(
207
- <Overlay isOpen content={<span>c</span>}>
208
- <div>b</div>
209
- </Overlay>,
210
- );
211
- expect(getScrim(container).hasAttribute('inert')).toBe(false);
212
- });
213
- });
214
-
215
- describe('styling & ref', () => {
216
- it('forwards ref to the root div element', () => {
217
- const ref = createRef<HTMLDivElement>();
218
- render(
219
- <Overlay ref={ref} content={<span>c</span>}>
220
- <div>b</div>
221
- </Overlay>,
222
- );
223
- expect(ref.current).toBeInstanceOf(HTMLDivElement);
224
- expect(ref.current?.className).toContain('astryx-overlay');
225
- });
226
-
227
- it('merges a caller className onto the root', () => {
228
- const {container} = render(
229
- <Overlay className="custom-cls" content={<span>c</span>}>
230
- <div>b</div>
231
- </Overlay>,
232
- );
233
- const root = container.firstElementChild as HTMLElement;
234
- expect(root.className).toContain('custom-cls');
235
- expect(root.className).toContain('astryx-overlay');
236
- });
237
-
238
- it('merges a caller inline style onto the root', () => {
239
- const {container} = render(
240
- <Overlay style={{opacity: 0.5}} content={<span>c</span>}>
241
- <div>b</div>
242
- </Overlay>,
243
- );
244
- const root = container.firstElementChild as HTMLElement;
245
- expect(root.style.opacity).toBe('0.5');
246
- });
247
- });
248
- });
249
-
250
- describe('useOverlay', () => {
251
- describe('return shape', () => {
252
- it('exposes containerRef, containerProps, element and renderOverlay', () => {
253
- const {result} = renderHook(() => useOverlay());
254
- expect(result.current.containerRef).toHaveProperty('current');
255
- expect(result.current.containerProps).toBeDefined();
256
- expect(typeof result.current.renderOverlay).toBe('function');
257
- });
258
-
259
- it('containerProps.className is a non-empty marker string', () => {
260
- const {result} = renderHook(() => useOverlay());
261
- expect(typeof result.current.containerProps.className).toBe('string');
262
- expect(result.current.containerProps.className?.length).toBeGreaterThan(
263
- 0,
264
- );
265
- });
266
-
267
- it('returns element=null when no content is provided', () => {
268
- const {result} = renderHook(() => useOverlay({showOn: 'hover'}));
269
- expect(result.current.element).toBeNull();
270
- });
271
-
272
- it('returns a scrim element when content is provided', () => {
273
- const {result} = renderHook(() => useOverlay({content: <span>c</span>}));
274
- expect(result.current.element).not.toBeNull();
275
- });
276
-
277
- it('renderOverlay(children) produces a renderable scrim', () => {
278
- const {result} = renderHook(() => useOverlay({showOn: 'hover'}));
279
- const el = result.current.renderOverlay(<span>on demand</span>);
280
- const {container} = render(el);
281
- expect(screen.getByText('on demand')).toBeInTheDocument();
282
- expect(getScrim(container)).toBeInTheDocument();
283
- });
284
- });
285
-
286
- describe('pointer (non-touch) device', () => {
287
- let restore: () => void;
288
- beforeEach(() => {
289
- restore = mockHoverNone(false);
290
- });
291
- afterEach(() => restore());
292
-
293
- it('does not attach touch toggle handlers in hover mode', () => {
294
- const {result} = renderHook(() => useOverlay({showOn: 'hover'}));
295
- expect(result.current.containerProps.onClick).toBeUndefined();
296
- expect(result.current.containerProps.onMouseUp).toBeUndefined();
297
- });
298
- });
299
-
300
- describe('touch device', () => {
301
- let restore: () => void;
302
- beforeEach(() => {
303
- restore = mockHoverNone(true);
304
- });
305
- afterEach(() => restore());
306
-
307
- it('attaches tap-to-toggle handlers in hover mode', () => {
308
- const {result} = renderHook(() => useOverlay({showOn: 'hover'}));
309
- expect(typeof result.current.containerProps.onClick).toBe('function');
310
- expect(typeof result.current.containerProps.onMouseUp).toBe('function');
311
- });
312
-
313
- it('does NOT attach toggle handlers when showOn="always" (no toggle needed)', () => {
314
- const {result} = renderHook(() => useOverlay({showOn: 'always'}));
315
- expect(result.current.containerProps.onClick).toBeUndefined();
316
- expect(result.current.containerProps.onMouseUp).toBeUndefined();
317
- });
318
-
319
- it('does NOT attach toggle handlers when showOn="focus"', () => {
320
- const {result} = renderHook(() => useOverlay({showOn: 'focus'}));
321
- expect(result.current.containerProps.onClick).toBeUndefined();
322
- });
323
-
324
- it('a consumer prop isOpen overrides the touch toggle (scrim reflects it)', () => {
325
- // With isOpen provided, the scrim is controlled regardless of touch.
326
- const {container} = render(
327
- <Overlay showOn="hover" isOpen={false} content={<span>c</span>}>
328
- <div>b</div>
329
- </Overlay>,
330
- );
331
- expect(getScrim(container).hasAttribute('inert')).toBe(true);
332
- });
333
- });
334
-
335
- describe('memoization', () => {
336
- it('returns a stable renderOverlay across re-renders with same options', () => {
337
- const {result, rerender} = renderHook(
338
- (props: {showOn: 'hover' | 'always'}) => useOverlay(props),
339
- {initialProps: {showOn: 'hover'}},
340
- );
341
- const first = result.current.renderOverlay;
342
- rerender({showOn: 'hover'});
343
- expect(result.current.renderOverlay).toBe(first);
344
- });
345
-
346
- it('returns a new renderOverlay when options change', () => {
347
- const {result, rerender} = renderHook(
348
- (props: {showOn: 'hover' | 'always'}) => useOverlay(props),
349
- {initialProps: {showOn: 'hover'}},
350
- );
351
- const first = result.current.renderOverlay;
352
- rerender({showOn: 'always'});
353
- expect(result.current.renderOverlay).not.toBe(first);
354
- });
355
- });
356
- });
@@ -1,218 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file ResizeHandle.test.tsx
5
- * @input Uses vitest, @testing-library/react, useResizable, ResizeHandle
6
- * @output Unit tests for ResizeHandle keyboard operability and ARIA state
7
- * @position Testing; validates ResizeHandle.tsx implementation
8
- *
9
- * SYNC: When ResizeHandle.tsx changes, update tests to match new behavior
10
- *
11
- * These tests guard the WAI-ARIA window-splitter keyboard contract: the
12
- * keydown handler must live on the focusable `role="separator"` element.
13
- * Keyboard resizing is pure state math in useResizable (no layout
14
- * measurement), so the observable effect asserted here is aria-valuenow,
15
- * which is bound to the region's `_size`.
16
- */
17
-
18
- import {describe, it, expect, vi} from 'vitest';
19
- import {render, screen, fireEvent, act} from '@testing-library/react';
20
- import {ResizeHandle} from './ResizeHandle';
21
- import type {ResizeHandleProps} from './ResizeHandle';
22
- import {useResizable} from './useResizable';
23
- import type {ResizableProps, UseResizableSingleConfig} from './useResizable';
24
-
25
- const KEYBOARD_STEP = 10;
26
- const KEYBOARD_LARGE_STEP = 50;
27
-
28
- function Harness({
29
- config,
30
- handleProps,
31
- }: {
32
- config?: UseResizableSingleConfig;
33
- handleProps?: Partial<ResizeHandleProps>;
34
- }) {
35
- const region = useResizable(
36
- config ?? {defaultSize: 200, minSizePx: 100, maxSizePx: 400},
37
- );
38
- return (
39
- <ResizeHandle resizable={region.props} label="Resize" {...handleProps} />
40
- );
41
- }
42
-
43
- function getSeparator(): HTMLElement {
44
- return screen.getByRole('separator');
45
- }
46
-
47
- describe('ResizeHandle', () => {
48
- // --- ARIA wiring ---
49
-
50
- it('exposes the region size and bounds via ARIA', () => {
51
- render(<Harness />);
52
- const separator = getSeparator();
53
- expect(separator).toHaveAttribute('aria-valuenow', '200');
54
- expect(separator).toHaveAttribute('aria-valuemin', '100');
55
- expect(separator).toHaveAttribute('aria-valuemax', '400');
56
- // Horizontal layout splits along the vertical axis.
57
- expect(separator).toHaveAttribute('aria-orientation', 'vertical');
58
- expect(separator).toHaveAttribute('aria-label', 'Resize');
59
- });
60
-
61
- it('makes the separator focusable', () => {
62
- render(<Harness />);
63
- const separator = getSeparator();
64
- expect(separator).toHaveAttribute('tabindex', '0');
65
- act(() => separator.focus());
66
- expect(separator).toHaveFocus();
67
- });
68
-
69
- // --- Keyboard resizing (the fix: handler lives on the focused separator) ---
70
-
71
- it('grows the panel by a step on ArrowRight', () => {
72
- render(<Harness />);
73
- const separator = getSeparator();
74
- act(() => separator.focus());
75
- fireEvent.keyDown(separator, {key: 'ArrowRight'});
76
- expect(separator).toHaveAttribute(
77
- 'aria-valuenow',
78
- String(200 + KEYBOARD_STEP),
79
- );
80
- });
81
-
82
- it('shrinks the panel by a step on ArrowLeft', () => {
83
- render(<Harness />);
84
- const separator = getSeparator();
85
- act(() => separator.focus());
86
- fireEvent.keyDown(separator, {key: 'ArrowLeft'});
87
- expect(separator).toHaveAttribute(
88
- 'aria-valuenow',
89
- String(200 - KEYBOARD_STEP),
90
- );
91
- });
92
-
93
- it('uses the large step when Shift is held', () => {
94
- render(<Harness />);
95
- const separator = getSeparator();
96
- act(() => separator.focus());
97
- fireEvent.keyDown(separator, {key: 'ArrowRight', shiftKey: true});
98
- expect(separator).toHaveAttribute(
99
- 'aria-valuenow',
100
- String(200 + KEYBOARD_LARGE_STEP),
101
- );
102
- });
103
-
104
- it('jumps to the minimum on Home', () => {
105
- render(<Harness />);
106
- const separator = getSeparator();
107
- act(() => separator.focus());
108
- fireEvent.keyDown(separator, {key: 'Home'});
109
- expect(separator).toHaveAttribute('aria-valuenow', '100');
110
- });
111
-
112
- it('jumps to the maximum on End', () => {
113
- render(<Harness />);
114
- const separator = getSeparator();
115
- act(() => separator.focus());
116
- fireEvent.keyDown(separator, {key: 'End'});
117
- expect(separator).toHaveAttribute('aria-valuenow', '400');
118
- });
119
-
120
- it('resizes along the block axis for a vertical handle', () => {
121
- render(
122
- <Harness
123
- config={{defaultSize: 200, minSizePx: 100, maxSizePx: 400}}
124
- handleProps={{direction: 'vertical'}}
125
- />,
126
- );
127
- const separator = getSeparator();
128
- expect(separator).toHaveAttribute('aria-orientation', 'horizontal');
129
- act(() => separator.focus());
130
- fireEvent.keyDown(separator, {key: 'ArrowDown'});
131
- expect(separator).toHaveAttribute(
132
- 'aria-valuenow',
133
- String(200 + KEYBOARD_STEP),
134
- );
135
- fireEvent.keyDown(separator, {key: 'ArrowUp'});
136
- expect(separator).toHaveAttribute('aria-valuenow', '200');
137
- });
138
-
139
- it('collapses on Enter when the region is collapsible', () => {
140
- render(
141
- <Harness
142
- config={{
143
- defaultSize: 200,
144
- minSizePx: 100,
145
- maxSizePx: 400,
146
- collapsible: true,
147
- }}
148
- />,
149
- );
150
- const separator = getSeparator();
151
- act(() => separator.focus());
152
- fireEvent.keyDown(separator, {key: 'Enter'});
153
- expect(separator).toHaveAttribute('aria-valuenow', '0');
154
- });
155
-
156
- // --- Disabled guard ---
157
-
158
- it('ignores keyboard input when disabled', () => {
159
- render(<Harness handleProps={{isDisabled: true}} />);
160
- const separator = getSeparator();
161
- expect(separator).toHaveAttribute('tabindex', '-1');
162
- fireEvent.keyDown(separator, {key: 'ArrowRight'});
163
- expect(separator).toHaveAttribute('aria-valuenow', '200');
164
- });
165
-
166
- // --- Drag listener lifecycle ---
167
-
168
- it('stops driving the region and releases window listeners when unmounted mid-drag', () => {
169
- const resizable: ResizableProps = {
170
- _size: 200,
171
- _isCollapsed: false,
172
- _onResizeStart: vi.fn(),
173
- _onResizeMove: vi.fn(),
174
- _onResizeEnd: vi.fn(),
175
- _minSizePx: 100,
176
- _maxSizePx: 400,
177
- _snaps: [],
178
- _collapsedSize: 40,
179
- _collapsible: false,
180
- _isResizableProps: true,
181
- };
182
- const {unmount} = render(
183
- <ResizeHandle resizable={resizable} label="Resize" />,
184
- );
185
- const separator = screen.getByRole('separator');
186
- const hitArea = separator.firstElementChild as HTMLElement;
187
-
188
- // Start a drag and confirm moves reach the region.
189
- fireEvent.pointerDown(hitArea, {clientX: 0, clientY: 0});
190
- expect(resizable._onResizeStart).toHaveBeenCalledTimes(1);
191
- fireEvent.pointerMove(window, {clientX: 10, clientY: 0});
192
- expect(resizable._onResizeMove).toHaveBeenCalledTimes(1);
193
-
194
- // Unmount mid-drag: the window listeners must be torn down, so further
195
- // pointer moves no longer resize the (still-mounted) region, and the
196
- // body cursor/user-select overrides are released.
197
- unmount();
198
- fireEvent.pointerMove(window, {clientX: 50, clientY: 0});
199
- expect(resizable._onResizeMove).toHaveBeenCalledTimes(1);
200
- expect(document.body.style.cursor).toBe('');
201
- expect(document.body.style.userSelect).toBe('');
202
- });
203
-
204
- // --- Prop composition (ordering choice: handler sits after {...props}) ---
205
-
206
- it('runs a consumer onKeyDown alongside keyboard resizing', () => {
207
- const onKeyDown = vi.fn();
208
- render(<Harness handleProps={{onKeyDown}} />);
209
- const separator = getSeparator();
210
- act(() => separator.focus());
211
- fireEvent.keyDown(separator, {key: 'ArrowRight'});
212
- expect(onKeyDown).toHaveBeenCalledTimes(1);
213
- expect(separator).toHaveAttribute(
214
- 'aria-valuenow',
215
- String(200 + KEYBOARD_STEP),
216
- );
217
- });
218
- });