@astryxdesign/core 0.1.4-canary.ff77e1c → 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 (598) 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.d.ts +1 -1
  175. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  176. package/dist/MobileNav/MobileNav.js +23 -26
  177. package/dist/MobileNav/MobileNavToggle.js +5 -5
  178. package/dist/MoreMenu/MoreMenu.js +3 -3
  179. package/dist/MultiSelector/MultiSelector.js +56 -56
  180. package/dist/NavIcon/NavIcon.js +3 -3
  181. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  182. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  183. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  184. package/dist/NumberInput/NumberInput.js +32 -48
  185. package/dist/Outline/Outline.js +15 -15
  186. package/dist/OverflowList/OverflowList.js +8 -8
  187. package/dist/Overlay/Overlay.js +3 -3
  188. package/dist/Overlay/OverlayScrim.js +5 -5
  189. package/dist/Overlay/useOverlay.js +3 -3
  190. package/dist/Pagination/Pagination.d.ts +1 -1
  191. package/dist/Pagination/Pagination.d.ts.map +1 -1
  192. package/dist/Pagination/Pagination.js +72 -125
  193. package/dist/Popover/Popover.js +16 -16
  194. package/dist/Popover/usePopover.js +7 -7
  195. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  196. package/dist/PowerSearch/PowerSearch.js +92 -110
  197. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  198. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  199. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  200. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  201. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  202. package/dist/ProgressBar/ProgressBar.js +18 -25
  203. package/dist/RadioList/RadioList.js +7 -7
  204. package/dist/RadioList/RadioListItem.d.ts +1 -1
  205. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  206. package/dist/RadioList/RadioListItem.js +21 -24
  207. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  208. package/dist/Resizable/ResizeHandle.js +10 -28
  209. package/dist/Section/Section.js +5 -5
  210. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  211. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  212. package/dist/SegmentedControl/SegmentedControl.js +10 -32
  213. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  214. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  215. package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
  216. package/dist/SelectableCard/SelectableCard.js +5 -5
  217. package/dist/Selector/Selector.js +46 -46
  218. package/dist/Selector/SelectorOption.js +3 -3
  219. package/dist/SideNav/SideNav.d.ts.map +1 -1
  220. package/dist/SideNav/SideNav.js +34 -38
  221. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  222. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  223. package/dist/SideNav/SideNavCollapseButton.js +6 -8
  224. package/dist/SideNav/SideNavHeading.js +87 -87
  225. package/dist/SideNav/SideNavItem.js +42 -42
  226. package/dist/SideNav/SideNavSection.d.ts +1 -1
  227. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  228. package/dist/SideNav/SideNavSection.js +16 -18
  229. package/dist/Skeleton/Skeleton.js +3 -3
  230. package/dist/Slider/Slider.js +23 -23
  231. package/dist/Spinner/Spinner.js +9 -9
  232. package/dist/StatusDot/StatusDot.js +5 -5
  233. package/dist/Switch/Switch.d.ts +4 -8
  234. package/dist/Switch/Switch.d.ts.map +1 -1
  235. package/dist/Switch/Switch.js +29 -34
  236. package/dist/TabList/Tab.js +18 -18
  237. package/dist/TabList/TabList.js +5 -5
  238. package/dist/TabList/TabMenu.d.ts.map +1 -1
  239. package/dist/TabList/TabMenu.js +30 -57
  240. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  241. package/dist/Table/BaseTable.d.ts.map +1 -1
  242. package/dist/Table/BaseTable.js +39 -50
  243. package/dist/Table/Table.js +7 -7
  244. package/dist/Table/TableBody.d.ts +1 -1
  245. package/dist/Table/TableBody.d.ts.map +1 -1
  246. package/dist/Table/TableBody.js +5 -9
  247. package/dist/Table/TableCell.js +3 -3
  248. package/dist/Table/TableFooter.d.ts +1 -1
  249. package/dist/Table/TableFooter.d.ts.map +1 -1
  250. package/dist/Table/TableFooter.js +5 -9
  251. package/dist/Table/TableHeader.d.ts +1 -1
  252. package/dist/Table/TableHeader.d.ts.map +1 -1
  253. package/dist/Table/TableHeader.js +5 -9
  254. package/dist/Table/TableHeaderCell.js +3 -3
  255. package/dist/Table/TableRow.js +5 -5
  256. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  257. package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
  258. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  259. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  260. package/dist/Table/plugins/pagination/paginateData.js +1 -5
  261. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  262. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
  263. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  264. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  265. package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
  266. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  267. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  268. package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
  269. package/dist/Table/tableContextMenu.js +9 -9
  270. package/dist/Text/Text.js +10 -10
  271. package/dist/TextArea/TextArea.js +14 -14
  272. package/dist/TextInput/TextInput.js +15 -15
  273. package/dist/Thumbnail/Thumbnail.d.ts +2 -3
  274. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  275. package/dist/Thumbnail/Thumbnail.js +29 -30
  276. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  277. package/dist/TimeInput/TimeInput.js +21 -26
  278. package/dist/Timestamp/Timestamp.d.ts +1 -1
  279. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  280. package/dist/Timestamp/Timestamp.js +26 -37
  281. package/dist/Toast/Toast.d.ts.map +1 -1
  282. package/dist/Toast/Toast.js +17 -25
  283. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  284. package/dist/Toast/ToastViewport.js +11 -23
  285. package/dist/Toast/useToast.d.ts.map +1 -1
  286. package/dist/Toast/useToast.js +4 -44
  287. package/dist/ToggleButton/ToggleButton.js +12 -12
  288. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  289. package/dist/Token/Token.js +21 -21
  290. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  291. package/dist/Tokenizer/Tokenizer.js +34 -36
  292. package/dist/Toolbar/Toolbar.js +18 -18
  293. package/dist/Tooltip/Tooltip.js +11 -11
  294. package/dist/Tooltip/useTooltip.d.ts +1 -5
  295. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  296. package/dist/Tooltip/useTooltip.js +3 -3
  297. package/dist/TopNav/TopNav.js +32 -32
  298. package/dist/TopNav/TopNavHeading.js +67 -67
  299. package/dist/TopNav/TopNavItem.js +5 -5
  300. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  301. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  302. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  303. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
  304. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  305. package/dist/TopNav/TopNavMenu.js +32 -32
  306. package/dist/TreeList/TreeList.js +8 -8
  307. package/dist/TreeList/TreeListBranches.js +11 -11
  308. package/dist/TreeList/TreeListItem.js +30 -30
  309. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  310. package/dist/Typeahead/BaseTypeahead.js +20 -23
  311. package/dist/Typeahead/Typeahead.js +12 -12
  312. package/dist/Typeahead/TypeaheadItem.js +10 -10
  313. package/dist/VStack/VStack.js +3 -3
  314. package/dist/astryx.css +0 -7
  315. package/dist/astryx.umd.js +59 -59
  316. package/dist/astryx.umd.js.map +4 -4
  317. package/dist/docs-types.d.ts +2 -8
  318. package/dist/docs-types.d.ts.map +1 -1
  319. package/dist/hooks/focusableSelector.d.ts +1 -1
  320. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  321. package/dist/hooks/focusableSelector.js +1 -1
  322. package/dist/hooks/index.d.ts +0 -2
  323. package/dist/hooks/index.d.ts.map +1 -1
  324. package/dist/hooks/index.js +0 -1
  325. package/dist/hooks/useFocusTrap.d.ts +0 -3
  326. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  327. package/dist/hooks/useFocusTrap.js +1 -38
  328. package/dist/hooks/useInteractiveRole.d.ts +2 -6
  329. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  330. package/dist/hooks/useInteractiveRole.js +2 -6
  331. package/dist/hooks/useKeyboardHint.js +9 -9
  332. package/dist/hooks/useStreamingText.d.ts +1 -3
  333. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  334. package/dist/hooks/useStreamingText.js +5 -14
  335. package/dist/theme/MediaTheme.js +3 -3
  336. package/dist/theme/Theme.js +7 -7
  337. package/dist/theme/defineTheme.d.ts +1 -1
  338. package/dist/theme/defineTheme.d.ts.map +1 -1
  339. package/dist/theme/expandColorScale.d.ts.map +1 -1
  340. package/dist/theme/expandColorScale.js +3 -10
  341. package/dist/theme/hct.d.ts +15 -0
  342. package/dist/theme/hct.d.ts.map +1 -1
  343. package/dist/theme/hct.js +9 -9
  344. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  345. package/dist/theme/tokens.d.ts +2 -10
  346. package/dist/theme/tokens.d.ts.map +1 -1
  347. package/dist/theme/tokens.js +4 -220
  348. package/dist/theme/useTheme.d.ts +2 -3
  349. package/dist/theme/useTheme.d.ts.map +1 -1
  350. package/dist/theme/useTheme.js +6 -73
  351. package/dist/utils/index.d.ts +0 -3
  352. package/dist/utils/index.d.ts.map +1 -1
  353. package/dist/utils/index.js +1 -3
  354. package/dist/utils/timeParser.d.ts.map +1 -1
  355. package/dist/utils/timeParser.js +5 -8
  356. package/package.json +3 -3
  357. package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
  358. package/src/AlertDialog/AlertDialog.tsx +0 -2
  359. package/src/AppShell/AppShell.tsx +0 -2
  360. package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
  361. package/src/AspectRatio/AspectRatio.test.tsx +1 -142
  362. package/src/AspectRatio/AspectRatio.tsx +10 -70
  363. package/src/AspectRatio/index.ts +1 -5
  364. package/src/Avatar/Avatar.doc.mjs +0 -11
  365. package/src/Avatar/Avatar.test.tsx +1 -32
  366. package/src/Avatar/Avatar.tsx +20 -12
  367. package/src/AvatarGroup/AvatarGroup.doc.mjs +0 -1
  368. package/src/Banner/Banner.doc.mjs +0 -8
  369. package/src/Banner/Banner.test.tsx +0 -38
  370. package/src/Banner/Banner.tsx +1 -8
  371. package/src/Calendar/Calendar.doc.mjs +1 -1
  372. package/src/Calendar/Calendar.test.tsx +17 -122
  373. package/src/Calendar/Calendar.tsx +5 -26
  374. package/src/Calendar/dayCellUtils.ts +1 -3
  375. package/src/Calendar/styles.ts +2 -12
  376. package/src/Card/Card.doc.mjs +1 -1
  377. package/src/Card/Card.tsx +6 -16
  378. package/src/Carousel/Carousel.doc.mjs +12 -12
  379. package/src/Carousel/Carousel.test.tsx +0 -13
  380. package/src/Carousel/Carousel.tsx +2 -4
  381. package/src/Carousel/carousel.markers.stylex.ts +10 -0
  382. package/src/Chat/Chat.doc.mjs +1 -1
  383. package/src/Chat/ChatComposerInput.test.tsx +1 -27
  384. package/src/Chat/ChatComposerInput.tsx +15 -20
  385. package/src/Chat/ChatDictationButton.tsx +4 -4
  386. package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
  387. package/src/Chat/ChatMessageMetadata.tsx +6 -4
  388. package/src/Chat/ChatSystemMessage.test.tsx +11 -26
  389. package/src/Chat/ChatSystemMessage.tsx +7 -7
  390. package/src/Chat/ChatTokenizedText.test.tsx +16 -29
  391. package/src/Chat/ChatTokenizedText.tsx +8 -15
  392. package/src/Chat/ChatToolCalls.test.tsx +0 -55
  393. package/src/Chat/ChatToolCalls.tsx +12 -10
  394. package/src/Chat/index.ts +4 -1
  395. package/src/Chat/useTriggerMenu.tsx +4 -1
  396. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  397. package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
  398. package/src/CheckboxInput/CheckboxInput.tsx +0 -2
  399. package/src/CheckboxList/CheckboxList.test.tsx +0 -19
  400. package/src/CheckboxList/CheckboxListItem.tsx +2 -11
  401. package/src/Citation/Citation.doc.mjs +0 -5
  402. package/src/ClickableCard/ClickableCard.tsx +2 -45
  403. package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
  404. package/src/CodeBlock/CodeBlock.test.tsx +3 -122
  405. package/src/CodeBlock/CodeBlock.tsx +4 -62
  406. package/src/Collapsible/Collapsible.doc.mjs +4 -8
  407. package/src/Collapsible/Collapsible.tsx +10 -86
  408. package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
  409. package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
  410. package/src/Collapsible/CollapsibleGroup.tsx +9 -107
  411. package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
  412. package/src/Collapsible/index.ts +0 -4
  413. package/src/Collapsible/useCollapsible.ts +6 -20
  414. package/src/CommandPalette/CommandPalette.doc.mjs +0 -5
  415. package/src/CommandPalette/CommandPalette.tsx +3 -5
  416. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
  417. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
  418. package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
  419. package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
  420. package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
  421. package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
  422. package/src/ContextMenu/ContextMenu.test.tsx +0 -87
  423. package/src/ContextMenu/ContextMenu.tsx +28 -87
  424. package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
  425. package/src/DateInput/DateInput.test.tsx +20 -11
  426. package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
  427. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
  428. package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
  429. package/src/DateTimeInput/DateTimeInput.tsx +2 -8
  430. package/src/DateTimeInput/index.ts +0 -1
  431. package/src/Dialog/Dialog.doc.mjs +0 -4
  432. package/src/Dialog/DialogHeader.doc.mjs +0 -45
  433. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  434. package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
  435. package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
  436. package/src/EmptyState/EmptyState.doc.mjs +1 -1
  437. package/src/Field/Field.test.tsx +4 -1
  438. package/src/Field/FieldLabel.test.tsx +2 -2
  439. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
  440. package/src/Grid/Grid.test.tsx +18 -43
  441. package/src/Grid/Grid.tsx +9 -26
  442. package/src/HoverCard/HoverCard.doc.mjs +6 -6
  443. package/src/HoverCard/useHoverCard.doc.mjs +5 -5
  444. package/src/HoverCard/useHoverCard.tsx +2 -9
  445. package/src/Icon/Icon.test.tsx +29 -41
  446. package/src/Icon/Icon.tsx +2 -6
  447. package/src/InputGroup/InputGroup.doc.mjs +0 -1
  448. package/src/InputGroup/InputGroup.tsx +2 -2
  449. package/src/Item/Item.tsx +1 -1
  450. package/src/Layer/useLayer.doc.mjs +2 -2
  451. package/src/Layer/useLayer.test.tsx +2 -221
  452. package/src/Layer/useLayer.tsx +30 -69
  453. package/src/Layout/LayoutContent.doc.mjs +0 -12
  454. package/src/Layout/LayoutPanel.doc.mjs +0 -40
  455. package/src/Lightbox/Lightbox.doc.mjs +0 -5
  456. package/src/Lightbox/Lightbox.test.tsx +2 -123
  457. package/src/Lightbox/Lightbox.tsx +1 -29
  458. package/src/Markdown/Markdown.tsx +7 -9
  459. package/src/Markdown/parser.perf.test.ts +12 -34
  460. package/src/MobileNav/MobileNav.test.tsx +0 -56
  461. package/src/MobileNav/MobileNav.tsx +8 -13
  462. package/src/NavMenu/NavMenu.doc.mjs +0 -15
  463. package/src/NumberInput/NumberInput.test.tsx +3 -48
  464. package/src/NumberInput/NumberInput.tsx +15 -32
  465. package/src/Outline/Outline.doc.mjs +0 -2
  466. package/src/Overlay/Overlay.doc.mjs +0 -6
  467. package/src/Pagination/Pagination.test.tsx +0 -162
  468. package/src/Pagination/Pagination.tsx +26 -80
  469. package/src/Popover/Popover.doc.mjs +6 -6
  470. package/src/Popover/Popover.test.tsx +0 -65
  471. package/src/Popover/usePopover.doc.mjs +1 -1
  472. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  473. package/src/PowerSearch/PowerSearch.test.tsx +1 -109
  474. package/src/PowerSearch/PowerSearch.tsx +16 -37
  475. package/src/ProgressBar/ProgressBar.doc.mjs +0 -2
  476. package/src/ProgressBar/ProgressBar.test.tsx +0 -30
  477. package/src/ProgressBar/ProgressBar.tsx +5 -12
  478. package/src/RadioList/RadioList.test.tsx +0 -19
  479. package/src/RadioList/RadioListItem.tsx +4 -9
  480. package/src/Resizable/ResizeHandle.tsx +4 -22
  481. package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
  482. package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
  483. package/src/SegmentedControl/SegmentedControl.tsx +5 -27
  484. package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
  485. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  486. package/src/Selector/Selector.test.tsx +1 -27
  487. package/src/SideNav/SideNav.doc.mjs +1 -7
  488. package/src/SideNav/SideNav.test.tsx +0 -66
  489. package/src/SideNav/SideNav.tsx +2 -6
  490. package/src/SideNav/SideNavCollapseButton.tsx +3 -4
  491. package/src/SideNav/SideNavSection.tsx +4 -6
  492. package/src/Switch/Switch.doc.mjs +7 -7
  493. package/src/Switch/Switch.test.tsx +3 -102
  494. package/src/Switch/Switch.tsx +7 -20
  495. package/src/TabList/TabList.test.tsx +1 -185
  496. package/src/TabList/TabMenu.tsx +9 -45
  497. package/src/Table/BaseTable.tsx +2 -13
  498. package/src/Table/Table.doc.mjs +0 -5
  499. package/src/Table/Table.test.tsx +0 -87
  500. package/src/Table/TableBody.tsx +2 -15
  501. package/src/Table/TableFooter.tsx +2 -15
  502. package/src/Table/TableHeader.tsx +2 -15
  503. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
  504. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
  505. package/src/Table/plugins/pagination/paginateData.ts +1 -5
  506. package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
  507. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
  508. package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
  509. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
  510. package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
  511. package/src/TextArea/TextArea.test.tsx +3 -3
  512. package/src/TextInput/TextInput.test.tsx +3 -3
  513. package/src/Thumbnail/Thumbnail.test.tsx +2 -36
  514. package/src/Thumbnail/Thumbnail.tsx +2 -4
  515. package/src/TimeInput/TimeInput.test.tsx +0 -37
  516. package/src/TimeInput/TimeInput.tsx +1 -11
  517. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  518. package/src/Timestamp/Timestamp.test.tsx +0 -52
  519. package/src/Timestamp/Timestamp.tsx +16 -30
  520. package/src/Toast/Toast.tsx +3 -11
  521. package/src/Toast/ToastViewport.test.tsx +0 -64
  522. package/src/Toast/ToastViewport.tsx +0 -12
  523. package/src/Toast/useToast.tsx +0 -41
  524. package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
  525. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  526. package/src/Tokenizer/Tokenizer.test.tsx +0 -54
  527. package/src/Tokenizer/Tokenizer.tsx +4 -5
  528. package/src/Tooltip/Tooltip.doc.mjs +6 -6
  529. package/src/Tooltip/useTooltip.doc.mjs +5 -5
  530. package/src/Tooltip/useTooltip.tsx +2 -12
  531. package/src/TopNav/TopNav.doc.mjs +1 -1
  532. package/src/TopNav/TopNav.test.tsx +7 -23
  533. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
  534. package/src/TreeList/TreeList.doc.mjs +2 -2
  535. package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
  536. package/src/Typeahead/BaseTypeahead.tsx +2 -5
  537. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  538. package/src/Typeahead/Typeahead.test.tsx +1 -45
  539. package/src/docs-types.ts +1 -9
  540. package/src/hooks/focusableSelector.ts +1 -1
  541. package/src/hooks/index.ts +0 -3
  542. package/src/hooks/useFocusTrap.doc.mjs +2 -4
  543. package/src/hooks/useFocusTrap.test.tsx +1 -149
  544. package/src/hooks/useFocusTrap.ts +1 -50
  545. package/src/hooks/useInteractiveRole.ts +4 -12
  546. package/src/hooks/useStreamingText.test.ts +19 -54
  547. package/src/hooks/useStreamingText.ts +5 -16
  548. package/src/hooks/useTreeFocus.test.tsx +3 -1
  549. package/src/reset.css +0 -29
  550. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  551. package/src/theme/defineTheme.ts +13 -4
  552. package/src/theme/derivedVarRegistry.test.ts +2 -2
  553. package/src/theme/expandColorScale.test.ts +0 -29
  554. package/src/theme/expandColorScale.ts +6 -11
  555. package/src/theme/hct.ts +17 -9
  556. package/src/theme/tokens.test.ts +9 -182
  557. package/src/theme/tokens.ts +4 -239
  558. package/src/theme/useTheme.test.tsx +2 -126
  559. package/src/theme/useTheme.ts +6 -87
  560. package/src/utils/index.ts +0 -4
  561. package/src/utils/sharedResizeObserver.test.ts +2 -2
  562. package/src/utils/timeParser.test.ts +0 -13
  563. package/src/utils/timeParser.ts +5 -8
  564. package/dist/hooks/useHotkeys.d.ts +0 -51
  565. package/dist/hooks/useHotkeys.d.ts.map +0 -1
  566. package/dist/hooks/useHotkeys.js +0 -160
  567. package/dist/utils/color.d.ts +0 -42
  568. package/dist/utils/color.d.ts.map +0 -1
  569. package/dist/utils/color.js +0 -150
  570. package/dist/utils/composeEventHandlers.d.ts +0 -30
  571. package/dist/utils/composeEventHandlers.d.ts.map +0 -1
  572. package/dist/utils/composeEventHandlers.js +0 -40
  573. package/src/Chat/ChatDictationButton.test.tsx +0 -43
  574. package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
  575. package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
  576. package/src/Collapsible/Collapsible.test.tsx +0 -405
  577. package/src/FieldStatus/FieldStatus.test.tsx +0 -282
  578. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
  579. package/src/Layout/Layout.test.tsx +0 -285
  580. package/src/Layout/LayoutSlots.test.tsx +0 -364
  581. package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
  582. package/src/OverflowList/OverflowList.test.tsx +0 -416
  583. package/src/Overlay/Overlay.test.tsx +0 -356
  584. package/src/Resizable/ResizeHandle.test.tsx +0 -218
  585. package/src/SizeContext/SizeContext.test.tsx +0 -226
  586. package/src/Toast/useToast.test.tsx +0 -258
  587. package/src/__tests__/TestIcon.tsx +0 -26
  588. package/src/__tests__/fastRoleQueries.ts +0 -66
  589. package/src/docPropReferences.test.ts +0 -178
  590. package/src/hooks/useHotkeys.doc.mjs +0 -52
  591. package/src/hooks/useHotkeys.test.ts +0 -245
  592. package/src/hooks/useHotkeys.ts +0 -203
  593. package/src/theme/themingTargets.test.ts +0 -353
  594. package/src/utils/color.test.ts +0 -133
  595. package/src/utils/color.ts +0 -148
  596. package/src/utils/composeEventHandlers.test.ts +0 -71
  597. package/src/utils/composeEventHandlers.ts +0 -44
  598. package/src/utils/mergeProps.test.ts +0 -166
@@ -1,405 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file Collapsible.test.tsx
5
- * @input Uses vitest, @testing-library/react, Collapsible + CollapsibleGroup
6
- * @output Characterization coverage for Collapsible behavior
7
- * @position Testing; validates Collapsible.tsx (disclosure primitive)
8
- *
9
- * SYNC: When Collapsible.tsx changes, update tests to match new behavior
10
- */
11
-
12
- import {describe, it, expect, vi} from 'vitest';
13
- import {render, screen, within} from '@testing-library/react';
14
- import userEvent from '@testing-library/user-event';
15
- import {Collapsible} from './Collapsible';
16
- import {CollapsibleGroup} from './CollapsibleGroup';
17
-
18
- /**
19
- * Resolves the content region a trigger controls via aria-controls, so tests
20
- * assert the real disclosure linkage rather than guessing at DOM structure.
21
- */
22
- function contentFor(trigger: HTMLElement): HTMLElement {
23
- const id = trigger.getAttribute('aria-controls');
24
- expect(id).toBeTruthy();
25
- const el = document.getElementById(id as string);
26
- expect(el).not.toBeNull();
27
- return el as HTMLElement;
28
- }
29
-
30
- describe('Collapsible', () => {
31
- describe('structure and rendering', () => {
32
- it('renders the trigger content inside a button', () => {
33
- render(
34
- <Collapsible trigger="Details">
35
- <p>Body</p>
36
- </Collapsible>,
37
- );
38
- const button = screen.getByRole('button');
39
- expect(button).toHaveTextContent('Details');
40
- expect(button.tagName).toBe('BUTTON');
41
- });
42
-
43
- it('renders the trigger button with an explicit type="button"', () => {
44
- // Prevents implicit form submission when used inside a <form>.
45
- render(<Collapsible trigger="T">c</Collapsible>);
46
- expect(screen.getByRole('button')).toHaveAttribute('type', 'button');
47
- });
48
-
49
- it('renders children inside the controlled content region', () => {
50
- render(
51
- <Collapsible trigger="Section">
52
- <span data-testid="child">Hello</span>
53
- </Collapsible>,
54
- );
55
- const content = contentFor(screen.getByRole('button'));
56
- expect(within(content).getByTestId('child')).toBeInTheDocument();
57
- });
58
-
59
- it('links the trigger to its content via aria-controls', () => {
60
- render(<Collapsible trigger="T">Body</Collapsible>);
61
- const button = screen.getByRole('button');
62
- const content = contentFor(button);
63
- expect(button.getAttribute('aria-controls')).toBe(content.id);
64
- });
65
-
66
- it('renders the stable astryx-collapsible class on the root', () => {
67
- render(
68
- <Collapsible trigger="T" data-testid="root">
69
- c
70
- </Collapsible>,
71
- );
72
- expect(screen.getByTestId('root')).toHaveClass('astryx-collapsible');
73
- });
74
-
75
- it('renders a ReactNode trigger, not just a string', () => {
76
- render(
77
- <Collapsible trigger={<span data-testid="rich">Rich</span>}>
78
- c
79
- </Collapsible>,
80
- );
81
- expect(screen.getByTestId('rich')).toBeInTheDocument();
82
- });
83
- });
84
-
85
- describe('uncontrolled open state', () => {
86
- it('is open by default (aria-expanded="true")', () => {
87
- render(<Collapsible trigger="T">Body</Collapsible>);
88
- expect(screen.getByRole('button')).toHaveAttribute(
89
- 'aria-expanded',
90
- 'true',
91
- );
92
- });
93
-
94
- it('honors defaultIsOpen={false} (starts collapsed)', () => {
95
- render(
96
- <Collapsible trigger="T" defaultIsOpen={false}>
97
- Body
98
- </Collapsible>,
99
- );
100
- expect(screen.getByRole('button')).toHaveAttribute(
101
- 'aria-expanded',
102
- 'false',
103
- );
104
- });
105
-
106
- it('toggles open/closed when the trigger is clicked', async () => {
107
- const user = userEvent.setup();
108
- render(<Collapsible trigger="T">Body</Collapsible>);
109
- const button = screen.getByRole('button');
110
-
111
- expect(button).toHaveAttribute('aria-expanded', 'true');
112
- await user.click(button);
113
- expect(button).toHaveAttribute('aria-expanded', 'false');
114
- await user.click(button);
115
- expect(button).toHaveAttribute('aria-expanded', 'true');
116
- });
117
-
118
- it('opens a default-collapsed instance on click', async () => {
119
- const user = userEvent.setup();
120
- render(
121
- <Collapsible trigger="T" defaultIsOpen={false}>
122
- Body
123
- </Collapsible>,
124
- );
125
- const button = screen.getByRole('button');
126
- await user.click(button);
127
- expect(button).toHaveAttribute('aria-expanded', 'true');
128
- });
129
-
130
- it('toggles via keyboard activation (Enter and Space)', async () => {
131
- const user = userEvent.setup();
132
- render(<Collapsible trigger="T">Body</Collapsible>);
133
- const button = screen.getByRole('button');
134
-
135
- button.focus();
136
- expect(button).toHaveFocus();
137
-
138
- await user.keyboard('{Enter}');
139
- expect(button).toHaveAttribute('aria-expanded', 'false');
140
- await user.keyboard(' ');
141
- expect(button).toHaveAttribute('aria-expanded', 'true');
142
- });
143
-
144
- it('hides the content region (display:none) only when collapsed', async () => {
145
- const user = userEvent.setup();
146
- render(<Collapsible trigger="T">Body</Collapsible>);
147
- const button = screen.getByRole('button');
148
- const content = contentFor(button);
149
-
150
- // Open: not display:none.
151
- expect(content).not.toHaveStyle({display: 'none'});
152
- await user.click(button);
153
- // Collapsed: hidden via the contentHidden style.
154
- expect(content).toHaveStyle({display: 'none'});
155
- });
156
-
157
- it('rotates the chevron indicator between open and closed states', async () => {
158
- const user = userEvent.setup();
159
- render(<Collapsible trigger="T">Body</Collapsible>);
160
- const button = screen.getByRole('button');
161
- // The chevron lives in the last span of the trigger button.
162
- const chevron = button.querySelectorAll('span')[1];
163
- const openClass = chevron.getAttribute('class');
164
-
165
- await user.click(button);
166
- const closedClass = chevron.getAttribute('class');
167
- expect(closedClass).not.toEqual(openClass);
168
- });
169
- });
170
-
171
- describe('controlled open state', () => {
172
- it('reflects the isOpen prop', () => {
173
- const {rerender} = render(
174
- <Collapsible trigger="T" isOpen={false}>
175
- Body
176
- </Collapsible>,
177
- );
178
- expect(screen.getByRole('button')).toHaveAttribute(
179
- 'aria-expanded',
180
- 'false',
181
- );
182
-
183
- rerender(
184
- <Collapsible trigger="T" isOpen={true}>
185
- Body
186
- </Collapsible>,
187
- );
188
- expect(screen.getByRole('button')).toHaveAttribute(
189
- 'aria-expanded',
190
- 'true',
191
- );
192
- });
193
-
194
- it('calls onOpenChange with the negated state on click', async () => {
195
- const user = userEvent.setup();
196
- const onOpenChange = vi.fn();
197
- render(
198
- <Collapsible trigger="T" isOpen={false} onOpenChange={onOpenChange}>
199
- Body
200
- </Collapsible>,
201
- );
202
- await user.click(screen.getByRole('button'));
203
- expect(onOpenChange).toHaveBeenCalledTimes(1);
204
- expect(onOpenChange).toHaveBeenCalledWith(true);
205
- });
206
-
207
- it('does not self-update when controlled without onOpenChange', async () => {
208
- // A controlled instance is driven entirely by the isOpen prop; a click
209
- // must not flip the visual state on its own.
210
- const user = userEvent.setup();
211
- render(
212
- <Collapsible trigger="T" isOpen={false}>
213
- Body
214
- </Collapsible>,
215
- );
216
- const button = screen.getByRole('button');
217
- await user.click(button);
218
- expect(button).toHaveAttribute('aria-expanded', 'false');
219
- });
220
-
221
- it('stays put until the parent updates isOpen', async () => {
222
- const user = userEvent.setup();
223
- const onOpenChange = vi.fn();
224
- const {rerender} = render(
225
- <Collapsible trigger="T" isOpen={false} onOpenChange={onOpenChange}>
226
- Body
227
- </Collapsible>,
228
- );
229
- const button = screen.getByRole('button');
230
- await user.click(button);
231
- // Still closed — parent hasn't re-rendered with the new value yet.
232
- expect(button).toHaveAttribute('aria-expanded', 'false');
233
-
234
- rerender(
235
- <Collapsible trigger="T" isOpen={true} onOpenChange={onOpenChange}>
236
- Body
237
- </Collapsible>,
238
- );
239
- expect(button).toHaveAttribute('aria-expanded', 'true');
240
- });
241
- });
242
-
243
- describe('prop forwarding', () => {
244
- it('forwards a ref to the root element', () => {
245
- const ref = vi.fn();
246
- render(
247
- <Collapsible ref={ref} trigger="T">
248
- c
249
- </Collapsible>,
250
- );
251
- expect(ref).toHaveBeenCalledWith(expect.any(HTMLDivElement));
252
- });
253
-
254
- it('passes through data-testid and other DOM props to the root', () => {
255
- render(
256
- <Collapsible trigger="T" data-testid="root" data-custom="x">
257
- c
258
- </Collapsible>,
259
- );
260
- const root = screen.getByTestId('root');
261
- expect(root).toHaveAttribute('data-custom', 'x');
262
- });
263
-
264
- it('exposes a displayName for devtools', () => {
265
- expect(Collapsible.displayName).toBe('Collapsible');
266
- });
267
- });
268
-
269
- describe('inside CollapsibleGroup (single mode)', () => {
270
- it('opens the item matching defaultValue and closes the rest', () => {
271
- render(
272
- <CollapsibleGroup type="single" defaultValue="b">
273
- <Collapsible trigger="A" value="a">
274
- Body A
275
- </Collapsible>
276
- <Collapsible trigger="B" value="b">
277
- Body B
278
- </Collapsible>
279
- </CollapsibleGroup>,
280
- );
281
- const [a, b] = screen.getAllByRole('button');
282
- expect(a).toHaveAttribute('aria-expanded', 'false');
283
- expect(b).toHaveAttribute('aria-expanded', 'true');
284
- });
285
-
286
- it('opening one item closes the previously open item', async () => {
287
- const user = userEvent.setup();
288
- render(
289
- <CollapsibleGroup type="single" defaultValue="a">
290
- <Collapsible trigger="A" value="a">
291
- Body A
292
- </Collapsible>
293
- <Collapsible trigger="B" value="b">
294
- Body B
295
- </Collapsible>
296
- </CollapsibleGroup>,
297
- );
298
- const [a, b] = screen.getAllByRole('button');
299
- expect(a).toHaveAttribute('aria-expanded', 'true');
300
-
301
- await user.click(b);
302
- expect(a).toHaveAttribute('aria-expanded', 'false');
303
- expect(b).toHaveAttribute('aria-expanded', 'true');
304
- });
305
-
306
- it('clicking the open item closes it (single mode allows all-closed)', async () => {
307
- const user = userEvent.setup();
308
- render(
309
- <CollapsibleGroup type="single" defaultValue="a">
310
- <Collapsible trigger="A" value="a">
311
- Body A
312
- </Collapsible>
313
- </CollapsibleGroup>,
314
- );
315
- const a = screen.getByRole('button');
316
- await user.click(a);
317
- expect(a).toHaveAttribute('aria-expanded', 'false');
318
- });
319
-
320
- it('fires the group onChange with the newly opened value', async () => {
321
- const user = userEvent.setup();
322
- const onChange = vi.fn();
323
- render(
324
- <CollapsibleGroup type="single" onChange={onChange}>
325
- <Collapsible trigger="A" value="a">
326
- Body A
327
- </Collapsible>
328
- </CollapsibleGroup>,
329
- );
330
- await user.click(screen.getByRole('button'));
331
- expect(onChange).toHaveBeenCalledWith('a');
332
- });
333
- });
334
-
335
- describe('inside CollapsibleGroup (multiple mode)', () => {
336
- it('allows several items open at once', async () => {
337
- const user = userEvent.setup();
338
- render(
339
- <CollapsibleGroup type="multiple" defaultValue={['a']}>
340
- <Collapsible trigger="A" value="a">
341
- Body A
342
- </Collapsible>
343
- <Collapsible trigger="B" value="b">
344
- Body B
345
- </Collapsible>
346
- </CollapsibleGroup>,
347
- );
348
- const [a, b] = screen.getAllByRole('button');
349
- expect(a).toHaveAttribute('aria-expanded', 'true');
350
- expect(b).toHaveAttribute('aria-expanded', 'false');
351
-
352
- await user.click(b);
353
- // Opening B does not close A in multiple mode.
354
- expect(a).toHaveAttribute('aria-expanded', 'true');
355
- expect(b).toHaveAttribute('aria-expanded', 'true');
356
- });
357
-
358
- it('fires onChange with the full array of open values', async () => {
359
- const user = userEvent.setup();
360
- const onChange = vi.fn();
361
- render(
362
- <CollapsibleGroup
363
- type="multiple"
364
- defaultValue={['a']}
365
- onChange={onChange}>
366
- <Collapsible trigger="A" value="a">
367
- Body A
368
- </Collapsible>
369
- <Collapsible trigger="B" value="b">
370
- Body B
371
- </Collapsible>
372
- </CollapsibleGroup>,
373
- );
374
- const [, b] = screen.getAllByRole('button');
375
- await user.click(b);
376
- expect(onChange).toHaveBeenCalledWith(['a', 'b']);
377
- });
378
- });
379
-
380
- describe('group presentation (dividers + density)', () => {
381
- it('reflects group dividers and density as data attributes on items', () => {
382
- render(
383
- <CollapsibleGroup type="single" dividers="between" density="compact">
384
- <Collapsible trigger="A" value="a" data-testid="item-a">
385
- Body A
386
- </Collapsible>
387
- </CollapsibleGroup>,
388
- );
389
- const item = screen.getByTestId('item-a');
390
- expect(item).toHaveAttribute('data-dividers', 'between');
391
- expect(item).toHaveAttribute('data-density', 'compact');
392
- });
393
-
394
- it('omits divider data attributes when standalone (no group)', () => {
395
- render(
396
- <Collapsible trigger="A" data-testid="item">
397
- Body
398
- </Collapsible>,
399
- );
400
- const item = screen.getByTestId('item');
401
- expect(item).not.toHaveAttribute('data-dividers');
402
- expect(item).not.toHaveAttribute('data-density');
403
- });
404
- });
405
- });
@@ -1,282 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file FieldStatus.test.tsx
5
- * @input Uses vitest, @testing-library/react, FieldStatus component
6
- * @output Characterization coverage for FieldStatus behavior
7
- * @position Testing; validates FieldStatus.tsx implementation
8
- *
9
- * SYNC: When FieldStatus.tsx changes, update tests to match new behavior
10
- */
11
-
12
- import {describe, it, expect, vi} from 'vitest';
13
- import {render, screen} from '@testing-library/react';
14
- import * as stylex from '@stylexjs/stylex';
15
- import {FieldStatus} from './FieldStatus';
16
-
17
- const testStyles = stylex.create({
18
- custom: {color: 'rebeccapurple'},
19
- });
20
-
21
- describe('FieldStatus', () => {
22
- it('renders the message text', () => {
23
- render(<FieldStatus type="error" message="This field is required" />);
24
- expect(screen.getByText('This field is required')).toBeInTheDocument();
25
- });
26
-
27
- it('renders the message inside a <div>', () => {
28
- render(<FieldStatus type="error" message="Boom" data-testid="fs" />);
29
- expect(screen.getByTestId('fs').tagName).toBe('DIV');
30
- });
31
-
32
- describe('role semantics', () => {
33
- // Errors are urgent — they get role="alert" so assistive tech interrupts.
34
- it('uses role="alert" for error status', () => {
35
- render(<FieldStatus type="error" message="msg" />);
36
- expect(screen.getByRole('alert')).toHaveTextContent('msg');
37
- });
38
-
39
- // Non-error statuses are advisory — role="status" is a polite live region.
40
- it('uses role="status" for warning status', () => {
41
- render(<FieldStatus type="warning" message="msg" data-testid="fs" />);
42
- expect(screen.getByTestId('fs')).toHaveAttribute('role', 'status');
43
- expect(screen.queryByRole('alert')).not.toBeInTheDocument();
44
- });
45
-
46
- it('uses role="status" for success status', () => {
47
- render(<FieldStatus type="success" message="msg" data-testid="fs" />);
48
- expect(screen.getByTestId('fs')).toHaveAttribute('role', 'status');
49
- });
50
- });
51
-
52
- describe('aria-live politeness', () => {
53
- // Error → assertive so screen readers announce immediately.
54
- it('sets aria-live="assertive" for error', () => {
55
- render(<FieldStatus type="error" message="msg" data-testid="fs" />);
56
- expect(screen.getByTestId('fs')).toHaveAttribute(
57
- 'aria-live',
58
- 'assertive',
59
- );
60
- });
61
-
62
- it('sets aria-live="polite" for warning', () => {
63
- render(<FieldStatus type="warning" message="msg" data-testid="fs" />);
64
- expect(screen.getByTestId('fs')).toHaveAttribute('aria-live', 'polite');
65
- });
66
-
67
- it('sets aria-live="polite" for success', () => {
68
- render(<FieldStatus type="success" message="msg" data-testid="fs" />);
69
- expect(screen.getByTestId('fs')).toHaveAttribute('aria-live', 'polite');
70
- });
71
-
72
- // The element is a live region, never hidden from assistive tech.
73
- it('does not mark itself aria-hidden', () => {
74
- render(<FieldStatus type="error" message="msg" data-testid="fs" />);
75
- expect(screen.getByTestId('fs')).not.toHaveAttribute('aria-hidden');
76
- });
77
- });
78
-
79
- describe('theme class + data attribute reflection', () => {
80
- it('renders the stable astryx-field-status class', () => {
81
- render(<FieldStatus type="error" message="msg" data-testid="fs" />);
82
- expect(screen.getByTestId('fs')).toHaveClass('astryx-field-status');
83
- });
84
-
85
- it('reflects the type as a class token and data-type attribute', () => {
86
- render(<FieldStatus type="warning" message="msg" data-testid="fs" />);
87
- const el = screen.getByTestId('fs');
88
- expect(el).toHaveClass('warning');
89
- expect(el).toHaveAttribute('data-type', 'warning');
90
- });
91
-
92
- it('reflects the variant as a class token and data-variant attribute', () => {
93
- render(
94
- <FieldStatus
95
- type="error"
96
- message="msg"
97
- variant="detached"
98
- data-testid="fs"
99
- />,
100
- );
101
- const el = screen.getByTestId('fs');
102
- expect(el).toHaveClass('detached');
103
- expect(el).toHaveAttribute('data-variant', 'detached');
104
- });
105
-
106
- it('defaults data-variant to "attached"', () => {
107
- render(<FieldStatus type="error" message="msg" data-testid="fs" />);
108
- const el = screen.getByTestId('fs');
109
- expect(el).toHaveAttribute('data-variant', 'attached');
110
- expect(el).toHaveClass('attached');
111
- });
112
- });
113
-
114
- describe('color styling per status type', () => {
115
- // Each status type maps to a distinct color treatment. The rendered class
116
- // list must therefore differ between types — a regression that collapsed
117
- // them onto one color would be caught here.
118
- it('applies distinct StyleX classes for each type', () => {
119
- const {rerender} = render(
120
- <FieldStatus type="error" message="msg" data-testid="fs" />,
121
- );
122
- const errorClass = screen.getByTestId('fs').getAttribute('class');
123
-
124
- rerender(<FieldStatus type="warning" message="msg" data-testid="fs" />);
125
- const warningClass = screen.getByTestId('fs').getAttribute('class');
126
-
127
- rerender(<FieldStatus type="success" message="msg" data-testid="fs" />);
128
- const successClass = screen.getByTestId('fs').getAttribute('class');
129
-
130
- expect(errorClass).not.toEqual(warningClass);
131
- expect(warningClass).not.toEqual(successClass);
132
- expect(errorClass).not.toEqual(successClass);
133
- });
134
-
135
- it('applies distinct StyleX classes for each variant', () => {
136
- const {rerender} = render(
137
- <FieldStatus
138
- type="error"
139
- message="msg"
140
- variant="attached"
141
- data-testid="fs"
142
- />,
143
- );
144
- const attachedClass = screen.getByTestId('fs').getAttribute('class');
145
-
146
- rerender(
147
- <FieldStatus
148
- type="error"
149
- message="msg"
150
- variant="detached"
151
- data-testid="fs"
152
- />,
153
- );
154
- const detachedClass = screen.getByTestId('fs').getAttribute('class');
155
-
156
- expect(attachedClass).not.toEqual(detachedClass);
157
- });
158
- });
159
-
160
- describe('prop forwarding', () => {
161
- it('forwards a ref to the root element', () => {
162
- const ref = vi.fn();
163
- render(<FieldStatus ref={ref} type="error" message="msg" />);
164
- expect(ref).toHaveBeenCalledWith(expect.any(HTMLDivElement));
165
- });
166
-
167
- it('applies the id attribute', () => {
168
- render(
169
- <FieldStatus
170
- type="error"
171
- message="msg"
172
- id="email-error"
173
- data-testid="fs"
174
- />,
175
- );
176
- expect(screen.getByTestId('fs')).toHaveAttribute('id', 'email-error');
177
- });
178
-
179
- it('passes through arbitrary DOM props', () => {
180
- render(
181
- <FieldStatus
182
- type="error"
183
- message="msg"
184
- data-testid="fs"
185
- data-custom="xyz"
186
- />,
187
- );
188
- expect(screen.getByTestId('fs')).toHaveAttribute('data-custom', 'xyz');
189
- });
190
-
191
- it('merges a consumer className with the stable class', () => {
192
- render(
193
- <FieldStatus
194
- type="error"
195
- message="msg"
196
- className="my-status"
197
- data-testid="fs"
198
- />,
199
- );
200
- const el = screen.getByTestId('fs');
201
- expect(el).toHaveClass('my-status');
202
- expect(el).toHaveClass('astryx-field-status');
203
- });
204
-
205
- it('merges a consumer inline style', () => {
206
- render(
207
- <FieldStatus
208
- type="error"
209
- message="msg"
210
- style={{marginTop: '10px'}}
211
- data-testid="fs"
212
- />,
213
- );
214
- expect(screen.getByTestId('fs')).toHaveStyle({marginTop: '10px'});
215
- });
216
-
217
- it('applies an xstyle as an extra class', () => {
218
- const {rerender} = render(
219
- <FieldStatus type="error" message="msg" data-testid="fs" />,
220
- );
221
- const withoutXstyle = screen.getByTestId('fs').getAttribute('class');
222
-
223
- // xstyle values are compiled StyleX styles; passing one adds classes.
224
- rerender(
225
- <FieldStatus
226
- type="error"
227
- message="msg"
228
- data-testid="fs"
229
- xstyle={testStyles.custom}
230
- />,
231
- );
232
- const withXstyle = screen.getByTestId('fs').getAttribute('class');
233
- expect(withXstyle).not.toEqual(withoutXstyle);
234
- });
235
- });
236
-
237
- describe('dynamic updates', () => {
238
- it('updates the rendered message on rerender', () => {
239
- const {rerender} = render(
240
- <FieldStatus type="error" message="First" data-testid="fs" />,
241
- );
242
- expect(screen.getByTestId('fs')).toHaveTextContent('First');
243
-
244
- rerender(<FieldStatus type="error" message="Second" data-testid="fs" />);
245
- expect(screen.getByTestId('fs')).toHaveTextContent('Second');
246
- });
247
-
248
- // Switching from error to a non-error type must relax both the role and
249
- // the live-region politeness in lockstep.
250
- it('relaxes role and aria-live when type changes from error', () => {
251
- const {rerender} = render(
252
- <FieldStatus type="error" message="msg" data-testid="fs" />,
253
- );
254
- let el = screen.getByTestId('fs');
255
- expect(el).toHaveAttribute('role', 'alert');
256
- expect(el).toHaveAttribute('aria-live', 'assertive');
257
-
258
- rerender(<FieldStatus type="success" message="msg" data-testid="fs" />);
259
- el = screen.getByTestId('fs');
260
- expect(el).toHaveAttribute('role', 'status');
261
- expect(el).toHaveAttribute('aria-live', 'polite');
262
- });
263
- });
264
-
265
- describe('edge cases', () => {
266
- it('renders an empty message without crashing', () => {
267
- render(<FieldStatus type="error" message="" data-testid="fs" />);
268
- const el = screen.getByTestId('fs');
269
- expect(el).toBeInTheDocument();
270
- expect(el).toHaveTextContent('');
271
- });
272
-
273
- it('renders message content verbatim, including whitespace-only strings', () => {
274
- render(<FieldStatus type="warning" message=" " data-testid="fs" />);
275
- expect(screen.getByTestId('fs').textContent).toBe(' ');
276
- });
277
- });
278
-
279
- it('exposes a displayName for devtools', () => {
280
- expect(FieldStatus.displayName).toBe('FieldStatus');
281
- });
282
- });