@octanejs/base-ui 0.1.49 → 0.1.51

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 (1179) hide show
  1. package/LICENSE +21 -0
  2. package/MIGRATION.md +47 -0
  3. package/README.md +62 -5
  4. package/UPSTREAM.md +164 -64
  5. package/package.json +458 -27
  6. package/src/accordion/header/AccordionHeader.tsrx +42 -0
  7. package/src/accordion/header/AccordionHeaderDataAttributes.ts +13 -0
  8. package/src/accordion/index.parts.ts +5 -0
  9. package/src/accordion/index.ts +16 -0
  10. package/src/accordion/item/AccordionItem.tsrx +195 -0
  11. package/src/accordion/item/AccordionItemContext.ts +26 -0
  12. package/src/accordion/item/AccordionItemDataAttributes.ts +13 -0
  13. package/src/accordion/item/stateAttributesMapping.ts +12 -0
  14. package/src/accordion/panel/AccordionPanel.tsrx +163 -0
  15. package/src/accordion/panel/AccordionPanelCssVars.ts +10 -0
  16. package/src/accordion/panel/AccordionPanelDataAttributes.ts +27 -0
  17. package/src/accordion/root/AccordionRoot.tsrx +240 -0
  18. package/src/accordion/root/AccordionRootContext.ts +31 -0
  19. package/src/accordion/root/AccordionRootDataAttributes.ts +8 -0
  20. package/src/accordion/trigger/AccordionTrigger.tsrx +81 -0
  21. package/src/accordion/trigger/AccordionTriggerDataAttributes.ts +8 -0
  22. package/src/alert-dialog/handle.ts +22 -0
  23. package/src/alert-dialog/index.parts.ts +10 -0
  24. package/src/alert-dialog/index.ts +39 -0
  25. package/src/alert-dialog/root/AlertDialogRoot.tsrx +58 -0
  26. package/src/alert-dialog/trigger/AlertDialogTrigger.tsrx +38 -0
  27. package/src/alert-dialog/trigger/AlertDialogTriggerDataAttributes.ts +10 -0
  28. package/src/autocomplete/clear/AutocompleteClearDataAttributes.ts +1 -0
  29. package/src/autocomplete/index.parts.ts +25 -0
  30. package/src/autocomplete/index.ts +78 -0
  31. package/src/autocomplete/input-group/AutocompleteInputGroup.tsrx +53 -0
  32. package/src/autocomplete/input-group/AutocompleteInputGroupDataAttributes.ts +49 -0
  33. package/src/autocomplete/item/AutocompleteItem.tsrx +56 -0
  34. package/src/autocomplete/item/AutocompleteItemDataAttributes.ts +10 -0
  35. package/src/autocomplete/root/AutocompleteRoot.tsrx +296 -0
  36. package/src/autocomplete/separator/AutocompleteSeparator.tsrx +37 -0
  37. package/src/autocomplete/trigger/AutocompleteTrigger.tsrx +57 -0
  38. package/src/autocomplete/trigger/AutocompleteTriggerDataAttributes.ts +55 -0
  39. package/src/autocomplete/value/AutocompleteValue.tsrx +38 -0
  40. package/src/avatar/fallback/AvatarFallback.tsrx +68 -0
  41. package/src/avatar/image/AvatarImage.tsrx +210 -0
  42. package/src/avatar/image/AvatarImageDataAttributes.ts +18 -0
  43. package/src/avatar/image/useImageLoadingStatus.ts +72 -0
  44. package/src/avatar/index.parts.ts +3 -0
  45. package/src/avatar/index.ts +5 -0
  46. package/src/avatar/root/AvatarRoot.tsrx +60 -0
  47. package/src/avatar/root/AvatarRootContext.ts +21 -0
  48. package/src/avatar/root/stateAttributesMapping.ts +3 -0
  49. package/src/button/Button.tsrx +63 -0
  50. package/src/button/ButtonDataAttributes.tsrx +4 -0
  51. package/src/button/index.ts +3 -0
  52. package/src/checkbox/index.parts.ts +2 -0
  53. package/src/checkbox/index.ts +4 -0
  54. package/src/checkbox/indicator/CheckboxIndicator.tsrx +96 -0
  55. package/src/checkbox/indicator/CheckboxIndicatorDataAttributes.ts +58 -0
  56. package/src/checkbox/root/CheckboxRoot.tsrx +516 -0
  57. package/src/checkbox/root/CheckboxRootContext.ts +19 -0
  58. package/src/checkbox/root/CheckboxRootDataAttributes.ts +48 -0
  59. package/src/checkbox/utils/getCheckboxStateAttributesMapping.ts +24 -0
  60. package/src/checkbox-group/CheckboxGroup.tsrx +229 -0
  61. package/src/checkbox-group/CheckboxGroupContext.ts +33 -0
  62. package/src/checkbox-group/CheckboxGroupDataAttributes.ts +4 -0
  63. package/src/checkbox-group/index.ts +2 -0
  64. package/src/checkbox-group/useCheckboxGroupParent.ts +176 -0
  65. package/src/collapsible/index.parts.ts +3 -0
  66. package/src/collapsible/index.ts +12 -0
  67. package/src/collapsible/panel/CollapsiblePanel.tsrx +168 -0
  68. package/src/collapsible/panel/CollapsiblePanelCssVars.ts +10 -0
  69. package/src/collapsible/panel/CollapsiblePanelDataAttributes.ts +18 -0
  70. package/src/collapsible/panel/useCollapsiblePanel.ts +577 -0
  71. package/src/collapsible/root/CollapsibleRoot.tsrx +116 -0
  72. package/src/collapsible/root/CollapsibleRootContext.ts +25 -0
  73. package/src/collapsible/root/CollapsibleRootDataAttributes.ts +18 -0
  74. package/src/collapsible/root/stateAttributesMapping.ts +9 -0
  75. package/src/collapsible/root/useCollapsibleRoot.ts +121 -0
  76. package/src/collapsible/trigger/CollapsibleTrigger.tsrx +78 -0
  77. package/src/collapsible/trigger/CollapsibleTriggerDataAttributes.ts +4 -0
  78. package/src/combobox/arrow/ComboboxArrow.tsrx +72 -0
  79. package/src/combobox/arrow/ComboboxArrowDataAttributes.ts +24 -0
  80. package/src/combobox/backdrop/ComboboxBackdrop.tsrx +75 -0
  81. package/src/combobox/backdrop/ComboboxBackdropDataAttributes.ts +18 -0
  82. package/src/combobox/chip/ComboboxChip.tsrx +150 -0
  83. package/src/combobox/chip/ComboboxChipContext.ts +19 -0
  84. package/src/combobox/chip-remove/ComboboxChipRemove.tsrx +138 -0
  85. package/src/combobox/chips/ComboboxChips.tsrx +78 -0
  86. package/src/combobox/chips/ComboboxChipsContext.ts +17 -0
  87. package/src/combobox/clear/ComboboxClear.tsrx +178 -0
  88. package/src/combobox/clear/ComboboxClearDataAttributes.ts +25 -0
  89. package/src/combobox/collection/ComboboxCollection.tsrx +34 -0
  90. package/src/combobox/collection/GroupCollectionContext.tsrx +31 -0
  91. package/src/combobox/empty/ComboboxEmpty.tsrx +58 -0
  92. package/src/combobox/group/ComboboxGroup.tsrx +74 -0
  93. package/src/combobox/group/ComboboxGroupContext.ts +27 -0
  94. package/src/combobox/group-label/ComboboxGroupLabel.tsrx +52 -0
  95. package/src/combobox/icon/ComboboxIcon.tsrx +41 -0
  96. package/src/combobox/index.parts.ts +31 -0
  97. package/src/combobox/index.ts +36 -0
  98. package/src/combobox/input/ComboboxInput.tsrx +507 -0
  99. package/src/combobox/input/ComboboxInputDataAttributes.ts +55 -0
  100. package/src/combobox/input-group/ComboboxInputGroup.tsrx +110 -0
  101. package/src/combobox/input-group/ComboboxInputGroupDataAttributes.ts +53 -0
  102. package/src/combobox/item/ComboboxItem.tsrx +328 -0
  103. package/src/combobox/item/ComboboxItemContext.ts +20 -0
  104. package/src/combobox/item/ComboboxItemDataAttributes.ts +12 -0
  105. package/src/combobox/item-indicator/ComboboxItemIndicator.tsrx +109 -0
  106. package/src/combobox/item-indicator/ComboboxItemIndicatorDataAttributes.ts +10 -0
  107. package/src/combobox/items/createItems.ts +168 -0
  108. package/src/combobox/items/itemCollection.ts +67 -0
  109. package/src/combobox/label/ComboboxLabel.tsrx +88 -0
  110. package/src/combobox/list/ComboboxList.tsrx +152 -0
  111. package/src/combobox/popup/ComboboxPopup.tsrx +214 -0
  112. package/src/combobox/popup/ComboboxPopupDataAttributes.ts +36 -0
  113. package/src/combobox/portal/ComboboxPortal.tsrx +56 -0
  114. package/src/combobox/portal/ComboboxPortalContext.tsrx +12 -0
  115. package/src/combobox/positioner/ComboboxPositioner.tsrx +172 -0
  116. package/src/combobox/positioner/ComboboxPositionerContext.tsrx +30 -0
  117. package/src/combobox/positioner/ComboboxPositionerCssVars.ts +25 -0
  118. package/src/combobox/positioner/ComboboxPositionerDataAttributes.ts +28 -0
  119. package/src/combobox/root/AriaCombobox.tsrx +1970 -0
  120. package/src/combobox/root/ComboboxRoot.tsrx +183 -0
  121. package/src/combobox/root/ComboboxRootContext.tsrx +66 -0
  122. package/src/combobox/root/utils/constants.ts +5 -0
  123. package/src/combobox/root/utils/index.ts +68 -0
  124. package/src/combobox/root/utils/useFilter.ts +50 -0
  125. package/src/combobox/root/utils/useFilteredItems.ts +11 -0
  126. package/src/combobox/row/ComboboxRow.tsrx +37 -0
  127. package/src/combobox/row/ComboboxRowContext.ts +9 -0
  128. package/src/combobox/separator/ComboboxSeparator.tsrx +37 -0
  129. package/src/combobox/status/ComboboxStatus.tsrx +49 -0
  130. package/src/combobox/store.ts +206 -0
  131. package/src/combobox/trigger/ComboboxTrigger.tsrx +302 -0
  132. package/src/combobox/trigger/ComboboxTriggerDataAttributes.ts +59 -0
  133. package/src/combobox/utils/ComboboxInternalDismissButton.tsrx +47 -0
  134. package/src/combobox/utils/handleInputPress.ts +38 -0
  135. package/src/combobox/utils/parts.ts +59 -0
  136. package/src/combobox/utils/stateAttributesMapping.ts +19 -0
  137. package/src/combobox/utils/useInitialLiveRegionTextMutation.ts +66 -0
  138. package/src/combobox/value/ComboboxValue.tsrx +65 -0
  139. package/src/context-menu/index.parts.ts +21 -0
  140. package/src/context-menu/index.ts +66 -0
  141. package/src/context-menu/positioner/ContextMenuPositioner.tsrx +119 -0
  142. package/src/context-menu/positioner/ContextMenuPositionerCssVars.ts +1 -0
  143. package/src/context-menu/positioner/ContextMenuPositionerDataAttributes.ts +1 -0
  144. package/src/context-menu/root/ContextMenuRoot.tsrx +98 -0
  145. package/src/context-menu/root/ContextMenuRootContext.ts +34 -0
  146. package/src/context-menu/trigger/ContextMenuTrigger.tsrx +237 -0
  147. package/src/context-menu/trigger/ContextMenuTriggerDataAttributes.ts +10 -0
  148. package/src/csp-provider/CSPProvider.tsrx +43 -0
  149. package/src/csp-provider/index.parts.ts +1 -0
  150. package/src/csp-provider/index.ts +3 -0
  151. package/src/dialog/backdrop/DialogBackdrop.tsrx +76 -0
  152. package/src/dialog/backdrop/DialogBackdropDataAttributes.ts +18 -0
  153. package/src/dialog/close/DialogClose.tsrx +67 -0
  154. package/src/dialog/close/DialogCloseDataAttributes.ts +4 -0
  155. package/src/dialog/description/DialogDescription.tsrx +41 -0
  156. package/src/dialog/index.parts.ts +10 -0
  157. package/src/dialog/index.ts +14 -0
  158. package/src/dialog/popup/DialogPopup.tsrx +170 -0
  159. package/src/dialog/popup/DialogPopupCssVars.ts +5 -0
  160. package/src/dialog/popup/DialogPopupDataAttributes.ts +26 -0
  161. package/src/dialog/portal/DialogPortal.tsrx +63 -0
  162. package/src/dialog/portal/DialogPortalContext.ts +13 -0
  163. package/src/dialog/root/DialogRoot.tsrx +117 -0
  164. package/src/dialog/root/DialogRootContext.ts +20 -0
  165. package/src/dialog/root/useDialogRoot.ts +128 -0
  166. package/src/dialog/root/useRenderDialogRoot.tsrx +108 -0
  167. package/src/dialog/store/DialogHandle.ts +83 -0
  168. package/src/dialog/store/DialogStore.ts +149 -0
  169. package/src/dialog/title/DialogTitle.tsrx +41 -0
  170. package/src/dialog/trigger/DialogTrigger.tsrx +142 -0
  171. package/src/dialog/trigger/DialogTriggerDataAttributes.ts +10 -0
  172. package/src/dialog/utils/stateAttributesMapping.ts +22 -0
  173. package/src/dialog/viewport/DialogViewport.tsrx +89 -0
  174. package/src/dialog/viewport/DialogViewportDataAttributes.ts +26 -0
  175. package/src/direction-provider/DirectionProvider.tsrx +37 -0
  176. package/src/direction-provider/index.parts.ts +5 -0
  177. package/src/direction-provider/index.ts +2 -0
  178. package/src/drawer/backdrop/DrawerBackdrop.tsrx +81 -0
  179. package/src/drawer/backdrop/DrawerBackdropCssVars.ts +5 -0
  180. package/src/drawer/backdrop/DrawerBackdropDataAttributes.ts +18 -0
  181. package/src/drawer/close/DrawerClose.tsrx +31 -0
  182. package/src/drawer/content/DrawerContent.tsrx +37 -0
  183. package/src/drawer/content/drawerContentAttribute.ts +1 -0
  184. package/src/drawer/description/DrawerDescription.tsrx +25 -0
  185. package/src/drawer/handle.ts +22 -0
  186. package/src/drawer/indent/DrawerIndent.tsrx +104 -0
  187. package/src/drawer/indent-background/DrawerIndentBackground.tsrx +61 -0
  188. package/src/drawer/index.parts.ts +16 -0
  189. package/src/drawer/index.ts +17 -0
  190. package/src/drawer/popup/DrawerPopup.tsrx +485 -0
  191. package/src/drawer/popup/DrawerPopupCssVars.ts +35 -0
  192. package/src/drawer/popup/DrawerPopupDataAttributes.ts +43 -0
  193. package/src/drawer/portal/DrawerPortal.tsrx +39 -0
  194. package/src/drawer/provider/DrawerProvider.tsrx +117 -0
  195. package/src/drawer/provider/DrawerProviderContext.ts +29 -0
  196. package/src/drawer/root/DrawerRoot.tsrx +478 -0
  197. package/src/drawer/root/DrawerRootContext.ts +115 -0
  198. package/src/drawer/root/useDrawerSnapPoints.ts +198 -0
  199. package/src/drawer/swipe-area/DrawerSwipeArea.tsrx +528 -0
  200. package/src/drawer/swipe-area/DrawerSwipeAreaDataAttributes.ts +23 -0
  201. package/src/drawer/title/DrawerTitle.tsrx +25 -0
  202. package/src/drawer/trigger/DrawerTrigger.tsrx +53 -0
  203. package/src/drawer/viewport/DrawerViewport.tsrx +1237 -0
  204. package/src/drawer/viewport/DrawerViewportContext.tsrx +15 -0
  205. package/src/drawer/viewport/DrawerViewportCssVars.ts +6 -0
  206. package/src/drawer/viewport/DrawerViewportDataAttributes.ts +22 -0
  207. package/src/drawer/virtual-keyboard-provider/DrawerVirtualKeyboardContext.tsrx +19 -0
  208. package/src/drawer/virtual-keyboard-provider/DrawerVirtualKeyboardProvider.tsrx +858 -0
  209. package/src/field/control/FieldControl.tsrx +241 -0
  210. package/src/field/control/FieldControlDataAttributes.ts +28 -0
  211. package/src/field/description/FieldDescription.tsrx +67 -0
  212. package/src/field/description/FieldDescriptionDataAttributes.ts +28 -0
  213. package/src/field/error/FieldError.tsrx +160 -0
  214. package/src/field/error/FieldErrorDataAttributes.ts +38 -0
  215. package/src/field/index.parts.ts +9 -0
  216. package/src/field/index.ts +9 -0
  217. package/src/field/item/FieldItem.tsrx +66 -0
  218. package/src/field/item/FieldItemContext.ts +15 -0
  219. package/src/field/item/FieldItemDataAttributes.ts +28 -0
  220. package/src/field/label/FieldLabel.tsrx +107 -0
  221. package/src/field/label/FieldLabelDataAttributes.ts +28 -0
  222. package/src/field/root/FieldRoot.tsrx +336 -0
  223. package/src/field/root/FieldRootDataAttributes.ts +28 -0
  224. package/src/field/root/useFieldValidation.ts +418 -0
  225. package/src/field/utils/getCombinedFieldValidityData.ts +18 -0
  226. package/src/field/validity/FieldValidity.tsrx +69 -0
  227. package/src/fieldset/index.parts.ts +2 -0
  228. package/src/fieldset/index.ts +4 -0
  229. package/src/fieldset/legend/FieldsetLegend.tsrx +51 -0
  230. package/src/fieldset/root/FieldsetRoot.tsrx +74 -0
  231. package/src/fieldset/root/FieldsetRootContext.ts +23 -0
  232. package/src/floating-ui-react/components/FloatingDelayGroup.tsrx +281 -0
  233. package/src/floating-ui-react/components/FloatingFocusManager.tsrx +1004 -0
  234. package/src/floating-ui-react/components/FloatingPortal.tsrx +319 -0
  235. package/src/floating-ui-react/components/FloatingRootStore.ts +136 -0
  236. package/src/floating-ui-react/components/FloatingTree.tsrx +95 -0
  237. package/src/floating-ui-react/components/FloatingTreeStore.ts +24 -0
  238. package/src/floating-ui-react/hooks/gridNavigation.ts +50 -0
  239. package/src/floating-ui-react/hooks/useClick.ts +229 -0
  240. package/src/floating-ui-react/hooks/useClientPoint.ts +261 -0
  241. package/src/floating-ui-react/hooks/useDismiss.ts +808 -0
  242. package/src/floating-ui-react/hooks/useFloating.ts +205 -0
  243. package/src/floating-ui-react/hooks/useFloatingRootContext.ts +84 -0
  244. package/src/floating-ui-react/hooks/useFocus.ts +253 -0
  245. package/src/floating-ui-react/hooks/useHover.ts +468 -0
  246. package/src/floating-ui-react/hooks/useHoverFloatingInteraction.ts +274 -0
  247. package/src/floating-ui-react/hooks/useHoverInteractionSharedState.ts +132 -0
  248. package/src/floating-ui-react/hooks/useHoverReferenceInteraction.ts +523 -0
  249. package/src/floating-ui-react/hooks/useHoverShared.ts +72 -0
  250. package/src/floating-ui-react/hooks/useListNavigation.ts +941 -0
  251. package/src/floating-ui-react/hooks/useSyncedFloatingRootContext.ts +115 -0
  252. package/src/floating-ui-react/hooks/useTypeahead.ts +248 -0
  253. package/src/floating-ui-react/index.ts +48 -0
  254. package/src/floating-ui-react/middleware/arrow.ts +128 -0
  255. package/src/floating-ui-react/middleware/positioning.ts +28 -0
  256. package/src/floating-ui-react/safePolygon.ts +451 -0
  257. package/src/floating-ui-react/types.ts +206 -0
  258. package/src/floating-ui-react/utils/composite.ts +528 -0
  259. package/src/floating-ui-react/utils/constants.ts +10 -0
  260. package/src/floating-ui-react/utils/createAttribute.ts +3 -0
  261. package/src/floating-ui-react/utils/createEventEmitter.ts +19 -0
  262. package/src/floating-ui-react/utils/element.ts +96 -0
  263. package/src/floating-ui-react/utils/enqueueFocus.ts +37 -0
  264. package/src/floating-ui-react/utils/event.ts +60 -0
  265. package/src/floating-ui-react/utils/getEmptyRootContext.ts +17 -0
  266. package/src/floating-ui-react/utils/markOthers.ts +219 -0
  267. package/src/floating-ui-react/utils/nodes.ts +54 -0
  268. package/src/floating-ui-react/utils/tabbable.ts +283 -0
  269. package/src/floating-ui-react/utils.ts +5 -0
  270. package/src/form/Form.tsrx +248 -0
  271. package/src/form/index.ts +3 -0
  272. package/src/global.d.ts +9 -0
  273. package/src/index.ts +45 -39
  274. package/src/input/Input.tsrx +44 -0
  275. package/src/input/InputDataAttributes.ts +28 -0
  276. package/src/input/index.ts +3 -0
  277. package/src/internals/PrehydrationScript.tsrx +59 -0
  278. package/src/internals/RequestQueue.ts +126 -0
  279. package/src/internals/TimeoutManager.ts +29 -0
  280. package/src/internals/TransitionStatusDataAttributes.ts +9 -0
  281. package/src/internals/composite/composite.ts +174 -0
  282. package/src/internals/composite/constants.ts +1 -0
  283. package/src/internals/composite/index.ts +19 -0
  284. package/src/internals/composite/item/CompositeItem.tsrx +57 -0
  285. package/src/internals/composite/item/useCompositeItem.ts +50 -0
  286. package/src/internals/composite/list/CompositeList.tsrx +325 -0
  287. package/src/internals/composite/list/CompositeListContext.ts +28 -0
  288. package/src/internals/composite/list/useCompositeListItem.ts +100 -0
  289. package/src/internals/composite/root/CompositeRoot.tsrx +138 -0
  290. package/src/internals/composite/root/CompositeRootContext.ts +33 -0
  291. package/src/internals/composite/root/gridNavigation.ts +127 -0
  292. package/src/internals/composite/root/useCompositeRoot.ts +378 -0
  293. package/src/internals/constants.ts +41 -0
  294. package/src/internals/createBaseUIEventDetails.ts +166 -0
  295. package/src/internals/csp-context/CSPContext.tsrx +17 -0
  296. package/src/internals/csp-context/index.ts +2 -0
  297. package/src/internals/direction-context/DirectionContext.tsrx +16 -0
  298. package/src/internals/direction-context/index.ts +5 -0
  299. package/src/internals/field-constants/constants.ts +44 -0
  300. package/src/internals/field-constants/index.ts +6 -0
  301. package/src/internals/field-register-control/index.ts +6 -0
  302. package/src/internals/field-register-control/useFieldControlRegistration.ts +185 -0
  303. package/src/internals/field-register-control/useRegisterFieldControl.ts +47 -0
  304. package/src/internals/field-root-context/FieldRootContext.ts +79 -0
  305. package/src/internals/field-root-context/index.ts +2 -0
  306. package/src/internals/filter.ts +82 -0
  307. package/src/internals/form-context/FormContext.ts +51 -0
  308. package/src/internals/form-context/index.ts +2 -0
  309. package/src/internals/getDisabledMountTransitionStyles.ts +10 -0
  310. package/src/internals/getStateAttributesProps.ts +32 -0
  311. package/src/internals/itemEquality.ts +134 -0
  312. package/src/internals/labelable-provider/LabelableContext.ts +49 -0
  313. package/src/internals/labelable-provider/LabelableProvider.tsrx +120 -0
  314. package/src/internals/labelable-provider/index.ts +6 -0
  315. package/src/internals/labelable-provider/useAriaLabelledBy.ts +73 -0
  316. package/src/internals/labelable-provider/useLabel.ts +113 -0
  317. package/src/internals/labelable-provider/useLabelableId.ts +101 -0
  318. package/src/internals/noop.ts +1 -0
  319. package/src/internals/prehydrationScript.stub.ts +6 -0
  320. package/src/internals/reason-parts.ts +42 -0
  321. package/src/internals/reasons.ts +5 -0
  322. package/src/internals/resolveValueLabel.tsrx +158 -0
  323. package/src/internals/serializeValue.ts +13 -0
  324. package/src/internals/stateAttributesMapping.ts +20 -0
  325. package/src/internals/temporal/index.ts +2 -0
  326. package/src/internals/temporal/temporal-adapter.ts +382 -0
  327. package/src/internals/temporal/temporal.ts +49 -0
  328. package/src/internals/temporal-adapter-date-fns/TemporalAdapterDateFns.ts +474 -0
  329. package/src/internals/temporal-adapter-date-fns/index.ts +1 -0
  330. package/src/internals/temporal-adapter-luxon/TemporalAdapterLuxon.ts +380 -0
  331. package/src/internals/temporal-adapter-luxon/index.ts +1 -0
  332. package/src/internals/types.ts +97 -0
  333. package/src/internals/use-button/index.ts +1 -0
  334. package/src/internals/use-button/useButton.ts +309 -0
  335. package/src/internals/useAnchorPositioning.ts +828 -0
  336. package/src/internals/useAnimationsFinished.ts +161 -0
  337. package/src/internals/useBaseUiId.ts +12 -0
  338. package/src/internals/useOpenChangeComplete.tsrx +56 -0
  339. package/src/internals/usePressAndHold.ts +287 -0
  340. package/src/internals/useRenderElement.tsrx +284 -0
  341. package/src/internals/useTransitionStatus.ts +98 -0
  342. package/src/internals/useValueChanged.ts +18 -0
  343. package/src/menu/arrow/MenuArrow.tsrx +71 -0
  344. package/src/menu/arrow/MenuArrowDataAttributes.ts +24 -0
  345. package/src/menu/backdrop/MenuBackdrop.tsrx +75 -0
  346. package/src/menu/backdrop/MenuBackdropDataAttributes.ts +18 -0
  347. package/src/menu/checkbox-item/MenuCheckboxItem.tsrx +184 -0
  348. package/src/menu/checkbox-item/MenuCheckboxItemContext.ts +24 -0
  349. package/src/menu/checkbox-item/MenuCheckboxItemDataAttributes.ts +16 -0
  350. package/src/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.tsrx +96 -0
  351. package/src/menu/checkbox-item-indicator/MenuCheckboxItemIndicatorDataAttributes.ts +22 -0
  352. package/src/menu/group/MenuGroup.tsrx +47 -0
  353. package/src/menu/group/MenuGroupContext.ts +18 -0
  354. package/src/menu/group-label/MenuGroupLabel.tsrx +51 -0
  355. package/src/menu/index.parts.ts +21 -0
  356. package/src/menu/index.ts +24 -0
  357. package/src/menu/item/MenuItem.tsrx +107 -0
  358. package/src/menu/item/MenuItemDataAttributes.ts +8 -0
  359. package/src/menu/item/useMenuItem.ts +142 -0
  360. package/src/menu/item/useMenuItemCommonProps.ts +139 -0
  361. package/src/menu/link-item/MenuLinkItem.tsrx +106 -0
  362. package/src/menu/link-item/MenuLinkItemDataAttributes.ts +4 -0
  363. package/src/menu/popup/MenuPopup.tsrx +199 -0
  364. package/src/menu/popup/MenuPopupDataAttributes.ts +33 -0
  365. package/src/menu/portal/MenuPortal.tsrx +60 -0
  366. package/src/menu/portal/MenuPortalContext.ts +13 -0
  367. package/src/menu/positioner/MenuPositioner.tsrx +378 -0
  368. package/src/menu/positioner/MenuPositionerContext.ts +25 -0
  369. package/src/menu/positioner/MenuPositionerCssVars.ts +37 -0
  370. package/src/menu/positioner/MenuPositionerDataAttributes.ts +24 -0
  371. package/src/menu/radio-group/MenuRadioGroup.tsrx +129 -0
  372. package/src/menu/radio-group/MenuRadioGroupContext.ts +25 -0
  373. package/src/menu/radio-item/MenuRadioItem.tsrx +156 -0
  374. package/src/menu/radio-item/MenuRadioItemContext.ts +24 -0
  375. package/src/menu/radio-item/MenuRadioItemDataAttributes.ts +16 -0
  376. package/src/menu/radio-item-indicator/MenuRadioItemIndicator.tsrx +96 -0
  377. package/src/menu/radio-item-indicator/MenuRadioItemIndicatorDataAttributes.ts +22 -0
  378. package/src/menu/root/MenuRoot.tsrx +818 -0
  379. package/src/menu/root/MenuRootContext.ts +25 -0
  380. package/src/menu/store/MenuHandle.ts +54 -0
  381. package/src/menu/store/MenuStore.ts +234 -0
  382. package/src/menu/submenu-root/MenuSubmenuRoot.tsrx +64 -0
  383. package/src/menu/submenu-root/MenuSubmenuRootContext.ts +16 -0
  384. package/src/menu/submenu-trigger/MenuSubmenuTrigger.tsrx +278 -0
  385. package/src/menu/submenu-trigger/MenuSubmenuTriggerDataAttributes.ts +14 -0
  386. package/src/menu/trigger/MenuTrigger.tsrx +395 -0
  387. package/src/menu/trigger/MenuTriggerDataAttributes.ts +14 -0
  388. package/src/menu/utils/findRootOwnerId.ts +13 -0
  389. package/src/menu/utils/stateAttributesMapping.ts +17 -0
  390. package/src/menu/utils/types.ts +8 -0
  391. package/src/menu/viewport/MenuViewport.tsrx +75 -0
  392. package/src/menu/viewport/MenuViewportCssVars.ts +12 -0
  393. package/src/menu/viewport/MenuViewportDataAttributes.ts +24 -0
  394. package/src/menubar/Menubar.tsrx +173 -0
  395. package/src/menubar/MenubarContext.ts +31 -0
  396. package/src/menubar/MenubarDataAttributes.ts +13 -0
  397. package/src/menubar/index.ts +3 -0
  398. package/src/merge-props/index.ts +1 -0
  399. package/src/merge-props/mergeProps.ts +302 -0
  400. package/src/meter/index.parts.ts +5 -0
  401. package/src/meter/index.ts +7 -0
  402. package/src/meter/indicator/MeterIndicator.tsrx +46 -0
  403. package/src/meter/label/MeterLabel.tsrx +46 -0
  404. package/src/meter/root/MeterRoot.tsrx +129 -0
  405. package/src/meter/root/MeterRootContext.ts +26 -0
  406. package/src/meter/track/MeterTrack.tsrx +34 -0
  407. package/src/meter/value/MeterValue.tsrx +51 -0
  408. package/src/navigation-menu/arrow/NavigationMenuArrow.tsrx +77 -0
  409. package/src/navigation-menu/arrow/NavigationMenuArrowDataAttributes.ts +24 -0
  410. package/src/navigation-menu/backdrop/NavigationMenuBackdrop.tsrx +69 -0
  411. package/src/navigation-menu/backdrop/NavigationMenuBackdropDataAttributes.ts +18 -0
  412. package/src/navigation-menu/content/NavigationMenuContent.tsrx +208 -0
  413. package/src/navigation-menu/content/NavigationMenuContentDataAttributes.ts +23 -0
  414. package/src/navigation-menu/icon/NavigationMenuIcon.tsrx +56 -0
  415. package/src/navigation-menu/icon/NavigationMenuIconDataAttributes.ts +6 -0
  416. package/src/navigation-menu/index.parts.ts +13 -0
  417. package/src/navigation-menu/index.ts +15 -0
  418. package/src/navigation-menu/item/NavigationMenuItem.tsrx +59 -0
  419. package/src/navigation-menu/item/NavigationMenuItemContext.ts +21 -0
  420. package/src/navigation-menu/link/NavigationMenuLink.tsrx +108 -0
  421. package/src/navigation-menu/link/NavigationMenuLinkDataAttributes.ts +4 -0
  422. package/src/navigation-menu/list/NavigationMenuDismissContext.ts +12 -0
  423. package/src/navigation-menu/list/NavigationMenuList.tsrx +144 -0
  424. package/src/navigation-menu/popup/NavigationMenuPopup.tsrx +106 -0
  425. package/src/navigation-menu/popup/NavigationMenuPopupCssVars.ts +10 -0
  426. package/src/navigation-menu/popup/NavigationMenuPopupDataAttributes.ts +32 -0
  427. package/src/navigation-menu/portal/NavigationMenuPortal.tsrx +58 -0
  428. package/src/navigation-menu/portal/NavigationMenuPortalContext.ts +13 -0
  429. package/src/navigation-menu/positioner/NavigationMenuPositioner.tsrx +219 -0
  430. package/src/navigation-menu/positioner/NavigationMenuPositionerContext.ts +26 -0
  431. package/src/navigation-menu/positioner/NavigationMenuPositionerCssVars.ts +35 -0
  432. package/src/navigation-menu/positioner/NavigationMenuPositionerDataAttributes.ts +28 -0
  433. package/src/navigation-menu/root/NavigationMenuRoot.tsrx +439 -0
  434. package/src/navigation-menu/root/NavigationMenuRootContext.ts +84 -0
  435. package/src/navigation-menu/trigger/NavigationMenuTrigger.tsrx +846 -0
  436. package/src/navigation-menu/trigger/NavigationMenuTriggerDataAttributes.ts +14 -0
  437. package/src/navigation-menu/utils/constants.ts +3 -0
  438. package/src/navigation-menu/utils/isOutsideMenuEvent.ts +36 -0
  439. package/src/navigation-menu/utils/setSharedFixedSize.ts +20 -0
  440. package/src/navigation-menu/utils/useNavigationMenuAnchorPositioning.ts +18 -0
  441. package/src/navigation-menu/viewport/NavigationMenuViewport.tsrx +146 -0
  442. package/src/number-field/decrement/NumberFieldDecrement.tsrx +30 -0
  443. package/src/number-field/decrement/NumberFieldDecrementDataAttributes.ts +40 -0
  444. package/src/number-field/group/NumberFieldGroup.tsrx +42 -0
  445. package/src/number-field/group/NumberFieldGroupDataAttributes.ts +40 -0
  446. package/src/number-field/increment/NumberFieldIncrement.tsrx +30 -0
  447. package/src/number-field/increment/NumberFieldIncrementDataAttributes.ts +40 -0
  448. package/src/number-field/index.parts.ts +7 -0
  449. package/src/number-field/index.ts +9 -0
  450. package/src/number-field/input/NumberFieldInput.tsrx +488 -0
  451. package/src/number-field/input/NumberFieldInputDataAttributes.ts +40 -0
  452. package/src/number-field/root/NumberFieldRoot.tsrx +735 -0
  453. package/src/number-field/root/NumberFieldRootContext.ts +52 -0
  454. package/src/number-field/root/NumberFieldRootDataAttributes.ts +40 -0
  455. package/src/number-field/root/useNumberFieldStepperButton.ts +191 -0
  456. package/src/number-field/scrub-area/NumberFieldScrubArea.tsrx +395 -0
  457. package/src/number-field/scrub-area/NumberFieldScrubAreaContext.ts +24 -0
  458. package/src/number-field/scrub-area/NumberFieldScrubAreaDataAttributes.ts +40 -0
  459. package/src/number-field/scrub-area-cursor/NumberFieldScrubAreaCursor.tsrx +73 -0
  460. package/src/number-field/scrub-area-cursor/NumberFieldScrubAreaCursorDataAttributes.ts +40 -0
  461. package/src/number-field/utils/constants.ts +2 -0
  462. package/src/number-field/utils/getViewportRect.ts +34 -0
  463. package/src/number-field/utils/parse.ts +221 -0
  464. package/src/number-field/utils/stateAttributesMapping.ts +9 -0
  465. package/src/number-field/utils/types.ts +27 -0
  466. package/src/number-field/utils/validate.ts +136 -0
  467. package/src/otp-field/index.parts.ts +3 -0
  468. package/src/otp-field/index.ts +4 -0
  469. package/src/otp-field/input/OTPFieldInput.tsrx +356 -0
  470. package/src/otp-field/input/OTPFieldInputDataAttributes.ts +40 -0
  471. package/src/otp-field/root/OTPFieldRoot.tsrx +679 -0
  472. package/src/otp-field/root/OTPFieldRootContext.ts +58 -0
  473. package/src/otp-field/root/OTPFieldRootDataAttributes.ts +40 -0
  474. package/src/otp-field/utils/otp.ts +118 -0
  475. package/src/otp-field/utils/stateAttributesMapping.ts +16 -0
  476. package/src/popover/arrow/PopoverArrow.tsrx +69 -0
  477. package/src/popover/arrow/PopoverArrowDataAttributes.ts +24 -0
  478. package/src/popover/backdrop/PopoverBackdrop.tsrx +71 -0
  479. package/src/popover/backdrop/PopoverBackdropDataAttributes.ts +18 -0
  480. package/src/popover/close/PopoverClose.tsrx +65 -0
  481. package/src/popover/description/PopoverDescription.tsrx +46 -0
  482. package/src/popover/index.parts.ts +15 -0
  483. package/src/popover/index.ts +16 -0
  484. package/src/popover/popup/PopoverPopup.tsrx +188 -0
  485. package/src/popover/popup/PopoverPopupCssVars.ts +8 -0
  486. package/src/popover/popup/PopoverPopupDataAttributes.ts +33 -0
  487. package/src/popover/portal/PopoverPortal.tsrx +54 -0
  488. package/src/popover/portal/PopoverPortalContext.ts +13 -0
  489. package/src/popover/positioner/PopoverPositioner.tsrx +196 -0
  490. package/src/popover/positioner/PopoverPositionerContext.ts +28 -0
  491. package/src/popover/positioner/PopoverPositionerCssVars.ts +37 -0
  492. package/src/popover/positioner/PopoverPositionerDataAttributes.ts +24 -0
  493. package/src/popover/root/PopoverRoot.tsrx +262 -0
  494. package/src/popover/root/PopoverRootContext.ts +20 -0
  495. package/src/popover/store/PopoverHandle.ts +54 -0
  496. package/src/popover/store/PopoverStore.ts +229 -0
  497. package/src/popover/title/PopoverTitle.tsrx +46 -0
  498. package/src/popover/trigger/PopoverTrigger.tsrx +233 -0
  499. package/src/popover/trigger/PopoverTriggerDataAttributes.ts +14 -0
  500. package/src/popover/utils/constants.ts +1 -0
  501. package/src/popover/viewport/PopoverViewport.tsrx +75 -0
  502. package/src/popover/viewport/PopoverViewportCssVars.ts +12 -0
  503. package/src/popover/viewport/PopoverViewportDataAttributes.ts +24 -0
  504. package/src/preview-card/arrow/PreviewCardArrow.tsrx +70 -0
  505. package/src/preview-card/arrow/PreviewCardArrowDataAttributes.ts +24 -0
  506. package/src/preview-card/backdrop/PreviewCardBackdrop.tsrx +73 -0
  507. package/src/preview-card/backdrop/PreviewCardBackdropDataAttributes.ts +18 -0
  508. package/src/preview-card/index.parts.ts +12 -0
  509. package/src/preview-card/index.ts +16 -0
  510. package/src/preview-card/popup/PreviewCardPopup.tsrx +104 -0
  511. package/src/preview-card/popup/PreviewCardPopupDataAttributes.ts +28 -0
  512. package/src/preview-card/portal/PreviewCardPortal.tsrx +59 -0
  513. package/src/preview-card/portal/PreviewCardPortalContext.ts +13 -0
  514. package/src/preview-card/positioner/PreviewCardPositioner.tsrx +145 -0
  515. package/src/preview-card/positioner/PreviewCardPositionerContext.ts +24 -0
  516. package/src/preview-card/positioner/PreviewCardPositionerCssVars.ts +37 -0
  517. package/src/preview-card/positioner/PreviewCardPositionerDataAttributes.ts +24 -0
  518. package/src/preview-card/root/PreviewCardContext.ts +23 -0
  519. package/src/preview-card/root/PreviewCardRoot.tsrx +210 -0
  520. package/src/preview-card/store/PreviewCardHandle.ts +58 -0
  521. package/src/preview-card/store/PreviewCardStore.ts +140 -0
  522. package/src/preview-card/trigger/PreviewCardTrigger.tsrx +148 -0
  523. package/src/preview-card/trigger/PreviewCardTriggerDataAttributes.ts +6 -0
  524. package/src/preview-card/utils/constants.ts +2 -0
  525. package/src/preview-card/viewport/PreviewCardViewport.tsrx +78 -0
  526. package/src/preview-card/viewport/PreviewCardViewportCssVars.ts +12 -0
  527. package/src/preview-card/viewport/PreviewCardViewportDataAttributes.ts +24 -0
  528. package/src/progress/index.parts.ts +7 -0
  529. package/src/progress/index.ts +7 -0
  530. package/src/progress/indicator/ProgressIndicator.tsrx +59 -0
  531. package/src/progress/indicator/ProgressIndicatorDataAttributes.ts +12 -0
  532. package/src/progress/label/ProgressLabel.tsrx +51 -0
  533. package/src/progress/label/ProgressLabelDataAttributes.ts +12 -0
  534. package/src/progress/root/ProgressRoot.tsrx +154 -0
  535. package/src/progress/root/ProgressRootContext.tsrx +37 -0
  536. package/src/progress/root/ProgressRootDataAttributes.ts +12 -0
  537. package/src/progress/root/stateAttributesMapping.ts +18 -0
  538. package/src/progress/track/ProgressTrack.tsrx +42 -0
  539. package/src/progress/track/ProgressTrackDataAttributes.ts +12 -0
  540. package/src/progress/value/ProgressValue.tsrx +62 -0
  541. package/src/progress/value/ProgressValueDataAttributes.ts +12 -0
  542. package/src/radio/index.parts.ts +2 -0
  543. package/src/radio/index.ts +4 -0
  544. package/src/radio/indicator/RadioIndicator.tsrx +84 -0
  545. package/src/radio/indicator/RadioIndicatorDataAttributes.ts +54 -0
  546. package/src/radio/root/RadioRoot.tsrx +337 -0
  547. package/src/radio/root/RadioRootContext.ts +19 -0
  548. package/src/radio/root/RadioRootDataAttributes.ts +44 -0
  549. package/src/radio/utils/stateAttributesMapping.ts +20 -0
  550. package/src/radio-group/RadioGroup.tsrx +337 -0
  551. package/src/radio-group/RadioGroupContext.ts +29 -0
  552. package/src/radio-group/RadioGroupDataAttributes.ts +4 -0
  553. package/src/radio-group/index.ts +3 -0
  554. package/src/scroll-area/constants.ts +2 -0
  555. package/src/scroll-area/content/ScrollAreaContent.tsrx +90 -0
  556. package/src/scroll-area/content/ScrollAreaContentDataAttributes.ts +28 -0
  557. package/src/scroll-area/corner/ScrollAreaCorner.tsrx +54 -0
  558. package/src/scroll-area/index.parts.ts +6 -0
  559. package/src/scroll-area/index.ts +8 -0
  560. package/src/scroll-area/root/ScrollAreaRoot.tsrx +424 -0
  561. package/src/scroll-area/root/ScrollAreaRootContext.ts +61 -0
  562. package/src/scroll-area/root/ScrollAreaRootCssVars.ts +10 -0
  563. package/src/scroll-area/root/ScrollAreaRootDataAttributes.ts +28 -0
  564. package/src/scroll-area/root/stateAttributes.ts +15 -0
  565. package/src/scroll-area/scrollbar/ScrollAreaScrollbar.tsrx +275 -0
  566. package/src/scroll-area/scrollbar/ScrollAreaScrollbarContext.ts +19 -0
  567. package/src/scroll-area/scrollbar/ScrollAreaScrollbarCssVars.ts +10 -0
  568. package/src/scroll-area/scrollbar/ScrollAreaScrollbarDataAttributes.ts +37 -0
  569. package/src/scroll-area/thumb/ScrollAreaThumb.tsrx +80 -0
  570. package/src/scroll-area/thumb/ScrollAreaThumbDataAttributes.ts +9 -0
  571. package/src/scroll-area/utils/getOffset.ts +21 -0
  572. package/src/scroll-area/viewport/ScrollAreaViewport.tsrx +492 -0
  573. package/src/scroll-area/viewport/ScrollAreaViewportContext.ts +21 -0
  574. package/src/scroll-area/viewport/ScrollAreaViewportCssVars.ts +20 -0
  575. package/src/scroll-area/viewport/ScrollAreaViewportDataAttributes.ts +28 -0
  576. package/src/select/arrow/SelectArrow.tsrx +75 -0
  577. package/src/select/arrow/SelectArrowDataAttributes.ts +24 -0
  578. package/src/select/backdrop/SelectBackdrop.tsrx +77 -0
  579. package/src/select/backdrop/SelectBackdropDataAttributes.ts +18 -0
  580. package/src/select/group/SelectGroup.tsrx +52 -0
  581. package/src/select/group/SelectGroupContext.ts +20 -0
  582. package/src/select/group-label/SelectGroupLabel.tsrx +49 -0
  583. package/src/select/icon/SelectIcon.tsrx +51 -0
  584. package/src/select/icon/SelectIconDataAttributes.ts +6 -0
  585. package/src/select/index.parts.ts +19 -0
  586. package/src/select/index.ts +21 -0
  587. package/src/select/item/SelectItem.tsrx +291 -0
  588. package/src/select/item/SelectItemContext.ts +22 -0
  589. package/src/select/item/SelectItemDataAttributes.ts +12 -0
  590. package/src/select/item-indicator/SelectItemIndicator.tsrx +108 -0
  591. package/src/select/item-indicator/SelectItemIndicatorDataAttributes.ts +10 -0
  592. package/src/select/item-text/SelectItemText.tsrx +56 -0
  593. package/src/select/label/SelectLabel.tsrx +64 -0
  594. package/src/select/list/SelectList.tsrx +62 -0
  595. package/src/select/popup/SelectPopup.tsrx +596 -0
  596. package/src/select/popup/SelectPopupDataAttributes.ts +28 -0
  597. package/src/select/popup/utils.ts +13 -0
  598. package/src/select/portal/SelectPortal.tsrx +45 -0
  599. package/src/select/positioner/SelectPositioner.tsrx +268 -0
  600. package/src/select/positioner/SelectPositionerContext.ts +26 -0
  601. package/src/select/positioner/SelectPositionerCssVars.ts +25 -0
  602. package/src/select/positioner/SelectPositionerDataAttributes.ts +24 -0
  603. package/src/select/root/SelectRoot.tsrx +752 -0
  604. package/src/select/root/SelectRootContext.ts +57 -0
  605. package/src/select/scroll-arrow/SelectScrollArrow.tsrx +236 -0
  606. package/src/select/scroll-down-arrow/SelectScrollDownArrow.tsrx +37 -0
  607. package/src/select/scroll-down-arrow/SelectScrollDownArrowDataAttributes.ts +24 -0
  608. package/src/select/scroll-up-arrow/SelectScrollUpArrow.tsrx +37 -0
  609. package/src/select/scroll-up-arrow/SelectScrollUpArrowDataAttributes.ts +24 -0
  610. package/src/select/separator/SelectSeparator.tsrx +34 -0
  611. package/src/select/store.ts +155 -0
  612. package/src/select/trigger/SelectTrigger.tsrx +270 -0
  613. package/src/select/trigger/SelectTriggerDataAttributes.ts +55 -0
  614. package/src/select/value/SelectValue.tsrx +112 -0
  615. package/src/select/value/SelectValueDataAttributes.ts +4 -0
  616. package/src/separator/Separator.tsrx +49 -0
  617. package/src/separator/SeparatorDataAttributes.ts +5 -0
  618. package/src/separator/index.ts +3 -0
  619. package/src/slider/control/SliderControl.tsrx +540 -0
  620. package/src/slider/control/SliderControlDataAttributes.ts +33 -0
  621. package/src/slider/index.parts.ts +7 -0
  622. package/src/slider/index.ts +9 -0
  623. package/src/slider/indicator/SliderIndicator.tsrx +102 -0
  624. package/src/slider/indicator/SliderIndicatorDataAttributes.ts +33 -0
  625. package/src/slider/label/SliderLabel.tsrx +71 -0
  626. package/src/slider/root/SliderRoot.tsrx +610 -0
  627. package/src/slider/root/SliderRootContext.ts +115 -0
  628. package/src/slider/root/SliderRootDataAttributes.ts +33 -0
  629. package/src/slider/root/stateAttributesMapping.ts +15 -0
  630. package/src/slider/thumb/SliderThumb.tsrx +567 -0
  631. package/src/slider/thumb/SliderThumbDataAttributes.ts +37 -0
  632. package/src/slider/thumb/prehydrationScript.min.ts +5 -0
  633. package/src/slider/track/SliderTrack.tsrx +49 -0
  634. package/src/slider/track/SliderTrackDataAttributes.ts +33 -0
  635. package/src/slider/utils/asc.ts +3 -0
  636. package/src/slider/utils/getMidpoint.ts +4 -0
  637. package/src/slider/utils/getPushedThumbValues.ts +60 -0
  638. package/src/slider/utils/getSliderValue.ts +22 -0
  639. package/src/slider/utils/resolveThumbCollision.ts +154 -0
  640. package/src/slider/utils/roundValueToStep.ts +21 -0
  641. package/src/slider/utils/test-utils.ts +18 -0
  642. package/src/slider/utils/validateMinimumDistance.ts +17 -0
  643. package/src/slider/value/SliderValue.tsrx +82 -0
  644. package/src/slider/value/SliderValueDataAttributes.ts +33 -0
  645. package/src/switch/index.parts.ts +2 -0
  646. package/src/switch/index.ts +4 -0
  647. package/src/switch/root/SwitchRoot.tsrx +335 -0
  648. package/src/switch/root/SwitchRootContext.ts +19 -0
  649. package/src/switch/root/SwitchRootDataAttributes.ts +44 -0
  650. package/src/switch/stateAttributesMapping.ts +15 -0
  651. package/src/switch/thumb/SwitchThumb.tsrx +40 -0
  652. package/src/switch/thumb/SwitchThumbDataAttributes.ts +44 -0
  653. package/src/tabs/index.parts.ts +5 -0
  654. package/src/tabs/index.ts +21 -0
  655. package/src/tabs/indicator/TabsIndicator.tsrx +292 -0
  656. package/src/tabs/indicator/TabsIndicatorCssVars.ts +30 -0
  657. package/src/tabs/indicator/TabsIndicatorDataAttributes.ts +10 -0
  658. package/src/tabs/indicator/prehydrationScript.min.ts +5 -0
  659. package/src/tabs/list/TabsList.tsrx +153 -0
  660. package/src/tabs/list/TabsListContext.ts +23 -0
  661. package/src/tabs/list/TabsListDataAttributes.ts +10 -0
  662. package/src/tabs/panel/TabsPanel.tsrx +145 -0
  663. package/src/tabs/panel/TabsPanelDataAttributes.ts +28 -0
  664. package/src/tabs/root/TabsRoot.tsrx +477 -0
  665. package/src/tabs/root/TabsRootContext.ts +55 -0
  666. package/src/tabs/root/TabsRootDataAttributes.ts +10 -0
  667. package/src/tabs/root/stateAttributesMapping.ts +9 -0
  668. package/src/tabs/tab/TabsTab.tsrx +280 -0
  669. package/src/tabs/tab/TabsTabDataAttributes.ts +18 -0
  670. package/src/toast/action/ToastAction.tsrx +72 -0
  671. package/src/toast/action/ToastActionDataAttributes.ts +5 -0
  672. package/src/toast/arrow/ToastArrow.tsrx +57 -0
  673. package/src/toast/arrow/ToastArrowDataAttributes.ts +16 -0
  674. package/src/toast/close/ToastClose.tsrx +79 -0
  675. package/src/toast/close/ToastCloseDataAttributes.ts +5 -0
  676. package/src/toast/content/ToastContent.tsrx +76 -0
  677. package/src/toast/content/ToastContentDataAttributes.ts +10 -0
  678. package/src/toast/createToastManager.ts +104 -0
  679. package/src/toast/description/ToastDescription.tsrx +54 -0
  680. package/src/toast/description/ToastDescriptionDataAttributes.ts +5 -0
  681. package/src/toast/index.parts.ts +14 -0
  682. package/src/toast/index.ts +18 -0
  683. package/src/toast/portal/ToastPortal.tsrx +33 -0
  684. package/src/toast/positioner/ToastPositioner.tsrx +154 -0
  685. package/src/toast/positioner/ToastPositionerContext.ts +23 -0
  686. package/src/toast/positioner/ToastPositionerCssVars.ts +25 -0
  687. package/src/toast/positioner/ToastPositionerDataAttributes.ts +16 -0
  688. package/src/toast/provider/ToastProvider.tsrx +109 -0
  689. package/src/toast/provider/ToastProviderContext.ts +16 -0
  690. package/src/toast/root/ToastRoot.tsrx +563 -0
  691. package/src/toast/root/ToastRootContext.ts +25 -0
  692. package/src/toast/root/ToastRootCssVars.ts +25 -0
  693. package/src/toast/root/ToastRootDataAttributes.ts +35 -0
  694. package/src/toast/store.ts +527 -0
  695. package/src/toast/title/ToastTitle.tsrx +53 -0
  696. package/src/toast/title/ToastTitleDataAttributes.ts +5 -0
  697. package/src/toast/useToastManager.ts +150 -0
  698. package/src/toast/utils/focusVisible.ts +1 -0
  699. package/src/toast/utils/isRenderableNode.ts +18 -0
  700. package/src/toast/utils/resolvePromiseOptions.ts +22 -0
  701. package/src/toast/utils/test-utils.tsrx +39 -0
  702. package/src/toast/utils/useToastLabelPart.ts +53 -0
  703. package/src/toast/viewport/ToastViewport.tsrx +293 -0
  704. package/src/toast/viewport/ToastViewportCssVars.ts +5 -0
  705. package/src/toast/viewport/ToastViewportDataAttributes.ts +5 -0
  706. package/src/toggle/Toggle.tsrx +198 -0
  707. package/src/toggle/ToggleDataAttributes.ts +8 -0
  708. package/src/toggle/index.ts +3 -0
  709. package/src/toggle-group/ToggleGroup.tsrx +201 -0
  710. package/src/toggle-group/ToggleGroupContext.ts +28 -0
  711. package/src/toggle-group/ToggleGroupDataAttributes.ts +13 -0
  712. package/src/toggle-group/index.ts +3 -0
  713. package/src/toolbar/button/ToolbarButton.tsrx +108 -0
  714. package/src/toolbar/button/ToolbarButtonDataAttributes.ts +13 -0
  715. package/src/toolbar/group/ToolbarGroup.tsrx +69 -0
  716. package/src/toolbar/group/ToolbarGroupContext.ts +13 -0
  717. package/src/toolbar/group/ToolbarGroupDataAttributes.ts +9 -0
  718. package/src/toolbar/index.parts.ts +8 -0
  719. package/src/toolbar/index.ts +9 -0
  720. package/src/toolbar/input/ToolbarInput.tsrx +108 -0
  721. package/src/toolbar/input/ToolbarInputDataAttributes.ts +13 -0
  722. package/src/toolbar/link/ToolbarLink.tsrx +64 -0
  723. package/src/toolbar/link/ToolbarLinkDataAttributes.ts +5 -0
  724. package/src/toolbar/root/ToolbarRoot.tsrx +121 -0
  725. package/src/toolbar/root/ToolbarRootContext.ts +24 -0
  726. package/src/toolbar/root/ToolbarRootDataAttributes.ts +9 -0
  727. package/src/toolbar/separator/ToolbarSeparator.tsrx +37 -0
  728. package/src/toolbar/separator/ToolbarSeparatorDataAttributes.ts +5 -0
  729. package/src/tooltip/arrow/TooltipArrow.tsrx +76 -0
  730. package/src/tooltip/arrow/TooltipArrowDataAttributes.ts +29 -0
  731. package/src/tooltip/index.parts.ts +12 -0
  732. package/src/tooltip/index.ts +13 -0
  733. package/src/tooltip/popup/TooltipPopup.tsrx +108 -0
  734. package/src/tooltip/popup/TooltipPopupDataAttributes.ts +33 -0
  735. package/src/tooltip/portal/TooltipPortal.tsrx +54 -0
  736. package/src/tooltip/portal/TooltipPortalContext.ts +13 -0
  737. package/src/tooltip/positioner/TooltipPositioner.tsrx +150 -0
  738. package/src/tooltip/positioner/TooltipPositionerContext.ts +23 -0
  739. package/src/tooltip/positioner/TooltipPositionerCssVars.ts +37 -0
  740. package/src/tooltip/positioner/TooltipPositionerDataAttributes.ts +24 -0
  741. package/src/tooltip/provider/TooltipProvider.tsrx +49 -0
  742. package/src/tooltip/provider/TooltipProviderContext.ts +12 -0
  743. package/src/tooltip/root/TooltipRoot.tsrx +282 -0
  744. package/src/tooltip/root/TooltipRootContext.ts +21 -0
  745. package/src/tooltip/store/TooltipHandle.ts +54 -0
  746. package/src/tooltip/store/TooltipStore.ts +148 -0
  747. package/src/tooltip/trigger/TooltipTrigger.tsrx +351 -0
  748. package/src/tooltip/trigger/TooltipTriggerDataAttributes.ts +10 -0
  749. package/src/tooltip/utils/constants.ts +1 -0
  750. package/src/tooltip/viewport/TooltipViewport.tsrx +75 -0
  751. package/src/tooltip/viewport/TooltipViewportCssVars.ts +12 -0
  752. package/src/tooltip/viewport/TooltipViewportDataAttributes.ts +24 -0
  753. package/src/types/index.ts +29 -0
  754. package/src/unstable-use-media-query/index.ts +94 -0
  755. package/src/use-render/index.ts +2 -0
  756. package/src/use-render/useRender.ts +113 -0
  757. package/src/utils/CommonPopupCssVars.ts +12 -0
  758. package/src/utils/CommonPopupDataAttributes.ts +38 -0
  759. package/src/utils/CommonPositionerCssVars.ts +37 -0
  760. package/src/utils/CommonTriggerDataAttributes.ts +9 -0
  761. package/src/utils/CommonViewportDataAttributes.ts +7 -0
  762. package/src/utils/FloatingPortalLite.tsrx +51 -0
  763. package/src/utils/FocusGuard.tsrx +44 -0
  764. package/src/utils/InternalBackdrop.tsrx +50 -0
  765. package/src/utils/NullStore.ts +26 -0
  766. package/src/utils/adaptiveOriginConstants.ts +12 -0
  767. package/src/utils/adaptiveOriginMiddleware.ts +5 -14
  768. package/src/utils/closePart.tsrx +37 -0
  769. package/src/utils/collapsibleOpenStateMapping.ts +28 -23
  770. package/src/utils/dispatchClickWithModifiers.ts +36 -0
  771. package/src/utils/getCssDimensions.ts +11 -15
  772. package/src/utils/getElementAtPoint.ts +12 -0
  773. package/src/utils/getElementTransform.ts +33 -0
  774. package/src/utils/getPseudoElementBounds.ts +22 -7
  775. package/src/utils/hideMiddleware.ts +15 -12
  776. package/src/utils/listbox-separator/ListboxSeparator.tsrx +47 -0
  777. package/src/utils/mergeStyles.ts +15 -0
  778. package/src/utils/popupStateMapping.ts +57 -35
  779. package/src/utils/popups/index.ts +4 -8
  780. package/src/utils/popups/inlineRect.ts +19 -16
  781. package/src/utils/popups/popupHandle.ts +291 -0
  782. package/src/utils/popups/popupStoreUtils.ts +482 -320
  783. package/src/utils/popups/popupTriggerMap.ts +102 -28
  784. package/src/utils/popups/store.ts +146 -66
  785. package/src/utils/popups/usePopupHandleStore.ts +37 -0
  786. package/src/utils/popups/useTriggerFocusGuards.ts +36 -21
  787. package/src/utils/resolveAriaLabelledBy.ts +2 -1
  788. package/src/utils/resolveClassName.ts +8 -3
  789. package/src/utils/resolveRef.ts +8 -4
  790. package/src/utils/resolveStyle.ts +10 -6
  791. package/src/utils/scrollEdges.ts +33 -0
  792. package/src/utils/scrollable.ts +77 -0
  793. package/src/utils/styles.tsrx +15 -0
  794. package/src/utils/useAnchoredPopupScrollLock.ts +31 -37
  795. package/src/utils/useFocusableWhenDisabled.ts +81 -65
  796. package/src/utils/useIsHydrating.ts +12 -15
  797. package/src/utils/useMixedToggleClickHandler.ts +45 -60
  798. package/src/utils/useOpenInteractionType.ts +43 -45
  799. package/src/utils/usePopupAutoResize.ts +198 -207
  800. package/src/utils/usePopupViewport.tsrx +396 -0
  801. package/src/utils/usePositioner.tsrx +50 -0
  802. package/src/utils/useRegisteredLabelId.ts +16 -27
  803. package/src/utils/useSwipeDismiss.ts +1161 -0
  804. package/src/utils/valueToPercent.ts +1 -2
  805. package/dist/cjs/accordion.cjs +0 -497
  806. package/dist/cjs/alert-dialog.cjs +0 -65
  807. package/dist/cjs/avatar.cjs +0 -234
  808. package/dist/cjs/button.cjs +0 -54
  809. package/dist/cjs/checkbox-group.cjs +0 -165
  810. package/dist/cjs/checkbox.cjs +0 -475
  811. package/dist/cjs/collapsible.cjs +0 -700
  812. package/dist/cjs/context-menu.cjs +0 -257
  813. package/dist/cjs/csp-provider.cjs +0 -40
  814. package/dist/cjs/dialog.cjs +0 -741
  815. package/dist/cjs/direction-provider.cjs +0 -35
  816. package/dist/cjs/field.cjs +0 -559
  817. package/dist/cjs/fieldset.cjs +0 -101
  818. package/dist/cjs/form.cjs +0 -177
  819. package/dist/cjs/index.cjs +0 -133
  820. package/dist/cjs/input.cjs +0 -32
  821. package/dist/cjs/internal.cjs +0 -43
  822. package/dist/cjs/menu.cjs +0 -2420
  823. package/dist/cjs/menubar.cjs +0 -132
  824. package/dist/cjs/merge-props.cjs +0 -34
  825. package/dist/cjs/meter.cjs +0 -169
  826. package/dist/cjs/number-field.cjs +0 -812
  827. package/dist/cjs/popover.cjs +0 -966
  828. package/dist/cjs/preview-card.cjs +0 -632
  829. package/dist/cjs/progress.cjs +0 -206
  830. package/dist/cjs/radio-group.cjs +0 -264
  831. package/dist/cjs/radio.cjs +0 -327
  832. package/dist/cjs/separator.cjs +0 -44
  833. package/dist/cjs/slider.cjs +0 -1384
  834. package/dist/cjs/switch.cjs +0 -306
  835. package/dist/cjs/tabs.cjs +0 -727
  836. package/dist/cjs/toast.cjs +0 -1766
  837. package/dist/cjs/toggle-group.cjs +0 -118
  838. package/dist/cjs/toggle.cjs +0 -121
  839. package/dist/cjs/tooltip.cjs +0 -835
  840. package/dist/cjs/unstable-use-media-query.cjs +0 -79
  841. package/dist/cjs/use-render.cjs +0 -40
  842. package/dist/cjs/utils/CSPContext.cjs +0 -38
  843. package/dist/cjs/utils/CheckboxGroupContext.cjs +0 -40
  844. package/dist/cjs/utils/CompositeRootContext.cjs +0 -40
  845. package/dist/cjs/utils/ContextMenuRootContext.cjs +0 -42
  846. package/dist/cjs/utils/DirectionContext.cjs +0 -34
  847. package/dist/cjs/utils/FloatingPortalLite.cjs +0 -47
  848. package/dist/cjs/utils/InternalBackdrop.cjs +0 -49
  849. package/dist/cjs/utils/MenubarContext.cjs +0 -40
  850. package/dist/cjs/utils/RadioGroupContext.cjs +0 -34
  851. package/dist/cjs/utils/RequestQueue.cjs +0 -111
  852. package/dist/cjs/utils/TimeoutManager.cjs +0 -50
  853. package/dist/cjs/utils/ToggleGroupContext.cjs +0 -40
  854. package/dist/cjs/utils/adaptiveOriginMiddleware.cjs +0 -94
  855. package/dist/cjs/utils/addEventListener.cjs +0 -33
  856. package/dist/cjs/utils/areArraysEqual.cjs +0 -30
  857. package/dist/cjs/utils/clamp.cjs +0 -30
  858. package/dist/cjs/utils/closePart.cjs +0 -70
  859. package/dist/cjs/utils/collapsibleOpenStateMapping.cjs +0 -42
  860. package/dist/cjs/utils/composeRefs.cjs +0 -68
  861. package/dist/cjs/utils/composite/CompositeItem.cjs +0 -59
  862. package/dist/cjs/utils/composite/CompositeList.cjs +0 -177
  863. package/dist/cjs/utils/composite/CompositeListContext.cjs +0 -43
  864. package/dist/cjs/utils/composite/CompositeRoot.cjs +0 -118
  865. package/dist/cjs/utils/composite/grid-utils.cjs +0 -343
  866. package/dist/cjs/utils/composite/gridNavigation.cjs +0 -92
  867. package/dist/cjs/utils/composite/keys.cjs +0 -174
  868. package/dist/cjs/utils/composite/list-utils.cjs +0 -90
  869. package/dist/cjs/utils/composite/useCompositeItem.cjs +0 -63
  870. package/dist/cjs/utils/composite/useCompositeListItem.cjs +0 -104
  871. package/dist/cjs/utils/composite/useCompositeRoot.cjs +0 -263
  872. package/dist/cjs/utils/constants.cjs +0 -56
  873. package/dist/cjs/utils/contains.cjs +0 -46
  874. package/dist/cjs/utils/createChangeEventDetails.cjs +0 -92
  875. package/dist/cjs/utils/dom.cjs +0 -35
  876. package/dist/cjs/utils/empty.cjs +0 -34
  877. package/dist/cjs/utils/field/FieldItemContext.cjs +0 -34
  878. package/dist/cjs/utils/field/FieldRootContext.cjs +0 -80
  879. package/dist/cjs/utils/field/FormContext.cjs +0 -41
  880. package/dist/cjs/utils/field/LabelableContext.cjs +0 -43
  881. package/dist/cjs/utils/field/LabelableProvider.cjs +0 -115
  882. package/dist/cjs/utils/field/constants.cjs +0 -68
  883. package/dist/cjs/utils/field/getCombinedFieldValidityData.cjs +0 -36
  884. package/dist/cjs/utils/field/useAriaLabelledBy.cjs +0 -87
  885. package/dist/cjs/utils/field/useFieldControlRegistration.cjs +0 -165
  886. package/dist/cjs/utils/field/useFieldValidation.cjs +0 -285
  887. package/dist/cjs/utils/field/useLabel.cjs +0 -99
  888. package/dist/cjs/utils/field/useLabelableId.cjs +0 -105
  889. package/dist/cjs/utils/field/useRegisterFieldControl.cjs +0 -60
  890. package/dist/cjs/utils/findRootOwnerId.cjs +0 -37
  891. package/dist/cjs/utils/floating/FloatingDelayGroup.cjs +0 -219
  892. package/dist/cjs/utils/floating/FloatingFocusManager.cjs +0 -685
  893. package/dist/cjs/utils/floating/FloatingPortal.cjs +0 -230
  894. package/dist/cjs/utils/floating/FloatingRootStore.cjs +0 -87
  895. package/dist/cjs/utils/floating/FloatingTree.cjs +0 -86
  896. package/dist/cjs/utils/floating/FloatingTreeStore.cjs +0 -41
  897. package/dist/cjs/utils/floating/FocusGuard.cjs +0 -54
  898. package/dist/cjs/utils/floating/composite.cjs +0 -42
  899. package/dist/cjs/utils/floating/constants.cjs +0 -34
  900. package/dist/cjs/utils/floating/createAttribute.cjs +0 -30
  901. package/dist/cjs/utils/floating/createEventEmitter.cjs +0 -44
  902. package/dist/cjs/utils/floating/element.cjs +0 -103
  903. package/dist/cjs/utils/floating/enqueueFocus.cjs +0 -51
  904. package/dist/cjs/utils/floating/event.cjs +0 -65
  905. package/dist/cjs/utils/floating/getEmptyRootContext.cjs +0 -42
  906. package/dist/cjs/utils/floating/gridNavigation.cjs +0 -45
  907. package/dist/cjs/utils/floating/markOthers.cjs +0 -181
  908. package/dist/cjs/utils/floating/nodes.cjs +0 -48
  909. package/dist/cjs/utils/floating/safePolygon.cjs +0 -301
  910. package/dist/cjs/utils/floating/tabbable.cjs +0 -242
  911. package/dist/cjs/utils/floating/types.cjs +0 -16
  912. package/dist/cjs/utils/floating/useClick.cjs +0 -153
  913. package/dist/cjs/utils/floating/useClientPoint.cjs +0 -225
  914. package/dist/cjs/utils/floating/useDismiss.cjs +0 -506
  915. package/dist/cjs/utils/floating/useFloating.cjs +0 -186
  916. package/dist/cjs/utils/floating/useFloatingRootContext.cjs +0 -75
  917. package/dist/cjs/utils/floating/useFocus.cjs +0 -184
  918. package/dist/cjs/utils/floating/useHoverFloatingInteraction.cjs +0 -231
  919. package/dist/cjs/utils/floating/useHoverInteractionSharedState.cjs +0 -113
  920. package/dist/cjs/utils/floating/useHoverReferenceInteraction.cjs +0 -380
  921. package/dist/cjs/utils/floating/useHoverShared.cjs +0 -65
  922. package/dist/cjs/utils/floating/useListNavigation.cjs +0 -665
  923. package/dist/cjs/utils/floating/useSyncedFloatingRootContext.cjs +0 -91
  924. package/dist/cjs/utils/floating/useTypeahead.cjs +0 -187
  925. package/dist/cjs/utils/formatNumber.cjs +0 -60
  926. package/dist/cjs/utils/generateId.cjs +0 -32
  927. package/dist/cjs/utils/getCssDimensions.cjs +0 -42
  928. package/dist/cjs/utils/getDefaultFormSubmitter.cjs +0 -42
  929. package/dist/cjs/utils/getDisabledMountTransitionStyles.cjs +0 -32
  930. package/dist/cjs/utils/getElementRef.cjs +0 -35
  931. package/dist/cjs/utils/getPseudoElementBounds.cjs +0 -56
  932. package/dist/cjs/utils/getStateAttributesProps.cjs +0 -46
  933. package/dist/cjs/utils/hideMiddleware.cjs +0 -42
  934. package/dist/cjs/utils/inertValue.cjs +0 -30
  935. package/dist/cjs/utils/matchesFocusVisible.cjs +0 -38
  936. package/dist/cjs/utils/mergeCleanups.cjs +0 -37
  937. package/dist/cjs/utils/mergeObjects.cjs +0 -39
  938. package/dist/cjs/utils/mergeProps.cjs +0 -182
  939. package/dist/cjs/utils/noop.cjs +0 -29
  940. package/dist/cjs/utils/number/constants.cjs +0 -34
  941. package/dist/cjs/utils/number/parse.cjs +0 -258
  942. package/dist/cjs/utils/number/types.cjs +0 -16
  943. package/dist/cjs/utils/number/validate.cjs +0 -104
  944. package/dist/cjs/utils/owner.cjs +0 -35
  945. package/dist/cjs/utils/platform.cjs +0 -83
  946. package/dist/cjs/utils/popupStateMapping.cjs +0 -74
  947. package/dist/cjs/utils/popups/index.cjs +0 -39
  948. package/dist/cjs/utils/popups/inlineRect.cjs +0 -218
  949. package/dist/cjs/utils/popups/popupStoreUtils.cjs +0 -379
  950. package/dist/cjs/utils/popups/popupTriggerMap.cjs +0 -76
  951. package/dist/cjs/utils/popups/store.cjs +0 -118
  952. package/dist/cjs/utils/popups/useTriggerFocusGuards.cjs +0 -72
  953. package/dist/cjs/utils/resolveAriaLabelledBy.cjs +0 -35
  954. package/dist/cjs/utils/resolveClassName.cjs +0 -30
  955. package/dist/cjs/utils/resolveRef.cjs +0 -33
  956. package/dist/cjs/utils/resolveStyle.cjs +0 -30
  957. package/dist/cjs/utils/serializeValue.cjs +0 -40
  958. package/dist/cjs/utils/slider/asc.cjs +0 -30
  959. package/dist/cjs/utils/slider/getMidpoint.cjs +0 -34
  960. package/dist/cjs/utils/slider/getPushedThumbValues.cjs +0 -73
  961. package/dist/cjs/utils/slider/getSliderValue.cjs +0 -42
  962. package/dist/cjs/utils/slider/replaceArrayItemAtIndex.cjs +0 -33
  963. package/dist/cjs/utils/slider/resolveThumbCollision.cjs +0 -155
  964. package/dist/cjs/utils/slider/roundValueToStep.cjs +0 -45
  965. package/dist/cjs/utils/slider/validateMinimumDistance.cjs +0 -40
  966. package/dist/cjs/utils/slider/valueArrayToPercentages.cjs +0 -36
  967. package/dist/cjs/utils/store/ReactStore.cjs +0 -135
  968. package/dist/cjs/utils/store/Store.cjs +0 -83
  969. package/dist/cjs/utils/store/createSelector.cjs +0 -74
  970. package/dist/cjs/utils/store/useStore.cjs +0 -51
  971. package/dist/cjs/utils/stringifyLocale.cjs +0 -36
  972. package/dist/cjs/utils/useAnchorPositioning.cjs +0 -421
  973. package/dist/cjs/utils/useAnchoredPopupScrollLock.cjs +0 -59
  974. package/dist/cjs/utils/useAnimationFrame.cjs +0 -93
  975. package/dist/cjs/utils/useAnimationsFinished.cjs +0 -98
  976. package/dist/cjs/utils/useBaseUiId.cjs +0 -36
  977. package/dist/cjs/utils/useButton.cjs +0 -177
  978. package/dist/cjs/utils/useCheckboxGroupParent.cjs +0 -114
  979. package/dist/cjs/utils/useControlled.cjs +0 -47
  980. package/dist/cjs/utils/useEnhancedClickHandler.cjs +0 -60
  981. package/dist/cjs/utils/useFocusableWhenDisabled.cjs +0 -77
  982. package/dist/cjs/utils/useForcedRerendering.cjs +0 -35
  983. package/dist/cjs/utils/useIsHydrating.cjs +0 -44
  984. package/dist/cjs/utils/useMixedToggleClickHandler.cjs +0 -66
  985. package/dist/cjs/utils/useOnFirstRender.cjs +0 -35
  986. package/dist/cjs/utils/useOnMount.cjs +0 -36
  987. package/dist/cjs/utils/useOpenChangeComplete.cjs +0 -57
  988. package/dist/cjs/utils/useOpenInteractionType.cjs +0 -69
  989. package/dist/cjs/utils/usePopupAutoResize.cjs +0 -191
  990. package/dist/cjs/utils/usePopupViewport.cjs +0 -283
  991. package/dist/cjs/utils/usePositioner.cjs +0 -53
  992. package/dist/cjs/utils/usePressAndHold.cjs +0 -51
  993. package/dist/cjs/utils/usePreviousValue.cjs +0 -47
  994. package/dist/cjs/utils/useRefWithInit.cjs +0 -41
  995. package/dist/cjs/utils/useRegisteredLabelId.cjs +0 -48
  996. package/dist/cjs/utils/useRenderElement.cjs +0 -106
  997. package/dist/cjs/utils/useScrollLock.cjs +0 -232
  998. package/dist/cjs/utils/useStableCallback.cjs +0 -41
  999. package/dist/cjs/utils/useTimeout.cjs +0 -66
  1000. package/dist/cjs/utils/useTransitionStatus.cjs +0 -116
  1001. package/dist/cjs/utils/useValueAsRef.cjs +0 -43
  1002. package/dist/cjs/utils/useValueChanged.cjs +0 -55
  1003. package/dist/cjs/utils/valueToPercent.cjs +0 -30
  1004. package/dist/cjs/utils/visuallyHidden.cjs +0 -49
  1005. package/src/accordion.ts +0 -615
  1006. package/src/alert-dialog.ts +0 -49
  1007. package/src/avatar.ts +0 -308
  1008. package/src/button.ts +0 -63
  1009. package/src/checkbox-group.ts +0 -183
  1010. package/src/checkbox.ts +0 -576
  1011. package/src/collapsible.ts +0 -916
  1012. package/src/context-menu.ts +0 -317
  1013. package/src/csp-provider.ts +0 -37
  1014. package/src/dialog.ts +0 -930
  1015. package/src/direction-provider.ts +0 -32
  1016. package/src/field.ts +0 -650
  1017. package/src/fieldset.ts +0 -150
  1018. package/src/form.ts +0 -183
  1019. package/src/input.ts +0 -9
  1020. package/src/internal.ts +0 -29
  1021. package/src/menu.ts +0 -3387
  1022. package/src/menubar.ts +0 -160
  1023. package/src/merge-props.ts +0 -2
  1024. package/src/meter.ts +0 -211
  1025. package/src/number-field.ts +0 -951
  1026. package/src/popover.ts +0 -1282
  1027. package/src/preview-card.ts +0 -812
  1028. package/src/progress.ts +0 -267
  1029. package/src/radio-group.ts +0 -285
  1030. package/src/radio.ts +0 -393
  1031. package/src/separator.ts +0 -43
  1032. package/src/slider.ts +0 -1624
  1033. package/src/switch.ts +0 -363
  1034. package/src/tabs.ts +0 -947
  1035. package/src/toast.ts +0 -2462
  1036. package/src/toggle-group.ts +0 -136
  1037. package/src/toggle.ts +0 -145
  1038. package/src/tooltip.ts +0 -1053
  1039. package/src/unstable-use-media-query.ts +0 -101
  1040. package/src/use-render.ts +0 -41
  1041. package/src/utils/CSPContext.ts +0 -21
  1042. package/src/utils/CheckboxGroupContext.ts +0 -30
  1043. package/src/utils/CompositeRootContext.ts +0 -27
  1044. package/src/utils/ContextMenuRootContext.ts +0 -44
  1045. package/src/utils/DirectionContext.ts +0 -15
  1046. package/src/utils/FloatingPortalLite.ts +0 -34
  1047. package/src/utils/InternalBackdrop.ts +0 -28
  1048. package/src/utils/MenubarContext.ts +0 -38
  1049. package/src/utils/RadioGroupContext.ts +0 -27
  1050. package/src/utils/RequestQueue.ts +0 -132
  1051. package/src/utils/TimeoutManager.ts +0 -32
  1052. package/src/utils/ToggleGroupContext.ts +0 -33
  1053. package/src/utils/addEventListener.ts +0 -13
  1054. package/src/utils/areArraysEqual.ts +0 -11
  1055. package/src/utils/clamp.ts +0 -8
  1056. package/src/utils/closePart.ts +0 -61
  1057. package/src/utils/composeRefs.ts +0 -53
  1058. package/src/utils/composite/CompositeItem.ts +0 -56
  1059. package/src/utils/composite/CompositeList.ts +0 -190
  1060. package/src/utils/composite/CompositeListContext.ts +0 -23
  1061. package/src/utils/composite/CompositeRoot.ts +0 -132
  1062. package/src/utils/composite/grid-utils.ts +0 -437
  1063. package/src/utils/composite/gridNavigation.ts +0 -127
  1064. package/src/utils/composite/keys.ts +0 -179
  1065. package/src/utils/composite/list-utils.ts +0 -106
  1066. package/src/utils/composite/useCompositeItem.ts +0 -58
  1067. package/src/utils/composite/useCompositeListItem.ts +0 -108
  1068. package/src/utils/composite/useCompositeRoot.ts +0 -344
  1069. package/src/utils/constants.ts +0 -41
  1070. package/src/utils/contains.ts +0 -22
  1071. package/src/utils/createChangeEventDetails.ts +0 -95
  1072. package/src/utils/dom.ts +0 -9
  1073. package/src/utils/empty.ts +0 -7
  1074. package/src/utils/field/FieldItemContext.ts +0 -13
  1075. package/src/utils/field/FieldRootContext.ts +0 -98
  1076. package/src/utils/field/FormContext.ts +0 -37
  1077. package/src/utils/field/LabelableContext.ts +0 -32
  1078. package/src/utils/field/LabelableProvider.ts +0 -108
  1079. package/src/utils/field/constants.ts +0 -80
  1080. package/src/utils/field/getCombinedFieldValidityData.ts +0 -16
  1081. package/src/utils/field/useAriaLabelledBy.ts +0 -86
  1082. package/src/utils/field/useFieldControlRegistration.ts +0 -179
  1083. package/src/utils/field/useFieldValidation.ts +0 -311
  1084. package/src/utils/field/useLabel.ts +0 -95
  1085. package/src/utils/field/useLabelableId.ts +0 -99
  1086. package/src/utils/field/useRegisterFieldControl.ts +0 -41
  1087. package/src/utils/findRootOwnerId.ts +0 -19
  1088. package/src/utils/floating/FloatingDelayGroup.ts +0 -280
  1089. package/src/utils/floating/FloatingFocusManager.ts +0 -837
  1090. package/src/utils/floating/FloatingPortal.ts +0 -280
  1091. package/src/utils/floating/FloatingRootStore.ts +0 -127
  1092. package/src/utils/floating/FloatingTree.ts +0 -70
  1093. package/src/utils/floating/FloatingTreeStore.ts +0 -22
  1094. package/src/utils/floating/FocusGuard.ts +0 -34
  1095. package/src/utils/floating/composite.ts +0 -20
  1096. package/src/utils/floating/constants.ts +0 -8
  1097. package/src/utils/floating/createAttribute.ts +0 -4
  1098. package/src/utils/floating/createEventEmitter.ts +0 -20
  1099. package/src/utils/floating/element.ts +0 -88
  1100. package/src/utils/floating/enqueueFocus.ts +0 -38
  1101. package/src/utils/floating/event.ts +0 -53
  1102. package/src/utils/floating/getEmptyRootContext.ts +0 -19
  1103. package/src/utils/floating/gridNavigation.ts +0 -54
  1104. package/src/utils/floating/markOthers.ts +0 -197
  1105. package/src/utils/floating/nodes.ts +0 -31
  1106. package/src/utils/floating/safePolygon.ts +0 -448
  1107. package/src/utils/floating/tabbable.ts +0 -260
  1108. package/src/utils/floating/types.ts +0 -57
  1109. package/src/utils/floating/useClick.ts +0 -174
  1110. package/src/utils/floating/useClientPoint.ts +0 -276
  1111. package/src/utils/floating/useDismiss.ts +0 -639
  1112. package/src/utils/floating/useFloating.ts +0 -198
  1113. package/src/utils/floating/useFloatingRootContext.ts +0 -81
  1114. package/src/utils/floating/useFocus.ts +0 -248
  1115. package/src/utils/floating/useHoverFloatingInteraction.ts +0 -302
  1116. package/src/utils/floating/useHoverInteractionSharedState.ts +0 -139
  1117. package/src/utils/floating/useHoverReferenceInteraction.ts +0 -510
  1118. package/src/utils/floating/useHoverShared.ts +0 -78
  1119. package/src/utils/floating/useListNavigation.ts +0 -1018
  1120. package/src/utils/floating/useSyncedFloatingRootContext.ts +0 -93
  1121. package/src/utils/floating/useTypeahead.ts +0 -287
  1122. package/src/utils/formatNumber.ts +0 -44
  1123. package/src/utils/generateId.ts +0 -10
  1124. package/src/utils/getDefaultFormSubmitter.ts +0 -19
  1125. package/src/utils/getDisabledMountTransitionStyles.ts +0 -12
  1126. package/src/utils/getElementRef.ts +0 -13
  1127. package/src/utils/getStateAttributesProps.ts +0 -34
  1128. package/src/utils/inertValue.ts +0 -5
  1129. package/src/utils/matchesFocusVisible.ts +0 -16
  1130. package/src/utils/mergeCleanups.ts +0 -13
  1131. package/src/utils/mergeObjects.ts +0 -18
  1132. package/src/utils/mergeProps.ts +0 -206
  1133. package/src/utils/noop.ts +0 -4
  1134. package/src/utils/number/constants.ts +0 -4
  1135. package/src/utils/number/parse.ts +0 -227
  1136. package/src/utils/number/types.ts +0 -21
  1137. package/src/utils/number/validate.ts +0 -129
  1138. package/src/utils/owner.ts +0 -9
  1139. package/src/utils/platform.ts +0 -69
  1140. package/src/utils/serializeValue.ts +0 -15
  1141. package/src/utils/slider/asc.ts +0 -4
  1142. package/src/utils/slider/getMidpoint.ts +0 -14
  1143. package/src/utils/slider/getPushedThumbValues.ts +0 -73
  1144. package/src/utils/slider/getSliderValue.ts +0 -27
  1145. package/src/utils/slider/replaceArrayItemAtIndex.ts +0 -8
  1146. package/src/utils/slider/resolveThumbCollision.ts +0 -178
  1147. package/src/utils/slider/roundValueToStep.ts +0 -22
  1148. package/src/utils/slider/validateMinimumDistance.ts +0 -22
  1149. package/src/utils/slider/valueArrayToPercentages.ts +0 -11
  1150. package/src/utils/store/ReactStore.ts +0 -168
  1151. package/src/utils/store/Store.ts +0 -84
  1152. package/src/utils/store/createSelector.ts +0 -66
  1153. package/src/utils/store/useStore.ts +0 -49
  1154. package/src/utils/stringifyLocale.ts +0 -10
  1155. package/src/utils/useAnchorPositioning.ts +0 -581
  1156. package/src/utils/useAnimationFrame.ts +0 -82
  1157. package/src/utils/useAnimationsFinished.ts +0 -100
  1158. package/src/utils/useBaseUiId.ts +0 -19
  1159. package/src/utils/useButton.ts +0 -217
  1160. package/src/utils/useCheckboxGroupParent.ts +0 -113
  1161. package/src/utils/useControlled.ts +0 -42
  1162. package/src/utils/useEnhancedClickHandler.ts +0 -47
  1163. package/src/utils/useForcedRerendering.ts +0 -11
  1164. package/src/utils/useOnFirstRender.ts +0 -11
  1165. package/src/utils/useOnMount.ts +0 -17
  1166. package/src/utils/useOpenChangeComplete.ts +0 -46
  1167. package/src/utils/usePopupViewport.ts +0 -375
  1168. package/src/utils/usePositioner.ts +0 -48
  1169. package/src/utils/usePressAndHold.ts +0 -35
  1170. package/src/utils/usePreviousValue.ts +0 -33
  1171. package/src/utils/useRefWithInit.ts +0 -23
  1172. package/src/utils/useRenderElement.ts +0 -164
  1173. package/src/utils/useScrollLock.ts +0 -253
  1174. package/src/utils/useStableCallback.ts +0 -26
  1175. package/src/utils/useTimeout.ts +0 -51
  1176. package/src/utils/useTransitionStatus.ts +0 -115
  1177. package/src/utils/useValueAsRef.ts +0 -25
  1178. package/src/utils/useValueChanged.ts +0 -37
  1179. package/src/utils/visuallyHidden.ts +0 -24
package/dist/cjs/menu.cjs DELETED
@@ -1,2420 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var menu_exports = {};
20
- __export(menu_exports, {
21
- Menu: () => Menu,
22
- MenuHandle: () => MenuHandle,
23
- MenuRootContext: () => MenuRootContext,
24
- MenuStore: () => MenuStore,
25
- MenuSubmenuRootContext: () => MenuSubmenuRootContext,
26
- MenuViewportCssVars: () => MenuViewportCssVars,
27
- REGULAR_ITEM: () => REGULAR_ITEM,
28
- createMenuHandle: () => createMenuHandle,
29
- itemMapping: () => itemMapping,
30
- useMenuCheckboxItemContext: () => useMenuCheckboxItemContext,
31
- useMenuGroupRootContext: () => useMenuGroupRootContext,
32
- useMenuItem: () => useMenuItem,
33
- useMenuItemCommonProps: () => useMenuItemCommonProps,
34
- useMenuPortalContext: () => useMenuPortalContext,
35
- useMenuPositionerContext: () => useMenuPositionerContext,
36
- useMenuRadioGroupContext: () => useMenuRadioGroupContext,
37
- useMenuRadioItemContext: () => useMenuRadioItemContext,
38
- useMenuRootContext: () => useMenuRootContext,
39
- useMenuSubmenuRootContext: () => useMenuSubmenuRootContext
40
- });
41
- module.exports = __toCommonJS(menu_exports);
42
- var import_octane = require("octane");
43
- var import_internal = require("./internal.cjs");
44
- var import_separator = require("./separator.cjs");
45
- var import_useRenderElement = require("./utils/useRenderElement.cjs");
46
- var import_mergeProps = require("./utils/mergeProps.cjs");
47
- var import_useButton = require("./utils/useButton.cjs");
48
- var import_useBaseUiId = require("./utils/useBaseUiId.cjs");
49
- var import_useStableCallback = require("./utils/useStableCallback.cjs");
50
- var import_useControlled = require("./utils/useControlled.cjs");
51
- var import_useRefWithInit = require("./utils/useRefWithInit.cjs");
52
- var import_useTimeout = require("./utils/useTimeout.cjs");
53
- var import_composeRefs = require("./utils/composeRefs.cjs");
54
- var import_useTransitionStatus = require("./utils/useTransitionStatus.cjs");
55
- var import_usePopupViewport = require("./utils/usePopupViewport.cjs");
56
- var import_useCompositeListItem = require("./utils/composite/useCompositeListItem.cjs");
57
- var import_platform = require("./utils/platform.cjs");
58
- var import_createChangeEventDetails = require("./utils/createChangeEventDetails.cjs");
59
- var import_empty = require("./utils/empty.cjs");
60
- var import_ReactStore = require("./utils/store/ReactStore.cjs");
61
- var import_createSelector = require("./utils/store/createSelector.cjs");
62
- var import_owner = require("./utils/owner.cjs");
63
- var import_contains = require("./utils/contains.cjs");
64
- var import_inertValue = require("./utils/inertValue.cjs");
65
- var import_getPseudoElementBounds = require("./utils/getPseudoElementBounds.cjs");
66
- var import_getDisabledMountTransitionStyles = require("./utils/getDisabledMountTransitionStyles.cjs");
67
- var import_useMixedToggleClickHandler = require("./utils/useMixedToggleClickHandler.cjs");
68
- var import_useOpenInteractionType = require("./utils/useOpenInteractionType.cjs");
69
- var import_useOpenChangeComplete = require("./utils/useOpenChangeComplete.cjs");
70
- var import_useAnimationsFinished = require("./utils/useAnimationsFinished.cjs");
71
- var import_useAnchoredPopupScrollLock = require("./utils/useAnchoredPopupScrollLock.cjs");
72
- var import_usePositioner = require("./utils/usePositioner.cjs");
73
- var import_InternalBackdrop = require("./utils/InternalBackdrop.cjs");
74
- var import_adaptiveOriginMiddleware = require("./utils/adaptiveOriginMiddleware.cjs");
75
- var import_findRootOwnerId = require("./utils/findRootOwnerId.cjs");
76
- var import_DirectionContext = require("./utils/DirectionContext.cjs");
77
- var import_constants = require("./utils/constants.cjs");
78
- var import_popupStateMapping = require("./utils/popupStateMapping.cjs");
79
- var import_useTransitionStatus2 = require("./utils/useTransitionStatus.cjs");
80
- var import_keys = require("./utils/composite/keys.cjs");
81
- var import_CompositeList = require("./utils/composite/CompositeList.cjs");
82
- var import_CompositeItem = require("./utils/composite/CompositeItem.cjs");
83
- var import_CompositeRootContext = require("./utils/CompositeRootContext.cjs");
84
- var import_useAnchorPositioning = require("./utils/useAnchorPositioning.cjs");
85
- var import_useClick = require("./utils/floating/useClick.cjs");
86
- var import_useFocus = require("./utils/floating/useFocus.cjs");
87
- var import_useDismiss = require("./utils/floating/useDismiss.cjs");
88
- var import_useListNavigation = require("./utils/floating/useListNavigation.cjs");
89
- var import_useTypeahead = require("./utils/floating/useTypeahead.cjs");
90
- var import_useHoverReferenceInteraction = require("./utils/floating/useHoverReferenceInteraction.cjs");
91
- var import_useHoverFloatingInteraction = require("./utils/floating/useHoverFloatingInteraction.cjs");
92
- var import_useSyncedFloatingRootContext = require("./utils/floating/useSyncedFloatingRootContext.cjs");
93
- var import_FloatingFocusManager = require("./utils/floating/FloatingFocusManager.cjs");
94
- var import_FloatingPortal = require("./utils/floating/FloatingPortal.cjs");
95
- var import_FocusGuard = require("./utils/floating/FocusGuard.cjs");
96
- var import_FloatingTree = require("./utils/floating/FloatingTree.cjs");
97
- var import_MenubarContext = require("./utils/MenubarContext.cjs");
98
- var import_ContextMenuRootContext = require("./utils/ContextMenuRootContext.cjs");
99
- var import_popups = require("./utils/popups/index.cjs");
100
- var import_useTriggerFocusGuards = require("./utils/popups/useTriggerFocusGuards.cjs");
101
- const BOUNDARY_OFFSET = 2;
102
- const menuSelectors = {
103
- ...import_popups.popupStoreSelectors,
104
- disabled: (0, import_createSelector.createSelector)(
105
- (state) => state.parent.type === "menubar" ? state.parent.context.disabled || state.disabled : state.disabled
106
- ),
107
- modal: (0, import_createSelector.createSelector)(
108
- (state) => (state.parent.type === void 0 || state.parent.type === "context-menu") && (state.modal ?? true)
109
- ),
110
- openMethod: (0, import_createSelector.createSelector)((state) => state.openMethod),
111
- allowMouseEnter: (0, import_createSelector.createSelector)((state) => state.allowMouseEnter),
112
- highlightItemOnHover: (0, import_createSelector.createSelector)((state) => state.highlightItemOnHover),
113
- stickIfOpen: (0, import_createSelector.createSelector)((state) => state.stickIfOpen),
114
- parent: (0, import_createSelector.createSelector)((state) => state.parent),
115
- rootId: (0, import_createSelector.createSelector)((state) => {
116
- if (state.parent.type === "menu") {
117
- return state.parent.store.select("rootId");
118
- }
119
- return state.parent.type !== void 0 ? state.parent.context.rootId : state.rootId;
120
- }),
121
- activeIndex: (0, import_createSelector.createSelector)((state) => state.activeIndex),
122
- isActive: (0, import_createSelector.createSelector)(
123
- (state, itemIndex) => state.activeIndex === itemIndex
124
- ),
125
- hoverEnabled: (0, import_createSelector.createSelector)((state) => state.hoverEnabled),
126
- instantType: (0, import_createSelector.createSelector)((state) => state.instantType),
127
- lastOpenChangeReason: (0, import_createSelector.createSelector)((state) => state.openChangeReason),
128
- floatingTreeRoot: (0, import_createSelector.createSelector)((state) => {
129
- if (state.parent.type === "menu") {
130
- return state.parent.store.select("floatingTreeRoot");
131
- }
132
- return state.floatingTreeRoot;
133
- }),
134
- floatingNodeId: (0, import_createSelector.createSelector)((state) => state.floatingNodeId),
135
- floatingParentNodeId: (0, import_createSelector.createSelector)((state) => state.floatingParentNodeId),
136
- itemProps: (0, import_createSelector.createSelector)((state) => state.itemProps),
137
- closeDelay: (0, import_createSelector.createSelector)((state) => state.closeDelay),
138
- hasViewport: (0, import_createSelector.createSelector)((state) => state.hasViewport),
139
- keyboardEventRelay: (0, import_createSelector.createSelector)(
140
- (state) => {
141
- if (state.keyboardEventRelay) {
142
- return state.keyboardEventRelay;
143
- }
144
- if (state.parent.type === "menu") {
145
- return state.parent.store.select("keyboardEventRelay");
146
- }
147
- return void 0;
148
- }
149
- )
150
- };
151
- function createInitialMenuState() {
152
- return {
153
- ...(0, import_popups.createInitialPopupStoreState)(),
154
- disabled: false,
155
- modal: true,
156
- openMethod: null,
157
- allowMouseEnter: false,
158
- highlightItemOnHover: true,
159
- stickIfOpen: true,
160
- parent: {
161
- type: void 0
162
- },
163
- rootId: void 0,
164
- activeIndex: null,
165
- hoverEnabled: true,
166
- instantType: void 0,
167
- openChangeReason: null,
168
- floatingTreeRoot: new import_FloatingTree.FloatingTreeStore(),
169
- floatingNodeId: void 0,
170
- floatingParentNodeId: null,
171
- itemProps: import_empty.EMPTY_OBJECT,
172
- keyboardEventRelay: void 0,
173
- closeDelay: 0,
174
- hasViewport: false
175
- };
176
- }
177
- class MenuStore extends import_ReactStore.ReactStore {
178
- unsubscribeParentListener = null;
179
- constructor(initialState) {
180
- super(
181
- { ...createInitialMenuState(), ...initialState },
182
- {
183
- positionerRef: { current: null },
184
- popupRef: { current: null },
185
- typingRef: { current: false },
186
- itemDomElements: { current: [] },
187
- itemLabels: { current: [] },
188
- allowMouseUpTriggerRef: { current: false },
189
- triggerFocusTargetRef: { current: null },
190
- beforeContentFocusGuardRef: { current: null },
191
- onOpenChangeComplete: void 0,
192
- triggerElements: new import_popups.PopupTriggerMap()
193
- },
194
- menuSelectors
195
- );
196
- this.unsubscribeParentListener = this.observe("parent", (parent) => {
197
- this.unsubscribeParentListener?.();
198
- if (parent.type === "menu") {
199
- let rootId = parent.store.select("rootId");
200
- let floatingTreeRoot = parent.store.select("floatingTreeRoot");
201
- let keyboardEventRelay = parent.store.select("keyboardEventRelay");
202
- this.unsubscribeParentListener = parent.store.subscribe(() => {
203
- const nextRootId = parent.store.select("rootId");
204
- const nextFloatingTreeRoot = parent.store.select("floatingTreeRoot");
205
- const nextKeyboardEventRelay = parent.store.select("keyboardEventRelay");
206
- if (rootId === nextRootId && floatingTreeRoot === nextFloatingTreeRoot && keyboardEventRelay === nextKeyboardEventRelay) {
207
- return;
208
- }
209
- rootId = nextRootId;
210
- floatingTreeRoot = nextFloatingTreeRoot;
211
- keyboardEventRelay = nextKeyboardEventRelay;
212
- this.notifyAll();
213
- });
214
- this.context.allowMouseUpTriggerRef = parent.store.context.allowMouseUpTriggerRef;
215
- return;
216
- }
217
- if (parent.type !== void 0) {
218
- this.context.allowMouseUpTriggerRef = parent.context.allowMouseUpTriggerRef;
219
- }
220
- this.unsubscribeParentListener = null;
221
- });
222
- }
223
- // Routed through the floating root context's event bus rather than applied directly, so that
224
- // `Menu.Root` owns the one `setOpen` implementation even when the caller is a DETACHED trigger
225
- // (or `MenuHandle`) that only holds the store.
226
- setOpen(open, eventDetails) {
227
- this.state.floatingRootContext.context.events.emit("setOpen", { open, eventDetails });
228
- }
229
- static useStore(externalStore, initialState, slot) {
230
- const internalStore = (0, import_useRefWithInit.useRefWithInit)(
231
- () => new MenuStore(initialState),
232
- (0, import_internal.subSlot)(slot, "ref")
233
- ).current;
234
- return externalStore ?? internalStore;
235
- }
236
- }
237
- class MenuHandle {
238
- /** Internal store holding the menu's state. */
239
- store;
240
- constructor() {
241
- this.store = new MenuStore();
242
- }
243
- /**
244
- * Opens the menu and associates it with the trigger with the given id. The trigger must be a
245
- * `Menu.Trigger` with this handle passed as a prop.
246
- */
247
- open(triggerId) {
248
- const triggerElement = triggerId ? this.store.context.triggerElements.getById(triggerId) : void 0;
249
- if (triggerId && !triggerElement) {
250
- throw new Error(`Base UI: MenuHandle.open: No trigger found with id "${triggerId}".`);
251
- }
252
- this.store.setOpen(
253
- true,
254
- (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.imperativeAction, void 0, triggerElement)
255
- );
256
- }
257
- /** Closes the menu. */
258
- close() {
259
- this.store.setOpen(
260
- false,
261
- (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.imperativeAction, void 0, void 0)
262
- );
263
- }
264
- /** Indicates whether the menu is currently open. */
265
- get isOpen() {
266
- return this.store.select("open");
267
- }
268
- }
269
- function createMenuHandle() {
270
- return new MenuHandle();
271
- }
272
- const MenuRootContext = (0, import_octane.createContext)(void 0);
273
- function useMenuRootContext(optional) {
274
- const context = (0, import_octane.useContext)(MenuRootContext);
275
- if (context === void 0 && !optional) {
276
- throw new Error(
277
- "Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>."
278
- );
279
- }
280
- return context;
281
- }
282
- const MenuSubmenuRootContext = (0, import_octane.createContext)(
283
- void 0
284
- );
285
- function useMenuSubmenuRootContext() {
286
- return (0, import_octane.useContext)(MenuSubmenuRootContext);
287
- }
288
- const MenuPortalContext = (0, import_octane.createContext)(void 0);
289
- function useMenuPortalContext() {
290
- const value = (0, import_octane.useContext)(MenuPortalContext);
291
- if (value === void 0) {
292
- throw new Error("Base UI: <Menu.Portal> is missing.");
293
- }
294
- return value;
295
- }
296
- const MenuPositionerContext = (0, import_octane.createContext)(void 0);
297
- function useMenuPositionerContext(optional) {
298
- const context = (0, import_octane.useContext)(MenuPositionerContext);
299
- if (!context && !optional) {
300
- throw new Error(
301
- "Base UI: MenuPositionerContext is missing. Menu parts must be placed within <Menu.Positioner>."
302
- );
303
- }
304
- return context;
305
- }
306
- function MenuRoot(props) {
307
- const slot = (0, import_internal.S)("MenuRoot");
308
- const {
309
- children,
310
- open: openProp,
311
- onOpenChange,
312
- onOpenChangeComplete,
313
- defaultOpen = false,
314
- disabled: disabledProp = false,
315
- modal: modalProp,
316
- loopFocus = true,
317
- orientation = "vertical",
318
- actionsRef,
319
- closeParentOnEsc = false,
320
- handle,
321
- triggerId: triggerIdProp,
322
- defaultTriggerId: defaultTriggerIdProp = null,
323
- highlightItemOnHover = true
324
- } = props;
325
- const contextMenuContext = (0, import_ContextMenuRootContext.useContextMenuRootContext)(true);
326
- const parentMenuRootContext = useMenuRootContext(true);
327
- const menubarContext = (0, import_MenubarContext.useMenubarContext)(true);
328
- const isSubmenu = useMenuSubmenuRootContext();
329
- const parentFromContext = (0, import_octane.useMemo)(
330
- () => {
331
- if (isSubmenu && parentMenuRootContext) {
332
- return {
333
- type: "menu",
334
- store: parentMenuRootContext.store
335
- };
336
- }
337
- if (menubarContext) {
338
- return {
339
- type: "menubar",
340
- context: menubarContext
341
- };
342
- }
343
- if (contextMenuContext && !parentMenuRootContext) {
344
- return {
345
- type: "context-menu",
346
- context: contextMenuContext
347
- };
348
- }
349
- return {
350
- type: void 0
351
- };
352
- },
353
- [contextMenuContext, parentMenuRootContext, menubarContext, isSubmenu],
354
- (0, import_internal.subSlot)(slot, "parent")
355
- );
356
- const store = MenuStore.useStore(
357
- handle?.store,
358
- {
359
- open: defaultOpen,
360
- openProp,
361
- activeTriggerId: defaultTriggerIdProp,
362
- triggerIdProp,
363
- parent: parentFromContext
364
- },
365
- (0, import_internal.subSlot)(slot, "store")
366
- );
367
- (0, import_popups.useInitialOpenSync)(
368
- store,
369
- openProp,
370
- defaultOpen,
371
- defaultTriggerIdProp,
372
- (0, import_internal.subSlot)(slot, "ios")
373
- );
374
- store.useControlledProp("openProp", openProp, (0, import_internal.subSlot)(slot, "cp-open"));
375
- store.useControlledProp("triggerIdProp", triggerIdProp, (0, import_internal.subSlot)(slot, "cp-tid"));
376
- store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete, (0, import_internal.subSlot)(slot, "cc"));
377
- const rootId = (0, import_octane.useId)((0, import_internal.subSlot)(slot, "rootId"));
378
- const floatingId = (0, import_octane.useId)((0, import_internal.subSlot)(slot, "floatingId"));
379
- const floatingTreeRoot = store.useState("floatingTreeRoot", (0, import_internal.subSlot)(slot, "ftr"));
380
- const floatingNodeIdFromContext = (0, import_FloatingTree.useFloatingNodeId)(floatingTreeRoot, (0, import_internal.subSlot)(slot, "nodeId"));
381
- const floatingParentNodeIdFromContext = (0, import_FloatingTree.useFloatingParentNodeId)();
382
- const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
383
- const activeTriggerElement = store.useState("activeTriggerElement", (0, import_internal.subSlot)(slot, "ate"));
384
- const positionerElement = store.useState("positionerElement", (0, import_internal.subSlot)(slot, "posEl"));
385
- const hoverEnabled = store.useState("hoverEnabled", (0, import_internal.subSlot)(slot, "he"));
386
- const disabled = store.useState("disabled", (0, import_internal.subSlot)(slot, "disabled"));
387
- const lastOpenChangeReason = store.useState("lastOpenChangeReason", (0, import_internal.subSlot)(slot, "locr"));
388
- const parent = store.useState("parent", (0, import_internal.subSlot)(slot, "p"));
389
- const activeIndex = store.useState("activeIndex", (0, import_internal.subSlot)(slot, "ai"));
390
- const payload = store.useState("payload", (0, import_internal.subSlot)(slot, "payload"));
391
- const floatingParentNodeId = store.useState("floatingParentNodeId", (0, import_internal.subSlot)(slot, "fpni"));
392
- const openEventRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "oer"));
393
- const allowOutsidePressDismissalRef = (0, import_octane.useRef)(
394
- parent.type !== "context-menu",
395
- (0, import_internal.subSlot)(slot, "aopdr")
396
- );
397
- const allowOutsidePressDismissalTimeout = (0, import_useTimeout.useTimeout)((0, import_internal.subSlot)(slot, "aopdt"));
398
- const allowTouchToCloseRef = (0, import_octane.useRef)(true, (0, import_internal.subSlot)(slot, "attcr"));
399
- const allowTouchToCloseTimeout = (0, import_useTimeout.useTimeout)((0, import_internal.subSlot)(slot, "attct"));
400
- const nested = floatingParentNodeId != null;
401
- const { openMethod, triggerProps: interactionTypeProps } = (0, import_useOpenInteractionType.useOpenInteractionType)(
402
- open,
403
- (0, import_internal.subSlot)(slot, "oit")
404
- );
405
- store.useSyncedValues(
406
- {
407
- disabled: disabledProp,
408
- highlightItemOnHover,
409
- modal: parent.type === void 0 ? modalProp : void 0,
410
- openMethod,
411
- rootId
412
- },
413
- (0, import_internal.subSlot)(slot, "sv")
414
- );
415
- (0, import_popups.useImplicitActiveTrigger)(store, {}, (0, import_internal.subSlot)(slot, "iat"));
416
- const { forceUnmount } = (0, import_popups.useOpenStateTransitions)(
417
- open,
418
- store,
419
- () => {
420
- store.update({ allowMouseEnter: false, stickIfOpen: true });
421
- },
422
- (0, import_internal.subSlot)(slot, "ost")
423
- );
424
- (0, import_octane.useLayoutEffect)(
425
- () => {
426
- if (contextMenuContext && !parentMenuRootContext) {
427
- store.update({
428
- parent: {
429
- type: "context-menu",
430
- context: contextMenuContext
431
- },
432
- floatingNodeId: floatingNodeIdFromContext,
433
- floatingParentNodeId: floatingParentNodeIdFromContext
434
- });
435
- } else if (parentMenuRootContext) {
436
- store.update({
437
- floatingNodeId: floatingNodeIdFromContext,
438
- floatingParentNodeId: floatingParentNodeIdFromContext
439
- });
440
- }
441
- },
442
- [
443
- contextMenuContext,
444
- parentMenuRootContext,
445
- floatingNodeIdFromContext,
446
- floatingParentNodeIdFromContext,
447
- store
448
- ],
449
- (0, import_internal.subSlot)(slot, "e:parentSync")
450
- );
451
- (0, import_octane.useEffect)(
452
- () => {
453
- if (!open) {
454
- openEventRef.current = null;
455
- }
456
- if (parent.type !== "context-menu") {
457
- return;
458
- }
459
- if (!open) {
460
- allowOutsidePressDismissalTimeout.clear();
461
- allowOutsidePressDismissalRef.current = false;
462
- return;
463
- }
464
- allowOutsidePressDismissalTimeout.start(500, () => {
465
- allowOutsidePressDismissalRef.current = true;
466
- });
467
- },
468
- [allowOutsidePressDismissalTimeout, open, parent.type],
469
- (0, import_internal.subSlot)(slot, "e:outsidePress")
470
- );
471
- (0, import_octane.useLayoutEffect)(
472
- () => {
473
- if (!open && !hoverEnabled) {
474
- store.set("hoverEnabled", true);
475
- }
476
- },
477
- [open, hoverEnabled, store],
478
- (0, import_internal.subSlot)(slot, "e:hover")
479
- );
480
- const setOpen = (0, import_useStableCallback.useStableCallback)(
481
- (nextOpen, eventDetails) => {
482
- const reason = eventDetails.reason;
483
- if (open === nextOpen && eventDetails.trigger === activeTriggerElement && lastOpenChangeReason === reason) {
484
- return;
485
- }
486
- const shouldPreventUnmountOnClose = (0, import_popups.attachPreventUnmountOnClose)(eventDetails);
487
- if (!nextOpen && eventDetails.trigger == null) {
488
- eventDetails.trigger = activeTriggerElement ?? void 0;
489
- }
490
- onOpenChange?.(nextOpen, eventDetails);
491
- if (eventDetails.isCanceled) {
492
- return;
493
- }
494
- store.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
495
- const nativeEvent = eventDetails.event;
496
- if (nextOpen === false && nativeEvent?.type === "click" && nativeEvent.pointerType === "touch" && !allowTouchToCloseRef.current) {
497
- return;
498
- }
499
- if (nextOpen && reason === import_createChangeEventDetails.REASONS.triggerFocus) {
500
- allowTouchToCloseRef.current = false;
501
- allowTouchToCloseTimeout.start(300, () => {
502
- allowTouchToCloseRef.current = true;
503
- });
504
- } else {
505
- allowTouchToCloseRef.current = true;
506
- allowTouchToCloseTimeout.clear();
507
- }
508
- const isKeyboardClick = (reason === import_createChangeEventDetails.REASONS.triggerPress || reason === import_createChangeEventDetails.REASONS.itemPress) && nativeEvent.detail === 0 && nativeEvent?.isTrusted;
509
- const isDismissClose = !nextOpen && (reason === import_createChangeEventDetails.REASONS.escapeKey || reason == null);
510
- const updatedState = {
511
- open: nextOpen,
512
- openChangeReason: reason
513
- };
514
- openEventRef.current = eventDetails.event ?? null;
515
- (0, import_popups.setPopupOpenState)(
516
- updatedState,
517
- nextOpen,
518
- eventDetails.trigger,
519
- shouldPreventUnmountOnClose()
520
- );
521
- store.update(updatedState);
522
- if (parent.type === "menubar" && (reason === import_createChangeEventDetails.REASONS.triggerFocus || reason === import_createChangeEventDetails.REASONS.focusOut || reason === import_createChangeEventDetails.REASONS.triggerHover || reason === import_createChangeEventDetails.REASONS.listNavigation || reason === import_createChangeEventDetails.REASONS.siblingOpen)) {
523
- store.set("instantType", "group");
524
- } else if (isKeyboardClick || isDismissClose) {
525
- store.set("instantType", isKeyboardClick ? "click" : "dismiss");
526
- } else {
527
- store.set("instantType", void 0);
528
- }
529
- },
530
- (0, import_internal.subSlot)(slot, "setOpen")
531
- );
532
- const floatingRootContext = (0, import_useSyncedFloatingRootContext.useSyncedFloatingRootContext)(
533
- {
534
- popupStore: store,
535
- floatingId,
536
- nested: floatingParentNodeIdFromContext != null,
537
- onOpenChange: setOpen
538
- },
539
- (0, import_internal.subSlot)(slot, "sfrc")
540
- );
541
- const floatingEvents = floatingRootContext.context.events;
542
- (0, import_octane.useEffect)(
543
- () => {
544
- const handleSetOpenEvent = ({
545
- open: nextOpen,
546
- eventDetails
547
- }) => setOpen(nextOpen, eventDetails);
548
- floatingEvents.on("setOpen", handleSetOpenEvent);
549
- return () => {
550
- floatingEvents?.off("setOpen", handleSetOpenEvent);
551
- };
552
- },
553
- [floatingEvents, setOpen],
554
- (0, import_internal.subSlot)(slot, "e:setOpen")
555
- );
556
- const handleImperativeClose = (0, import_octane.useCallback)(
557
- () => {
558
- store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.imperativeAction));
559
- },
560
- [store],
561
- (0, import_internal.subSlot)(slot, "close")
562
- );
563
- (0, import_octane.useImperativeHandle)(
564
- actionsRef,
565
- () => ({ unmount: forceUnmount, close: handleImperativeClose }),
566
- [forceUnmount, handleImperativeClose],
567
- (0, import_internal.subSlot)(slot, "imp")
568
- );
569
- let ctx;
570
- if (parent.type === "context-menu") {
571
- ctx = parent.context;
572
- }
573
- (0, import_octane.useImperativeHandle)(
574
- ctx?.positionerRef,
575
- () => positionerElement,
576
- [positionerElement],
577
- (0, import_internal.subSlot)(slot, "imp-pos")
578
- );
579
- (0, import_octane.useImperativeHandle)(ctx?.actionsRef, () => ({ setOpen }), [setOpen], (0, import_internal.subSlot)(slot, "imp-act"));
580
- const dismiss = (0, import_useDismiss.useDismiss)(
581
- floatingRootContext,
582
- {
583
- enabled: !disabled,
584
- bubbles: { escapeKey: closeParentOnEsc && parent.type === "menu" },
585
- outsidePress() {
586
- if (parent.type !== "context-menu" || openEventRef.current?.type === "contextmenu") {
587
- return true;
588
- }
589
- return allowOutsidePressDismissalRef.current;
590
- },
591
- externalTree: nested ? floatingTreeRoot : void 0
592
- },
593
- (0, import_internal.subSlot)(slot, "dismiss")
594
- );
595
- const direction = (0, import_DirectionContext.useDirection)();
596
- const setActiveIndex = (0, import_octane.useCallback)(
597
- (index) => {
598
- if (store.select("activeIndex") === index) {
599
- return;
600
- }
601
- store.set("activeIndex", index);
602
- },
603
- [store],
604
- (0, import_internal.subSlot)(slot, "sai")
605
- );
606
- const listNavigation = (0, import_useListNavigation.useListNavigation)(
607
- floatingRootContext,
608
- {
609
- enabled: !disabled,
610
- listRef: store.context.itemDomElements,
611
- activeIndex,
612
- nested: parent.type !== void 0,
613
- loopFocus,
614
- orientation,
615
- parentOrientation: parent.type === "menubar" ? parent.context.orientation : void 0,
616
- rtl: direction === "rtl",
617
- disabledIndices: import_empty.EMPTY_ARRAY,
618
- onNavigate: setActiveIndex,
619
- openOnArrowKeyDown: parent.type !== "context-menu",
620
- externalTree: nested ? floatingTreeRoot : void 0,
621
- focusItemOnHover: highlightItemOnHover
622
- },
623
- (0, import_internal.subSlot)(slot, "listNav")
624
- );
625
- const onTyping = (0, import_octane.useCallback)(
626
- (nextTyping) => {
627
- store.context.typingRef.current = nextTyping;
628
- },
629
- [store],
630
- (0, import_internal.subSlot)(slot, "onTyping")
631
- );
632
- const typeahead = (0, import_useTypeahead.useTypeahead)(
633
- floatingRootContext,
634
- {
635
- enabled: !disabled,
636
- listRef: store.context.itemLabels,
637
- elementsRef: store.context.itemDomElements,
638
- activeIndex,
639
- resetMs: import_constants.TYPEAHEAD_RESET_MS,
640
- onMatch: (index) => {
641
- if (open && index !== activeIndex) {
642
- store.set("activeIndex", index);
643
- }
644
- },
645
- onTyping
646
- },
647
- (0, import_internal.subSlot)(slot, "typeahead")
648
- );
649
- const activeTriggerProps = (0, import_octane.useMemo)(
650
- () => {
651
- const mergedProps = (0, import_mergeProps.mergeProps)(
652
- typeahead.reference,
653
- listNavigation.reference,
654
- dismiss.reference,
655
- {
656
- onMouseMove() {
657
- store.set("allowMouseEnter", true);
658
- }
659
- },
660
- interactionTypeProps
661
- );
662
- mergedProps["aria-haspopup"] = "menu";
663
- mergedProps["aria-expanded"] = open;
664
- return mergedProps;
665
- },
666
- [
667
- store,
668
- typeahead.reference,
669
- listNavigation.reference,
670
- dismiss.reference,
671
- interactionTypeProps,
672
- open
673
- ],
674
- (0, import_internal.subSlot)(slot, "atp")
675
- );
676
- const inactiveTriggerProps = (0, import_octane.useMemo)(
677
- () => {
678
- const mergedProps = (0, import_mergeProps.mergeProps)(listNavigation.trigger, dismiss.trigger, interactionTypeProps);
679
- mergedProps["aria-haspopup"] = "menu";
680
- mergedProps["aria-expanded"] = false;
681
- return mergedProps;
682
- },
683
- [listNavigation.trigger, dismiss.trigger, interactionTypeProps],
684
- (0, import_internal.subSlot)(slot, "itp")
685
- );
686
- const popupProps = (0, import_octane.useMemo)(
687
- () => (0, import_mergeProps.mergeProps)(
688
- import_popups.FOCUSABLE_POPUP_PROPS,
689
- {
690
- id: floatingId,
691
- role: "menu",
692
- "aria-labelledby": activeTriggerElement?.id,
693
- onMouseMove() {
694
- store.set("allowMouseEnter", true);
695
- if (parent.type === "menu") {
696
- store.set("hoverEnabled", false);
697
- }
698
- },
699
- onClick() {
700
- if (store.select("hoverEnabled")) {
701
- store.set("hoverEnabled", false);
702
- }
703
- },
704
- onKeyDown(event) {
705
- const relay = store.select("keyboardEventRelay");
706
- if (relay && !event.cancelBubble) {
707
- relay(event);
708
- }
709
- }
710
- },
711
- typeahead.floating,
712
- listNavigation.floating,
713
- dismiss.floating
714
- ),
715
- [
716
- activeTriggerElement,
717
- floatingId,
718
- parent.type,
719
- store,
720
- typeahead.floating,
721
- listNavigation.floating,
722
- dismiss.floating
723
- ],
724
- (0, import_internal.subSlot)(slot, "pp")
725
- );
726
- const itemProps = listNavigation.item ?? import_empty.EMPTY_OBJECT;
727
- (0, import_popups.usePopupInteractionProps)(
728
- store,
729
- {
730
- floatingRootContext,
731
- activeTriggerProps,
732
- inactiveTriggerProps,
733
- popupProps,
734
- itemProps
735
- },
736
- (0, import_internal.subSlot)(slot, "pip")
737
- );
738
- const context = (0, import_octane.useMemo)(
739
- () => ({
740
- store,
741
- parent: parentFromContext
742
- }),
743
- [store, parentFromContext],
744
- (0, import_internal.subSlot)(slot, "ctx")
745
- );
746
- const resolvedChildren = typeof children === "function" && !(0, import_octane.isChildrenBlock)(children) ? children({ payload }) : children;
747
- const content = (0, import_octane.createElement)(MenuRootContext.Provider, {
748
- value: context,
749
- children: resolvedChildren
750
- });
751
- if (parent.type === void 0 || parent.type === "context-menu") {
752
- return (0, import_octane.createElement)(import_FloatingTree.FloatingTree, { externalTree: floatingTreeRoot, children: content });
753
- }
754
- return content;
755
- }
756
- function useMenuParent(slot) {
757
- const contextMenuContext = (0, import_ContextMenuRootContext.useContextMenuRootContext)(true);
758
- const parentContext = useMenuRootContext(true);
759
- const menubarContext = (0, import_MenubarContext.useMenubarContext)(true);
760
- return (0, import_octane.useMemo)(
761
- () => {
762
- if (menubarContext) {
763
- return {
764
- type: "menubar",
765
- context: menubarContext
766
- };
767
- }
768
- if (contextMenuContext && !parentContext) {
769
- return {
770
- type: "context-menu",
771
- context: contextMenuContext
772
- };
773
- }
774
- return {
775
- type: void 0
776
- };
777
- },
778
- [contextMenuContext, parentContext, menubarContext],
779
- (0, import_internal.subSlot)(slot, "parent")
780
- );
781
- }
782
- function useStickIfOpen(open, openReason, slot) {
783
- const stickIfOpenTimeout = (0, import_useTimeout.useTimeout)((0, import_internal.subSlot)(slot, "to"));
784
- const [stickIfOpen, setStickIfOpen] = (0, import_octane.useState)(false, (0, import_internal.subSlot)(slot, "s"));
785
- (0, import_octane.useLayoutEffect)(
786
- () => {
787
- if (open && openReason === import_createChangeEventDetails.REASONS.triggerHover) {
788
- setStickIfOpen(true);
789
- stickIfOpenTimeout.start(import_constants.PATIENT_CLICK_THRESHOLD, () => {
790
- setStickIfOpen(false);
791
- });
792
- } else if (!open) {
793
- stickIfOpenTimeout.clear();
794
- setStickIfOpen(false);
795
- }
796
- },
797
- [open, openReason, stickIfOpenTimeout],
798
- (0, import_internal.subSlot)(slot, "e")
799
- );
800
- return stickIfOpen;
801
- }
802
- function MenuTrigger(componentProps) {
803
- const slot = (0, import_internal.S)("MenuTrigger");
804
- const {
805
- render,
806
- className,
807
- style,
808
- disabled: disabledProp = false,
809
- nativeButton = true,
810
- id: idProp,
811
- openOnHover: openOnHoverProp,
812
- delay = 100,
813
- closeDelay = 0,
814
- handle,
815
- payload,
816
- ref: forwardedRef,
817
- ...elementProps
818
- } = componentProps;
819
- const rootContext = useMenuRootContext(true);
820
- const store = handle?.store ?? rootContext?.store;
821
- if (!store) {
822
- throw new Error(
823
- "Base UI: <Menu.Trigger> must be either used within a <Menu.Root> component or provided with a handle."
824
- );
825
- }
826
- const thisTriggerId = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
827
- const isTriggerActive = store.useState("isTriggerActive", (0, import_internal.subSlot)(slot, "ita"), thisTriggerId);
828
- const floatingRootContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
829
- const isOpenedByThisTrigger = store.useState(
830
- "isOpenedByTrigger",
831
- (0, import_internal.subSlot)(slot, "obt"),
832
- thisTriggerId
833
- );
834
- const popupId = store.useState("triggerPopupId", (0, import_internal.subSlot)(slot, "tpid"), thisTriggerId);
835
- const triggerElementRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "ter"));
836
- const parent = useMenuParent((0, import_internal.subSlot)(slot, "mp"));
837
- const compositeRootContext = (0, import_CompositeRootContext.useCompositeRootContext)(true);
838
- const floatingTreeRootFromContext = (0, import_FloatingTree.useFloatingTree)();
839
- const floatingTreeRoot = (0, import_octane.useMemo)(
840
- () => floatingTreeRootFromContext ?? new import_FloatingTree.FloatingTreeStore(),
841
- [floatingTreeRootFromContext],
842
- (0, import_internal.subSlot)(slot, "ftr")
843
- );
844
- const floatingNodeId = (0, import_FloatingTree.useFloatingNodeId)(floatingTreeRoot, (0, import_internal.subSlot)(slot, "nodeId"));
845
- const floatingParentNodeId = (0, import_FloatingTree.useFloatingParentNodeId)();
846
- const { registerTrigger, isMountedByThisTrigger } = (0, import_popups.useTriggerDataForwarding)(
847
- thisTriggerId,
848
- triggerElementRef,
849
- store,
850
- {
851
- payload,
852
- closeDelay,
853
- parent,
854
- floatingTreeRoot,
855
- floatingNodeId,
856
- floatingParentNodeId,
857
- keyboardEventRelay: compositeRootContext?.relayKeyboardEvent
858
- },
859
- (0, import_internal.subSlot)(slot, "tdf")
860
- );
861
- const isInMenubar = parent.type === "menubar";
862
- const rootDisabled = store.useState("disabled", (0, import_internal.subSlot)(slot, "rd"));
863
- const disabled = disabledProp || rootDisabled || isInMenubar && parent.context.disabled;
864
- const { getButtonProps, buttonRef } = (0, import_useButton.useButton)(
865
- { disabled, native: nativeButton },
866
- (0, import_internal.subSlot)(slot, "btn")
867
- );
868
- (0, import_octane.useEffect)(
869
- () => {
870
- if (!isOpenedByThisTrigger && parent.type === void 0) {
871
- store.context.allowMouseUpTriggerRef.current = false;
872
- }
873
- },
874
- [store, isOpenedByThisTrigger, parent.type],
875
- (0, import_internal.subSlot)(slot, "e:allowMouseUp")
876
- );
877
- const triggerRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "tr"));
878
- const allowMouseUpTriggerTimeout = (0, import_useTimeout.useTimeout)((0, import_internal.subSlot)(slot, "amutt"));
879
- const handleDocumentMouseUp = (0, import_useStableCallback.useStableCallback)(
880
- (mouseEvent) => {
881
- if (!triggerRef.current) {
882
- return;
883
- }
884
- allowMouseUpTriggerTimeout.clear();
885
- store.context.allowMouseUpTriggerRef.current = false;
886
- const mouseUpTarget = mouseEvent.target;
887
- if ((0, import_contains.contains)(triggerRef.current, mouseUpTarget) || (0, import_contains.contains)(store.select("positionerElement"), mouseUpTarget) || mouseUpTarget === triggerRef.current) {
888
- return;
889
- }
890
- if (mouseUpTarget != null && (0, import_findRootOwnerId.findRootOwnerId)(mouseUpTarget) === store.select("rootId")) {
891
- return;
892
- }
893
- const bounds = (0, import_getPseudoElementBounds.getPseudoElementBounds)(triggerRef.current);
894
- if (mouseEvent.clientX >= bounds.left - BOUNDARY_OFFSET && mouseEvent.clientX <= bounds.right + BOUNDARY_OFFSET && mouseEvent.clientY >= bounds.top - BOUNDARY_OFFSET && mouseEvent.clientY <= bounds.bottom + BOUNDARY_OFFSET) {
895
- return;
896
- }
897
- floatingTreeRoot.events.emit("close", {
898
- domEvent: mouseEvent,
899
- reason: import_createChangeEventDetails.REASONS.cancelOpen
900
- });
901
- },
902
- (0, import_internal.subSlot)(slot, "hdmu")
903
- );
904
- (0, import_octane.useEffect)(
905
- () => {
906
- if (isOpenedByThisTrigger && store.select("lastOpenChangeReason") === import_createChangeEventDetails.REASONS.triggerHover) {
907
- const doc = (0, import_owner.ownerDocument)(triggerRef.current);
908
- doc.addEventListener("mouseup", handleDocumentMouseUp, { once: true });
909
- }
910
- },
911
- [isOpenedByThisTrigger, handleDocumentMouseUp, store],
912
- (0, import_internal.subSlot)(slot, "e:mouseup")
913
- );
914
- const parentMenubarHasSubmenuOpen = isInMenubar && parent.context.hasSubmenuOpen;
915
- const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen;
916
- const hoverProps = (0, import_useHoverReferenceInteraction.useHoverReferenceInteraction)(
917
- floatingRootContext,
918
- {
919
- enabled: openOnHover && !disabled && parent.type !== "context-menu" && (!isInMenubar || parentMenubarHasSubmenuOpen && !isMountedByThisTrigger),
920
- handleClose: (0, import_useHoverReferenceInteraction.safePolygon)({ blockPointerEvents: !isInMenubar }),
921
- mouseOnly: true,
922
- move: false,
923
- restMs: parent.type === void 0 ? delay : void 0,
924
- delay: { close: closeDelay },
925
- triggerElementRef,
926
- externalTree: floatingTreeRoot,
927
- isActiveTrigger: isTriggerActive,
928
- isClosing: () => store.select("transitionStatus") === "ending"
929
- },
930
- (0, import_internal.subSlot)(slot, "hover")
931
- );
932
- const stickIfOpen = useStickIfOpen(
933
- isOpenedByThisTrigger,
934
- store.select("lastOpenChangeReason"),
935
- (0, import_internal.subSlot)(slot, "sio")
936
- );
937
- const click = (0, import_useClick.useClick)(
938
- floatingRootContext,
939
- {
940
- enabled: !disabled && parent.type !== "context-menu",
941
- event: isOpenedByThisTrigger && isInMenubar ? "click" : "mousedown",
942
- toggle: true,
943
- ignoreMouse: false,
944
- stickIfOpen: parent.type === void 0 ? stickIfOpen : false
945
- },
946
- (0, import_internal.subSlot)(slot, "click")
947
- );
948
- const focus = (0, import_useFocus.useFocus)(
949
- floatingRootContext,
950
- { enabled: !disabled && parentMenubarHasSubmenuOpen },
951
- (0, import_internal.subSlot)(slot, "focus")
952
- );
953
- const mixedToggleHandlers = (0, import_useMixedToggleClickHandler.useMixedToggleClickHandler)(
954
- {
955
- open: isOpenedByThisTrigger,
956
- enabled: isInMenubar,
957
- mouseDownAction: "open"
958
- },
959
- (0, import_internal.subSlot)(slot, "mixed")
960
- );
961
- const localInteractionProps = (0, import_octane.useMemo)(
962
- () => (0, import_mergeProps.mergeProps)(focus.reference, click.reference),
963
- [focus.reference, click.reference],
964
- (0, import_internal.subSlot)(slot, "lip")
965
- );
966
- const rootTriggerProps = store.useState(
967
- "triggerProps",
968
- (0, import_internal.subSlot)(slot, "tp"),
969
- isMountedByThisTrigger
970
- );
971
- const { preFocusGuardRef, handlePreFocusGuardFocus, handleFocusTargetFocus } = (0, import_useTriggerFocusGuards.useTriggerFocusGuards)(store, triggerElementRef, (0, import_internal.subSlot)(slot, "tfg"));
972
- const state = {
973
- disabled,
974
- open: isOpenedByThisTrigger
975
- };
976
- const refs = [triggerRef, forwardedRef, buttonRef, registerTrigger, triggerElementRef];
977
- const props = [
978
- localInteractionProps,
979
- hoverProps ?? import_empty.EMPTY_OBJECT,
980
- rootTriggerProps,
981
- {
982
- "aria-haspopup": "menu",
983
- "aria-controls": popupId,
984
- id: thisTriggerId,
985
- onMouseDown: (event) => {
986
- if (store.select("open")) {
987
- return;
988
- }
989
- allowMouseUpTriggerTimeout.start(200, () => {
990
- store.context.allowMouseUpTriggerRef.current = true;
991
- });
992
- const doc = (0, import_owner.ownerDocument)(event.currentTarget);
993
- doc.addEventListener("mouseup", handleDocumentMouseUp, { once: true });
994
- }
995
- },
996
- isInMenubar ? { role: "menuitem" } : {},
997
- mixedToggleHandlers,
998
- elementProps,
999
- getButtonProps
1000
- ];
1001
- const element = (0, import_useRenderElement.useRenderElement)(
1002
- "button",
1003
- componentProps,
1004
- {
1005
- enabled: !isInMenubar,
1006
- stateAttributesMapping: import_popupStateMapping.pressableTriggerOpenStateMapping,
1007
- state,
1008
- ref: refs,
1009
- props
1010
- },
1011
- (0, import_internal.subSlot)(slot, "re")
1012
- );
1013
- if (isInMenubar) {
1014
- return (0, import_octane.createElement)(import_CompositeItem.CompositeItem, {
1015
- tag: "button",
1016
- render,
1017
- className,
1018
- style,
1019
- state,
1020
- refs,
1021
- props,
1022
- stateAttributesMapping: import_popupStateMapping.pressableTriggerOpenStateMapping
1023
- });
1024
- }
1025
- const keyedElement = (0, import_octane.createElement)(import_octane.Fragment, { key: thisTriggerId, children: element });
1026
- if (isOpenedByThisTrigger) {
1027
- return [
1028
- (0, import_octane.createElement)(import_FocusGuard.FocusGuard, {
1029
- key: `${thisTriggerId}-pre-focus-guard`,
1030
- ref: preFocusGuardRef,
1031
- onFocus: handlePreFocusGuardFocus
1032
- }),
1033
- keyedElement,
1034
- (0, import_octane.createElement)(import_FocusGuard.FocusGuard, {
1035
- key: `${thisTriggerId}-post-focus-guard`,
1036
- ref: store.context.triggerFocusTargetRef,
1037
- onFocus: handleFocusTargetFocus
1038
- })
1039
- ];
1040
- }
1041
- return keyedElement;
1042
- }
1043
- function MenuPortal(props) {
1044
- const slot = (0, import_internal.S)("MenuPortal");
1045
- const { keepMounted = false, ref, ...portalProps } = props;
1046
- const { store } = useMenuRootContext();
1047
- const mounted = store.useState("mounted", (0, import_internal.subSlot)(slot, "mounted"));
1048
- const shouldRender = mounted || keepMounted;
1049
- if (!shouldRender) {
1050
- return null;
1051
- }
1052
- return (0, import_octane.createElement)(MenuPortalContext.Provider, {
1053
- value: keepMounted,
1054
- children: (0, import_octane.createElement)(import_FloatingPortal.FloatingPortal, { ref, ...portalProps })
1055
- });
1056
- }
1057
- function MenuPositioner(componentProps) {
1058
- const slot = (0, import_internal.S)("MenuPositioner");
1059
- const {
1060
- anchor: anchorProp,
1061
- positionMethod: positionMethodProp = "absolute",
1062
- className,
1063
- render,
1064
- side,
1065
- align: alignProp,
1066
- sideOffset: sideOffsetProp = 0,
1067
- alignOffset: alignOffsetProp = 0,
1068
- collisionBoundary = "clipping-ancestors",
1069
- collisionPadding = 5,
1070
- arrowPadding = 5,
1071
- sticky = false,
1072
- disableAnchorTracking = false,
1073
- collisionAvoidance: collisionAvoidanceProp = import_constants.DROPDOWN_COLLISION_AVOIDANCE,
1074
- style,
1075
- ref: forwardedRef,
1076
- ...elementProps
1077
- } = componentProps;
1078
- const { store } = useMenuRootContext();
1079
- const keepMounted = useMenuPortalContext();
1080
- const contextMenuContext = (0, import_ContextMenuRootContext.useContextMenuRootContext)(true);
1081
- const parent = store.useState("parent", (0, import_internal.subSlot)(slot, "parent"));
1082
- const floatingRootContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
1083
- const floatingTreeRoot = store.useState("floatingTreeRoot", (0, import_internal.subSlot)(slot, "ftr"));
1084
- const mounted = store.useState("mounted", (0, import_internal.subSlot)(slot, "mounted"));
1085
- const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
1086
- const modal = store.useState("modal", (0, import_internal.subSlot)(slot, "modal"));
1087
- const openMethod = store.useState("openMethod", (0, import_internal.subSlot)(slot, "method"));
1088
- const triggerElement = store.useState("activeTriggerElement", (0, import_internal.subSlot)(slot, "trigger"));
1089
- const transitionStatus = store.useState("transitionStatus", (0, import_internal.subSlot)(slot, "trans"));
1090
- const positionerElement = store.useState("positionerElement", (0, import_internal.subSlot)(slot, "posEl"));
1091
- const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "instant"));
1092
- const hasViewport = store.useState("hasViewport", (0, import_internal.subSlot)(slot, "viewport"));
1093
- const lastOpenChangeReason = store.useState("lastOpenChangeReason", (0, import_internal.subSlot)(slot, "locr"));
1094
- const floatingNodeId = store.useState("floatingNodeId", (0, import_internal.subSlot)(slot, "nodeId"));
1095
- const floatingParentNodeId = store.useState("floatingParentNodeId", (0, import_internal.subSlot)(slot, "parentId"));
1096
- const domReference = floatingRootContext.useState("domReferenceElement", (0, import_internal.subSlot)(slot, "domRef"));
1097
- const previousTriggerRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "prevTrigger"));
1098
- const runOnceAnimationsFinish = (0, import_useAnimationsFinished.useAnimationsFinished)(
1099
- positionerElement,
1100
- false,
1101
- false,
1102
- (0, import_internal.subSlot)(slot, "anim")
1103
- );
1104
- let anchor = anchorProp;
1105
- let sideOffset = sideOffsetProp;
1106
- let alignOffset = alignOffsetProp;
1107
- let align = alignProp;
1108
- let collisionAvoidance = collisionAvoidanceProp;
1109
- if (parent.type === "context-menu") {
1110
- anchor = anchorProp ?? parent.context?.anchor;
1111
- align = align ?? "start";
1112
- if (!side && align !== "center") {
1113
- alignOffset = componentProps.alignOffset ?? 2;
1114
- sideOffset = componentProps.sideOffset ?? -5;
1115
- }
1116
- }
1117
- let computedSide = side;
1118
- let computedAlign = align;
1119
- if (parent.type === "menu") {
1120
- computedSide = computedSide ?? "inline-end";
1121
- computedAlign = computedAlign ?? "start";
1122
- collisionAvoidance = componentProps.collisionAvoidance ?? import_constants.POPUP_COLLISION_AVOIDANCE;
1123
- } else if (parent.type === "menubar") {
1124
- computedSide = computedSide ?? (parent.context.orientation === "vertical" ? "inline-end" : "bottom");
1125
- computedAlign = computedAlign ?? "start";
1126
- }
1127
- const contextMenu = parent.type === "context-menu";
1128
- const positioner = (0, import_useAnchorPositioning.useAnchorPositioning)(
1129
- {
1130
- anchor,
1131
- floatingRootContext,
1132
- positionMethod: contextMenuContext ? "fixed" : positionMethodProp,
1133
- mounted,
1134
- side: computedSide,
1135
- sideOffset,
1136
- align: computedAlign,
1137
- alignOffset,
1138
- arrowPadding: contextMenu ? 0 : arrowPadding,
1139
- collisionBoundary,
1140
- collisionPadding,
1141
- sticky,
1142
- nodeId: floatingNodeId,
1143
- keepMounted,
1144
- disableAnchorTracking,
1145
- collisionAvoidance,
1146
- shiftCrossAxis: contextMenu && !("side" in collisionAvoidance && collisionAvoidance.side === "flip"),
1147
- externalTree: floatingTreeRoot,
1148
- adaptiveOrigin: hasViewport ? import_adaptiveOriginMiddleware.adaptiveOrigin : void 0
1149
- },
1150
- (0, import_internal.subSlot)(slot, "positioning")
1151
- );
1152
- (0, import_octane.useEffect)(
1153
- () => {
1154
- function onMenuOpenChange(details) {
1155
- if (details.open) {
1156
- if (details.parentNodeId === floatingNodeId) {
1157
- store.set("hoverEnabled", false);
1158
- }
1159
- if (details.nodeId !== floatingNodeId && details.parentNodeId === store.select("floatingParentNodeId")) {
1160
- store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.siblingOpen));
1161
- }
1162
- }
1163
- }
1164
- floatingTreeRoot.events.on("menuopenchange", onMenuOpenChange);
1165
- return () => {
1166
- floatingTreeRoot.events.off("menuopenchange", onMenuOpenChange);
1167
- };
1168
- },
1169
- [store, floatingTreeRoot.events, floatingNodeId],
1170
- (0, import_internal.subSlot)(slot, "e:openChange")
1171
- );
1172
- (0, import_octane.useEffect)(
1173
- () => {
1174
- if (store.select("floatingParentNodeId") == null) {
1175
- return void 0;
1176
- }
1177
- function onParentClose(details) {
1178
- if (details.open || details.nodeId !== store.select("floatingParentNodeId")) {
1179
- return;
1180
- }
1181
- const reason = details.reason ?? import_createChangeEventDetails.REASONS.siblingOpen;
1182
- store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(reason));
1183
- }
1184
- floatingTreeRoot.events.on("menuopenchange", onParentClose);
1185
- return () => {
1186
- floatingTreeRoot.events.off("menuopenchange", onParentClose);
1187
- };
1188
- },
1189
- [floatingTreeRoot.events, store],
1190
- (0, import_internal.subSlot)(slot, "e:parentClose")
1191
- );
1192
- const closeTimeout = (0, import_useTimeout.useTimeout)((0, import_internal.subSlot)(slot, "closeTimeout"));
1193
- (0, import_octane.useEffect)(
1194
- () => {
1195
- if (!open) {
1196
- closeTimeout.clear();
1197
- }
1198
- },
1199
- [open, closeTimeout],
1200
- (0, import_internal.subSlot)(slot, "e:clearClose")
1201
- );
1202
- (0, import_octane.useEffect)(
1203
- () => {
1204
- function onItemHover(event) {
1205
- if (!open || event.nodeId !== store.select("floatingParentNodeId")) {
1206
- return;
1207
- }
1208
- if (event.target && triggerElement && triggerElement !== event.target) {
1209
- const delay = store.select("closeDelay");
1210
- if (delay > 0) {
1211
- if (!closeTimeout.isStarted()) {
1212
- closeTimeout.start(delay, () => {
1213
- store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.siblingOpen));
1214
- });
1215
- }
1216
- } else {
1217
- store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.siblingOpen));
1218
- }
1219
- } else {
1220
- closeTimeout.clear();
1221
- }
1222
- }
1223
- floatingTreeRoot.events.on("itemhover", onItemHover);
1224
- return () => {
1225
- floatingTreeRoot.events.off("itemhover", onItemHover);
1226
- };
1227
- },
1228
- [floatingTreeRoot.events, open, triggerElement, store, closeTimeout],
1229
- (0, import_internal.subSlot)(slot, "e:itemHover")
1230
- );
1231
- (0, import_octane.useEffect)(
1232
- () => {
1233
- const eventDetails = {
1234
- open,
1235
- nodeId: floatingNodeId,
1236
- parentNodeId: floatingParentNodeId,
1237
- reason: store.select("lastOpenChangeReason")
1238
- };
1239
- floatingTreeRoot.events.emit("menuopenchange", eventDetails);
1240
- },
1241
- [floatingTreeRoot.events, open, store, floatingNodeId, floatingParentNodeId],
1242
- (0, import_internal.subSlot)(slot, "e:emit")
1243
- );
1244
- (0, import_octane.useLayoutEffect)(
1245
- () => {
1246
- const currentTrigger = domReference;
1247
- const previousTrigger = previousTriggerRef.current;
1248
- if (currentTrigger) {
1249
- previousTriggerRef.current = currentTrigger;
1250
- }
1251
- if (previousTrigger && currentTrigger && currentTrigger !== previousTrigger) {
1252
- store.set("instantType", void 0);
1253
- const abortController = new AbortController();
1254
- runOnceAnimationsFinish(() => {
1255
- store.set("instantType", "trigger-change");
1256
- }, abortController.signal);
1257
- return () => {
1258
- abortController.abort();
1259
- };
1260
- }
1261
- return void 0;
1262
- },
1263
- [domReference, runOnceAnimationsFinish, store],
1264
- (0, import_internal.subSlot)(slot, "e:triggerChange")
1265
- );
1266
- const state = {
1267
- open,
1268
- side: positioner.side,
1269
- align: positioner.align,
1270
- anchorHidden: positioner.anchorHidden,
1271
- nested: parent.type === "menu",
1272
- instant: instantType
1273
- };
1274
- const menubarModal = parent.type === "menubar" && parent.context.modal;
1275
- const popupModal = modal && lastOpenChangeReason !== import_createChangeEventDetails.REASONS.triggerHover;
1276
- (0, import_useAnchoredPopupScrollLock.useAnchoredPopupScrollLock)(
1277
- open && (menubarModal || popupModal),
1278
- openMethod === "touch",
1279
- positionerElement,
1280
- triggerElement
1281
- );
1282
- const setPositionerElement = store.useStateSetter("positionerElement", (0, import_internal.subSlot)(slot, "setPosEl"));
1283
- const element = (0, import_usePositioner.usePositioner)(
1284
- componentProps,
1285
- state,
1286
- {
1287
- styles: positioner.positionerStyles,
1288
- transitionStatus,
1289
- props: elementProps,
1290
- refs: [forwardedRef, setPositionerElement],
1291
- hidden: !mounted,
1292
- inert: !open
1293
- },
1294
- (0, import_internal.subSlot)(slot, "positioner")
1295
- );
1296
- const shouldRenderBackdrop = mounted && parent.type !== "menu" && (parent.type !== "menubar" && modal && lastOpenChangeReason !== import_createChangeEventDetails.REASONS.triggerHover || parent.type === "menubar" && parent.context.modal);
1297
- let backdropCutout = null;
1298
- if (parent.type === "menubar") {
1299
- backdropCutout = parent.context.contentElement;
1300
- } else if (parent.type === void 0) {
1301
- backdropCutout = triggerElement;
1302
- }
1303
- return (0, import_octane.createElement)(MenuPositionerContext.Provider, {
1304
- value: positioner,
1305
- children: [
1306
- shouldRenderBackdrop ? (0, import_octane.createElement)(import_InternalBackdrop.InternalBackdrop, {
1307
- key: "backdrop",
1308
- ref: parent.type === "context-menu" || parent.type === "nested-context-menu" ? parent.context.internalBackdropRef : null,
1309
- inert: (0, import_inertValue.inertValue)(!open),
1310
- cutout: backdropCutout
1311
- }) : null,
1312
- (0, import_octane.createElement)(import_FloatingTree.FloatingNode, {
1313
- key: "node",
1314
- id: floatingNodeId,
1315
- children: (0, import_octane.createElement)(import_CompositeList.CompositeList, {
1316
- elementsRef: store.context.itemDomElements,
1317
- labelsRef: store.context.itemLabels,
1318
- children: element
1319
- })
1320
- })
1321
- ]
1322
- });
1323
- }
1324
- const menuPopupStateAttributesMapping = {
1325
- ...import_popupStateMapping.popupStateMapping,
1326
- ...import_useTransitionStatus2.transitionStatusMapping
1327
- };
1328
- function MenuPopup(componentProps) {
1329
- const slot = (0, import_internal.S)("MenuPopup");
1330
- const {
1331
- render,
1332
- className,
1333
- style,
1334
- finalFocus,
1335
- ref: forwardedRef,
1336
- ...elementProps
1337
- } = componentProps;
1338
- const { store } = useMenuRootContext();
1339
- const { side, align } = useMenuPositionerContext();
1340
- const insideToolbar = false;
1341
- const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
1342
- const transitionStatus = store.useState("transitionStatus", (0, import_internal.subSlot)(slot, "trans"));
1343
- const popupProps = store.useState("popupProps", (0, import_internal.subSlot)(slot, "popupProps"));
1344
- const mounted = store.useState("mounted", (0, import_internal.subSlot)(slot, "mounted"));
1345
- const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "instant"));
1346
- const triggerElement = store.useState("activeTriggerElement", (0, import_internal.subSlot)(slot, "trigger"));
1347
- const parent = store.useState("parent", (0, import_internal.subSlot)(slot, "parent"));
1348
- const lastOpenChangeReason = store.useState("lastOpenChangeReason", (0, import_internal.subSlot)(slot, "locr"));
1349
- const rootId = store.useState("rootId", (0, import_internal.subSlot)(slot, "rootId"));
1350
- const floatingContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
1351
- const floatingTreeRoot = store.useState("floatingTreeRoot", (0, import_internal.subSlot)(slot, "ftr"));
1352
- const closeDelay = store.useState("closeDelay", (0, import_internal.subSlot)(slot, "closeDelay"));
1353
- const hoverEnabled = store.useState("hoverEnabled", (0, import_internal.subSlot)(slot, "hover"));
1354
- const disabled = store.useState("disabled", (0, import_internal.subSlot)(slot, "disabled"));
1355
- const openMethod = store.useState("openMethod", (0, import_internal.subSlot)(slot, "method"));
1356
- const isContextMenu = parent.type === "context-menu";
1357
- (0, import_useOpenChangeComplete.useOpenChangeComplete)(
1358
- {
1359
- open,
1360
- ref: store.context.popupRef,
1361
- onComplete() {
1362
- if (open) {
1363
- store.context.onOpenChangeComplete?.(true);
1364
- }
1365
- }
1366
- },
1367
- (0, import_internal.subSlot)(slot, "occ")
1368
- );
1369
- (0, import_octane.useEffect)(
1370
- () => {
1371
- function handleClose(event) {
1372
- store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(event.reason, event.domEvent));
1373
- }
1374
- floatingTreeRoot.events.on("close", handleClose);
1375
- return () => {
1376
- floatingTreeRoot.events.off("close", handleClose);
1377
- };
1378
- },
1379
- [floatingTreeRoot.events, store],
1380
- (0, import_internal.subSlot)(slot, "e:close")
1381
- );
1382
- (0, import_useHoverFloatingInteraction.useHoverFloatingInteraction)(
1383
- floatingContext,
1384
- {
1385
- enabled: hoverEnabled && !disabled && !isContextMenu && parent.type !== "menubar",
1386
- closeDelay
1387
- },
1388
- (0, import_internal.subSlot)(slot, "hoverInteraction")
1389
- );
1390
- const setPopupElement = store.useStateSetter("popupElement", (0, import_internal.subSlot)(slot, "setPopupEl"));
1391
- const state = {
1392
- transitionStatus,
1393
- side,
1394
- align,
1395
- open,
1396
- nested: parent.type === "menu",
1397
- instant: instantType
1398
- };
1399
- const element = (0, import_useRenderElement.useRenderElement)(
1400
- "div",
1401
- componentProps,
1402
- {
1403
- state,
1404
- ref: [forwardedRef, store.context.popupRef, setPopupElement],
1405
- stateAttributesMapping: menuPopupStateAttributesMapping,
1406
- props: [
1407
- popupProps,
1408
- {
1409
- onKeyDown(event) {
1410
- if (insideToolbar && import_keys.COMPOSITE_KEYS.has(event.key)) {
1411
- event.stopPropagation();
1412
- }
1413
- }
1414
- },
1415
- (0, import_getDisabledMountTransitionStyles.getDisabledMountTransitionStyles)(transitionStatus),
1416
- elementProps,
1417
- { "data-rootownerid": rootId }
1418
- ]
1419
- },
1420
- (0, import_internal.subSlot)(slot, "re")
1421
- );
1422
- let returnFocus = parent.type === void 0 || isContextMenu;
1423
- if (triggerElement || parent.type === "menubar" && lastOpenChangeReason !== import_createChangeEventDetails.REASONS.outsidePress) {
1424
- returnFocus = true;
1425
- }
1426
- return (0, import_octane.createElement)(import_FloatingFocusManager.FloatingFocusManager, {
1427
- context: floatingContext,
1428
- openInteractionType: openMethod,
1429
- modal: isContextMenu,
1430
- disabled: !mounted,
1431
- returnFocus: finalFocus === void 0 ? returnFocus : finalFocus,
1432
- initialFocus: parent.type !== "menu",
1433
- restoreFocus: true,
1434
- externalTree: parent.type !== "menubar" ? floatingTreeRoot : void 0,
1435
- previousFocusableElement: triggerElement,
1436
- nextFocusableElement: parent.type === void 0 ? store.context.triggerFocusTargetRef : void 0,
1437
- beforeContentFocusGuardRef: parent.type === void 0 ? store.context.beforeContentFocusGuardRef : void 0,
1438
- children: element
1439
- });
1440
- }
1441
- const itemMapping = {
1442
- checked(value) {
1443
- if (value) {
1444
- return { "data-checked": "" };
1445
- }
1446
- return { "data-unchecked": "" };
1447
- },
1448
- ...import_useTransitionStatus2.transitionStatusMapping
1449
- };
1450
- const REGULAR_ITEM = {
1451
- type: "regular-item"
1452
- };
1453
- function useMenuItemCommonProps(params, slot) {
1454
- const { closeOnClick, highlighted, id, nodeId, store, typingRef, itemRef, itemMetadata } = params;
1455
- const { events: menuEvents } = store.useState("floatingTreeRoot", (0, import_internal.subSlot)(slot, "ftr"));
1456
- const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
1457
- const contextMenuContext = (0, import_ContextMenuRootContext.useContextMenuRootContext)(true);
1458
- const isContextMenu = contextMenuContext !== void 0;
1459
- return (0, import_octane.useMemo)(
1460
- () => ({
1461
- id,
1462
- role: "menuitem",
1463
- tabIndex: open && highlighted ? 0 : -1,
1464
- onKeyDown(event) {
1465
- if (event.key === " " && typingRef?.current) {
1466
- event.preventDefault();
1467
- }
1468
- },
1469
- onMouseMove(event) {
1470
- if (!nodeId) {
1471
- return;
1472
- }
1473
- menuEvents.emit("itemhover", {
1474
- nodeId,
1475
- target: event.currentTarget
1476
- });
1477
- },
1478
- onClick(event) {
1479
- if (closeOnClick) {
1480
- menuEvents.emit("close", { domEvent: event, reason: import_createChangeEventDetails.REASONS.itemPress });
1481
- }
1482
- },
1483
- onMouseUp(event) {
1484
- if (contextMenuContext) {
1485
- const initialCursorPoint = contextMenuContext.initialCursorPointRef.current;
1486
- contextMenuContext.initialCursorPointRef.current = null;
1487
- if (isContextMenu && initialCursorPoint && Math.abs(event.clientX - initialCursorPoint.x) <= 1 && Math.abs(event.clientY - initialCursorPoint.y) <= 1) {
1488
- return;
1489
- }
1490
- if (isContextMenu && !import_platform.platform.os.mac && event.button === 2) {
1491
- return;
1492
- }
1493
- }
1494
- if (itemRef.current && store.context.allowMouseUpTriggerRef.current && (!isContextMenu || event.button === 2)) {
1495
- if (!itemMetadata || itemMetadata.type === "regular-item") {
1496
- itemRef.current.click();
1497
- }
1498
- }
1499
- }
1500
- }),
1501
- [
1502
- closeOnClick,
1503
- highlighted,
1504
- id,
1505
- menuEvents,
1506
- nodeId,
1507
- open,
1508
- store,
1509
- typingRef,
1510
- itemRef,
1511
- contextMenuContext,
1512
- isContextMenu,
1513
- itemMetadata
1514
- ],
1515
- (0, import_internal.subSlot)(slot, "m")
1516
- );
1517
- }
1518
- function useMenuItem(params, slot) {
1519
- const {
1520
- closeOnClick,
1521
- disabled: disabledProp = false,
1522
- highlighted,
1523
- id,
1524
- store,
1525
- typingRef = store.context.typingRef,
1526
- nativeButton,
1527
- itemMetadata,
1528
- nodeId
1529
- } = params;
1530
- const rootDisabled = store.useState("disabled", (0, import_internal.subSlot)(slot, "rd"));
1531
- const disabled = disabledProp || rootDisabled;
1532
- const itemRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "ref"));
1533
- const { getButtonProps, buttonRef } = (0, import_useButton.useButton)(
1534
- {
1535
- disabled,
1536
- focusableWhenDisabled: true,
1537
- native: nativeButton,
1538
- composite: true
1539
- },
1540
- (0, import_internal.subSlot)(slot, "btn")
1541
- );
1542
- const commonProps = useMenuItemCommonProps(
1543
- {
1544
- closeOnClick,
1545
- highlighted,
1546
- id,
1547
- nodeId,
1548
- store,
1549
- typingRef,
1550
- itemRef,
1551
- itemMetadata
1552
- },
1553
- (0, import_internal.subSlot)(slot, "common")
1554
- );
1555
- const getItemProps = (0, import_octane.useCallback)(
1556
- (externalProps) => {
1557
- return (0, import_mergeProps.mergeProps)(
1558
- commonProps,
1559
- {
1560
- onMouseEnter() {
1561
- if (itemMetadata.type !== "submenu-trigger") {
1562
- return;
1563
- }
1564
- itemMetadata.setActive();
1565
- }
1566
- },
1567
- externalProps,
1568
- getButtonProps
1569
- );
1570
- },
1571
- [commonProps, getButtonProps, itemMetadata],
1572
- (0, import_internal.subSlot)(slot, "gip")
1573
- );
1574
- const mergedRef = (0, import_composeRefs.useComposedRefs)(itemRef, buttonRef, (0, import_internal.subSlot)(slot, "refs"));
1575
- return (0, import_octane.useMemo)(
1576
- () => ({
1577
- getItemProps,
1578
- itemRef: mergedRef
1579
- }),
1580
- [getItemProps, mergedRef],
1581
- (0, import_internal.subSlot)(slot, "ret")
1582
- );
1583
- }
1584
- function MenuItem(componentProps) {
1585
- const slot = (0, import_internal.S)("MenuItem");
1586
- const {
1587
- render,
1588
- className,
1589
- id: idProp,
1590
- label,
1591
- nativeButton = false,
1592
- disabled = false,
1593
- closeOnClick = true,
1594
- style,
1595
- ref: forwardedRef,
1596
- ...elementProps
1597
- } = componentProps;
1598
- const listItem = (0, import_useCompositeListItem.useCompositeListItem)({ label }, (0, import_internal.subSlot)(slot, "li"));
1599
- const menuPositionerContext = useMenuPositionerContext(true);
1600
- const id = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
1601
- const { store } = useMenuRootContext();
1602
- const highlighted = store.useState("isActive", (0, import_internal.subSlot)(slot, "hl"), listItem.index);
1603
- const itemProps = store.useState("itemProps", (0, import_internal.subSlot)(slot, "ip"));
1604
- const { getItemProps, itemRef } = useMenuItem(
1605
- {
1606
- closeOnClick,
1607
- disabled,
1608
- highlighted,
1609
- id,
1610
- store,
1611
- nativeButton,
1612
- nodeId: menuPositionerContext?.context.nodeId,
1613
- itemMetadata: REGULAR_ITEM
1614
- },
1615
- (0, import_internal.subSlot)(slot, "item")
1616
- );
1617
- const state = {
1618
- disabled,
1619
- highlighted
1620
- };
1621
- return (0, import_useRenderElement.useRenderElement)(
1622
- "div",
1623
- componentProps,
1624
- {
1625
- state,
1626
- props: [itemProps, elementProps, getItemProps],
1627
- ref: [itemRef, forwardedRef, listItem.ref]
1628
- },
1629
- (0, import_internal.subSlot)(slot, "re")
1630
- );
1631
- }
1632
- function MenuLinkItem(componentProps) {
1633
- const slot = (0, import_internal.S)("MenuLinkItem");
1634
- const {
1635
- render,
1636
- className,
1637
- id: idProp,
1638
- label,
1639
- closeOnClick = false,
1640
- style,
1641
- ref: forwardedRef,
1642
- ...elementProps
1643
- } = componentProps;
1644
- const linkRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "link"));
1645
- const listItem = (0, import_useCompositeListItem.useCompositeListItem)({ label }, (0, import_internal.subSlot)(slot, "li"));
1646
- const menuPositionerContext = useMenuPositionerContext(true);
1647
- const nodeId = menuPositionerContext?.context.nodeId;
1648
- const id = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
1649
- const { store } = useMenuRootContext();
1650
- const highlighted = store.useState("isActive", (0, import_internal.subSlot)(slot, "hl"), listItem.index);
1651
- const itemProps = store.useState("itemProps", (0, import_internal.subSlot)(slot, "ip"));
1652
- const typingRef = store.context.typingRef;
1653
- const { getButtonProps, buttonRef } = (0, import_useButton.useButton)(
1654
- { native: false, composite: true },
1655
- (0, import_internal.subSlot)(slot, "btn")
1656
- );
1657
- const commonProps = useMenuItemCommonProps(
1658
- {
1659
- closeOnClick,
1660
- highlighted,
1661
- id,
1662
- nodeId,
1663
- store,
1664
- typingRef,
1665
- itemRef: linkRef
1666
- },
1667
- (0, import_internal.subSlot)(slot, "common")
1668
- );
1669
- function getItemProps(externalProps) {
1670
- return (0, import_mergeProps.mergeProps)(commonProps, externalProps, getButtonProps);
1671
- }
1672
- const state = { highlighted };
1673
- return (0, import_useRenderElement.useRenderElement)(
1674
- "a",
1675
- componentProps,
1676
- {
1677
- state,
1678
- props: [itemProps, elementProps, getItemProps],
1679
- ref: [linkRef, buttonRef, forwardedRef, listItem.ref]
1680
- },
1681
- (0, import_internal.subSlot)(slot, "re")
1682
- );
1683
- }
1684
- const MenuCheckboxItemContext = (0, import_octane.createContext)(void 0);
1685
- function useMenuCheckboxItemContext() {
1686
- const context = (0, import_octane.useContext)(MenuCheckboxItemContext);
1687
- if (context === void 0) {
1688
- throw new Error(
1689
- "Base UI: MenuCheckboxItemContext is missing. MenuCheckboxItem parts must be placed within <Menu.CheckboxItem>."
1690
- );
1691
- }
1692
- return context;
1693
- }
1694
- function MenuCheckboxItem(componentProps) {
1695
- const slot = (0, import_internal.S)("MenuCheckboxItem");
1696
- const {
1697
- render,
1698
- className,
1699
- id: idProp,
1700
- label,
1701
- nativeButton = false,
1702
- disabled = false,
1703
- closeOnClick = false,
1704
- checked: checkedProp,
1705
- defaultChecked,
1706
- onCheckedChange,
1707
- style,
1708
- ref: forwardedRef,
1709
- ...elementProps
1710
- } = componentProps;
1711
- const listItem = (0, import_useCompositeListItem.useCompositeListItem)({ label }, (0, import_internal.subSlot)(slot, "li"));
1712
- const menuPositionerContext = useMenuPositionerContext(true);
1713
- const id = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
1714
- const { store } = useMenuRootContext();
1715
- const highlighted = store.useState("isActive", (0, import_internal.subSlot)(slot, "hl"), listItem.index);
1716
- const itemProps = store.useState("itemProps", (0, import_internal.subSlot)(slot, "ip"));
1717
- const [checked, setChecked] = (0, import_useControlled.useControlled)(
1718
- {
1719
- controlled: checkedProp,
1720
- default: defaultChecked ?? false
1721
- },
1722
- (0, import_internal.subSlot)(slot, "ctrl")
1723
- );
1724
- const { getItemProps, itemRef } = useMenuItem(
1725
- {
1726
- closeOnClick,
1727
- disabled,
1728
- highlighted,
1729
- id,
1730
- store,
1731
- nativeButton,
1732
- nodeId: menuPositionerContext?.context.nodeId,
1733
- itemMetadata: REGULAR_ITEM
1734
- },
1735
- (0, import_internal.subSlot)(slot, "item")
1736
- );
1737
- const state = (0, import_octane.useMemo)(
1738
- () => ({
1739
- disabled,
1740
- highlighted,
1741
- checked
1742
- }),
1743
- [disabled, highlighted, checked],
1744
- (0, import_internal.subSlot)(slot, "state")
1745
- );
1746
- function handleClick(event) {
1747
- const details = (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.itemPress, event, void 0, {
1748
- preventUnmountOnClose() {
1749
- }
1750
- });
1751
- onCheckedChange?.(!checked, details);
1752
- if (details.isCanceled) {
1753
- return;
1754
- }
1755
- setChecked((currentlyChecked) => !currentlyChecked);
1756
- }
1757
- const element = (0, import_useRenderElement.useRenderElement)(
1758
- "div",
1759
- componentProps,
1760
- {
1761
- state,
1762
- stateAttributesMapping: itemMapping,
1763
- props: [
1764
- itemProps,
1765
- {
1766
- role: "menuitemcheckbox",
1767
- "aria-checked": checked,
1768
- onClick: handleClick
1769
- },
1770
- elementProps,
1771
- getItemProps
1772
- ],
1773
- ref: [itemRef, forwardedRef, listItem.ref]
1774
- },
1775
- (0, import_internal.subSlot)(slot, "re")
1776
- );
1777
- return (0, import_octane.createElement)(MenuCheckboxItemContext.Provider, { value: state, children: element });
1778
- }
1779
- function MenuCheckboxItemIndicator(componentProps) {
1780
- const slot = (0, import_internal.S)("MenuCheckboxItemIndicator");
1781
- const {
1782
- render,
1783
- className,
1784
- style,
1785
- keepMounted = false,
1786
- ref: forwardedRef,
1787
- ...elementProps
1788
- } = componentProps;
1789
- const item = useMenuCheckboxItemContext();
1790
- const indicatorRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "ref"));
1791
- const { transitionStatus, setMounted } = (0, import_useTransitionStatus.useTransitionStatus)(
1792
- item.checked,
1793
- void 0,
1794
- void 0,
1795
- (0, import_internal.subSlot)(slot, "ts")
1796
- );
1797
- (0, import_useOpenChangeComplete.useOpenChangeComplete)(
1798
- {
1799
- open: item.checked,
1800
- ref: indicatorRef,
1801
- onComplete() {
1802
- if (!item.checked) {
1803
- setMounted(false);
1804
- }
1805
- }
1806
- },
1807
- (0, import_internal.subSlot)(slot, "occ")
1808
- );
1809
- const state = {
1810
- checked: item.checked,
1811
- disabled: item.disabled,
1812
- highlighted: item.highlighted,
1813
- transitionStatus
1814
- };
1815
- return (0, import_useRenderElement.useRenderElement)(
1816
- "span",
1817
- componentProps,
1818
- {
1819
- state,
1820
- ref: [forwardedRef, indicatorRef],
1821
- stateAttributesMapping: itemMapping,
1822
- props: {
1823
- "aria-hidden": true,
1824
- ...elementProps
1825
- },
1826
- enabled: keepMounted || item.checked
1827
- },
1828
- (0, import_internal.subSlot)(slot, "re")
1829
- );
1830
- }
1831
- const MenuGroupContext = (0, import_octane.createContext)(void 0);
1832
- function useMenuGroupRootContext() {
1833
- const context = (0, import_octane.useContext)(MenuGroupContext);
1834
- if (context === void 0) {
1835
- throw new Error(
1836
- "Base UI: MenuGroupContext is missing. Menu group parts must be used within <Menu.Group> or <Menu.RadioGroup>."
1837
- );
1838
- }
1839
- return context;
1840
- }
1841
- function MenuGroup(componentProps) {
1842
- const slot = (0, import_internal.S)("MenuGroup");
1843
- const { render, className, style, ref: forwardedRef, ...elementProps } = componentProps;
1844
- const [labelId, setLabelId] = (0, import_octane.useState)(void 0, (0, import_internal.subSlot)(slot, "label"));
1845
- const element = (0, import_useRenderElement.useRenderElement)(
1846
- "div",
1847
- componentProps,
1848
- {
1849
- ref: forwardedRef,
1850
- props: {
1851
- role: "group",
1852
- "aria-labelledby": labelId,
1853
- ...elementProps
1854
- }
1855
- },
1856
- (0, import_internal.subSlot)(slot, "re")
1857
- );
1858
- return (0, import_octane.createElement)(MenuGroupContext.Provider, { value: setLabelId, children: element });
1859
- }
1860
- function MenuGroupLabel(componentProps) {
1861
- const slot = (0, import_internal.S)("MenuGroupLabel");
1862
- const {
1863
- render,
1864
- className,
1865
- style,
1866
- id: idProp,
1867
- ref: forwardedRef,
1868
- ...elementProps
1869
- } = componentProps;
1870
- const id = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
1871
- const setLabelId = useMenuGroupRootContext();
1872
- (0, import_octane.useLayoutEffect)(
1873
- () => {
1874
- setLabelId(id);
1875
- return () => {
1876
- setLabelId(void 0);
1877
- };
1878
- },
1879
- [setLabelId, id],
1880
- (0, import_internal.subSlot)(slot, "e")
1881
- );
1882
- return (0, import_useRenderElement.useRenderElement)(
1883
- "div",
1884
- componentProps,
1885
- {
1886
- ref: forwardedRef,
1887
- props: {
1888
- id,
1889
- role: "presentation",
1890
- ...elementProps
1891
- }
1892
- },
1893
- (0, import_internal.subSlot)(slot, "re")
1894
- );
1895
- }
1896
- const MenuRadioGroupContext = (0, import_octane.createContext)(void 0);
1897
- function useMenuRadioGroupContext() {
1898
- const context = (0, import_octane.useContext)(MenuRadioGroupContext);
1899
- if (context === void 0) {
1900
- throw new Error(
1901
- "Base UI: MenuRadioGroupContext is missing. MenuRadioGroup parts must be placed within <Menu.RadioGroup>."
1902
- );
1903
- }
1904
- return context;
1905
- }
1906
- function MenuRadioGroup(componentProps) {
1907
- const slot = (0, import_internal.S)("MenuRadioGroup");
1908
- const {
1909
- render,
1910
- className,
1911
- value: valueProp,
1912
- defaultValue,
1913
- onValueChange: onValueChangeProp,
1914
- disabled = false,
1915
- style,
1916
- "aria-labelledby": ariaLabelledByProp,
1917
- ref: forwardedRef,
1918
- ...elementProps
1919
- } = componentProps;
1920
- const [labelId, setLabelId] = (0, import_octane.useState)(void 0, (0, import_internal.subSlot)(slot, "label"));
1921
- const [value, setValueUnwrapped] = (0, import_useControlled.useControlled)(
1922
- {
1923
- controlled: valueProp,
1924
- default: defaultValue
1925
- },
1926
- (0, import_internal.subSlot)(slot, "ctrl")
1927
- );
1928
- const setValue = (0, import_useStableCallback.useStableCallback)(
1929
- (newValue, eventDetails) => {
1930
- onValueChangeProp?.(newValue, eventDetails);
1931
- if (eventDetails.isCanceled) {
1932
- return;
1933
- }
1934
- setValueUnwrapped(newValue);
1935
- },
1936
- (0, import_internal.subSlot)(slot, "setValue")
1937
- );
1938
- const state = { disabled };
1939
- const element = (0, import_useRenderElement.useRenderElement)(
1940
- "div",
1941
- componentProps,
1942
- {
1943
- state,
1944
- ref: forwardedRef,
1945
- props: {
1946
- role: "group",
1947
- "aria-labelledby": ariaLabelledByProp ?? labelId,
1948
- "aria-disabled": disabled || void 0,
1949
- ...elementProps
1950
- }
1951
- },
1952
- (0, import_internal.subSlot)(slot, "re")
1953
- );
1954
- const context = (0, import_octane.useMemo)(
1955
- () => ({
1956
- value,
1957
- setValue,
1958
- disabled
1959
- }),
1960
- [value, setValue, disabled],
1961
- (0, import_internal.subSlot)(slot, "ctx")
1962
- );
1963
- return (0, import_octane.createElement)(MenuGroupContext.Provider, {
1964
- value: setLabelId,
1965
- children: (0, import_octane.createElement)(MenuRadioGroupContext.Provider, { value: context, children: element })
1966
- });
1967
- }
1968
- const MenuRadioItemContext = (0, import_octane.createContext)(void 0);
1969
- function useMenuRadioItemContext() {
1970
- const context = (0, import_octane.useContext)(MenuRadioItemContext);
1971
- if (context === void 0) {
1972
- throw new Error(
1973
- "Base UI: MenuRadioItemContext is missing. MenuRadioItem parts must be placed within <Menu.RadioItem>."
1974
- );
1975
- }
1976
- return context;
1977
- }
1978
- function MenuRadioItem(componentProps) {
1979
- const slot = (0, import_internal.S)("MenuRadioItem");
1980
- const {
1981
- render,
1982
- className,
1983
- id: idProp,
1984
- label,
1985
- nativeButton = false,
1986
- disabled: disabledProp = false,
1987
- closeOnClick = false,
1988
- value,
1989
- style,
1990
- ref: forwardedRef,
1991
- ...elementProps
1992
- } = componentProps;
1993
- const listItem = (0, import_useCompositeListItem.useCompositeListItem)({ label }, (0, import_internal.subSlot)(slot, "li"));
1994
- const menuPositionerContext = useMenuPositionerContext(true);
1995
- const id = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
1996
- const { store } = useMenuRootContext();
1997
- const highlighted = store.useState("isActive", (0, import_internal.subSlot)(slot, "hl"), listItem.index);
1998
- const itemProps = store.useState("itemProps", (0, import_internal.subSlot)(slot, "ip"));
1999
- const {
2000
- value: selectedValue,
2001
- setValue: setSelectedValue,
2002
- disabled: groupDisabled
2003
- } = useMenuRadioGroupContext();
2004
- const disabled = groupDisabled || disabledProp;
2005
- const checked = selectedValue === value;
2006
- const { getItemProps, itemRef } = useMenuItem(
2007
- {
2008
- closeOnClick,
2009
- disabled,
2010
- highlighted,
2011
- id,
2012
- store,
2013
- nativeButton,
2014
- nodeId: menuPositionerContext?.context.nodeId,
2015
- itemMetadata: REGULAR_ITEM
2016
- },
2017
- (0, import_internal.subSlot)(slot, "item")
2018
- );
2019
- const state = (0, import_octane.useMemo)(
2020
- () => ({
2021
- disabled,
2022
- highlighted,
2023
- checked
2024
- }),
2025
- [disabled, highlighted, checked],
2026
- (0, import_internal.subSlot)(slot, "state")
2027
- );
2028
- function handleClick(event) {
2029
- const details = (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.itemPress, event, void 0, {
2030
- preventUnmountOnClose() {
2031
- }
2032
- });
2033
- setSelectedValue(value, details);
2034
- }
2035
- const element = (0, import_useRenderElement.useRenderElement)(
2036
- "div",
2037
- componentProps,
2038
- {
2039
- state,
2040
- stateAttributesMapping: itemMapping,
2041
- props: [
2042
- itemProps,
2043
- {
2044
- role: "menuitemradio",
2045
- "aria-checked": checked,
2046
- onClick: handleClick
2047
- },
2048
- elementProps,
2049
- getItemProps
2050
- ],
2051
- ref: [itemRef, forwardedRef, listItem.ref]
2052
- },
2053
- (0, import_internal.subSlot)(slot, "re")
2054
- );
2055
- return (0, import_octane.createElement)(MenuRadioItemContext.Provider, { value: state, children: element });
2056
- }
2057
- function MenuRadioItemIndicator(componentProps) {
2058
- const slot = (0, import_internal.S)("MenuRadioItemIndicator");
2059
- const {
2060
- render,
2061
- className,
2062
- style,
2063
- keepMounted = false,
2064
- ref: forwardedRef,
2065
- ...elementProps
2066
- } = componentProps;
2067
- const item = useMenuRadioItemContext();
2068
- const indicatorRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "ref"));
2069
- const { transitionStatus, setMounted } = (0, import_useTransitionStatus.useTransitionStatus)(
2070
- item.checked,
2071
- void 0,
2072
- void 0,
2073
- (0, import_internal.subSlot)(slot, "ts")
2074
- );
2075
- (0, import_useOpenChangeComplete.useOpenChangeComplete)(
2076
- {
2077
- open: item.checked,
2078
- ref: indicatorRef,
2079
- onComplete() {
2080
- if (!item.checked) {
2081
- setMounted(false);
2082
- }
2083
- }
2084
- },
2085
- (0, import_internal.subSlot)(slot, "occ")
2086
- );
2087
- const state = {
2088
- checked: item.checked,
2089
- disabled: item.disabled,
2090
- highlighted: item.highlighted,
2091
- transitionStatus
2092
- };
2093
- return (0, import_useRenderElement.useRenderElement)(
2094
- "span",
2095
- componentProps,
2096
- {
2097
- state,
2098
- stateAttributesMapping: itemMapping,
2099
- ref: [forwardedRef, indicatorRef],
2100
- props: {
2101
- "aria-hidden": true,
2102
- ...elementProps
2103
- },
2104
- enabled: keepMounted || item.checked
2105
- },
2106
- (0, import_internal.subSlot)(slot, "re")
2107
- );
2108
- }
2109
- function MenuArrow(componentProps) {
2110
- const slot = (0, import_internal.S)("MenuArrow");
2111
- const { render, className, style, ref: forwardedRef, ...elementProps } = componentProps;
2112
- const { store } = useMenuRootContext();
2113
- const { arrowRef, side, align, arrowUncentered, arrowStyles } = useMenuPositionerContext();
2114
- const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
2115
- const state = {
2116
- open,
2117
- side,
2118
- align,
2119
- uncentered: arrowUncentered
2120
- };
2121
- return (0, import_useRenderElement.useRenderElement)(
2122
- "div",
2123
- componentProps,
2124
- {
2125
- ref: [arrowRef, forwardedRef],
2126
- stateAttributesMapping: import_popupStateMapping.popupStateMapping,
2127
- state,
2128
- props: {
2129
- style: arrowStyles,
2130
- "aria-hidden": true,
2131
- ...elementProps
2132
- }
2133
- },
2134
- (0, import_internal.subSlot)(slot, "re")
2135
- );
2136
- }
2137
- const menuBackdropStateAttributesMapping = {
2138
- ...import_popupStateMapping.popupStateMapping,
2139
- ...import_useTransitionStatus2.transitionStatusMapping
2140
- };
2141
- function MenuBackdrop(componentProps) {
2142
- const slot = (0, import_internal.S)("MenuBackdrop");
2143
- const { render, className, style, ref: forwardedRef, ...elementProps } = componentProps;
2144
- const { store } = useMenuRootContext();
2145
- const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
2146
- const mounted = store.useState("mounted", (0, import_internal.subSlot)(slot, "mounted"));
2147
- const transitionStatus = store.useState("transitionStatus", (0, import_internal.subSlot)(slot, "trans"));
2148
- const lastOpenChangeReason = store.useState("lastOpenChangeReason", (0, import_internal.subSlot)(slot, "locr"));
2149
- const contextMenuContext = (0, import_ContextMenuRootContext.useContextMenuRootContext)();
2150
- const state = {
2151
- open,
2152
- transitionStatus
2153
- };
2154
- return (0, import_useRenderElement.useRenderElement)(
2155
- "div",
2156
- componentProps,
2157
- {
2158
- ref: contextMenuContext?.backdropRef ? [forwardedRef, contextMenuContext.backdropRef] : forwardedRef,
2159
- state,
2160
- stateAttributesMapping: menuBackdropStateAttributesMapping,
2161
- props: [
2162
- {
2163
- role: "presentation",
2164
- hidden: !mounted,
2165
- style: {
2166
- pointerEvents: lastOpenChangeReason === import_createChangeEventDetails.REASONS.triggerHover ? "none" : void 0,
2167
- userSelect: "none",
2168
- WebkitUserSelect: "none"
2169
- }
2170
- },
2171
- elementProps
2172
- ]
2173
- },
2174
- (0, import_internal.subSlot)(slot, "re")
2175
- );
2176
- }
2177
- const MenuViewportCssVars = {
2178
- /**
2179
- * The width of the parent popup when the previous content was rendered. Placed on the
2180
- * 'previous' container so the popup's dimensions can be frozen while content animates.
2181
- */
2182
- popupWidth: "--popup-width",
2183
- /** The height of the parent popup when the previous content was rendered. */
2184
- popupHeight: "--popup-height"
2185
- };
2186
- const menuViewportStateAttributesMapping = {
2187
- activationDirection: (value) => value ? { "data-activation-direction": value } : null
2188
- };
2189
- function MenuViewport(componentProps) {
2190
- const slot = (0, import_internal.S)("MenuViewport");
2191
- const { render, className, style, children, ref: forwardedRef, ...elementProps } = componentProps;
2192
- const { store } = useMenuRootContext();
2193
- const { side } = useMenuPositionerContext();
2194
- const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "instant"));
2195
- const { children: childrenToRender, state: viewportState } = (0, import_usePopupViewport.usePopupViewport)(
2196
- { store, side, cssVars: MenuViewportCssVars, children },
2197
- (0, import_internal.subSlot)(slot, "vp")
2198
- );
2199
- const state = {
2200
- activationDirection: viewportState.activationDirection,
2201
- transitioning: viewportState.transitioning,
2202
- instant: instantType
2203
- };
2204
- return (0, import_useRenderElement.useRenderElement)(
2205
- "div",
2206
- componentProps,
2207
- {
2208
- state,
2209
- ref: forwardedRef,
2210
- props: [elementProps, { children: childrenToRender }],
2211
- stateAttributesMapping: menuViewportStateAttributesMapping
2212
- },
2213
- (0, import_internal.subSlot)(slot, "re")
2214
- );
2215
- }
2216
- function MenuSubmenuRoot(props) {
2217
- const slot = (0, import_internal.S)("MenuSubmenuRoot");
2218
- const parentMenu = useMenuRootContext().store;
2219
- const contextValue = (0, import_octane.useMemo)(() => ({ parentMenu }), [parentMenu], (0, import_internal.subSlot)(slot, "ctx"));
2220
- return (0, import_octane.createElement)(MenuSubmenuRootContext.Provider, {
2221
- value: contextValue,
2222
- children: (0, import_octane.createElement)(MenuRoot, props)
2223
- });
2224
- }
2225
- function MenuSubmenuTrigger(componentProps) {
2226
- const slot = (0, import_internal.S)("MenuSubmenuTrigger");
2227
- const {
2228
- render,
2229
- className,
2230
- style,
2231
- label,
2232
- id: idProp,
2233
- nativeButton = false,
2234
- openOnHover = true,
2235
- delay = 100,
2236
- closeDelay = 0,
2237
- disabled: disabledProp = false,
2238
- ref: forwardedRef,
2239
- ...elementProps
2240
- } = componentProps;
2241
- const listItem = (0, import_useCompositeListItem.useCompositeListItem)({ label }, (0, import_internal.subSlot)(slot, "li"));
2242
- const menuPositionerContext = useMenuPositionerContext();
2243
- const { store } = useMenuRootContext();
2244
- const thisTriggerId = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
2245
- const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
2246
- const floatingRootContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
2247
- const floatingTreeRoot = store.useState("floatingTreeRoot", (0, import_internal.subSlot)(slot, "ftr"));
2248
- const popupId = store.useState("triggerPopupId", (0, import_internal.subSlot)(slot, "tpid"), thisTriggerId);
2249
- const baseRegisterTrigger = (0, import_popups.useTriggerRegistration)(
2250
- thisTriggerId,
2251
- store,
2252
- (0, import_internal.subSlot)(slot, "reg")
2253
- );
2254
- const registerTrigger = (0, import_octane.useCallback)(
2255
- (element) => {
2256
- const cleanup = baseRegisterTrigger(element);
2257
- if (element !== null && store.select("open") && store.select("activeTriggerId") == null) {
2258
- store.update({
2259
- activeTriggerId: thisTriggerId,
2260
- activeTriggerElement: element,
2261
- closeDelay
2262
- });
2263
- }
2264
- return cleanup;
2265
- },
2266
- [baseRegisterTrigger, closeDelay, store, thisTriggerId],
2267
- (0, import_internal.subSlot)(slot, "regcb")
2268
- );
2269
- const triggerElementRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "ter"));
2270
- const handleTriggerElementRef = (0, import_octane.useCallback)(
2271
- (el) => {
2272
- triggerElementRef.current = el;
2273
- store.set("activeTriggerElement", el);
2274
- },
2275
- [store],
2276
- (0, import_internal.subSlot)(slot, "tercb")
2277
- );
2278
- const submenuRootContext = useMenuSubmenuRootContext();
2279
- if (!submenuRootContext?.parentMenu) {
2280
- throw new Error("Base UI: <Menu.SubmenuTrigger> must be placed in <Menu.SubmenuRoot>.");
2281
- }
2282
- store.useSyncedValue("closeDelay", closeDelay, (0, import_internal.subSlot)(slot, "cd"));
2283
- const parentMenuStore = submenuRootContext.parentMenu;
2284
- const rootDisabled = store.useState("disabled", (0, import_internal.subSlot)(slot, "rd"));
2285
- const parentDisabled = parentMenuStore.useState("disabled", (0, import_internal.subSlot)(slot, "pd"));
2286
- const disabled = disabledProp || rootDisabled || parentDisabled;
2287
- const itemProps = parentMenuStore.useState("itemProps", (0, import_internal.subSlot)(slot, "ip"));
2288
- const highlighted = parentMenuStore.useState("isActive", (0, import_internal.subSlot)(slot, "hl"), listItem.index);
2289
- const itemMetadata = (0, import_octane.useMemo)(
2290
- () => ({
2291
- type: "submenu-trigger",
2292
- setActive() {
2293
- if (parentMenuStore.select("highlightItemOnHover")) {
2294
- parentMenuStore.set("activeIndex", listItem.index);
2295
- }
2296
- }
2297
- }),
2298
- [parentMenuStore, listItem.index],
2299
- (0, import_internal.subSlot)(slot, "meta")
2300
- );
2301
- const { getItemProps, itemRef } = useMenuItem(
2302
- {
2303
- closeOnClick: false,
2304
- disabled,
2305
- highlighted,
2306
- id: thisTriggerId,
2307
- store,
2308
- typingRef: parentMenuStore.context.typingRef,
2309
- nativeButton,
2310
- itemMetadata,
2311
- nodeId: menuPositionerContext?.context.nodeId
2312
- },
2313
- (0, import_internal.subSlot)(slot, "item")
2314
- );
2315
- const hoverEnabled = store.useState("hoverEnabled", (0, import_internal.subSlot)(slot, "he"));
2316
- const hoverProps = (0, import_useHoverReferenceInteraction.useHoverReferenceInteraction)(
2317
- floatingRootContext,
2318
- {
2319
- enabled: hoverEnabled && openOnHover && !disabled,
2320
- handleClose: (0, import_useHoverReferenceInteraction.safePolygon)({ blockPointerEvents: true }),
2321
- mouseOnly: true,
2322
- move: true,
2323
- restMs: delay,
2324
- delay: { open: delay, close: closeDelay },
2325
- shouldOpen: delay > 0 ? () => parentMenuStore.select("allowMouseEnter") : void 0,
2326
- triggerElementRef,
2327
- externalTree: floatingTreeRoot,
2328
- isClosing: () => store.select("transitionStatus") === "ending"
2329
- },
2330
- (0, import_internal.subSlot)(slot, "hover")
2331
- );
2332
- const click = (0, import_useClick.useClick)(
2333
- floatingRootContext,
2334
- {
2335
- enabled: !disabled,
2336
- event: "mousedown",
2337
- toggle: !openOnHover,
2338
- ignoreMouse: openOnHover,
2339
- stickIfOpen: false
2340
- },
2341
- (0, import_internal.subSlot)(slot, "click")
2342
- );
2343
- const localInteractionProps = click.reference ?? import_empty.EMPTY_OBJECT;
2344
- const rootTriggerProps = store.useState("triggerProps", (0, import_internal.subSlot)(slot, "tp"), true);
2345
- delete rootTriggerProps.id;
2346
- const state = { disabled, highlighted, open };
2347
- return (0, import_useRenderElement.useRenderElement)(
2348
- "div",
2349
- componentProps,
2350
- {
2351
- state,
2352
- stateAttributesMapping: import_popupStateMapping.triggerOpenStateMapping,
2353
- props: [
2354
- localInteractionProps,
2355
- hoverProps,
2356
- rootTriggerProps,
2357
- itemProps,
2358
- {
2359
- "aria-controls": popupId,
2360
- tabIndex: open || highlighted ? 0 : -1,
2361
- onBlur() {
2362
- if (highlighted) {
2363
- parentMenuStore.set("activeIndex", null);
2364
- }
2365
- }
2366
- },
2367
- elementProps,
2368
- getItemProps
2369
- ],
2370
- ref: [forwardedRef, listItem.ref, itemRef, registerTrigger, handleTriggerElementRef]
2371
- },
2372
- (0, import_internal.subSlot)(slot, "re")
2373
- );
2374
- }
2375
- const Menu = {
2376
- Root: MenuRoot,
2377
- Trigger: MenuTrigger,
2378
- Portal: MenuPortal,
2379
- Positioner: MenuPositioner,
2380
- Popup: MenuPopup,
2381
- Arrow: MenuArrow,
2382
- Backdrop: MenuBackdrop,
2383
- Viewport: MenuViewport,
2384
- Item: MenuItem,
2385
- LinkItem: MenuLinkItem,
2386
- CheckboxItem: MenuCheckboxItem,
2387
- CheckboxItemIndicator: MenuCheckboxItemIndicator,
2388
- RadioGroup: MenuRadioGroup,
2389
- RadioItem: MenuRadioItem,
2390
- RadioItemIndicator: MenuRadioItemIndicator,
2391
- Group: MenuGroup,
2392
- GroupLabel: MenuGroupLabel,
2393
- Separator: import_separator.Separator,
2394
- SubmenuRoot: MenuSubmenuRoot,
2395
- SubmenuTrigger: MenuSubmenuTrigger,
2396
- createHandle: createMenuHandle,
2397
- Handle: MenuHandle
2398
- };
2399
- // Annotate the CommonJS export names for ESM import in node:
2400
- 0 && (module.exports = {
2401
- Menu,
2402
- MenuHandle,
2403
- MenuRootContext,
2404
- MenuStore,
2405
- MenuSubmenuRootContext,
2406
- MenuViewportCssVars,
2407
- REGULAR_ITEM,
2408
- createMenuHandle,
2409
- itemMapping,
2410
- useMenuCheckboxItemContext,
2411
- useMenuGroupRootContext,
2412
- useMenuItem,
2413
- useMenuItemCommonProps,
2414
- useMenuPortalContext,
2415
- useMenuPositionerContext,
2416
- useMenuRadioGroupContext,
2417
- useMenuRadioItemContext,
2418
- useMenuRootContext,
2419
- useMenuSubmenuRootContext
2420
- });