@astryxdesign/core 0.1.3 → 0.1.4-canary.01e5b29

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 (642) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  3. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  4. package/dist/AlertDialog/AlertDialog.js +20 -18
  5. package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
  6. package/dist/AppShell/AppShell.d.ts +1 -1
  7. package/dist/AppShell/AppShell.d.ts.map +1 -1
  8. package/dist/AppShell/AppShell.js +55 -53
  9. package/dist/AspectRatio/AspectRatio.js +5 -5
  10. package/dist/Avatar/Avatar.d.ts.map +1 -1
  11. package/dist/Avatar/Avatar.js +27 -25
  12. package/dist/Avatar/AvatarStatusDot.js +5 -5
  13. package/dist/AvatarGroup/AvatarGroup.js +5 -5
  14. package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
  15. package/dist/Badge/Badge.js +3 -3
  16. package/dist/Banner/Banner.d.ts.map +1 -1
  17. package/dist/Banner/Banner.js +32 -25
  18. package/dist/Blockquote/Blockquote.js +7 -7
  19. package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
  20. package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
  21. package/dist/Button/Button.d.ts.map +1 -1
  22. package/dist/Button/Button.js +47 -26
  23. package/dist/ButtonGroup/ButtonGroup.js +7 -7
  24. package/dist/Calendar/Calendar.d.ts.map +1 -1
  25. package/dist/Calendar/Calendar.js +108 -64
  26. package/dist/Calendar/dayCellUtils.d.ts +67 -5
  27. package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
  28. package/dist/Calendar/dayCellUtils.js +139 -18
  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 +4 -2
  33. package/dist/Card/Card.d.ts.map +1 -1
  34. package/dist/Card/Card.js +18 -10
  35. package/dist/Carousel/Carousel.d.ts.map +1 -1
  36. package/dist/Carousel/Carousel.js +20 -19
  37. package/dist/Center/Center.js +3 -3
  38. package/dist/Chat/ChatComposer.js +23 -23
  39. package/dist/Chat/ChatComposerDrawer.js +14 -14
  40. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  41. package/dist/Chat/ChatComposerInput.js +27 -15
  42. package/dist/Chat/ChatDictationButton.d.ts +1 -1
  43. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  44. package/dist/Chat/ChatDictationButton.js +13 -11
  45. package/dist/Chat/ChatLayout.js +17 -17
  46. package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
  47. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  48. package/dist/Chat/ChatLayoutScrollButton.js +12 -10
  49. package/dist/Chat/ChatMessage.js +12 -12
  50. package/dist/Chat/ChatMessageBubble.js +7 -7
  51. package/dist/Chat/ChatMessageList.js +14 -14
  52. package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
  53. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  54. package/dist/Chat/ChatMessageMetadata.js +14 -12
  55. package/dist/Chat/ChatPastedTextToken.js +13 -13
  56. package/dist/Chat/ChatSendButton.js +3 -3
  57. package/dist/Chat/ChatSystemMessage.d.ts +1 -1
  58. package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
  59. package/dist/Chat/ChatSystemMessage.js +17 -17
  60. package/dist/Chat/ChatTokenizedText.d.ts +1 -1
  61. package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
  62. package/dist/Chat/ChatTokenizedText.js +24 -15
  63. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  64. package/dist/Chat/ChatToolCalls.js +81 -74
  65. package/dist/Chat/index.d.ts +1 -1
  66. package/dist/Chat/index.d.ts.map +1 -1
  67. package/dist/Chat/useTriggerMenu.js +15 -15
  68. package/dist/CheckboxInput/CheckboxInput.d.ts +6 -1
  69. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  70. package/dist/CheckboxInput/CheckboxInput.js +32 -24
  71. package/dist/CheckboxList/CheckboxList.js +9 -9
  72. package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
  73. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  74. package/dist/CheckboxList/CheckboxListItem.js +8 -6
  75. package/dist/Citation/Citation.js +10 -10
  76. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  77. package/dist/ClickableCard/ClickableCard.js +32 -9
  78. package/dist/Code/Code.d.ts +15 -1
  79. package/dist/Code/Code.d.ts.map +1 -1
  80. package/dist/Code/Code.js +35 -5
  81. package/dist/Code/index.d.ts +1 -1
  82. package/dist/Code/index.d.ts.map +1 -1
  83. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  84. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  85. package/dist/CodeBlock/CodeBlock.js +88 -52
  86. package/dist/CodeBlock/index.d.ts +1 -1
  87. package/dist/CodeBlock/index.d.ts.map +1 -1
  88. package/dist/Collapsible/Collapsible.d.ts +9 -3
  89. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  90. package/dist/Collapsible/Collapsible.js +110 -22
  91. package/dist/Collapsible/CollapsibleGroup.d.ts +39 -7
  92. package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
  93. package/dist/Collapsible/CollapsibleGroup.js +73 -12
  94. package/dist/Collapsible/CollapsibleGroupContext.d.ts +31 -0
  95. package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
  96. package/dist/Collapsible/CollapsibleGroupContext.js +33 -3
  97. package/dist/Collapsible/index.d.ts +1 -0
  98. package/dist/Collapsible/index.d.ts.map +1 -1
  99. package/dist/Collapsible/useCollapsible.d.ts +4 -1
  100. package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
  101. package/dist/Collapsible/useCollapsible.js +20 -6
  102. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  103. package/dist/CommandPalette/CommandPalette.js +36 -34
  104. package/dist/CommandPalette/CommandPaletteEmpty.d.ts +1 -1
  105. package/dist/CommandPalette/CommandPaletteEmpty.d.ts.map +1 -1
  106. package/dist/CommandPalette/CommandPaletteEmpty.js +27 -7
  107. package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
  108. package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
  109. package/dist/CommandPalette/CommandPaletteInput.js +13 -13
  110. package/dist/CommandPalette/CommandPaletteItem.js +3 -3
  111. package/dist/CommandPalette/CommandPaletteList.js +3 -3
  112. package/dist/ContextMenu/ContextMenu.d.ts +9 -1
  113. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  114. package/dist/ContextMenu/ContextMenu.js +16 -11
  115. package/dist/DateInput/DateInput.js +18 -18
  116. package/dist/DateRangeInput/DateRangeInput.js +23 -23
  117. package/dist/DateTimeInput/DateTimeInput.d.ts +5 -7
  118. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  119. package/dist/DateTimeInput/DateTimeInput.js +30 -26
  120. package/dist/DateTimeInput/index.d.ts +1 -1
  121. package/dist/DateTimeInput/index.d.ts.map +1 -1
  122. package/dist/Dialog/Dialog.js +9 -9
  123. package/dist/Dialog/DialogHeader.js +16 -16
  124. package/dist/Dialog/useImperativeDialog.js +3 -3
  125. package/dist/Divider/Divider.d.ts +0 -22
  126. package/dist/Divider/Divider.d.ts.map +1 -1
  127. package/dist/Divider/Divider.js +7 -7
  128. package/dist/DropdownMenu/DropdownMenu.js +10 -10
  129. package/dist/DropdownMenu/DropdownMenuItem.d.ts +2 -17
  130. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  131. package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
  132. package/dist/DropdownMenu/renderDropdownItems.js +10 -10
  133. package/dist/EmptyState/EmptyState.js +9 -9
  134. package/dist/Field/Field.js +17 -17
  135. package/dist/Field/FieldLabel.js +15 -15
  136. package/dist/Field/InputClearButton.js +5 -5
  137. package/dist/FieldStatus/FieldStatus.js +3 -3
  138. package/dist/FileInput/FileInput.js +29 -29
  139. package/dist/FormLayout/FormLayout.js +5 -5
  140. package/dist/Grid/Grid.d.ts +4 -3
  141. package/dist/Grid/Grid.d.ts.map +1 -1
  142. package/dist/Grid/Grid.js +29 -12
  143. package/dist/Grid/GridSpan.js +3 -3
  144. package/dist/HStack/HStack.js +3 -3
  145. package/dist/Heading/Heading.js +10 -10
  146. package/dist/HoverCard/HoverCard.js +9 -9
  147. package/dist/HoverCard/useHoverCard.js +3 -3
  148. package/dist/Icon/Icon.d.ts.map +1 -1
  149. package/dist/Icon/Icon.js +16 -12
  150. package/dist/Icon/defaultIcons.js +116 -116
  151. package/dist/IconButton/IconButton.js +3 -3
  152. package/dist/InputGroup/InputGroup.js +11 -11
  153. package/dist/InputGroup/InputGroupText.js +3 -3
  154. package/dist/Item/Item.js +18 -18
  155. package/dist/Kbd/Kbd.js +5 -5
  156. package/dist/Layer/LayerProvider.js +7 -7
  157. package/dist/Layer/useLayer.js +5 -5
  158. package/dist/Layout/Layout.js +21 -21
  159. package/dist/Layout/LayoutContent.js +3 -3
  160. package/dist/Layout/LayoutFooter.js +5 -5
  161. package/dist/Layout/LayoutHeader.js +5 -5
  162. package/dist/Layout/LayoutPanel.js +3 -3
  163. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  164. package/dist/Lightbox/Lightbox.js +55 -31
  165. package/dist/Lightbox/useLightbox.js +3 -3
  166. package/dist/Link/Link.js +15 -15
  167. package/dist/Link/LinkProvider.js +3 -3
  168. package/dist/Link/useLinkify.js +3 -3
  169. package/dist/List/List.js +11 -11
  170. package/dist/List/ListItem.js +11 -11
  171. package/dist/Markdown/Markdown.d.ts.map +1 -1
  172. package/dist/Markdown/Markdown.js +102 -102
  173. package/dist/Markdown/parser.d.ts +7 -0
  174. package/dist/Markdown/parser.d.ts.map +1 -1
  175. package/dist/Markdown/parser.js +300 -6
  176. package/dist/MetadataList/MetadataList.js +10 -10
  177. package/dist/MetadataList/MetadataListItem.js +15 -15
  178. package/dist/MobileNav/MobileNav.js +15 -15
  179. package/dist/MobileNav/MobileNavToggle.js +5 -5
  180. package/dist/MoreMenu/MoreMenu.js +3 -3
  181. package/dist/MultiSelector/MultiSelector.d.ts +7 -1
  182. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  183. package/dist/MultiSelector/MultiSelector.js +64 -55
  184. package/dist/NavIcon/NavIcon.js +3 -3
  185. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  186. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  187. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  188. package/dist/NumberInput/NumberInput.js +48 -32
  189. package/dist/Outline/Outline.js +15 -15
  190. package/dist/OverflowList/OverflowList.js +8 -8
  191. package/dist/Overlay/Overlay.js +3 -3
  192. package/dist/Overlay/OverlayScrim.js +5 -5
  193. package/dist/Overlay/useOverlay.js +3 -3
  194. package/dist/Pagination/Pagination.d.ts +1 -1
  195. package/dist/Pagination/Pagination.d.ts.map +1 -1
  196. package/dist/Pagination/Pagination.js +125 -72
  197. package/dist/Popover/Popover.js +16 -16
  198. package/dist/Popover/usePopover.js +7 -7
  199. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  200. package/dist/PowerSearch/PowerSearch.js +110 -92
  201. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  202. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  203. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  204. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  205. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  206. package/dist/ProgressBar/ProgressBar.js +25 -18
  207. package/dist/RadioList/RadioList.d.ts +7 -1
  208. package/dist/RadioList/RadioList.d.ts.map +1 -1
  209. package/dist/RadioList/RadioList.js +10 -8
  210. package/dist/RadioList/RadioListItem.d.ts +1 -1
  211. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  212. package/dist/RadioList/RadioListItem.js +30 -22
  213. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  214. package/dist/Resizable/ResizeHandle.js +28 -10
  215. package/dist/Section/Section.js +5 -5
  216. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  217. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  218. package/dist/SegmentedControl/SegmentedControl.js +32 -10
  219. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  220. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  221. package/dist/SegmentedControl/SegmentedControlItem.js +18 -12
  222. package/dist/SelectableCard/SelectableCard.js +5 -5
  223. package/dist/Selector/Selector.d.ts +6 -0
  224. package/dist/Selector/Selector.d.ts.map +1 -1
  225. package/dist/Selector/Selector.js +54 -45
  226. package/dist/Selector/SelectorOption.js +3 -3
  227. package/dist/SideNav/SideNav.d.ts.map +1 -1
  228. package/dist/SideNav/SideNav.js +38 -34
  229. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  230. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  231. package/dist/SideNav/SideNavCollapseButton.js +8 -6
  232. package/dist/SideNav/SideNavHeading.js +87 -87
  233. package/dist/SideNav/SideNavItem.js +42 -42
  234. package/dist/SideNav/SideNavSection.d.ts +1 -1
  235. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  236. package/dist/SideNav/SideNavSection.js +18 -16
  237. package/dist/Skeleton/Skeleton.js +3 -3
  238. package/dist/Slider/Slider.d.ts +6 -0
  239. package/dist/Slider/Slider.d.ts.map +1 -1
  240. package/dist/Slider/Slider.js +31 -22
  241. package/dist/Spinner/Spinner.d.ts.map +1 -1
  242. package/dist/Spinner/Spinner.js +10 -10
  243. package/dist/StatusDot/StatusDot.js +5 -5
  244. package/dist/Switch/Switch.d.ts +13 -4
  245. package/dist/Switch/Switch.d.ts.map +1 -1
  246. package/dist/Switch/Switch.js +41 -30
  247. package/dist/TabList/Tab.js +18 -18
  248. package/dist/TabList/TabList.js +5 -5
  249. package/dist/TabList/TabMenu.d.ts.map +1 -1
  250. package/dist/TabList/TabMenu.js +57 -30
  251. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  252. package/dist/Table/BaseTable.d.ts.map +1 -1
  253. package/dist/Table/BaseTable.js +51 -39
  254. package/dist/Table/Table.js +7 -7
  255. package/dist/Table/TableBody.d.ts +1 -1
  256. package/dist/Table/TableBody.d.ts.map +1 -1
  257. package/dist/Table/TableBody.js +9 -5
  258. package/dist/Table/TableCell.d.ts.map +1 -1
  259. package/dist/Table/TableCell.js +76 -7
  260. package/dist/Table/TableFooter.d.ts +1 -1
  261. package/dist/Table/TableFooter.d.ts.map +1 -1
  262. package/dist/Table/TableFooter.js +9 -5
  263. package/dist/Table/TableHeader.d.ts +1 -1
  264. package/dist/Table/TableHeader.d.ts.map +1 -1
  265. package/dist/Table/TableHeader.js +9 -5
  266. package/dist/Table/TableHeaderCell.js +3 -3
  267. package/dist/Table/TableRow.js +5 -5
  268. package/dist/Table/index.d.ts +2 -0
  269. package/dist/Table/index.d.ts.map +1 -1
  270. package/dist/Table/index.js +1 -0
  271. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  272. package/dist/Table/plugins/columnResize/useTableColumnResize.js +14 -11
  273. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  274. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  275. package/dist/Table/plugins/pagination/paginateData.js +5 -1
  276. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  277. package/dist/Table/plugins/rowExpansion/index.d.ts +3 -0
  278. package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -0
  279. package/dist/Table/plugins/rowExpansion/index.js +3 -0
  280. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +90 -0
  281. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -0
  282. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +398 -0
  283. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  284. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  285. package/dist/Table/plugins/selection/useTableSelectionState.js +11 -1
  286. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  287. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  288. package/dist/Table/plugins/sortable/useTableSortableState.js +8 -4
  289. package/dist/Table/tableContextMenu.d.ts +5 -1
  290. package/dist/Table/tableContextMenu.d.ts.map +1 -1
  291. package/dist/Table/tableContextMenu.js +19 -12
  292. package/dist/Text/Text.d.ts +1 -1
  293. package/dist/Text/Text.d.ts.map +1 -1
  294. package/dist/Text/Text.js +14 -13
  295. package/dist/Text/text.stylex.d.ts +35 -0
  296. package/dist/Text/text.stylex.d.ts.map +1 -1
  297. package/dist/Text/text.stylex.js +52 -1
  298. package/dist/TextArea/TextArea.js +14 -14
  299. package/dist/TextInput/TextInput.js +15 -15
  300. package/dist/Thumbnail/Thumbnail.d.ts +3 -2
  301. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  302. package/dist/Thumbnail/Thumbnail.js +30 -29
  303. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  304. package/dist/TimeInput/TimeInput.js +26 -21
  305. package/dist/Timestamp/Timestamp.d.ts +1 -1
  306. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  307. package/dist/Timestamp/Timestamp.js +37 -26
  308. package/dist/Toast/Toast.d.ts.map +1 -1
  309. package/dist/Toast/Toast.js +25 -17
  310. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  311. package/dist/Toast/ToastViewport.js +23 -11
  312. package/dist/Toast/useToast.js +4 -4
  313. package/dist/ToggleButton/ToggleButton.js +12 -12
  314. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  315. package/dist/Token/Token.js +21 -21
  316. package/dist/Tokenizer/Tokenizer.d.ts +6 -1
  317. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  318. package/dist/Tokenizer/Tokenizer.js +38 -29
  319. package/dist/Toolbar/Toolbar.js +18 -18
  320. package/dist/Tooltip/Tooltip.js +11 -11
  321. package/dist/Tooltip/useTooltip.js +3 -3
  322. package/dist/TopNav/TopNav.js +32 -32
  323. package/dist/TopNav/TopNavHeading.js +67 -67
  324. package/dist/TopNav/TopNavItem.js +5 -5
  325. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  326. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  327. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  328. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +25 -14
  329. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  330. package/dist/TopNav/TopNavMenu.js +32 -32
  331. package/dist/TreeList/TreeList.js +8 -8
  332. package/dist/TreeList/TreeListBranches.js +11 -11
  333. package/dist/TreeList/TreeListItem.js +30 -30
  334. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  335. package/dist/Typeahead/BaseTypeahead.js +23 -20
  336. package/dist/Typeahead/Typeahead.js +12 -12
  337. package/dist/Typeahead/TypeaheadItem.js +10 -10
  338. package/dist/VStack/VStack.js +3 -3
  339. package/dist/astryx.css +23 -0
  340. package/dist/astryx.umd.js +60 -58
  341. package/dist/astryx.umd.js.map +4 -4
  342. package/dist/docs-types.d.ts +13 -1
  343. package/dist/docs-types.d.ts.map +1 -1
  344. package/dist/hooks/focusableSelector.d.ts +1 -1
  345. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  346. package/dist/hooks/focusableSelector.js +1 -1
  347. package/dist/hooks/index.d.ts +2 -0
  348. package/dist/hooks/index.d.ts.map +1 -1
  349. package/dist/hooks/index.js +1 -0
  350. package/dist/hooks/useFocusTrap.d.ts +3 -0
  351. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  352. package/dist/hooks/useFocusTrap.js +38 -1
  353. package/dist/hooks/useHotkeys.d.ts +51 -0
  354. package/dist/hooks/useHotkeys.d.ts.map +1 -0
  355. package/dist/hooks/useHotkeys.js +160 -0
  356. package/dist/hooks/useInteractiveRole.d.ts +6 -2
  357. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  358. package/dist/hooks/useInteractiveRole.js +6 -2
  359. package/dist/hooks/useKeyboardHint.js +9 -9
  360. package/dist/hooks/useStreamingText.d.ts +3 -1
  361. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  362. package/dist/hooks/useStreamingText.js +14 -5
  363. package/dist/theme/MediaTheme.js +3 -3
  364. package/dist/theme/Theme.js +7 -7
  365. package/dist/theme/defineTheme.d.ts +1 -1
  366. package/dist/theme/defineTheme.d.ts.map +1 -1
  367. package/dist/theme/expandColorScale.d.ts.map +1 -1
  368. package/dist/theme/expandColorScale.js +10 -3
  369. package/dist/theme/hct.d.ts +0 -15
  370. package/dist/theme/hct.d.ts.map +1 -1
  371. package/dist/theme/hct.js +9 -9
  372. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  373. package/dist/theme/tokens.d.ts +10 -2
  374. package/dist/theme/tokens.d.ts.map +1 -1
  375. package/dist/theme/tokens.js +220 -4
  376. package/dist/utils/color.d.ts +42 -0
  377. package/dist/utils/color.d.ts.map +1 -0
  378. package/dist/utils/color.js +150 -0
  379. package/dist/utils/composeEventHandlers.d.ts +30 -0
  380. package/dist/utils/composeEventHandlers.d.ts.map +1 -0
  381. package/dist/utils/composeEventHandlers.js +40 -0
  382. package/dist/utils/index.d.ts +3 -0
  383. package/dist/utils/index.d.ts.map +1 -1
  384. package/dist/utils/index.js +3 -1
  385. package/dist/utils/timeParser.d.ts.map +1 -1
  386. package/dist/utils/timeParser.js +8 -5
  387. package/package.json +3 -3
  388. package/src/AlertDialog/AlertDialog.tsx +2 -0
  389. package/src/AppShell/AppShell.tsx +2 -0
  390. package/src/AspectRatio/AspectRatio.doc.mjs +1 -1
  391. package/src/Avatar/Avatar.doc.mjs +13 -2
  392. package/src/Avatar/Avatar.test.tsx +32 -1
  393. package/src/Avatar/Avatar.tsx +12 -20
  394. package/src/Banner/Banner.doc.mjs +8 -0
  395. package/src/Banner/Banner.test.tsx +38 -0
  396. package/src/Banner/Banner.tsx +8 -1
  397. package/src/Button/Button.tsx +39 -6
  398. package/src/ButtonGroup/ButtonGroup.doc.mjs +1 -1
  399. package/src/Calendar/Calendar.doc.mjs +1 -1
  400. package/src/Calendar/Calendar.test.tsx +201 -17
  401. package/src/Calendar/Calendar.tsx +79 -26
  402. package/src/Calendar/dayCellUtils.test.ts +306 -1
  403. package/src/Calendar/dayCellUtils.ts +206 -13
  404. package/src/Calendar/styles.ts +12 -2
  405. package/src/Card/Card.doc.mjs +1 -1
  406. package/src/Card/Card.tsx +16 -6
  407. package/src/Carousel/Carousel.doc.mjs +12 -12
  408. package/src/Carousel/Carousel.test.tsx +13 -0
  409. package/src/Carousel/Carousel.tsx +1 -0
  410. package/src/Chat/Chat.doc.mjs +1 -1
  411. package/src/Chat/ChatComposerInput.test.tsx +24 -0
  412. package/src/Chat/ChatComposerInput.tsx +17 -1
  413. package/src/Chat/ChatDictationButton.test.tsx +43 -0
  414. package/src/Chat/ChatDictationButton.tsx +4 -4
  415. package/src/Chat/ChatLayoutScrollButton.test.tsx +33 -0
  416. package/src/Chat/ChatLayoutScrollButton.tsx +3 -1
  417. package/src/Chat/ChatMessageMetadata.test.tsx +32 -0
  418. package/src/Chat/ChatMessageMetadata.tsx +4 -6
  419. package/src/Chat/ChatSystemMessage.test.tsx +26 -11
  420. package/src/Chat/ChatSystemMessage.tsx +7 -7
  421. package/src/Chat/ChatTokenizedText.test.tsx +29 -16
  422. package/src/Chat/ChatTokenizedText.tsx +15 -8
  423. package/src/Chat/ChatToolCalls.test.tsx +55 -0
  424. package/src/Chat/ChatToolCalls.tsx +10 -12
  425. package/src/Chat/index.ts +1 -4
  426. package/src/Chat/useChatNewMessages.test.tsx +4 -4
  427. package/src/CheckboxInput/CheckboxInput.doc.mjs +12 -4
  428. package/src/CheckboxInput/CheckboxInput.test.tsx +103 -0
  429. package/src/CheckboxInput/CheckboxInput.tsx +13 -0
  430. package/src/CheckboxList/CheckboxList.doc.mjs +1 -1
  431. package/src/CheckboxList/CheckboxList.test.tsx +19 -0
  432. package/src/CheckboxList/CheckboxListItem.tsx +11 -2
  433. package/src/Citation/Citation.doc.mjs +5 -0
  434. package/src/ClickableCard/ClickableCard.tsx +45 -2
  435. package/src/Code/Code.test.tsx +54 -0
  436. package/src/Code/Code.tsx +48 -4
  437. package/src/Code/index.ts +1 -1
  438. package/src/CodeBlock/CodeBlock.doc.mjs +7 -2
  439. package/src/CodeBlock/CodeBlock.test.tsx +122 -3
  440. package/src/CodeBlock/CodeBlock.tsx +62 -4
  441. package/src/CodeBlock/index.ts +1 -1
  442. package/src/Collapsible/Collapsible.doc.mjs +8 -4
  443. package/src/Collapsible/Collapsible.test.tsx +405 -0
  444. package/src/Collapsible/Collapsible.tsx +86 -10
  445. package/src/Collapsible/CollapsibleGroup.doc.mjs +27 -3
  446. package/src/Collapsible/CollapsibleGroup.test.tsx +318 -0
  447. package/src/Collapsible/CollapsibleGroup.tsx +107 -9
  448. package/src/Collapsible/CollapsibleGroupContext.tsx +42 -2
  449. package/src/Collapsible/index.ts +4 -0
  450. package/src/Collapsible/useCollapsible.ts +20 -6
  451. package/src/CommandPalette/CommandPalette.tsx +5 -3
  452. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +5 -0
  453. package/src/CommandPalette/CommandPaletteEmpty.tsx +15 -1
  454. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +10 -0
  455. package/src/CommandPalette/CommandPaletteInput.doc.mjs +6 -0
  456. package/src/CommandPalette/CommandPaletteItem.doc.mjs +6 -0
  457. package/src/CommandPalette/CommandPaletteList.doc.mjs +9 -0
  458. package/src/ContextMenu/ContextMenu.doc.mjs +15 -0
  459. package/src/ContextMenu/ContextMenu.test.tsx +15 -0
  460. package/src/ContextMenu/ContextMenu.tsx +19 -1
  461. package/src/ContextMenu/ContextMenuItem.doc.mjs +6 -0
  462. package/src/DateInput/DateInput.doc.mjs +6 -1
  463. package/src/DateInput/DateInput.test.tsx +11 -20
  464. package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
  465. package/src/DateRangeInput/DateRangeInput.test.tsx +31 -44
  466. package/src/DateRangeInput/DateRangeInput.tsx +2 -2
  467. package/src/DateTimeInput/DateTimeInput.doc.mjs +4 -3
  468. package/src/DateTimeInput/DateTimeInput.test.tsx +118 -16
  469. package/src/DateTimeInput/DateTimeInput.tsx +9 -8
  470. package/src/DateTimeInput/index.ts +1 -0
  471. package/src/Dialog/DialogHeader.doc.mjs +45 -0
  472. package/src/Divider/Divider.tsx +1 -23
  473. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  474. package/src/DropdownMenu/DropdownMenu.test.tsx +5 -3
  475. package/src/DropdownMenu/DropdownMenuItem.tsx +5 -17
  476. package/src/EmptyState/EmptyState.doc.mjs +1 -1
  477. package/src/Field/Field.doc.mjs +1 -1
  478. package/src/Field/FieldLabel.test.tsx +2 -2
  479. package/src/FieldStatus/FieldStatus.test.tsx +282 -0
  480. package/src/FileInput/FileInput.doc.mjs +1 -1
  481. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -3
  482. package/src/Grid/Grid.doc.mjs +3 -3
  483. package/src/Grid/Grid.test.tsx +43 -18
  484. package/src/Grid/Grid.tsx +26 -9
  485. package/src/Icon/Icon.test.tsx +41 -29
  486. package/src/Icon/Icon.tsx +6 -2
  487. package/src/InputGroup/InputGroup.tsx +2 -2
  488. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +185 -0
  489. package/src/Item/Item.tsx +1 -1
  490. package/src/Layout/Layout.test.tsx +285 -0
  491. package/src/Layout/LayoutContent.doc.mjs +12 -0
  492. package/src/Layout/LayoutPanel.doc.mjs +40 -0
  493. package/src/Layout/LayoutSlots.test.tsx +364 -0
  494. package/src/Layout/__tests__/edgeCompensation.test.tsx +72 -0
  495. package/src/Lightbox/Lightbox.doc.mjs +5 -0
  496. package/src/Lightbox/Lightbox.test.tsx +123 -2
  497. package/src/Lightbox/Lightbox.tsx +29 -1
  498. package/src/Markdown/Markdown.test.tsx +23 -0
  499. package/src/Markdown/Markdown.tsx +9 -7
  500. package/src/Markdown/incremental.test.ts +36 -0
  501. package/src/Markdown/parser.perf.test.ts +34 -12
  502. package/src/Markdown/parser.test.ts +210 -0
  503. package/src/Markdown/parser.ts +301 -6
  504. package/src/MobileNav/MobileNav.doc.mjs +20 -0
  505. package/src/MultiSelector/MultiSelector.doc.mjs +14 -1
  506. package/src/MultiSelector/MultiSelector.test.tsx +33 -0
  507. package/src/MultiSelector/MultiSelector.tsx +20 -0
  508. package/src/NavMenu/NavMenu.doc.mjs +15 -0
  509. package/src/NumberInput/NumberInput.test.tsx +48 -3
  510. package/src/NumberInput/NumberInput.tsx +32 -15
  511. package/src/Outline/parseOutlineFromMarkdown.test.ts +80 -0
  512. package/src/OverflowList/OverflowList.test.tsx +416 -0
  513. package/src/Overlay/Overlay.doc.mjs +6 -0
  514. package/src/Overlay/Overlay.test.tsx +356 -0
  515. package/src/Pagination/Pagination.test.tsx +162 -0
  516. package/src/Pagination/Pagination.tsx +80 -26
  517. package/src/Popover/Popover.test.tsx +65 -0
  518. package/src/PowerSearch/PowerSearch.doc.mjs +4 -4
  519. package/src/PowerSearch/PowerSearch.test.tsx +109 -1
  520. package/src/PowerSearch/PowerSearch.tsx +37 -16
  521. package/src/ProgressBar/ProgressBar.test.tsx +30 -0
  522. package/src/ProgressBar/ProgressBar.tsx +12 -5
  523. package/src/RadioList/RadioList.doc.mjs +7 -1
  524. package/src/RadioList/RadioList.test.tsx +65 -0
  525. package/src/RadioList/RadioList.tsx +10 -1
  526. package/src/RadioList/RadioListItem.tsx +13 -4
  527. package/src/Resizable/ResizeHandle.test.tsx +218 -0
  528. package/src/Resizable/ResizeHandle.tsx +22 -4
  529. package/src/Section/Section.test.tsx +4 -10
  530. package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
  531. package/src/SegmentedControl/SegmentedControl.test.tsx +192 -0
  532. package/src/SegmentedControl/SegmentedControl.tsx +27 -5
  533. package/src/SegmentedControl/SegmentedControlItem.tsx +9 -4
  534. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  535. package/src/Selector/Selector.doc.mjs +12 -1
  536. package/src/Selector/Selector.test.tsx +30 -0
  537. package/src/Selector/Selector.tsx +18 -0
  538. package/src/SideNav/SideNav.doc.mjs +7 -1
  539. package/src/SideNav/SideNav.test.tsx +66 -0
  540. package/src/SideNav/SideNav.tsx +6 -2
  541. package/src/SideNav/SideNavCollapseButton.tsx +4 -3
  542. package/src/SideNav/SideNavSection.tsx +6 -4
  543. package/src/SizeContext/SizeContext.test.tsx +226 -0
  544. package/src/Slider/Slider.doc.mjs +14 -2
  545. package/src/Slider/Slider.test.tsx +30 -0
  546. package/src/Slider/Slider.tsx +20 -0
  547. package/src/Spinner/Spinner.tsx +1 -0
  548. package/src/Switch/Switch.doc.mjs +21 -9
  549. package/src/Switch/Switch.test.tsx +137 -0
  550. package/src/Switch/Switch.tsx +32 -7
  551. package/src/TabList/TabList.doc.mjs +3 -3
  552. package/src/TabList/TabList.test.tsx +185 -1
  553. package/src/TabList/TabMenu.tsx +45 -9
  554. package/src/Table/BaseTable.tsx +16 -3
  555. package/src/Table/Table.test.tsx +87 -0
  556. package/src/Table/TableBody.tsx +15 -2
  557. package/src/Table/TableCell.tsx +87 -8
  558. package/src/Table/TableFooter.tsx +15 -2
  559. package/src/Table/TableHeader.tsx +15 -2
  560. package/src/Table/index.ts +5 -0
  561. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +13 -0
  562. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +3 -1
  563. package/src/Table/plugins/pagination/paginateData.ts +5 -1
  564. package/src/Table/plugins/pagination/useTablePagination.test.tsx +13 -0
  565. package/src/Table/plugins/rowExpansion/index.ts +7 -0
  566. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +155 -0
  567. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +590 -0
  568. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +23 -0
  569. package/src/Table/plugins/selection/useTableSelectionState.tsx +11 -6
  570. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +35 -1
  571. package/src/Table/plugins/sortable/useTableSortableState.tsx +8 -4
  572. package/src/Table/tableContextMenu.test.tsx +27 -3
  573. package/src/Table/tableContextMenu.tsx +20 -2
  574. package/src/Table/useTablePagination.doc.mjs +4 -1
  575. package/src/Table/useTableRowExpansion.doc.mjs +80 -0
  576. package/src/Table/useTableSortable.doc.mjs +4 -1
  577. package/src/Text/Text.doc.mjs +2 -2
  578. package/src/Text/Text.test.tsx +11 -0
  579. package/src/Text/Text.tsx +4 -2
  580. package/src/Text/text.stylex.ts +41 -0
  581. package/src/TextArea/TextArea.doc.mjs +1 -1
  582. package/src/TextArea/TextArea.test.tsx +3 -3
  583. package/src/TextInput/TextInput.doc.mjs +1 -1
  584. package/src/TextInput/TextInput.test.tsx +3 -3
  585. package/src/Thumbnail/Thumbnail.test.tsx +36 -2
  586. package/src/Thumbnail/Thumbnail.tsx +4 -2
  587. package/src/TimeInput/TimeInput.doc.mjs +11 -6
  588. package/src/TimeInput/TimeInput.test.tsx +37 -0
  589. package/src/TimeInput/TimeInput.tsx +11 -1
  590. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  591. package/src/Timestamp/Timestamp.test.tsx +52 -0
  592. package/src/Timestamp/Timestamp.tsx +30 -16
  593. package/src/Toast/Toast.tsx +11 -3
  594. package/src/Toast/ToastViewport.test.tsx +64 -0
  595. package/src/Toast/ToastViewport.tsx +12 -0
  596. package/src/ToggleButton/ToggleButton.doc.mjs +1 -0
  597. package/src/Tokenizer/Tokenizer.doc.mjs +16 -4
  598. package/src/Tokenizer/Tokenizer.test.tsx +33 -0
  599. package/src/Tokenizer/Tokenizer.tsx +19 -0
  600. package/src/Toolbar/Toolbar.test.tsx +1 -1
  601. package/src/TopNav/TopNav.doc.mjs +1 -1
  602. package/src/TopNav/TopNav.test.tsx +18 -0
  603. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +9 -2
  604. package/src/TreeList/TreeList.doc.mjs +2 -2
  605. package/src/Typeahead/BaseTypeahead.doc.mjs +19 -0
  606. package/src/Typeahead/BaseTypeahead.tsx +5 -2
  607. package/src/Typeahead/Typeahead.doc.mjs +7 -2
  608. package/src/Typeahead/Typeahead.test.tsx +45 -1
  609. package/src/__tests__/TestIcon.tsx +26 -0
  610. package/src/__tests__/fastRoleQueries.ts +66 -0
  611. package/src/docPropReferences.test.ts +178 -0
  612. package/src/docs-types.ts +14 -0
  613. package/src/hooks/focusableSelector.ts +1 -1
  614. package/src/hooks/index.ts +3 -0
  615. package/src/hooks/useFocusTrap.doc.mjs +4 -2
  616. package/src/hooks/useFocusTrap.test.tsx +149 -1
  617. package/src/hooks/useFocusTrap.ts +50 -1
  618. package/src/hooks/useHotkeys.doc.mjs +52 -0
  619. package/src/hooks/useHotkeys.test.ts +245 -0
  620. package/src/hooks/useHotkeys.ts +203 -0
  621. package/src/hooks/useInteractiveRole.ts +12 -4
  622. package/src/hooks/useKeyboardHint.doc.mjs +6 -6
  623. package/src/hooks/useStreamingText.test.ts +54 -19
  624. package/src/hooks/useStreamingText.ts +16 -5
  625. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  626. package/src/theme/defineTheme.ts +4 -13
  627. package/src/theme/derivedVarRegistry.test.ts +2 -2
  628. package/src/theme/expandColorScale.test.ts +29 -0
  629. package/src/theme/expandColorScale.ts +11 -6
  630. package/src/theme/hct.ts +9 -17
  631. package/src/theme/tokens.test.ts +182 -9
  632. package/src/theme/tokens.ts +239 -4
  633. package/src/theme/useTheme.test.tsx +20 -0
  634. package/src/utils/color.test.ts +133 -0
  635. package/src/utils/color.ts +148 -0
  636. package/src/utils/composeEventHandlers.test.ts +71 -0
  637. package/src/utils/composeEventHandlers.ts +44 -0
  638. package/src/utils/index.ts +4 -0
  639. package/src/utils/mergeProps.test.ts +166 -0
  640. package/src/utils/sharedResizeObserver.test.ts +2 -2
  641. package/src/utils/timeParser.test.ts +13 -0
  642. package/src/utils/timeParser.ts +8 -5
@@ -27,6 +27,16 @@ export const docs = {
27
27
  description: 'StyleX styles for layout customization. Must be a stylex.create() value.',
28
28
  },
29
29
  ],
30
+ playground: {
31
+ defaults: {
32
+ heading: 'Navigation',
33
+ children: [
34
+ {__element: 'CommandPaletteItem', props: {value: 'home', onSelect: undefined}, children: 'Go Home'},
35
+ {__element: 'CommandPaletteItem', props: {value: 'settings', onSelect: undefined}, children: 'Open Settings'},
36
+ {__element: 'CommandPaletteItem', props: {value: 'profile', onSelect: undefined}, children: 'View Profile'},
37
+ ],
38
+ },
39
+ },
30
40
  };
31
41
 
32
42
  export const docsZh = {
@@ -57,6 +57,12 @@ export const docs = {
57
57
  description: 'StyleX styles for layout customization. Must be a stylex.create() value.',
58
58
  },
59
59
  ],
60
+ playground: {
61
+ defaults: {
62
+ placeholder: 'Search commands, files, or actions...',
63
+ hasAutoFocus: false,
64
+ },
65
+ },
60
66
  };
61
67
 
62
68
  export const docsZh = {
@@ -50,6 +50,12 @@ export const docs = {
50
50
  description: 'StyleX styles for layout customization. Must be a stylex.create() value.',
51
51
  },
52
52
  ],
53
+ playground: {
54
+ defaults: {
55
+ value: 'go-home',
56
+ children: 'Go to Dashboard',
57
+ },
58
+ },
53
59
  };
54
60
 
55
61
  export const docsZh = {
@@ -27,6 +27,15 @@ export const docs = {
27
27
  description: 'StyleX styles for layout customization. Must be a stylex.create() value.',
28
28
  },
29
29
  ],
30
+ playground: {
31
+ defaults: {
32
+ children: [
33
+ {__element: 'CommandPaletteItem', props: {value: 'home', onSelect: undefined}, children: 'Go Home'},
34
+ {__element: 'CommandPaletteItem', props: {value: 'settings', onSelect: undefined}, children: 'Open Settings'},
35
+ {__element: 'CommandPaletteItem', props: {value: 'profile', onSelect: undefined}, children: 'View Profile'},
36
+ ],
37
+ },
38
+ },
30
39
  };
31
40
 
32
41
  export const docsZh = {
@@ -78,6 +78,21 @@ export const docs = {
78
78
  { guidance: false, description: 'Place more than 10–12 items in a single menu without grouping them into sections.' },
79
79
  ],
80
80
  },
81
+ playground: {
82
+ defaults: {
83
+ children: {
84
+ __element: 'Card',
85
+ props: {padding: 6},
86
+ children: {__element: 'Text', props: {color: 'secondary'}, children: 'Right-click this area'},
87
+ },
88
+ items: [
89
+ {label: 'Edit'},
90
+ {label: 'Duplicate'},
91
+ {type: 'divider'},
92
+ {label: 'Delete'},
93
+ ],
94
+ },
95
+ },
81
96
  };
82
97
 
83
98
  /** @type {import('../docs-types').TranslationDoc} */
@@ -172,6 +172,21 @@ describe('ContextMenu', () => {
172
172
  expect(preventDefault).toHaveBeenCalled();
173
173
  });
174
174
 
175
+ it('prevents default context menu on the opened menu container', () => {
176
+ render(
177
+ <ContextMenu items={[{label: 'Item 1'}]}>
178
+ <div>Right-click me</div>
179
+ </ContextMenu>,
180
+ );
181
+
182
+ fireEvent.contextMenu(screen.getByText('Right-click me'));
183
+ const menu = screen.getByRole('menu', {hidden: true});
184
+ const event = new MouseEvent('contextmenu', {bubbles: true});
185
+ const preventDefault = vi.spyOn(event, 'preventDefault');
186
+ menu.dispatchEvent(event);
187
+ expect(preventDefault).toHaveBeenCalled();
188
+ });
189
+
175
190
  it('does not open when isDisabled is true', () => {
176
191
  render(
177
192
  <ContextMenu items={[{label: 'Item 1'}]} isDisabled>
@@ -55,6 +55,7 @@ import {
55
55
  } from '../theme/tokens.stylex';
56
56
  import {mergeProps} from '../utils';
57
57
  import type {BaseProps} from '../BaseProps';
58
+ import type {StyleXStyles} from '../theme/types';
58
59
  import {themeProps} from '../utils/themeProps';
59
60
  import type {
60
61
  DropdownMenuOption,
@@ -86,6 +87,7 @@ const styles = stylex.create({
86
87
  transitionProperty: 'opacity',
87
88
  transitionDuration: durationVars['--duration-fast'],
88
89
  transitionTimingFunction: easeVars['--ease-standard'],
90
+ userSelect: 'none',
89
91
  },
90
92
  popover: {
91
93
  minWidth: '160px',
@@ -114,6 +116,13 @@ export type ContextMenuOption = DropdownMenuOption;
114
116
  interface ContextMenuBaseProps extends BaseProps {
115
117
  /** Ref forwarded to the trigger wrapper element. */
116
118
  ref?: React.Ref<HTMLDivElement>;
119
+ /**
120
+ * Styles applied to the trigger wrapper element (the right-click target).
121
+ * By default the trigger is a plain block that hugs its content — pass a
122
+ * fill style (e.g. `width/height: 100%`) when the whole parent area should
123
+ * be right-clickable (as the Table does for full-cell context menus).
124
+ */
125
+ triggerXstyle?: StyleXStyles | StyleXStyles[];
117
126
  /** The trigger area — right-click on this to open the menu. */
118
127
  children: ReactNode;
119
128
  /** Custom menu width. @default '160px' */
@@ -184,6 +193,7 @@ export function ContextMenu({
184
193
  className,
185
194
  style,
186
195
  xstyle,
196
+ triggerXstyle,
187
197
  'data-testid': testId,
188
198
  ...props
189
199
  }: ContextMenuProps) {
@@ -382,7 +392,14 @@ export function ContextMenu({
382
392
  onContextMenu={handleContextMenu}
383
393
  {...longPressHandlers}
384
394
  data-testid={testId}
385
- {...stylex.props(styles.trigger)}>
395
+ {...stylex.props(
396
+ styles.trigger,
397
+ ...(triggerXstyle
398
+ ? Array.isArray(triggerXstyle)
399
+ ? triggerXstyle
400
+ : [triggerXstyle]
401
+ : []),
402
+ )}>
386
403
  {children}
387
404
  </div>
388
405
 
@@ -393,6 +410,7 @@ export function ContextMenu({
393
410
  role="menu"
394
411
  aria-label={label}
395
412
  onKeyDown={listKeyDown}
413
+ onContextMenu={e => e.preventDefault()}
396
414
  {...mergeProps(
397
415
  themeProps('context-menu'),
398
416
  stylex.props(styles.menu, xstyle),
@@ -35,6 +35,12 @@ export const docs = {
35
35
  description: 'StyleX styles for layout customization.',
36
36
  },
37
37
  ],
38
+ playground: {
39
+ defaults: {
40
+ label: 'Edit',
41
+ description: 'Modify this item',
42
+ },
43
+ },
38
44
  };
39
45
 
40
46
  export const docsZh = {
@@ -56,7 +56,7 @@ export const docs = {
56
56
  name: 'disabledMessage',
57
57
  type: 'string',
58
58
  description:
59
- 'Explains why the input is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the field focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled DateInput in Tooltip — disabled controls swallow the hover events an external Tooltip needs.',
59
+ 'Explains why the input is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the field focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled DateInput in Tooltip. Disabled controls swallow the hover events an external Tooltip needs.',
60
60
  },
61
61
  {
62
62
  name: 'value',
@@ -432,6 +432,11 @@ export const docsDense = {
432
432
  description:
433
433
  'Show a loading state with changeAction when the date triggers a server-side save.',
434
434
  },
435
+ {
436
+ guidance: true,
437
+ description:
438
+ 'Use inside InputGroup for a short static prefix or suffix, such as a due-date hint.',
439
+ },
435
440
  {
436
441
  guidance: false,
437
442
  description:
@@ -12,6 +12,7 @@
12
12
  import {describe, it, expect, vi, beforeEach} from 'vitest';
13
13
  import {render, screen, fireEvent, waitFor} from '@testing-library/react';
14
14
  import userEvent from '@testing-library/user-event';
15
+ import {getButton, queryButton} from '../__tests__/fastRoleQueries';
15
16
  import {DateInput} from './DateInput';
16
17
  import {InputGroup} from '../InputGroup';
17
18
  import {InputGroupText} from '../InputGroup/InputGroupText';
@@ -92,14 +93,14 @@ describe('DateInput', () => {
92
93
 
93
94
  it('calendar button is focusable and clickable', () => {
94
95
  render(<DateInput label="Date" onChange={() => {}} />);
95
- const button = screen.getByRole('button', {name: 'Open calendar'});
96
+ const button = getButton('Open calendar');
96
97
  expect(button).toBeInTheDocument();
97
98
  expect(button).not.toBeDisabled();
98
99
  });
99
100
 
100
101
  it('calendar button is disabled when isDisabled is true', () => {
101
102
  render(<DateInput label="Date" isDisabled onChange={() => {}} />);
102
- const button = screen.getByRole('button', {name: 'Open calendar'});
103
+ const button = getButton('Open calendar');
103
104
  expect(button).toBeDisabled();
104
105
  });
105
106
 
@@ -282,7 +283,7 @@ describe('DateInput', () => {
282
283
  it('disables input and button when isLoading is true', () => {
283
284
  render(<DateInput label="Date" isLoading onChange={() => {}} />);
284
285
  expect(screen.getByRole('combobox')).toBeDisabled();
285
- expect(screen.getByRole('button', {name: 'Open calendar'})).toBeDisabled();
286
+ expect(getButton('Open calendar')).toBeDisabled();
286
287
  });
287
288
 
288
289
  it('shows spinner when isLoading is true', () => {
@@ -475,7 +476,7 @@ describe('DateInput', () => {
475
476
 
476
477
  it('does not open popover when clicking calendar button while disabled', () => {
477
478
  render(<DateInput label="Date" isDisabled onChange={() => {}} />);
478
- const button = screen.getByRole('button', {name: 'Open calendar'});
479
+ const button = getButton('Open calendar');
479
480
  fireEvent.click(button);
480
481
  expect(screen.getByRole('combobox')).toHaveAttribute(
481
482
  'aria-expanded',
@@ -513,23 +514,17 @@ describe('DateInput', () => {
513
514
  hasClear
514
515
  />,
515
516
  );
516
- expect(
517
- screen.getByRole('button', {name: 'Clear Date'}),
518
- ).toBeInTheDocument();
517
+ expect(getButton('Clear Date')).toBeInTheDocument();
519
518
  });
520
519
 
521
520
  it('does not show clear button when value is undefined', () => {
522
521
  render(<DateInput label="Date" onChange={() => {}} hasClear />);
523
- expect(
524
- screen.queryByRole('button', {name: 'Clear Date'}),
525
- ).not.toBeInTheDocument();
522
+ expect(queryButton('Clear Date')).not.toBeInTheDocument();
526
523
  });
527
524
 
528
525
  it('does not show clear button when hasClear is false', () => {
529
526
  render(<DateInput label="Date" value="2026-01-15" onChange={() => {}} />);
530
- expect(
531
- screen.queryByRole('button', {name: 'Clear Date'}),
532
- ).not.toBeInTheDocument();
527
+ expect(queryButton('Clear Date')).not.toBeInTheDocument();
533
528
  });
534
529
 
535
530
  it('does not show clear button when disabled', () => {
@@ -542,9 +537,7 @@ describe('DateInput', () => {
542
537
  isDisabled
543
538
  />,
544
539
  );
545
- expect(
546
- screen.queryByRole('button', {name: 'Clear Date'}),
547
- ).not.toBeInTheDocument();
540
+ expect(queryButton('Clear Date')).not.toBeInTheDocument();
548
541
  });
549
542
 
550
543
  it('calls onChange with undefined when clear is clicked', () => {
@@ -557,7 +550,7 @@ describe('DateInput', () => {
557
550
  hasClear
558
551
  />,
559
552
  );
560
- fireEvent.click(screen.getByRole('button', {name: 'Clear Date'}));
553
+ fireEvent.click(getButton('Clear Date'));
561
554
  expect(onChange).toHaveBeenCalledWith(undefined);
562
555
  });
563
556
  });
@@ -699,9 +692,7 @@ describe('DateInput', () => {
699
692
  expect(input).toHaveAttribute('aria-disabled', 'true');
700
693
  expect(input.getAttribute('aria-describedby')).toContain(tooltip.id);
701
694
  expect(tooltip).toHaveTextContent('Scheduling is locked');
702
- expect(
703
- screen.getByRole('button', {name: 'Open calendar'}),
704
- ).toBeDisabled();
695
+ expect(getButton('Open calendar')).toBeDisabled();
705
696
  });
706
697
  });
707
698
 
@@ -52,7 +52,7 @@ export const docs = {
52
52
  name: 'disabledMessage',
53
53
  type: 'string',
54
54
  description:
55
- 'Explains why the input is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the field focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled DateRangeInput in Tooltip — disabled controls swallow the hover events an external Tooltip needs.',
55
+ 'Explains why the input is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the field focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled DateRangeInput in Tooltip. Disabled controls swallow the hover events an external Tooltip needs.',
56
56
  },
57
57
  {
58
58
  name: 'value',
@@ -12,6 +12,11 @@
12
12
  import {describe, it, expect, vi, beforeEach} from 'vitest';
13
13
  import {render, screen, fireEvent, waitFor} from '@testing-library/react';
14
14
  import userEvent from '@testing-library/user-event';
15
+ // getButton/queryButton instead of getByRole('button', {name}): the closed
16
+ // popover keeps a two-month Calendar (~85 role=button nodes) mounted, which
17
+ // made every role+name query compute ~85 accessible names through jsdom's
18
+ // slow getComputedStyle (~450ms per query). See fastRoleQueries.ts.
19
+ import {getButton, queryButton} from '../__tests__/fastRoleQueries';
15
20
  import {DateRangeInput} from './DateRangeInput';
16
21
  import type {DateRange} from './DateRangeInput';
17
22
 
@@ -53,7 +58,7 @@ describe('DateRangeInput', () => {
53
58
  hasClear={false}
54
59
  />,
55
60
  );
56
- const trigger = screen.getByRole('button', {name: /Range:/});
61
+ const trigger = getButton(/Range:/);
57
62
  expect(trigger.textContent).toMatch(/Mar/);
58
63
  expect(trigger.textContent).toMatch(/15/);
59
64
  expect(trigger.textContent).toMatch(/22/);
@@ -93,13 +98,13 @@ describe('DateRangeInput', () => {
93
98
  onChange={() => {}}
94
99
  />,
95
100
  );
96
- const trigger = screen.getByRole('button', {name: /Range/});
101
+ const trigger = getButton(/Range/);
97
102
  expect(trigger).toHaveAttribute('aria-required', 'true');
98
103
  });
99
104
 
100
105
  it('does not set aria-required when isRequired is false', () => {
101
106
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
102
- const trigger = screen.getByRole('button', {name: /Range/});
107
+ const trigger = getButton(/Range/);
103
108
  expect(trigger).not.toHaveAttribute('aria-required');
104
109
  });
105
110
 
@@ -112,25 +117,25 @@ describe('DateRangeInput', () => {
112
117
  onChange={() => {}}
113
118
  />,
114
119
  );
115
- const trigger = screen.getByRole('button', {name: /Range/});
120
+ const trigger = getButton(/Range/);
116
121
  expect(trigger).toBeDisabled();
117
122
  });
118
123
 
119
124
  it('is not disabled by default', () => {
120
125
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
121
- const trigger = screen.getByRole('button', {name: /Range/});
126
+ const trigger = getButton(/Range/);
122
127
  expect(trigger).not.toBeDisabled();
123
128
  });
124
129
 
125
130
  it('trigger has aria-haspopup="dialog"', () => {
126
131
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
127
- const trigger = screen.getByRole('button', {name: /Range/});
132
+ const trigger = getButton(/Range/);
128
133
  expect(trigger).toHaveAttribute('aria-haspopup', 'dialog');
129
134
  });
130
135
 
131
136
  it('trigger has aria-expanded=false by default', () => {
132
137
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
133
- const trigger = screen.getByRole('button', {name: /Range/});
138
+ const trigger = getButton(/Range/);
134
139
  expect(trigger).toHaveAttribute('aria-expanded', 'false');
135
140
  });
136
141
 
@@ -143,7 +148,7 @@ describe('DateRangeInput', () => {
143
148
  status={{type: 'error', message: 'Required'}}
144
149
  />,
145
150
  );
146
- const trigger = screen.getByRole('button', {name: /Range/});
151
+ const trigger = getButton(/Range/);
147
152
  expect(trigger).toHaveAttribute('aria-invalid', 'true');
148
153
  });
149
154
 
@@ -156,7 +161,7 @@ describe('DateRangeInput', () => {
156
161
  status={{type: 'warning', message: 'Watch out'}}
157
162
  />,
158
163
  );
159
- const trigger = screen.getByRole('button', {name: /Range/});
164
+ const trigger = getButton(/Range/);
160
165
  expect(trigger).not.toHaveAttribute('aria-invalid');
161
166
  });
162
167
 
@@ -181,7 +186,7 @@ describe('DateRangeInput', () => {
181
186
  status={{type: 'error', message: 'Please select dates'}}
182
187
  />,
183
188
  );
184
- const trigger = screen.getByRole('button', {name: /Range/});
189
+ const trigger = getButton(/Range/);
185
190
  const describedBy = trigger.getAttribute('aria-describedby')!;
186
191
  const ids = describedBy.split(' ');
187
192
  const found = ids.some(id => {
@@ -193,9 +198,7 @@ describe('DateRangeInput', () => {
193
198
 
194
199
  it('calendar icon button is present', () => {
195
200
  render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
196
- expect(
197
- screen.getByRole('button', {name: 'Open calendar'}),
198
- ).toBeInTheDocument();
201
+ expect(getButton('Open calendar')).toBeInTheDocument();
199
202
  });
200
203
 
201
204
  it('calendar icon button is disabled when isDisabled', () => {
@@ -207,7 +210,7 @@ describe('DateRangeInput', () => {
207
210
  onChange={() => {}}
208
211
  />,
209
212
  );
210
- expect(screen.getByRole('button', {name: 'Open calendar'})).toBeDisabled();
213
+ expect(getButton('Open calendar')).toBeDisabled();
211
214
  });
212
215
 
213
216
  it('renders with size="lg"', () => {
@@ -236,9 +239,7 @@ describe('DateRangeInput', () => {
236
239
  hasClear
237
240
  />,
238
241
  );
239
- expect(
240
- screen.getByRole('button', {name: 'Clear Range'}),
241
- ).toBeInTheDocument();
242
+ expect(getButton('Clear Range')).toBeInTheDocument();
242
243
  });
243
244
 
244
245
  it('does not show clear button when value is null', () => {
@@ -250,9 +251,7 @@ describe('DateRangeInput', () => {
250
251
  hasClear
251
252
  />,
252
253
  );
253
- expect(
254
- screen.queryByRole('button', {name: 'Clear Range'}),
255
- ).not.toBeInTheDocument();
254
+ expect(queryButton('Clear Range')).not.toBeInTheDocument();
256
255
  });
257
256
 
258
257
  it('does not show clear button when hasClear is false', () => {
@@ -268,9 +267,7 @@ describe('DateRangeInput', () => {
268
267
  hasClear={false}
269
268
  />,
270
269
  );
271
- expect(
272
- screen.queryByRole('button', {name: 'Clear Range'}),
273
- ).not.toBeInTheDocument();
270
+ expect(queryButton('Clear Range')).not.toBeInTheDocument();
274
271
  });
275
272
 
276
273
  it('does not show clear button when disabled', () => {
@@ -287,9 +284,7 @@ describe('DateRangeInput', () => {
287
284
  isDisabled
288
285
  />,
289
286
  );
290
- expect(
291
- screen.queryByRole('button', {name: 'Clear Range'}),
292
- ).not.toBeInTheDocument();
287
+ expect(queryButton('Clear Range')).not.toBeInTheDocument();
293
288
  });
294
289
 
295
290
  it('calls onChange with null when clear is clicked', () => {
@@ -306,7 +301,7 @@ describe('DateRangeInput', () => {
306
301
  hasClear
307
302
  />,
308
303
  );
309
- fireEvent.click(screen.getByRole('button', {name: 'Clear Range'}));
304
+ fireEvent.click(getButton('Clear Range'));
310
305
  expect(onChange).toHaveBeenCalledWith(null);
311
306
  });
312
307
  });
@@ -346,9 +341,7 @@ describe('DateRangeInput', () => {
346
341
  expect(
347
342
  screen.getByRole('group', {name: 'Preset date ranges', hidden: true}),
348
343
  ).toBeInTheDocument();
349
- expect(
350
- screen.getByRole('button', {name: 'Last 7 days', hidden: true}),
351
- ).toBeInTheDocument();
344
+ expect(getButton('Last 7 days')).toBeInTheDocument();
352
345
  });
353
346
 
354
347
  it('marks the applied preset with aria-current, not aria-selected', () => {
@@ -360,16 +353,10 @@ describe('DateRangeInput', () => {
360
353
  presets={presets}
361
354
  />,
362
355
  );
363
- const active = screen.getByRole('button', {
364
- name: 'Last 7 days',
365
- hidden: true,
366
- });
356
+ const active = getButton('Last 7 days');
367
357
  expect(active).toHaveAttribute('aria-current', 'true');
368
358
  expect(active).not.toHaveAttribute('aria-selected');
369
- const inactive = screen.getByRole('button', {
370
- name: 'This month',
371
- hidden: true,
372
- });
359
+ const inactive = getButton('This month');
373
360
  expect(inactive).not.toHaveAttribute('aria-current');
374
361
  });
375
362
  });
@@ -405,7 +392,7 @@ describe('DateRangeInput', () => {
405
392
  it('shows the reason tooltip on hover when disabled with a reason', async () => {
406
393
  renderDisabled({disabledMessage: 'You need the Editor role'});
407
394
 
408
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
395
+ const trigger = getButton(/Range:/);
409
396
  const container = trigger.parentElement as HTMLElement;
410
397
  const tooltip = screen.getByRole('tooltip', h);
411
398
  expect(tooltip).toHaveTextContent('You need the Editor role');
@@ -427,7 +414,7 @@ describe('DateRangeInput', () => {
427
414
 
428
415
  const tooltip = screen.getByRole('tooltip', h);
429
416
  await user.tab();
430
- expect(screen.getByRole('button', {name: /Range:/, ...h})).toHaveFocus();
417
+ expect(getButton(/Range:/)).toHaveFocus();
431
418
  await waitFor(() => {
432
419
  expect(tooltip).toHaveAttribute('popover-open');
433
420
  });
@@ -452,14 +439,14 @@ describe('DateRangeInput', () => {
452
439
 
453
440
  it('keeps the trigger focusable via aria-disabled when a reason is provided', () => {
454
441
  renderDisabled({disabledMessage: 'You need the Editor role'});
455
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
442
+ const trigger = getButton(/Range:/);
456
443
  expect(trigger).not.toBeDisabled();
457
444
  expect(trigger).toHaveAttribute('aria-disabled', 'true');
458
445
  });
459
446
 
460
447
  it('links the reason tooltip from the trigger via aria-describedby', () => {
461
448
  renderDisabled({disabledMessage: 'You need the Editor role'});
462
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
449
+ const trigger = getButton(/Range:/);
463
450
  const tooltip = screen.getByRole('tooltip', h);
464
451
  expect(trigger.getAttribute('aria-describedby')).toContain(tooltip.id);
465
452
  });
@@ -468,7 +455,7 @@ describe('DateRangeInput', () => {
468
455
  const user = userEvent.setup();
469
456
  renderDisabled({disabledMessage: 'You need the Editor role'});
470
457
 
471
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
458
+ const trigger = getButton(/Range:/);
472
459
  await user.click(trigger);
473
460
  expect(trigger).toHaveAttribute('aria-expanded', 'false');
474
461
 
@@ -478,7 +465,7 @@ describe('DateRangeInput', () => {
478
465
 
479
466
  it('remains natively disabled when disabled without a reason', () => {
480
467
  renderDisabled();
481
- const trigger = screen.getByRole('button', {name: /Range:/, ...h});
468
+ const trigger = getButton(/Range:/);
482
469
  expect(trigger).toBeDisabled();
483
470
  expect(trigger).not.toHaveAttribute('aria-disabled');
484
471
  });
@@ -146,8 +146,8 @@ const styles = stylex.create({
146
146
  },
147
147
  },
148
148
  fontFamily: typographyVars['--font-family-body'],
149
- fontSize: typeScaleVars['--text-body-size'],
150
- lineHeight: typeScaleVars['--text-body-leading'],
149
+ fontSize: typeScaleVars['--text-label-size'],
150
+ lineHeight: typeScaleVars['--text-label-leading'],
151
151
  color: colorVars['--color-text-primary'],
152
152
  cursor: 'pointer',
153
153
  textAlign: 'start',
@@ -58,7 +58,7 @@ export const docs = {
58
58
  name: 'disabledMessage',
59
59
  type: 'string',
60
60
  description:
61
- 'Explains why the input is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the field focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled DateTimeInput in Tooltip — disabled controls swallow the hover events an external Tooltip needs.',
61
+ 'Explains why the input is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the field focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled DateTimeInput in Tooltip. Disabled controls swallow the hover events an external Tooltip needs.',
62
62
  },
63
63
  {
64
64
  name: 'value',
@@ -118,7 +118,7 @@ export const docs = {
118
118
  },
119
119
  {
120
120
  name: 'timeIncrement',
121
- type: 'number',
121
+ type: '1 | 5 | 10 | 15 | 30',
122
122
  description:
123
123
  'Minutes to add or subtract when using arrow keys in the time input.',
124
124
  default: '1',
@@ -413,7 +413,7 @@ export const docsZh = {
413
413
  },
414
414
  {
415
415
  name: 'timeIncrement',
416
- type: 'number',
416
+ type: '1 | 5 | 10 | 15 | 30',
417
417
  description: '在时间输入中按箭头键时增减的分钟数。',
418
418
  default: '1',
419
419
  },
@@ -469,6 +469,7 @@ export const docsZh = {
469
469
  description:
470
470
  '用于布局自定义的 StyleX 样式。必须是 stylex.create() 的值。',
471
471
  },
472
+
472
473
  ],
473
474
  theming: {
474
475
  targets: [