@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +18 -20
  4. package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
  5. package/dist/AppShell/AppShell.d.ts +1 -1
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +53 -55
  8. package/dist/AspectRatio/AspectRatio.d.ts +10 -48
  9. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js +12 -33
  11. package/dist/AspectRatio/index.d.ts +1 -1
  12. package/dist/AspectRatio/index.d.ts.map +1 -1
  13. package/dist/Avatar/Avatar.d.ts.map +1 -1
  14. package/dist/Avatar/Avatar.js +25 -27
  15. package/dist/Avatar/AvatarStatusDot.js +5 -5
  16. package/dist/AvatarGroup/AvatarGroup.js +5 -5
  17. package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
  18. package/dist/Badge/Badge.js +3 -3
  19. package/dist/Banner/Banner.d.ts.map +1 -1
  20. package/dist/Banner/Banner.js +25 -32
  21. package/dist/Blockquote/Blockquote.js +7 -7
  22. package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
  23. package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
  24. package/dist/Button/Button.js +19 -19
  25. package/dist/ButtonGroup/ButtonGroup.js +7 -7
  26. package/dist/Calendar/Calendar.d.ts.map +1 -1
  27. package/dist/Calendar/Calendar.js +48 -68
  28. package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
  29. package/dist/Calendar/styles.d.ts +2 -2
  30. package/dist/Calendar/styles.d.ts.map +1 -1
  31. package/dist/Calendar/styles.js +2 -2
  32. package/dist/Card/Card.d.ts +2 -4
  33. package/dist/Card/Card.d.ts.map +1 -1
  34. package/dist/Card/Card.js +10 -18
  35. package/dist/Carousel/Carousel.d.ts.map +1 -1
  36. package/dist/Carousel/Carousel.js +21 -24
  37. package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
  38. package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
  39. package/dist/Carousel/carousel.markers.stylex.js +12 -0
  40. package/dist/Center/Center.js +3 -3
  41. package/dist/Chat/ChatComposer.js +23 -23
  42. package/dist/Chat/ChatComposerDrawer.js +14 -14
  43. package/dist/Chat/ChatComposerInput.d.ts +1 -1
  44. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  45. package/dist/Chat/ChatComposerInput.js +15 -27
  46. package/dist/Chat/ChatDictationButton.d.ts +1 -1
  47. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  48. package/dist/Chat/ChatDictationButton.js +11 -13
  49. package/dist/Chat/ChatLayout.js +17 -17
  50. package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
  51. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  52. package/dist/Chat/ChatLayoutScrollButton.js +10 -12
  53. package/dist/Chat/ChatMessage.js +12 -12
  54. package/dist/Chat/ChatMessageBubble.js +7 -7
  55. package/dist/Chat/ChatMessageList.js +14 -14
  56. package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
  57. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  58. package/dist/Chat/ChatMessageMetadata.js +12 -14
  59. package/dist/Chat/ChatPastedTextToken.js +13 -13
  60. package/dist/Chat/ChatSendButton.js +3 -3
  61. package/dist/Chat/ChatSystemMessage.d.ts +1 -1
  62. package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
  63. package/dist/Chat/ChatSystemMessage.js +17 -17
  64. package/dist/Chat/ChatTokenizedText.d.ts +1 -1
  65. package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
  66. package/dist/Chat/ChatTokenizedText.js +15 -24
  67. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  68. package/dist/Chat/ChatToolCalls.js +74 -81
  69. package/dist/Chat/index.d.ts +1 -1
  70. package/dist/Chat/index.d.ts.map +1 -1
  71. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  72. package/dist/Chat/useTriggerMenu.js +15 -15
  73. package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
  74. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  75. package/dist/CheckboxInput/CheckboxInput.js +23 -25
  76. package/dist/CheckboxList/CheckboxList.js +9 -9
  77. package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
  78. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  79. package/dist/CheckboxList/CheckboxListItem.js +6 -8
  80. package/dist/Citation/Citation.js +10 -10
  81. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  82. package/dist/ClickableCard/ClickableCard.js +9 -32
  83. package/dist/Code/Code.js +3 -3
  84. package/dist/CodeBlock/CodeBlock.d.ts +1 -10
  85. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  86. package/dist/CodeBlock/CodeBlock.js +52 -88
  87. package/dist/Collapsible/Collapsible.d.ts +3 -9
  88. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  89. package/dist/Collapsible/Collapsible.js +22 -110
  90. package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
  91. package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
  92. package/dist/Collapsible/CollapsibleGroup.js +12 -73
  93. package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
  94. package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
  95. package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
  96. package/dist/Collapsible/index.d.ts +0 -1
  97. package/dist/Collapsible/index.d.ts.map +1 -1
  98. package/dist/Collapsible/useCollapsible.d.ts +1 -4
  99. package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
  100. package/dist/Collapsible/useCollapsible.js +6 -20
  101. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  102. package/dist/CommandPalette/CommandPalette.js +34 -36
  103. package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
  104. package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
  105. package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
  106. package/dist/CommandPalette/CommandPaletteInput.js +13 -13
  107. package/dist/CommandPalette/CommandPaletteItem.js +3 -3
  108. package/dist/CommandPalette/CommandPaletteList.js +3 -3
  109. package/dist/ContextMenu/ContextMenu.d.ts +2 -7
  110. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  111. package/dist/ContextMenu/ContextMenu.js +43 -76
  112. package/dist/DateInput/DateInput.js +18 -18
  113. package/dist/DateRangeInput/DateRangeInput.js +21 -21
  114. package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
  115. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  116. package/dist/DateTimeInput/DateTimeInput.js +26 -30
  117. package/dist/DateTimeInput/index.d.ts +1 -1
  118. package/dist/DateTimeInput/index.d.ts.map +1 -1
  119. package/dist/Dialog/Dialog.js +9 -9
  120. package/dist/Dialog/DialogHeader.js +16 -16
  121. package/dist/Dialog/useImperativeDialog.js +3 -3
  122. package/dist/Divider/Divider.js +7 -7
  123. package/dist/DropdownMenu/DropdownMenu.js +10 -10
  124. package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
  125. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  126. package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
  127. package/dist/DropdownMenu/renderDropdownItems.js +10 -10
  128. package/dist/EmptyState/EmptyState.js +9 -9
  129. package/dist/Field/Field.js +17 -17
  130. package/dist/Field/FieldLabel.js +15 -15
  131. package/dist/Field/InputClearButton.js +5 -5
  132. package/dist/FieldStatus/FieldStatus.js +3 -3
  133. package/dist/FileInput/FileInput.js +29 -29
  134. package/dist/FormLayout/FormLayout.js +5 -5
  135. package/dist/Grid/Grid.d.ts +3 -4
  136. package/dist/Grid/Grid.d.ts.map +1 -1
  137. package/dist/Grid/Grid.js +12 -29
  138. package/dist/Grid/GridSpan.js +3 -3
  139. package/dist/HStack/HStack.js +3 -3
  140. package/dist/Heading/Heading.js +10 -10
  141. package/dist/HoverCard/HoverCard.js +9 -9
  142. package/dist/HoverCard/useHoverCard.d.ts +1 -5
  143. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  144. package/dist/HoverCard/useHoverCard.js +3 -3
  145. package/dist/Icon/Icon.d.ts.map +1 -1
  146. package/dist/Icon/Icon.js +12 -16
  147. package/dist/Icon/defaultIcons.js +116 -116
  148. package/dist/IconButton/IconButton.js +3 -3
  149. package/dist/InputGroup/InputGroup.js +11 -11
  150. package/dist/InputGroup/InputGroupText.js +3 -3
  151. package/dist/Item/Item.js +18 -18
  152. package/dist/Kbd/Kbd.js +5 -5
  153. package/dist/Layer/LayerProvider.js +7 -7
  154. package/dist/Layer/useLayer.d.ts +2 -29
  155. package/dist/Layer/useLayer.d.ts.map +1 -1
  156. package/dist/Layer/useLayer.js +31 -44
  157. package/dist/Layout/Layout.js +21 -21
  158. package/dist/Layout/LayoutContent.js +3 -3
  159. package/dist/Layout/LayoutFooter.js +5 -5
  160. package/dist/Layout/LayoutHeader.js +5 -5
  161. package/dist/Layout/LayoutPanel.js +3 -3
  162. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  163. package/dist/Lightbox/Lightbox.js +31 -55
  164. package/dist/Lightbox/useLightbox.js +3 -3
  165. package/dist/Link/Link.js +15 -15
  166. package/dist/Link/LinkProvider.js +3 -3
  167. package/dist/Link/useLinkify.js +3 -3
  168. package/dist/List/List.js +11 -11
  169. package/dist/List/ListItem.js +11 -11
  170. package/dist/Markdown/Markdown.d.ts.map +1 -1
  171. package/dist/Markdown/Markdown.js +102 -102
  172. package/dist/MetadataList/MetadataList.js +10 -10
  173. package/dist/MetadataList/MetadataListItem.js +15 -15
  174. package/dist/MobileNav/MobileNav.js +15 -15
  175. package/dist/MobileNav/MobileNavToggle.js +5 -5
  176. package/dist/MoreMenu/MoreMenu.js +3 -3
  177. package/dist/MultiSelector/MultiSelector.js +56 -56
  178. package/dist/NavIcon/NavIcon.js +3 -3
  179. package/dist/NavMenu/NavHeadingMenu.js +5 -5
  180. package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
  181. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  182. package/dist/NumberInput/NumberInput.js +32 -48
  183. package/dist/Outline/Outline.js +15 -15
  184. package/dist/OverflowList/OverflowList.js +8 -8
  185. package/dist/Overlay/Overlay.js +3 -3
  186. package/dist/Overlay/OverlayScrim.js +5 -5
  187. package/dist/Overlay/useOverlay.js +3 -3
  188. package/dist/Pagination/Pagination.d.ts +1 -1
  189. package/dist/Pagination/Pagination.d.ts.map +1 -1
  190. package/dist/Pagination/Pagination.js +72 -125
  191. package/dist/Popover/Popover.js +16 -16
  192. package/dist/Popover/usePopover.js +7 -7
  193. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  194. package/dist/PowerSearch/PowerSearch.js +92 -110
  195. package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
  196. package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
  197. package/dist/PowerSearch/PowerSearchToken.js +5 -5
  198. package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
  199. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  200. package/dist/ProgressBar/ProgressBar.js +18 -25
  201. package/dist/RadioList/RadioList.js +7 -7
  202. package/dist/RadioList/RadioListItem.d.ts +1 -1
  203. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  204. package/dist/RadioList/RadioListItem.js +21 -24
  205. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  206. package/dist/Resizable/ResizeHandle.js +10 -28
  207. package/dist/Section/Section.js +5 -5
  208. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  209. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  210. package/dist/SegmentedControl/SegmentedControl.js +10 -32
  211. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
  212. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  213. package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
  214. package/dist/SelectableCard/SelectableCard.js +5 -5
  215. package/dist/Selector/Selector.js +46 -46
  216. package/dist/Selector/SelectorOption.js +3 -3
  217. package/dist/SideNav/SideNav.d.ts.map +1 -1
  218. package/dist/SideNav/SideNav.js +34 -38
  219. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  220. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  221. package/dist/SideNav/SideNavCollapseButton.js +6 -8
  222. package/dist/SideNav/SideNavHeading.js +87 -87
  223. package/dist/SideNav/SideNavItem.js +42 -42
  224. package/dist/SideNav/SideNavSection.d.ts +1 -1
  225. package/dist/SideNav/SideNavSection.d.ts.map +1 -1
  226. package/dist/SideNav/SideNavSection.js +16 -18
  227. package/dist/Skeleton/Skeleton.js +3 -3
  228. package/dist/Slider/Slider.js +23 -23
  229. package/dist/Spinner/Spinner.js +9 -9
  230. package/dist/StatusDot/StatusDot.js +5 -5
  231. package/dist/Switch/Switch.d.ts +4 -8
  232. package/dist/Switch/Switch.d.ts.map +1 -1
  233. package/dist/Switch/Switch.js +29 -34
  234. package/dist/TabList/Tab.js +18 -18
  235. package/dist/TabList/TabList.js +5 -5
  236. package/dist/TabList/TabMenu.d.ts.map +1 -1
  237. package/dist/TabList/TabMenu.js +30 -57
  238. package/dist/TabList/tab.markers.stylex.d.ts +1 -1
  239. package/dist/Table/BaseTable.d.ts.map +1 -1
  240. package/dist/Table/BaseTable.js +39 -50
  241. package/dist/Table/Table.js +7 -7
  242. package/dist/Table/TableBody.d.ts +1 -1
  243. package/dist/Table/TableBody.d.ts.map +1 -1
  244. package/dist/Table/TableBody.js +5 -9
  245. package/dist/Table/TableCell.js +3 -3
  246. package/dist/Table/TableFooter.d.ts +1 -1
  247. package/dist/Table/TableFooter.d.ts.map +1 -1
  248. package/dist/Table/TableFooter.js +5 -9
  249. package/dist/Table/TableHeader.d.ts +1 -1
  250. package/dist/Table/TableHeader.d.ts.map +1 -1
  251. package/dist/Table/TableHeader.js +5 -9
  252. package/dist/Table/TableHeaderCell.js +3 -3
  253. package/dist/Table/TableRow.js +5 -5
  254. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  255. package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
  256. package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
  257. package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
  258. package/dist/Table/plugins/pagination/paginateData.js +1 -5
  259. package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
  260. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
  261. package/dist/Table/plugins/selection/useTableSelection.js +18 -18
  262. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  263. package/dist/Table/plugins/selection/useTableSelectionState.js +1 -11
  264. package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
  265. package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
  266. package/dist/Table/plugins/sortable/useTableSortableState.js +4 -8
  267. package/dist/Table/tableContextMenu.js +9 -9
  268. package/dist/Text/Text.js +10 -10
  269. package/dist/TextArea/TextArea.js +14 -14
  270. package/dist/TextInput/TextInput.js +15 -15
  271. package/dist/Thumbnail/Thumbnail.d.ts +2 -3
  272. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  273. package/dist/Thumbnail/Thumbnail.js +29 -30
  274. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  275. package/dist/TimeInput/TimeInput.js +21 -26
  276. package/dist/Timestamp/Timestamp.d.ts +1 -1
  277. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  278. package/dist/Timestamp/Timestamp.js +26 -37
  279. package/dist/Toast/Toast.d.ts.map +1 -1
  280. package/dist/Toast/Toast.js +17 -25
  281. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  282. package/dist/Toast/ToastViewport.js +11 -23
  283. package/dist/Toast/useToast.js +4 -4
  284. package/dist/ToggleButton/ToggleButton.js +12 -12
  285. package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
  286. package/dist/Token/Token.js +21 -21
  287. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  288. package/dist/Tokenizer/Tokenizer.js +34 -36
  289. package/dist/Toolbar/Toolbar.js +18 -18
  290. package/dist/Tooltip/Tooltip.js +11 -11
  291. package/dist/Tooltip/useTooltip.d.ts +1 -5
  292. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  293. package/dist/Tooltip/useTooltip.js +3 -3
  294. package/dist/TopNav/TopNav.js +32 -32
  295. package/dist/TopNav/TopNavHeading.js +67 -67
  296. package/dist/TopNav/TopNavItem.js +5 -5
  297. package/dist/TopNav/TopNavMegaMenu.js +30 -30
  298. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
  299. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  300. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +14 -25
  301. package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
  302. package/dist/TopNav/TopNavMenu.js +32 -32
  303. package/dist/TreeList/TreeList.js +8 -8
  304. package/dist/TreeList/TreeListBranches.js +11 -11
  305. package/dist/TreeList/TreeListItem.js +30 -30
  306. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  307. package/dist/Typeahead/BaseTypeahead.js +20 -23
  308. package/dist/Typeahead/Typeahead.js +12 -12
  309. package/dist/Typeahead/TypeaheadItem.js +10 -10
  310. package/dist/VStack/VStack.js +3 -3
  311. package/dist/astryx.css +0 -7
  312. package/dist/astryx.umd.js +60 -60
  313. package/dist/astryx.umd.js.map +4 -4
  314. package/dist/docs-types.d.ts +2 -8
  315. package/dist/docs-types.d.ts.map +1 -1
  316. package/dist/hooks/focusableSelector.d.ts +1 -1
  317. package/dist/hooks/focusableSelector.d.ts.map +1 -1
  318. package/dist/hooks/focusableSelector.js +1 -1
  319. package/dist/hooks/index.d.ts +0 -2
  320. package/dist/hooks/index.d.ts.map +1 -1
  321. package/dist/hooks/index.js +0 -1
  322. package/dist/hooks/useFocusTrap.d.ts +0 -3
  323. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  324. package/dist/hooks/useFocusTrap.js +1 -38
  325. package/dist/hooks/useInteractiveRole.d.ts +2 -6
  326. package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
  327. package/dist/hooks/useInteractiveRole.js +2 -6
  328. package/dist/hooks/useKeyboardHint.js +9 -9
  329. package/dist/hooks/useStreamingText.d.ts +1 -3
  330. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  331. package/dist/hooks/useStreamingText.js +5 -14
  332. package/dist/theme/MediaTheme.js +3 -3
  333. package/dist/theme/Theme.js +7 -7
  334. package/dist/theme/defineTheme.d.ts +1 -1
  335. package/dist/theme/defineTheme.d.ts.map +1 -1
  336. package/dist/theme/expandColorScale.d.ts.map +1 -1
  337. package/dist/theme/expandColorScale.js +3 -10
  338. package/dist/theme/hct.d.ts +15 -0
  339. package/dist/theme/hct.d.ts.map +1 -1
  340. package/dist/theme/hct.js +9 -9
  341. package/dist/theme/syntax/SyntaxTheme.js +5 -5
  342. package/dist/theme/tokens.d.ts +2 -10
  343. package/dist/theme/tokens.d.ts.map +1 -1
  344. package/dist/theme/tokens.js +4 -220
  345. package/dist/utils/index.d.ts +0 -3
  346. package/dist/utils/index.d.ts.map +1 -1
  347. package/dist/utils/index.js +1 -3
  348. package/dist/utils/timeParser.d.ts.map +1 -1
  349. package/dist/utils/timeParser.js +5 -8
  350. package/package.json +3 -3
  351. package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
  352. package/src/AlertDialog/AlertDialog.tsx +0 -2
  353. package/src/AppShell/AppShell.tsx +0 -2
  354. package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
  355. package/src/AspectRatio/AspectRatio.test.tsx +1 -142
  356. package/src/AspectRatio/AspectRatio.tsx +10 -70
  357. package/src/AspectRatio/index.ts +1 -5
  358. package/src/Avatar/Avatar.doc.mjs +0 -11
  359. package/src/Avatar/Avatar.test.tsx +1 -32
  360. package/src/Avatar/Avatar.tsx +20 -12
  361. package/src/Banner/Banner.doc.mjs +0 -8
  362. package/src/Banner/Banner.test.tsx +0 -38
  363. package/src/Banner/Banner.tsx +1 -8
  364. package/src/Calendar/Calendar.doc.mjs +1 -1
  365. package/src/Calendar/Calendar.test.tsx +17 -122
  366. package/src/Calendar/Calendar.tsx +5 -26
  367. package/src/Calendar/dayCellUtils.ts +1 -3
  368. package/src/Calendar/styles.ts +2 -12
  369. package/src/Card/Card.tsx +6 -16
  370. package/src/Carousel/Carousel.doc.mjs +12 -12
  371. package/src/Carousel/Carousel.test.tsx +0 -13
  372. package/src/Carousel/Carousel.tsx +2 -4
  373. package/src/Carousel/carousel.markers.stylex.ts +10 -0
  374. package/src/Chat/Chat.doc.mjs +1 -1
  375. package/src/Chat/ChatComposerInput.test.tsx +1 -27
  376. package/src/Chat/ChatComposerInput.tsx +15 -20
  377. package/src/Chat/ChatDictationButton.tsx +4 -4
  378. package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
  379. package/src/Chat/ChatMessageMetadata.tsx +6 -4
  380. package/src/Chat/ChatSystemMessage.test.tsx +11 -26
  381. package/src/Chat/ChatSystemMessage.tsx +7 -7
  382. package/src/Chat/ChatTokenizedText.test.tsx +16 -29
  383. package/src/Chat/ChatTokenizedText.tsx +8 -15
  384. package/src/Chat/ChatToolCalls.test.tsx +0 -55
  385. package/src/Chat/ChatToolCalls.tsx +12 -10
  386. package/src/Chat/index.ts +4 -1
  387. package/src/Chat/useTriggerMenu.tsx +4 -1
  388. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
  389. package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
  390. package/src/CheckboxInput/CheckboxInput.tsx +0 -2
  391. package/src/CheckboxList/CheckboxList.test.tsx +0 -19
  392. package/src/CheckboxList/CheckboxListItem.tsx +2 -11
  393. package/src/Citation/Citation.doc.mjs +0 -5
  394. package/src/ClickableCard/ClickableCard.tsx +2 -45
  395. package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
  396. package/src/CodeBlock/CodeBlock.test.tsx +3 -122
  397. package/src/CodeBlock/CodeBlock.tsx +4 -62
  398. package/src/Collapsible/Collapsible.doc.mjs +4 -8
  399. package/src/Collapsible/Collapsible.tsx +10 -86
  400. package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
  401. package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
  402. package/src/Collapsible/CollapsibleGroup.tsx +9 -107
  403. package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
  404. package/src/Collapsible/index.ts +0 -4
  405. package/src/Collapsible/useCollapsible.ts +6 -20
  406. package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
  407. package/src/CommandPalette/CommandPalette.tsx +3 -5
  408. package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
  409. package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
  410. package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
  411. package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
  412. package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
  413. package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
  414. package/src/ContextMenu/ContextMenu.test.tsx +0 -87
  415. package/src/ContextMenu/ContextMenu.tsx +28 -87
  416. package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
  417. package/src/DateInput/DateInput.test.tsx +20 -11
  418. package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
  419. package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
  420. package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
  421. package/src/DateTimeInput/DateTimeInput.tsx +2 -8
  422. package/src/DateTimeInput/index.ts +0 -1
  423. package/src/Dialog/Dialog.doc.mjs +0 -4
  424. package/src/Dialog/DialogHeader.doc.mjs +0 -45
  425. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
  426. package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
  427. package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
  428. package/src/Field/Field.test.tsx +4 -1
  429. package/src/Field/FieldLabel.test.tsx +2 -2
  430. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
  431. package/src/Grid/Grid.test.tsx +18 -43
  432. package/src/Grid/Grid.tsx +9 -26
  433. package/src/HoverCard/HoverCard.doc.mjs +6 -6
  434. package/src/HoverCard/useHoverCard.doc.mjs +5 -5
  435. package/src/HoverCard/useHoverCard.tsx +2 -9
  436. package/src/Icon/Icon.test.tsx +29 -41
  437. package/src/Icon/Icon.tsx +2 -6
  438. package/src/InputGroup/InputGroup.tsx +2 -2
  439. package/src/Item/Item.tsx +1 -1
  440. package/src/Layer/useLayer.doc.mjs +2 -2
  441. package/src/Layer/useLayer.test.tsx +2 -221
  442. package/src/Layer/useLayer.tsx +30 -69
  443. package/src/Layout/LayoutContent.doc.mjs +0 -12
  444. package/src/Layout/LayoutPanel.doc.mjs +0 -40
  445. package/src/Lightbox/Lightbox.doc.mjs +0 -5
  446. package/src/Lightbox/Lightbox.test.tsx +2 -123
  447. package/src/Lightbox/Lightbox.tsx +1 -29
  448. package/src/Markdown/Markdown.tsx +7 -9
  449. package/src/Markdown/parser.perf.test.ts +12 -34
  450. package/src/NavMenu/NavMenu.doc.mjs +0 -15
  451. package/src/NumberInput/NumberInput.test.tsx +3 -48
  452. package/src/NumberInput/NumberInput.tsx +15 -32
  453. package/src/Overlay/Overlay.doc.mjs +0 -6
  454. package/src/Pagination/Pagination.test.tsx +0 -162
  455. package/src/Pagination/Pagination.tsx +26 -80
  456. package/src/Popover/Popover.doc.mjs +6 -6
  457. package/src/Popover/Popover.test.tsx +0 -65
  458. package/src/Popover/usePopover.doc.mjs +1 -1
  459. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  460. package/src/PowerSearch/PowerSearch.test.tsx +1 -109
  461. package/src/PowerSearch/PowerSearch.tsx +16 -37
  462. package/src/ProgressBar/ProgressBar.test.tsx +0 -30
  463. package/src/ProgressBar/ProgressBar.tsx +5 -12
  464. package/src/RadioList/RadioList.test.tsx +0 -19
  465. package/src/RadioList/RadioListItem.tsx +4 -9
  466. package/src/Resizable/ResizeHandle.tsx +4 -22
  467. package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
  468. package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
  469. package/src/SegmentedControl/SegmentedControl.tsx +5 -27
  470. package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
  471. package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
  472. package/src/Selector/Selector.test.tsx +1 -27
  473. package/src/SideNav/SideNav.doc.mjs +1 -7
  474. package/src/SideNav/SideNav.test.tsx +0 -66
  475. package/src/SideNav/SideNav.tsx +2 -6
  476. package/src/SideNav/SideNavCollapseButton.tsx +3 -4
  477. package/src/SideNav/SideNavSection.tsx +4 -6
  478. package/src/Switch/Switch.doc.mjs +7 -7
  479. package/src/Switch/Switch.test.tsx +3 -102
  480. package/src/Switch/Switch.tsx +7 -20
  481. package/src/TabList/TabList.test.tsx +1 -185
  482. package/src/TabList/TabMenu.tsx +9 -45
  483. package/src/Table/BaseTable.tsx +2 -13
  484. package/src/Table/Table.test.tsx +0 -87
  485. package/src/Table/TableBody.tsx +2 -15
  486. package/src/Table/TableFooter.tsx +2 -15
  487. package/src/Table/TableHeader.tsx +2 -15
  488. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
  489. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
  490. package/src/Table/plugins/pagination/paginateData.ts +1 -5
  491. package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
  492. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
  493. package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
  494. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
  495. package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
  496. package/src/TextArea/TextArea.test.tsx +3 -3
  497. package/src/TextInput/TextInput.test.tsx +3 -3
  498. package/src/Thumbnail/Thumbnail.test.tsx +2 -36
  499. package/src/Thumbnail/Thumbnail.tsx +2 -4
  500. package/src/TimeInput/TimeInput.test.tsx +0 -37
  501. package/src/TimeInput/TimeInput.tsx +1 -11
  502. package/src/Timestamp/Timestamp.doc.mjs +1 -1
  503. package/src/Timestamp/Timestamp.test.tsx +0 -52
  504. package/src/Timestamp/Timestamp.tsx +16 -30
  505. package/src/Toast/Toast.tsx +3 -11
  506. package/src/Toast/ToastViewport.test.tsx +0 -64
  507. package/src/Toast/ToastViewport.tsx +0 -12
  508. package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
  509. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  510. package/src/Tokenizer/Tokenizer.test.tsx +0 -54
  511. package/src/Tokenizer/Tokenizer.tsx +4 -5
  512. package/src/Tooltip/Tooltip.doc.mjs +6 -6
  513. package/src/Tooltip/useTooltip.doc.mjs +5 -5
  514. package/src/Tooltip/useTooltip.tsx +2 -12
  515. package/src/TopNav/TopNav.doc.mjs +1 -1
  516. package/src/TopNav/TopNav.test.tsx +7 -23
  517. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
  518. package/src/TreeList/TreeList.doc.mjs +2 -2
  519. package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
  520. package/src/Typeahead/BaseTypeahead.tsx +2 -5
  521. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  522. package/src/Typeahead/Typeahead.test.tsx +1 -45
  523. package/src/docs-types.ts +1 -9
  524. package/src/hooks/focusableSelector.ts +1 -1
  525. package/src/hooks/index.ts +0 -3
  526. package/src/hooks/useFocusTrap.doc.mjs +2 -4
  527. package/src/hooks/useFocusTrap.test.tsx +1 -149
  528. package/src/hooks/useFocusTrap.ts +1 -50
  529. package/src/hooks/useInteractiveRole.ts +4 -12
  530. package/src/hooks/useStreamingText.test.ts +19 -54
  531. package/src/hooks/useStreamingText.ts +5 -16
  532. package/src/hooks/useTreeFocus.test.tsx +3 -1
  533. package/src/reset.css +0 -29
  534. package/src/theme/SyntaxTheme.doc.mjs +4 -4
  535. package/src/theme/defineTheme.ts +13 -4
  536. package/src/theme/derivedVarRegistry.test.ts +2 -2
  537. package/src/theme/expandColorScale.test.ts +0 -29
  538. package/src/theme/expandColorScale.ts +6 -11
  539. package/src/theme/hct.ts +17 -9
  540. package/src/theme/tokens.test.ts +9 -182
  541. package/src/theme/tokens.ts +4 -239
  542. package/src/theme/useTheme.test.tsx +0 -20
  543. package/src/utils/index.ts +0 -4
  544. package/src/utils/sharedResizeObserver.test.ts +2 -2
  545. package/src/utils/timeParser.test.ts +0 -13
  546. package/src/utils/timeParser.ts +5 -8
  547. package/dist/hooks/useHotkeys.d.ts +0 -51
  548. package/dist/hooks/useHotkeys.d.ts.map +0 -1
  549. package/dist/hooks/useHotkeys.js +0 -160
  550. package/dist/utils/color.d.ts +0 -42
  551. package/dist/utils/color.d.ts.map +0 -1
  552. package/dist/utils/color.js +0 -150
  553. package/dist/utils/composeEventHandlers.d.ts +0 -30
  554. package/dist/utils/composeEventHandlers.d.ts.map +0 -1
  555. package/dist/utils/composeEventHandlers.js +0 -40
  556. package/src/Chat/ChatDictationButton.test.tsx +0 -43
  557. package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
  558. package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
  559. package/src/Collapsible/Collapsible.test.tsx +0 -405
  560. package/src/FieldStatus/FieldStatus.test.tsx +0 -282
  561. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
  562. package/src/Layout/Layout.test.tsx +0 -285
  563. package/src/Layout/LayoutSlots.test.tsx +0 -364
  564. package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
  565. package/src/OverflowList/OverflowList.test.tsx +0 -416
  566. package/src/Overlay/Overlay.test.tsx +0 -356
  567. package/src/Resizable/ResizeHandle.test.tsx +0 -218
  568. package/src/SizeContext/SizeContext.test.tsx +0 -226
  569. package/src/__tests__/TestIcon.tsx +0 -26
  570. package/src/__tests__/fastRoleQueries.ts +0 -66
  571. package/src/docPropReferences.test.ts +0 -178
  572. package/src/hooks/useHotkeys.doc.mjs +0 -52
  573. package/src/hooks/useHotkeys.test.ts +0 -245
  574. package/src/hooks/useHotkeys.ts +0 -203
  575. package/src/utils/color.test.ts +0 -133
  576. package/src/utils/color.ts +0 -148
  577. package/src/utils/composeEventHandlers.test.ts +0 -71
  578. package/src/utils/composeEventHandlers.ts +0 -44
  579. package/src/utils/mergeProps.test.ts +0 -166
@@ -57,12 +57,6 @@ 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
- },
66
60
  };
67
61
 
68
62
  export const docsZh = {
@@ -50,12 +50,6 @@ 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
- },
59
53
  };
60
54
 
61
55
  export const docsZh = {
@@ -27,15 +27,6 @@ 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
- },
39
30
  };
40
31
 
41
32
  export const docsZh = {
@@ -78,21 +78,6 @@ 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
- },
96
81
  };
97
82
 
98
83
  /** @type {import('../docs-types').TranslationDoc} */
@@ -172,21 +172,6 @@ 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
-
190
175
  it('does not open when isDisabled is true', () => {
191
176
  render(
192
177
  <ContextMenu items={[{label: 'Item 1'}]} isDisabled>
@@ -464,76 +449,4 @@ describe('ContextMenu compound mode', () => {
464
449
  ).toBeInTheDocument();
465
450
  expect(screen.getByRole('separator', {hidden: true})).toBeInTheDocument();
466
451
  });
467
-
468
- describe('cursor anchor positioning (#3465)', () => {
469
- // The menu is anchored to a zero-size element placed at the cursor point
470
- // *inside the trigger*, so it is positioned relative to the trigger's
471
- // context (scroll-follow + auto-flip) rather than the viewport.
472
- function getCursorAnchor(trigger: HTMLElement): HTMLElement {
473
- const anchor = trigger.querySelector<HTMLElement>('[aria-hidden="true"]');
474
- if (!anchor) {
475
- throw new Error('cursor anchor not found');
476
- }
477
- return anchor;
478
- }
479
-
480
- it('renders a zero-size cursor anchor inside the trigger', () => {
481
- render(
482
- <ContextMenu items={[{label: 'Item 1'}]} data-testid="ctx">
483
- <div>Right-click me</div>
484
- </ContextMenu>,
485
- );
486
- const anchor = getCursorAnchor(screen.getByTestId('ctx'));
487
- expect(anchor.tagName).toBe('SPAN');
488
- // Carries an anchor-name so the menu can be anchored to it via CSS
489
- // anchor positioning (context mode), not fixed viewport coordinates.
490
- expect(anchor.style.anchorName).toMatch(/^--astryx-layer-/);
491
- });
492
-
493
- it('places the cursor anchor at the pointer position relative to the trigger', () => {
494
- render(
495
- <ContextMenu items={[{label: 'Item 1'}]} data-testid="ctx">
496
- <div>Right-click me</div>
497
- </ContextMenu>,
498
- );
499
- const trigger = screen.getByTestId('ctx');
500
- trigger.getBoundingClientRect = () =>
501
- ({
502
- left: 100,
503
- top: 50,
504
- right: 300,
505
- bottom: 150,
506
- width: 200,
507
- height: 100,
508
- }) as DOMRect;
509
- // Pointer at viewport (170, 90) -> local trigger offset (70, 40).
510
- fireEvent.contextMenu(trigger, {clientX: 170, clientY: 90, detail: 1});
511
- const anchor = getCursorAnchor(trigger);
512
- expect(anchor.style.left).toBe('70px');
513
- expect(anchor.style.top).toBe('40px');
514
- });
515
-
516
- it('anchors a keyboard-invoked menu to the trigger bottom-left', () => {
517
- render(
518
- <ContextMenu items={[{label: 'Item 1'}]} data-testid="ctx">
519
- <div>Right-click me</div>
520
- </ContextMenu>,
521
- );
522
- const trigger = screen.getByTestId('ctx');
523
- trigger.getBoundingClientRect = () =>
524
- ({
525
- left: 40,
526
- top: 10,
527
- right: 100,
528
- bottom: 30,
529
- width: 60,
530
- height: 20,
531
- }) as DOMRect;
532
- // Keyboard-initiated contextmenu: coords (0,0), detail 0 -> local (0, height).
533
- fireEvent.contextMenu(trigger, {clientX: 0, clientY: 0, detail: 0});
534
- const anchor = getCursorAnchor(trigger);
535
- expect(anchor.style.left).toBe('0px');
536
- expect(anchor.style.top).toBe('20px');
537
- });
538
- });
539
452
  });
@@ -3,16 +3,11 @@
3
3
 
4
4
  /**
5
5
  * @file ContextMenu.tsx
6
- * @input Uses React, StyleX, useLayer (context mode), useListFocus
6
+ * @input Uses React, StyleX, useLayer (fixed mode), useListFocus
7
7
  * @output Exports ContextMenu component
8
8
  * @position Core implementation; consumed by index.ts
9
9
  *
10
- * Right-click context menu positioned at the cursor. The cursor point is
11
- * captured as an offset *inside the trigger* and materialized as a zero-size
12
- * anchor element, so the menu is positioned relative to the trigger's context
13
- * (via CSS anchor positioning) rather than the viewport. It therefore follows
14
- * the content on scroll and auto-flips at viewport edges, while still appearing
15
- * under the cursor.
10
+ * Right-click context menu positioned at cursor coordinates.
16
11
  * Reuses DropdownMenu item rendering and keyboard navigation.
17
12
  *
18
13
  * Supports two content modes with a single keyboard/focus path:
@@ -58,7 +53,7 @@ import {
58
53
  easeVars,
59
54
  shadowVars,
60
55
  } from '../theme/tokens.stylex';
61
- import {mergeProps, mergeRefs} from '../utils';
56
+ import {mergeProps} from '../utils';
62
57
  import type {BaseProps} from '../BaseProps';
63
58
  import type {StyleXStyles} from '../theme/types';
64
59
  import {themeProps} from '../utils/themeProps';
@@ -72,23 +67,9 @@ import type {
72
67
  const styles = stylex.create({
73
68
  // Trigger wrapper: suppress the iOS long-press callout/selection so the
74
69
  // long-press opens our context menu instead of the native text/callout UI.
75
- // `position: relative` establishes the containing block for the absolutely
76
- // positioned cursor anchor below, so the anchor point tracks the trigger
77
- // (and scrolls with it) instead of the page.
78
70
  trigger: {
79
- position: 'relative',
80
71
  WebkitTouchCallout: 'none',
81
72
  },
82
- // Zero-size anchor placed at the cursor point within the trigger. The menu
83
- // is anchored to this element, so it sits under the cursor yet is positioned
84
- // relative to the trigger's context — it follows the content on scroll and
85
- // the browser can auto-flip it against the viewport edges.
86
- cursorAnchor: {
87
- position: 'absolute',
88
- width: 0,
89
- height: 0,
90
- pointerEvents: 'none',
91
- },
92
73
  menu: {
93
74
  boxSizing: 'border-box',
94
75
  display: 'flex',
@@ -106,7 +87,6 @@ const styles = stylex.create({
106
87
  transitionProperty: 'opacity',
107
88
  transitionDuration: durationVars['--duration-fast'],
108
89
  transitionTimingFunction: easeVars['--ease-standard'],
109
- userSelect: 'none',
110
90
  },
111
91
  popover: {
112
92
  minWidth: '160px',
@@ -220,13 +200,7 @@ export function ContextMenu({
220
200
  const menuContent = 'menuContent' in props ? props.menuContent : undefined;
221
201
 
222
202
  const menuId = useId();
223
- // Cursor point in the trigger's local coordinate space (offset from the
224
- // trigger's top-left, in-flow). Stored here and written to the zero-size
225
- // anchor element so the menu is positioned relative to the trigger context
226
- // — it scrolls with the content instead of sitting at a fixed viewport point.
227
203
  const positionRef = useRef({x: 0, y: 0});
228
- const cursorAnchorRef = useRef<HTMLSpanElement>(null);
229
- const triggerRef = useRef<HTMLDivElement>(null);
230
204
  // Element focused before the menu opened, restored when it closes so focus
231
205
  // does not fall to <body> after Escape or outside-click dismissal.
232
206
  const triggerFocusRef = useRef<HTMLElement | null>(null);
@@ -234,7 +208,7 @@ export function ContextMenu({
234
208
  const [isOpen, setIsOpen] = useState(false);
235
209
 
236
210
  const layer = useLayer({
237
- mode: 'context',
211
+ mode: 'fixed',
238
212
  onHide: useCallback(() => {
239
213
  setIsOpen(false);
240
214
  onOpenChange?.(false);
@@ -352,53 +326,34 @@ export function ContextMenu({
352
326
  [listNavKeyDown, typeahead],
353
327
  );
354
328
 
355
- // Place the zero-size cursor anchor at a point in the trigger's local
356
- // coordinate space and open the menu. Positioning the anchor inside the
357
- // trigger (rather than storing viewport coordinates on the menu itself) is
358
- // what makes the menu context-relative: it scrolls with the content and the
359
- // browser auto-flips it against the viewport edges via CSS anchor positioning.
360
- const openAtLocalPoint = useCallback(
361
- (localX: number, localY: number, focusEl: HTMLElement | null) => {
362
- positionRef.current = {x: localX, y: localY};
363
- const anchorEl = cursorAnchorRef.current;
364
- if (anchorEl) {
365
- anchorEl.style.left = `${localX}px`;
366
- anchorEl.style.top = `${localY}px`;
367
- }
368
- // Remember the element focused before opening so we can restore it on
369
- // close (Escape or outside-click), instead of dropping focus to <body>.
370
- triggerFocusRef.current =
371
- document.activeElement instanceof HTMLElement
372
- ? document.activeElement
373
- : focusEl;
374
- layer.show();
375
- requestAnimationFrame(() => focusFirst());
376
- },
377
- [layer, focusFirst],
378
- );
379
-
380
329
  const handleContextMenu = useCallback(
381
330
  (e: React.MouseEvent) => {
382
331
  if (isDisabled) {
383
332
  return;
384
333
  }
385
334
  e.preventDefault();
386
- const trigger = triggerRef.current;
387
- const rect = trigger?.getBoundingClientRect();
388
335
  // A keyboard-initiated contextmenu (Shift+F10 / the Menu key) fires a
389
336
  // `contextmenu` event whose coordinates are (0, 0) in several browsers.
390
- // Detect that and anchor the menu to the trigger's bottom-left instead,
391
- // so the menu is reachable without a pointer (menus-8).
337
+ // Detect that and anchor the menu to the trigger's box instead, so the
338
+ // menu is reachable without a pointer (menus-8).
392
339
  const isKeyboardInvoked =
393
340
  e.clientX === 0 && e.clientY === 0 && e.detail === 0;
394
- // Convert the viewport cursor point into the trigger's local space so
395
- // the anchor lives inside the (scrollable) trigger context.
396
- const localX = isKeyboardInvoked || !rect ? 0 : e.clientX - rect.left;
397
- const localY =
398
- isKeyboardInvoked || !rect ? (rect?.height ?? 0) : e.clientY - rect.top;
399
- openAtLocalPoint(localX, localY, e.currentTarget as HTMLElement);
341
+ if (isKeyboardInvoked && e.currentTarget instanceof HTMLElement) {
342
+ const rect = e.currentTarget.getBoundingClientRect();
343
+ positionRef.current = {x: rect.left, y: rect.bottom};
344
+ } else {
345
+ positionRef.current = {x: e.clientX, y: e.clientY};
346
+ }
347
+ // Remember the element focused before opening so we can restore it on
348
+ // close (Escape or outside-click), instead of dropping focus to <body>.
349
+ triggerFocusRef.current =
350
+ document.activeElement instanceof HTMLElement
351
+ ? document.activeElement
352
+ : (e.currentTarget as HTMLElement);
353
+ layer.show();
354
+ requestAnimationFrame(() => focusFirst());
400
355
  },
401
- [isDisabled, openAtLocalPoint],
356
+ [isDisabled, layer, focusFirst],
402
357
  );
403
358
 
404
359
  // Touch long-press invocation (menus-8). iOS Safari never synthesizes a
@@ -409,14 +364,11 @@ export function ContextMenu({
409
364
  disabled: isDisabled,
410
365
  onLongPress: useCallback(
411
366
  (point: {x: number; y: number}) => {
412
- const rect = triggerRef.current?.getBoundingClientRect();
413
- openAtLocalPoint(
414
- rect ? point.x - rect.left : point.x,
415
- rect ? point.y - rect.top : point.y,
416
- triggerRef.current,
417
- );
367
+ positionRef.current = {x: point.x, y: point.y};
368
+ layer.show();
369
+ requestAnimationFrame(() => focusFirst());
418
370
  },
419
- [openAtLocalPoint],
371
+ [layer, focusFirst],
420
372
  ),
421
373
  });
422
374
 
@@ -435,7 +387,7 @@ export function ContextMenu({
435
387
  return (
436
388
  <>
437
389
  <div
438
- ref={mergeRefs(ref, triggerRef)}
390
+ ref={ref}
439
391
  onContextMenu={handleContextMenu}
440
392
  {...longPressHandlers}
441
393
  data-testid={testId}
@@ -448,16 +400,6 @@ export function ContextMenu({
448
400
  : []),
449
401
  )}>
450
402
  {children}
451
- <span
452
- ref={mergeRefs(cursorAnchorRef, layer.ref)}
453
- aria-hidden="true"
454
- {...mergeProps(stylex.props(styles.cursorAnchor), {
455
- style: {
456
- left: `${positionRef.current.x}px`,
457
- top: `${positionRef.current.y}px`,
458
- },
459
- })}
460
- />
461
403
  </div>
462
404
 
463
405
  {layer.render(
@@ -467,7 +409,6 @@ export function ContextMenu({
467
409
  role="menu"
468
410
  aria-label={label}
469
411
  onKeyDown={listKeyDown}
470
- onContextMenu={e => e.preventDefault()}
471
412
  {...mergeProps(
472
413
  themeProps('context-menu'),
473
414
  stylex.props(styles.menu, xstyle),
@@ -479,8 +420,8 @@ export function ContextMenu({
479
420
  </DropdownMenuContext>
480
421
  </div>,
481
422
  {
482
- placement: 'below',
483
- alignment: 'start',
423
+ x: positionRef.current.x,
424
+ y: positionRef.current.y,
484
425
  xstyle: [popoverXstyle, layerAnimations.below],
485
426
  },
486
427
  )}
@@ -35,12 +35,6 @@ 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
- },
44
38
  };
45
39
 
46
40
  export const docsZh = {
@@ -12,7 +12,6 @@
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';
16
15
  import {DateInput} from './DateInput';
17
16
  import {InputGroup} from '../InputGroup';
18
17
  import {InputGroupText} from '../InputGroup/InputGroupText';
@@ -93,14 +92,14 @@ describe('DateInput', () => {
93
92
 
94
93
  it('calendar button is focusable and clickable', () => {
95
94
  render(<DateInput label="Date" onChange={() => {}} />);
96
- const button = getButton('Open calendar');
95
+ const button = screen.getByRole('button', {name: 'Open calendar'});
97
96
  expect(button).toBeInTheDocument();
98
97
  expect(button).not.toBeDisabled();
99
98
  });
100
99
 
101
100
  it('calendar button is disabled when isDisabled is true', () => {
102
101
  render(<DateInput label="Date" isDisabled onChange={() => {}} />);
103
- const button = getButton('Open calendar');
102
+ const button = screen.getByRole('button', {name: 'Open calendar'});
104
103
  expect(button).toBeDisabled();
105
104
  });
106
105
 
@@ -283,7 +282,7 @@ describe('DateInput', () => {
283
282
  it('disables input and button when isLoading is true', () => {
284
283
  render(<DateInput label="Date" isLoading onChange={() => {}} />);
285
284
  expect(screen.getByRole('combobox')).toBeDisabled();
286
- expect(getButton('Open calendar')).toBeDisabled();
285
+ expect(screen.getByRole('button', {name: 'Open calendar'})).toBeDisabled();
287
286
  });
288
287
 
289
288
  it('shows spinner when isLoading is true', () => {
@@ -476,7 +475,7 @@ describe('DateInput', () => {
476
475
 
477
476
  it('does not open popover when clicking calendar button while disabled', () => {
478
477
  render(<DateInput label="Date" isDisabled onChange={() => {}} />);
479
- const button = getButton('Open calendar');
478
+ const button = screen.getByRole('button', {name: 'Open calendar'});
480
479
  fireEvent.click(button);
481
480
  expect(screen.getByRole('combobox')).toHaveAttribute(
482
481
  'aria-expanded',
@@ -514,17 +513,23 @@ describe('DateInput', () => {
514
513
  hasClear
515
514
  />,
516
515
  );
517
- expect(getButton('Clear Date')).toBeInTheDocument();
516
+ expect(
517
+ screen.getByRole('button', {name: 'Clear Date'}),
518
+ ).toBeInTheDocument();
518
519
  });
519
520
 
520
521
  it('does not show clear button when value is undefined', () => {
521
522
  render(<DateInput label="Date" onChange={() => {}} hasClear />);
522
- expect(queryButton('Clear Date')).not.toBeInTheDocument();
523
+ expect(
524
+ screen.queryByRole('button', {name: 'Clear Date'}),
525
+ ).not.toBeInTheDocument();
523
526
  });
524
527
 
525
528
  it('does not show clear button when hasClear is false', () => {
526
529
  render(<DateInput label="Date" value="2026-01-15" onChange={() => {}} />);
527
- expect(queryButton('Clear Date')).not.toBeInTheDocument();
530
+ expect(
531
+ screen.queryByRole('button', {name: 'Clear Date'}),
532
+ ).not.toBeInTheDocument();
528
533
  });
529
534
 
530
535
  it('does not show clear button when disabled', () => {
@@ -537,7 +542,9 @@ describe('DateInput', () => {
537
542
  isDisabled
538
543
  />,
539
544
  );
540
- expect(queryButton('Clear Date')).not.toBeInTheDocument();
545
+ expect(
546
+ screen.queryByRole('button', {name: 'Clear Date'}),
547
+ ).not.toBeInTheDocument();
541
548
  });
542
549
 
543
550
  it('calls onChange with undefined when clear is clicked', () => {
@@ -550,7 +557,7 @@ describe('DateInput', () => {
550
557
  hasClear
551
558
  />,
552
559
  );
553
- fireEvent.click(getButton('Clear Date'));
560
+ fireEvent.click(screen.getByRole('button', {name: 'Clear Date'}));
554
561
  expect(onChange).toHaveBeenCalledWith(undefined);
555
562
  });
556
563
  });
@@ -692,7 +699,9 @@ describe('DateInput', () => {
692
699
  expect(input).toHaveAttribute('aria-disabled', 'true');
693
700
  expect(input.getAttribute('aria-describedby')).toContain(tooltip.id);
694
701
  expect(tooltip).toHaveTextContent('Scheduling is locked');
695
- expect(getButton('Open calendar')).toBeDisabled();
702
+ expect(
703
+ screen.getByRole('button', {name: 'Open calendar'}),
704
+ ).toBeDisabled();
696
705
  });
697
706
  });
698
707