@wix/site-ui 1.30.0 → 1.32.0

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 (173) hide show
  1. package/dist/1268.js +99 -0
  2. package/dist/1279.js +7 -0
  3. package/dist/1457.js +10 -0
  4. package/dist/1477.js +106 -0
  5. package/dist/1500.js +111 -0
  6. package/dist/167.js +6 -0
  7. package/dist/2274.js +34 -0
  8. package/dist/2287.js +17 -0
  9. package/dist/2418.js +31 -0
  10. package/dist/2801.js +20 -0
  11. package/dist/285.js +86 -0
  12. package/dist/2861.js +6 -0
  13. package/dist/3020.js +7 -0
  14. package/dist/3021.js +72 -0
  15. package/dist/3056.js +229 -0
  16. package/dist/3140.js +4 -0
  17. package/dist/3248.js +307 -0
  18. package/dist/3296.js +4 -0
  19. package/dist/3319.js +400 -0
  20. package/dist/3395.js +4 -0
  21. package/dist/3485.js +854 -0
  22. package/dist/353.js +14 -0
  23. package/dist/3670.js +418 -0
  24. package/dist/3829.js +113 -0
  25. package/dist/4026.js +12 -0
  26. package/dist/4143.js +46 -0
  27. package/dist/42.js +32 -0
  28. package/dist/4281.js +30 -0
  29. package/dist/4346.js +2 -0
  30. package/dist/4388.js +418 -0
  31. package/dist/4490.js +32 -0
  32. package/dist/4495.js +9 -0
  33. package/dist/4549.js +24 -0
  34. package/dist/4586.js +41 -0
  35. package/dist/4586.js.LICENSE.txt +19 -0
  36. package/dist/4707.js +19 -0
  37. package/dist/4723.js +7 -0
  38. package/dist/4745.js +7 -0
  39. package/dist/4768.js +35 -0
  40. package/dist/4922.js +15 -0
  41. package/dist/5036.js +17 -0
  42. package/dist/5085.js +20 -0
  43. package/dist/5299.js +597 -0
  44. package/dist/5659.js +4 -0
  45. package/dist/5778.js +10 -0
  46. package/dist/5864.js +86 -0
  47. package/dist/5992.js +913 -0
  48. package/dist/5992.js.LICENSE.txt +19 -0
  49. package/dist/6003.js +10 -0
  50. package/dist/6046.js +29 -0
  51. package/dist/6089.js +2355 -0
  52. package/dist/6107.js +10 -0
  53. package/dist/6247.js +20 -0
  54. package/dist/6270.js +487 -0
  55. package/dist/6329.js +32 -0
  56. package/dist/6330.js +30 -0
  57. package/dist/6499.js +7 -0
  58. package/dist/6535.js +71 -0
  59. package/dist/6588.js +382 -0
  60. package/dist/6706.js +16 -0
  61. package/dist/6825.js +7 -0
  62. package/dist/6882.js +1562 -0
  63. package/dist/6914.js +30 -0
  64. package/dist/7021.js +13 -0
  65. package/dist/7366.js +83 -0
  66. package/dist/7373.js +25 -0
  67. package/dist/7541.js +25 -0
  68. package/dist/7564.js +10 -0
  69. package/dist/7642.js +20 -0
  70. package/dist/7725.js +10 -0
  71. package/dist/7871.js +38 -0
  72. package/dist/8052.js +352 -0
  73. package/dist/8106.js +238 -0
  74. package/dist/8171.js +346 -0
  75. package/dist/8225.js +21 -0
  76. package/dist/8272.js +333 -0
  77. package/dist/8527.js +58 -0
  78. package/dist/8724.js +10 -0
  79. package/dist/8750.js +1920 -0
  80. package/dist/8758.js +43 -0
  81. package/dist/880.js +149 -0
  82. package/dist/8935.js +8 -0
  83. package/dist/8960.js +22 -0
  84. package/dist/8971.js +40 -0
  85. package/dist/8979.js +10 -0
  86. package/dist/8996.js +71 -0
  87. package/dist/904.js +121 -0
  88. package/dist/9048.js +52 -0
  89. package/dist/9087.js +256 -0
  90. package/dist/9189.js +158 -0
  91. package/dist/9255.js +136 -0
  92. package/dist/9352.js +148 -0
  93. package/dist/951.js +22 -0
  94. package/dist/9635.js +22 -0
  95. package/dist/9829.js +4 -0
  96. package/dist/9863.js +8 -0
  97. package/dist/Accordion/index.d.ts +569 -12
  98. package/dist/Accordion/index.js +423 -8
  99. package/dist/AlertDialog/index.d.ts +1417 -18
  100. package/dist/AlertDialog/index.js +34 -14
  101. package/dist/Autocomplete/index.d.ts +1861 -38
  102. package/dist/Autocomplete/index.js +98 -24
  103. package/dist/Avatar/index.d.ts +129 -7
  104. package/dist/Avatar/index.js +149 -6
  105. package/dist/Breadcrumbs/index.d.ts +960 -7
  106. package/dist/Breadcrumbs/index.js +5 -5
  107. package/dist/Button/index.d.ts +88 -6
  108. package/dist/Button/index.js +27 -3
  109. package/dist/Checkbox/index.d.ts +425 -5
  110. package/dist/Checkbox/index.js +45 -5
  111. package/dist/CheckboxGroup/index.d.ts +318 -3
  112. package/dist/CheckboxGroup/index.js +166 -3
  113. package/dist/Collapsible/index.d.ts +377 -7
  114. package/dist/Collapsible/index.js +160 -6
  115. package/dist/Combobox/index.d.ts +1984 -48
  116. package/dist/Combobox/index.js +352 -29
  117. package/dist/ContextMenu/index.d.ts +2340 -36
  118. package/dist/ContextMenu/index.js +197 -22
  119. package/dist/Dialog/index.d.ts +1355 -18
  120. package/dist/Dialog/index.js +16 -14
  121. package/dist/Drawer/index.d.ts +1653 -18
  122. package/dist/Drawer/index.js +2797 -20
  123. package/dist/Field/index.d.ts +655 -15
  124. package/dist/Field/index.js +677 -10
  125. package/dist/Fieldset/index.d.ts +94 -5
  126. package/dist/Fieldset/index.js +68 -5
  127. package/dist/Form/index.d.ts +331 -2
  128. package/dist/Form/index.js +106 -3
  129. package/dist/Input/index.d.ts +692 -3
  130. package/dist/Input/index.js +10 -3
  131. package/dist/Menu/index.d.ts +2301 -36
  132. package/dist/Menu/index.js +365 -26
  133. package/dist/Menubar/index.d.ts +2301 -3
  134. package/dist/Menubar/index.js +105 -3
  135. package/dist/Meter/index.d.ts +175 -11
  136. package/dist/Meter/index.js +129 -9
  137. package/dist/NavigationMenu/index.d.ts +978 -28
  138. package/dist/NavigationMenu/index.js +1034 -17
  139. package/dist/NumberField/index.d.ts +612 -15
  140. package/dist/NumberField/index.js +1409 -11
  141. package/dist/Popover/index.d.ts +1655 -20
  142. package/dist/Popover/index.js +792 -17
  143. package/dist/PreviewCard/index.d.ts +1523 -14
  144. package/dist/PreviewCard/index.js +679 -14
  145. package/dist/Progress/index.d.ts +183 -11
  146. package/dist/Progress/index.js +181 -9
  147. package/dist/Radio/index.d.ts +185 -6
  148. package/dist/Radio/index.js +253 -6
  149. package/dist/RadioGroup/index.d.ts +341 -2
  150. package/dist/RadioGroup/index.js +154 -3
  151. package/dist/ScrollArea/index.d.ts +265 -13
  152. package/dist/ScrollArea/index.js +892 -10
  153. package/dist/Select/index.d.ts +1493 -38
  154. package/dist/Select/index.js +1824 -23
  155. package/dist/Separator/index.d.ts +80 -6
  156. package/dist/Separator/index.js +3 -3
  157. package/dist/Slider/index.d.ts +678 -16
  158. package/dist/Slider/index.js +1199 -11
  159. package/dist/Switch/index.d.ts +393 -5
  160. package/dist/Switch/index.js +208 -6
  161. package/dist/Tabs/index.d.ts +523 -12
  162. package/dist/Tabs/index.js +685 -9
  163. package/dist/Toggle/index.d.ts +305 -2
  164. package/dist/Toggle/index.js +76 -3
  165. package/dist/ToggleGroup/index.d.ts +316 -2
  166. package/dist/ToggleGroup/index.js +102 -3
  167. package/dist/Toolbar/index.d.ts +282 -13
  168. package/dist/Toolbar/index.js +230 -9
  169. package/dist/Tooltip/index.d.ts +1572 -14
  170. package/dist/Tooltip/index.js +965 -14
  171. package/dist/index.d.ts +12749 -652
  172. package/dist/rslib-runtime.js +18 -0
  173. package/package.json +3 -3
package/dist/6882.js ADDED
@@ -0,0 +1,1562 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { EMPTY_OBJECT, EMPTY_ARRAY, useMergedRefs, useRefWithInit, warn, mergeProps, useRenderElement, esm_formatErrorMessage } from "./8272.js";
3
+ import { isLastTraversableNode, getParentNode, isHTMLElement } from "./3829.js";
4
+ import { DROPDOWN_COLLISION_AVOIDANCE, triggerOpenStateMapping, FloatingPortal_FloatingPortal, popupStateMapping, POPUP_COLLISION_AVOIDANCE } from "./4388.js";
5
+ import { useAnimationsFinished, useTransitionStatus, transitionStatusMapping, useOpenChangeComplete } from "./880.js";
6
+ import { itemPress, siblingOpen, outsidePress, imperativeAction, triggerFocus, focusOut, listNavigation as reason_parts_listNavigation, triggerHover, triggerPress, escapeKey } from "./2418.js";
7
+ import { usePositioner, adaptiveOriginMiddleware_adaptiveOrigin, useAnchorPositioning, getDisabledMountTransitionStyles } from "./8750.js";
8
+ import { createChangeEventDetails } from "./4768.js";
9
+ import { useTimeout } from "./42.js";
10
+ import { useIsoLayoutEffect, SafeReact } from "./6499.js";
11
+ import { useAnchoredPopupScrollLock } from "./6247.js";
12
+ import { useOpenInteractionType, FloatingFocusManager, InternalBackdrop_InternalBackdrop } from "./3485.js";
13
+ import { inertValue } from "./167.js";
14
+ import { useFloatingParentNodeId, FloatingNode, FloatingTree, useFloatingNodeId, FloatingTreeStore } from "./285.js";
15
+ import { CompositeList } from "./9255.js";
16
+ import { useToolbarRootContext } from "./6107.js";
17
+ import { useHoverFloatingInteraction } from "./3056.js";
18
+ import { COMPOSITE_KEYS } from "./1500.js";
19
+ import { useBaseUiId, useId } from "./6046.js";
20
+ import { isMac } from "./8971.js";
21
+ import { useButton } from "./9189.js";
22
+ import { useCompositeListItem } from "./3021.js";
23
+ import { useControlled } from "./8527.js";
24
+ import { useStableCallback } from "./7541.js";
25
+ import { useSyncedFloatingRootContext, useTriggerRegistration, useImplicitActiveTrigger, useOpenStateTransitions, usePopupInteractionProps, FOCUSABLE_POPUP_PROPS, useOnFirstRender } from "./8106.js";
26
+ import { isElementDisabled } from "./3140.js";
27
+ import { safePolygon, useHoverReferenceInteraction } from "./3670.js";
28
+ import { useClick } from "./5864.js";
29
+ import { popupStoreSelectors, createInitialPopupStoreState } from "./6535.js";
30
+ import { useDismiss, PopupTriggerMap, createSelector, fastComponent, ReactStore } from "./5992.js";
31
+ import { useMenubarContext } from "./7564.js";
32
+ import { useDirection } from "./9863.js";
33
+ import { useListNavigation, useTypeahead } from "./5299.js";
34
+ import * as __rspack_external_react from "react";
35
+ const ContextMenuRootContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
36
+ if ("production" !== process.env.NODE_ENV) ContextMenuRootContext.displayName = "ContextMenuRootContext";
37
+ function useContextMenuRootContext(optional = true) {
38
+ const context = __rspack_external_react.useContext(ContextMenuRootContext);
39
+ if (void 0 === context && !optional) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>.' : esm_formatErrorMessage(25));
40
+ return context;
41
+ }
42
+ const MenuRootContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
43
+ if ("production" !== process.env.NODE_ENV) MenuRootContext.displayName = "MenuRootContext";
44
+ function useMenuRootContext(optional) {
45
+ const context = __rspack_external_react.useContext(MenuRootContext);
46
+ if (void 0 === context && !optional) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>.' : esm_formatErrorMessage(36));
47
+ return context;
48
+ }
49
+ function findRootOwnerId(node) {
50
+ if (isHTMLElement(node) && node.hasAttribute('data-rootownerid')) return node.getAttribute('data-rootownerid') ?? void 0;
51
+ if (isLastTraversableNode(node)) return;
52
+ return findRootOwnerId(getParentNode(node));
53
+ }
54
+ const stateAttributesMapping = {
55
+ ...popupStateMapping,
56
+ ...transitionStatusMapping
57
+ };
58
+ const MenuBackdrop_MenuBackdrop = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
59
+ const { render, className, style, ...elementProps } = componentProps;
60
+ const { store } = useMenuRootContext();
61
+ const open = store.useState('open');
62
+ const mounted = store.useState('mounted');
63
+ const transitionStatus = store.useState('transitionStatus');
64
+ const lastOpenChangeReason = store.useState('lastOpenChangeReason');
65
+ const contextMenuContext = useContextMenuRootContext();
66
+ const state = {
67
+ open,
68
+ transitionStatus
69
+ };
70
+ return useRenderElement('div', componentProps, {
71
+ ref: contextMenuContext?.backdropRef ? [
72
+ forwardedRef,
73
+ contextMenuContext.backdropRef
74
+ ] : forwardedRef,
75
+ state,
76
+ stateAttributesMapping: stateAttributesMapping,
77
+ props: [
78
+ {
79
+ role: 'presentation',
80
+ hidden: !mounted,
81
+ style: {
82
+ pointerEvents: lastOpenChangeReason === triggerHover ? 'none' : void 0,
83
+ userSelect: 'none',
84
+ WebkitUserSelect: 'none'
85
+ }
86
+ },
87
+ elementProps
88
+ ]
89
+ });
90
+ });
91
+ if ("production" !== process.env.NODE_ENV) MenuBackdrop_MenuBackdrop.displayName = "MenuBackdrop";
92
+ const MenuPositionerContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
93
+ if ("production" !== process.env.NODE_ENV) MenuPositionerContext.displayName = "MenuPositionerContext";
94
+ function useMenuPositionerContext(optional) {
95
+ const context = __rspack_external_react.useContext(MenuPositionerContext);
96
+ if (void 0 === context && !optional) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>.' : esm_formatErrorMessage(33));
97
+ return context;
98
+ }
99
+ const MenuPortalContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
100
+ if ("production" !== process.env.NODE_ENV) MenuPortalContext.displayName = "MenuPortalContext";
101
+ function useMenuPortalContext() {
102
+ const value = __rspack_external_react.useContext(MenuPortalContext);
103
+ if (void 0 === value) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: <Menu.Portal> is missing.' : esm_formatErrorMessage(32));
104
+ return value;
105
+ }
106
+ const MenuPositioner_MenuPositioner = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
107
+ const { anchor: anchorProp, positionMethod: positionMethodProp = 'absolute', className, render, side, align: alignProp, sideOffset: sideOffsetProp = 0, alignOffset: alignOffsetProp = 0, collisionBoundary = 'clipping-ancestors', collisionPadding = 5, arrowPadding = 5, sticky = false, disableAnchorTracking = false, collisionAvoidance: collisionAvoidanceProp = DROPDOWN_COLLISION_AVOIDANCE, style, ...elementProps } = componentProps;
108
+ const { store } = useMenuRootContext();
109
+ const keepMounted = useMenuPortalContext();
110
+ const contextMenuContext = useContextMenuRootContext(true);
111
+ const parent = store.useState('parent');
112
+ const floatingRootContext = store.useState('floatingRootContext');
113
+ const floatingTreeRoot = store.useState('floatingTreeRoot');
114
+ const mounted = store.useState('mounted');
115
+ const open = store.useState('open');
116
+ const modal = store.useState('modal');
117
+ const openMethod = store.useState('openMethod');
118
+ const triggerElement = store.useState('activeTriggerElement');
119
+ const transitionStatus = store.useState('transitionStatus');
120
+ const positionerElement = store.useState('positionerElement');
121
+ const instantType = store.useState('instantType');
122
+ const hasViewport = store.useState('hasViewport');
123
+ const lastOpenChangeReason = store.useState('lastOpenChangeReason');
124
+ const floatingNodeId = store.useState('floatingNodeId');
125
+ const floatingParentNodeId = store.useState('floatingParentNodeId');
126
+ const domReference = floatingRootContext.useState('domReferenceElement');
127
+ const previousTriggerRef = __rspack_external_react.useRef(null);
128
+ const runOnceAnimationsFinish = useAnimationsFinished(positionerElement, false, false);
129
+ let anchor = anchorProp;
130
+ let sideOffset = sideOffsetProp;
131
+ let alignOffset = alignOffsetProp;
132
+ let align = alignProp;
133
+ let collisionAvoidance = collisionAvoidanceProp;
134
+ if ('context-menu' === parent.type) {
135
+ anchor = anchorProp ?? parent.context?.anchor;
136
+ align = align ?? 'start';
137
+ if (!side && 'center' !== align) {
138
+ alignOffset = componentProps.alignOffset ?? 2;
139
+ sideOffset = componentProps.sideOffset ?? -5;
140
+ }
141
+ }
142
+ let computedSide = side;
143
+ let computedAlign = align;
144
+ if ('menu' === parent.type) {
145
+ computedSide = computedSide ?? 'inline-end';
146
+ computedAlign = computedAlign ?? 'start';
147
+ collisionAvoidance = componentProps.collisionAvoidance ?? POPUP_COLLISION_AVOIDANCE;
148
+ } else if ('menubar' === parent.type) {
149
+ computedSide = computedSide ?? 'bottom';
150
+ computedAlign = computedAlign ?? 'start';
151
+ }
152
+ const contextMenu = 'context-menu' === parent.type;
153
+ const positioner = useAnchorPositioning({
154
+ anchor,
155
+ floatingRootContext,
156
+ positionMethod: contextMenuContext ? 'fixed' : positionMethodProp,
157
+ mounted,
158
+ side: computedSide,
159
+ sideOffset,
160
+ align: computedAlign,
161
+ alignOffset,
162
+ arrowPadding: contextMenu ? 0 : arrowPadding,
163
+ collisionBoundary,
164
+ collisionPadding,
165
+ sticky,
166
+ nodeId: floatingNodeId,
167
+ keepMounted,
168
+ disableAnchorTracking,
169
+ collisionAvoidance,
170
+ shiftCrossAxis: contextMenu && !('side' in collisionAvoidance && 'flip' === collisionAvoidance.side),
171
+ externalTree: floatingTreeRoot,
172
+ adaptiveOrigin: hasViewport ? adaptiveOriginMiddleware_adaptiveOrigin : void 0
173
+ });
174
+ __rspack_external_react.useEffect(()=>{
175
+ function onMenuOpenChange(details) {
176
+ if (details.open) {
177
+ if (details.parentNodeId === floatingNodeId) store.set('hoverEnabled', false);
178
+ if (details.nodeId !== floatingNodeId && details.parentNodeId === store.select('floatingParentNodeId')) store.setOpen(false, createChangeEventDetails(siblingOpen));
179
+ }
180
+ }
181
+ floatingTreeRoot.events.on('menuopenchange', onMenuOpenChange);
182
+ return ()=>{
183
+ floatingTreeRoot.events.off('menuopenchange', onMenuOpenChange);
184
+ };
185
+ }, [
186
+ store,
187
+ floatingTreeRoot.events,
188
+ floatingNodeId
189
+ ]);
190
+ __rspack_external_react.useEffect(()=>{
191
+ if (null == store.select('floatingParentNodeId')) return;
192
+ function onParentClose(details) {
193
+ if (details.open || details.nodeId !== store.select('floatingParentNodeId')) return;
194
+ const reason = details.reason ?? siblingOpen;
195
+ store.setOpen(false, createChangeEventDetails(reason));
196
+ }
197
+ floatingTreeRoot.events.on('menuopenchange', onParentClose);
198
+ return ()=>{
199
+ floatingTreeRoot.events.off('menuopenchange', onParentClose);
200
+ };
201
+ }, [
202
+ floatingTreeRoot.events,
203
+ store
204
+ ]);
205
+ const closeTimeout = useTimeout();
206
+ __rspack_external_react.useEffect(()=>{
207
+ if (!open) closeTimeout.clear();
208
+ }, [
209
+ open,
210
+ closeTimeout
211
+ ]);
212
+ __rspack_external_react.useEffect(()=>{
213
+ function onItemHover(event) {
214
+ if (!open || event.nodeId !== store.select('floatingParentNodeId')) return;
215
+ if (event.target && triggerElement && triggerElement !== event.target) {
216
+ const delay = store.select('closeDelay');
217
+ if (delay > 0) {
218
+ if (!closeTimeout.isStarted()) closeTimeout.start(delay, ()=>{
219
+ store.setOpen(false, createChangeEventDetails(siblingOpen));
220
+ });
221
+ } else store.setOpen(false, createChangeEventDetails(siblingOpen));
222
+ } else closeTimeout.clear();
223
+ }
224
+ floatingTreeRoot.events.on('itemhover', onItemHover);
225
+ return ()=>{
226
+ floatingTreeRoot.events.off('itemhover', onItemHover);
227
+ };
228
+ }, [
229
+ floatingTreeRoot.events,
230
+ open,
231
+ triggerElement,
232
+ store,
233
+ closeTimeout
234
+ ]);
235
+ __rspack_external_react.useEffect(()=>{
236
+ const eventDetails = {
237
+ open,
238
+ nodeId: floatingNodeId,
239
+ parentNodeId: floatingParentNodeId,
240
+ reason: store.select('lastOpenChangeReason')
241
+ };
242
+ floatingTreeRoot.events.emit('menuopenchange', eventDetails);
243
+ }, [
244
+ floatingTreeRoot.events,
245
+ open,
246
+ store,
247
+ floatingNodeId,
248
+ floatingParentNodeId
249
+ ]);
250
+ useIsoLayoutEffect(()=>{
251
+ const currentTrigger = domReference;
252
+ const previousTrigger = previousTriggerRef.current;
253
+ if (currentTrigger) previousTriggerRef.current = currentTrigger;
254
+ if (previousTrigger && currentTrigger && currentTrigger !== previousTrigger) {
255
+ store.set('instantType', void 0);
256
+ const abortController = new AbortController();
257
+ runOnceAnimationsFinish(()=>{
258
+ store.set('instantType', 'trigger-change');
259
+ }, abortController.signal);
260
+ return ()=>{
261
+ abortController.abort();
262
+ };
263
+ }
264
+ }, [
265
+ domReference,
266
+ runOnceAnimationsFinish,
267
+ store
268
+ ]);
269
+ const state = {
270
+ open,
271
+ side: positioner.side,
272
+ align: positioner.align,
273
+ anchorHidden: positioner.anchorHidden,
274
+ nested: 'menu' === parent.type,
275
+ instant: instantType
276
+ };
277
+ const menubarModal = 'menubar' === parent.type && parent.context.modal;
278
+ const popupModal = modal && lastOpenChangeReason !== triggerHover;
279
+ useAnchoredPopupScrollLock(open && (menubarModal || popupModal), 'touch' === openMethod, positionerElement, triggerElement);
280
+ const element = usePositioner(componentProps, state, {
281
+ styles: positioner.positionerStyles,
282
+ transitionStatus,
283
+ props: elementProps,
284
+ refs: [
285
+ forwardedRef,
286
+ store.useStateSetter('positionerElement')
287
+ ],
288
+ hidden: !mounted,
289
+ inert: !open
290
+ });
291
+ const shouldRenderBackdrop = mounted && 'menu' !== parent.type && ('menubar' !== parent.type && modal && lastOpenChangeReason !== triggerHover || 'menubar' === parent.type && parent.context.modal);
292
+ let backdropCutout = null;
293
+ if ('menubar' === parent.type) backdropCutout = parent.context.contentElement;
294
+ else if (void 0 === parent.type) backdropCutout = triggerElement;
295
+ return /*#__PURE__*/ jsxs(MenuPositionerContext.Provider, {
296
+ value: positioner,
297
+ children: [
298
+ shouldRenderBackdrop && /*#__PURE__*/ jsx(InternalBackdrop_InternalBackdrop, {
299
+ ref: 'context-menu' === parent.type || 'nested-context-menu' === parent.type ? parent.context.internalBackdropRef : null,
300
+ inert: inertValue(!open),
301
+ cutout: backdropCutout
302
+ }),
303
+ /*#__PURE__*/ jsx(FloatingNode, {
304
+ id: floatingNodeId,
305
+ children: /*#__PURE__*/ jsx(CompositeList, {
306
+ elementsRef: store.context.itemDomElements,
307
+ labelsRef: store.context.itemLabels,
308
+ children: element
309
+ })
310
+ })
311
+ ]
312
+ });
313
+ });
314
+ if ("production" !== process.env.NODE_ENV) MenuPositioner_MenuPositioner.displayName = "MenuPositioner";
315
+ const MenuPopup_stateAttributesMapping = {
316
+ ...popupStateMapping,
317
+ ...transitionStatusMapping
318
+ };
319
+ const MenuPopup_MenuPopup = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
320
+ const { render, className, style, finalFocus, ...elementProps } = componentProps;
321
+ const { store } = useMenuRootContext();
322
+ const { side, align } = useMenuPositionerContext();
323
+ const insideToolbar = null != useToolbarRootContext(true);
324
+ const open = store.useState('open');
325
+ const transitionStatus = store.useState('transitionStatus');
326
+ const popupProps = store.useState('popupProps');
327
+ const mounted = store.useState('mounted');
328
+ const instantType = store.useState('instantType');
329
+ const triggerElement = store.useState('activeTriggerElement');
330
+ const parent = store.useState('parent');
331
+ const lastOpenChangeReason = store.useState('lastOpenChangeReason');
332
+ const rootId = store.useState('rootId');
333
+ const floatingContext = store.useState('floatingRootContext');
334
+ const floatingTreeRoot = store.useState('floatingTreeRoot');
335
+ const closeDelay = store.useState('closeDelay');
336
+ const activeTriggerElement = store.useState('activeTriggerElement');
337
+ const hoverEnabled = store.useState('hoverEnabled');
338
+ const disabled = store.useState('disabled');
339
+ const isContextMenu = 'context-menu' === parent.type;
340
+ useOpenChangeComplete({
341
+ open,
342
+ ref: store.context.popupRef,
343
+ onComplete () {
344
+ if (open) store.context.onOpenChangeComplete?.(true);
345
+ }
346
+ });
347
+ __rspack_external_react.useEffect(()=>{
348
+ function handleClose(event) {
349
+ store.setOpen(false, createChangeEventDetails(event.reason, event.domEvent));
350
+ }
351
+ floatingTreeRoot.events.on('close', handleClose);
352
+ return ()=>{
353
+ floatingTreeRoot.events.off('close', handleClose);
354
+ };
355
+ }, [
356
+ floatingTreeRoot.events,
357
+ store
358
+ ]);
359
+ useHoverFloatingInteraction(floatingContext, {
360
+ enabled: hoverEnabled && !disabled && !isContextMenu && 'menubar' !== parent.type,
361
+ closeDelay
362
+ });
363
+ const setPopupElement = __rspack_external_react.useCallback((element)=>{
364
+ store.set('popupElement', element);
365
+ }, [
366
+ store
367
+ ]);
368
+ const state = {
369
+ transitionStatus,
370
+ side,
371
+ align,
372
+ open,
373
+ nested: 'menu' === parent.type,
374
+ instant: instantType
375
+ };
376
+ const element = useRenderElement('div', componentProps, {
377
+ state,
378
+ ref: [
379
+ forwardedRef,
380
+ store.context.popupRef,
381
+ setPopupElement
382
+ ],
383
+ stateAttributesMapping: MenuPopup_stateAttributesMapping,
384
+ props: [
385
+ popupProps,
386
+ {
387
+ onKeyDown (event) {
388
+ if (insideToolbar && COMPOSITE_KEYS.has(event.key)) event.stopPropagation();
389
+ }
390
+ },
391
+ getDisabledMountTransitionStyles(transitionStatus),
392
+ elementProps,
393
+ {
394
+ 'data-rootownerid': rootId
395
+ }
396
+ ]
397
+ });
398
+ let returnFocus = void 0 === parent.type || isContextMenu;
399
+ if (triggerElement || 'menubar' === parent.type && lastOpenChangeReason !== outsidePress) returnFocus = true;
400
+ return /*#__PURE__*/ jsx(FloatingFocusManager, {
401
+ context: floatingContext,
402
+ modal: isContextMenu,
403
+ disabled: !mounted,
404
+ returnFocus: void 0 === finalFocus ? returnFocus : finalFocus,
405
+ initialFocus: 'menu' !== parent.type,
406
+ restoreFocus: true,
407
+ externalTree: 'menubar' !== parent.type ? floatingTreeRoot : void 0,
408
+ previousFocusableElement: activeTriggerElement,
409
+ nextFocusableElement: void 0 === parent.type ? store.context.triggerFocusTargetRef : void 0,
410
+ beforeContentFocusGuardRef: void 0 === parent.type ? store.context.beforeContentFocusGuardRef : void 0,
411
+ children: element
412
+ });
413
+ });
414
+ if ("production" !== process.env.NODE_ENV) MenuPopup_MenuPopup.displayName = "MenuPopup";
415
+ const MenuArrow_MenuArrow = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
416
+ const { render, className, style, ...elementProps } = componentProps;
417
+ const { store } = useMenuRootContext();
418
+ const { arrowRef, side, align, arrowUncentered, arrowStyles } = useMenuPositionerContext();
419
+ const open = store.useState('open');
420
+ const state = {
421
+ open,
422
+ side,
423
+ align,
424
+ uncentered: arrowUncentered
425
+ };
426
+ return useRenderElement('div', componentProps, {
427
+ ref: [
428
+ arrowRef,
429
+ forwardedRef
430
+ ],
431
+ stateAttributesMapping: popupStateMapping,
432
+ state,
433
+ props: {
434
+ style: arrowStyles,
435
+ 'aria-hidden': true,
436
+ ...elementProps
437
+ }
438
+ });
439
+ });
440
+ if ("production" !== process.env.NODE_ENV) MenuArrow_MenuArrow.displayName = "MenuArrow";
441
+ const MenuGroupContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
442
+ if ("production" !== process.env.NODE_ENV) MenuGroupContext.displayName = "MenuGroupContext";
443
+ function useMenuGroupRootContext() {
444
+ const context = __rspack_external_react.useContext(MenuGroupContext);
445
+ if (void 0 === context) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: MenuGroupContext is missing. Menu group parts must be used within <Menu.Group> or <Menu.RadioGroup>.' : esm_formatErrorMessage(31));
446
+ return context;
447
+ }
448
+ const MenuGroup_MenuGroup = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
449
+ const { render, className, style, ...elementProps } = componentProps;
450
+ const [labelId, setLabelId] = __rspack_external_react.useState(void 0);
451
+ const element = useRenderElement('div', componentProps, {
452
+ ref: forwardedRef,
453
+ props: {
454
+ role: 'group',
455
+ 'aria-labelledby': labelId,
456
+ ...elementProps
457
+ }
458
+ });
459
+ return /*#__PURE__*/ jsx(MenuGroupContext.Provider, {
460
+ value: setLabelId,
461
+ children: element
462
+ });
463
+ });
464
+ if ("production" !== process.env.NODE_ENV) MenuGroup_MenuGroup.displayName = "MenuGroup";
465
+ const MenuGroupLabel_MenuGroupLabel = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
466
+ const { render, className, style, id: idProp, ...elementProps } = componentProps;
467
+ const id = useBaseUiId(idProp);
468
+ const setLabelId = useMenuGroupRootContext();
469
+ useIsoLayoutEffect(()=>{
470
+ setLabelId(id);
471
+ return ()=>{
472
+ setLabelId(void 0);
473
+ };
474
+ }, [
475
+ setLabelId,
476
+ id
477
+ ]);
478
+ return useRenderElement('div', componentProps, {
479
+ ref: forwardedRef,
480
+ props: {
481
+ id,
482
+ role: 'presentation',
483
+ ...elementProps
484
+ }
485
+ });
486
+ });
487
+ if ("production" !== process.env.NODE_ENV) MenuGroupLabel_MenuGroupLabel.displayName = "MenuGroupLabel";
488
+ function useMenuItemCommonProps(params) {
489
+ const { closeOnClick, highlighted, id, nodeId, store, typingRef, itemRef, itemMetadata } = params;
490
+ const { events: menuEvents } = store.useState('floatingTreeRoot');
491
+ const contextMenuContext = useContextMenuRootContext(true);
492
+ const isContextMenu = void 0 !== contextMenuContext;
493
+ return __rspack_external_react.useMemo(()=>({
494
+ id,
495
+ role: 'menuitem',
496
+ tabIndex: highlighted ? 0 : -1,
497
+ onKeyDown (event) {
498
+ if (' ' === event.key && typingRef?.current) event.preventDefault();
499
+ },
500
+ onMouseMove (event) {
501
+ if (!nodeId) return;
502
+ menuEvents.emit('itemhover', {
503
+ nodeId,
504
+ target: event.currentTarget
505
+ });
506
+ },
507
+ onClick (event) {
508
+ if (closeOnClick) menuEvents.emit('close', {
509
+ domEvent: event,
510
+ reason: itemPress
511
+ });
512
+ },
513
+ onMouseUp (event) {
514
+ if (contextMenuContext) {
515
+ const initialCursorPoint = contextMenuContext.initialCursorPointRef.current;
516
+ contextMenuContext.initialCursorPointRef.current = null;
517
+ if (isContextMenu && initialCursorPoint && Math.abs(event.clientX - initialCursorPoint.x) <= 1 && Math.abs(event.clientY - initialCursorPoint.y) <= 1) return;
518
+ if (isContextMenu && !isMac && 2 === event.button) return;
519
+ }
520
+ if (itemRef.current && store.context.allowMouseUpTriggerRef.current && (!isContextMenu || 2 === event.button)) {
521
+ if (!itemMetadata || 'regular-item' === itemMetadata.type) itemRef.current.click();
522
+ }
523
+ }
524
+ }), [
525
+ closeOnClick,
526
+ highlighted,
527
+ id,
528
+ menuEvents,
529
+ nodeId,
530
+ store,
531
+ typingRef,
532
+ itemRef,
533
+ contextMenuContext,
534
+ isContextMenu,
535
+ itemMetadata
536
+ ]);
537
+ }
538
+ const REGULAR_ITEM = {
539
+ type: 'regular-item'
540
+ };
541
+ function useMenuItem(params) {
542
+ const { closeOnClick, disabled = false, highlighted, id, store, typingRef = store.context.typingRef, nativeButton, itemMetadata, nodeId } = params;
543
+ const itemRef = __rspack_external_react.useRef(null);
544
+ const { getButtonProps, buttonRef } = useButton({
545
+ disabled,
546
+ focusableWhenDisabled: true,
547
+ native: nativeButton,
548
+ composite: true
549
+ });
550
+ const commonProps = useMenuItemCommonProps({
551
+ closeOnClick,
552
+ highlighted,
553
+ id,
554
+ nodeId,
555
+ store,
556
+ typingRef,
557
+ itemRef,
558
+ itemMetadata
559
+ });
560
+ const getItemProps = __rspack_external_react.useCallback((externalProps)=>mergeProps(commonProps, {
561
+ onMouseEnter () {
562
+ if ('submenu-trigger' !== itemMetadata.type) return;
563
+ itemMetadata.setActive();
564
+ }
565
+ }, externalProps, getButtonProps), [
566
+ commonProps,
567
+ getButtonProps,
568
+ itemMetadata
569
+ ]);
570
+ const mergedRef = useMergedRefs(itemRef, buttonRef);
571
+ return __rspack_external_react.useMemo(()=>({
572
+ getItemProps,
573
+ itemRef: mergedRef
574
+ }), [
575
+ getItemProps,
576
+ mergedRef
577
+ ]);
578
+ }
579
+ const MenuItem_MenuItem = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
580
+ const { render, className, id: idProp, label, nativeButton = false, disabled = false, closeOnClick = true, style, ...elementProps } = componentProps;
581
+ const listItem = useCompositeListItem({
582
+ label
583
+ });
584
+ const menuPositionerContext = useMenuPositionerContext(true);
585
+ const id = useBaseUiId(idProp);
586
+ const { store } = useMenuRootContext();
587
+ const highlighted = store.useState('isActive', listItem.index);
588
+ const itemProps = store.useState('itemProps');
589
+ const { getItemProps, itemRef } = useMenuItem({
590
+ closeOnClick,
591
+ disabled,
592
+ highlighted,
593
+ id,
594
+ store,
595
+ nativeButton,
596
+ nodeId: menuPositionerContext?.context.nodeId,
597
+ itemMetadata: REGULAR_ITEM
598
+ });
599
+ const state = {
600
+ disabled,
601
+ highlighted
602
+ };
603
+ return useRenderElement('div', componentProps, {
604
+ state,
605
+ props: [
606
+ itemProps,
607
+ elementProps,
608
+ getItemProps
609
+ ],
610
+ ref: [
611
+ itemRef,
612
+ forwardedRef,
613
+ listItem.ref
614
+ ]
615
+ });
616
+ });
617
+ if ("production" !== process.env.NODE_ENV) MenuItem_MenuItem.displayName = "MenuItem";
618
+ const MenuCheckboxItemContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
619
+ if ("production" !== process.env.NODE_ENV) MenuCheckboxItemContext.displayName = "MenuCheckboxItemContext";
620
+ function useMenuCheckboxItemContext() {
621
+ const context = __rspack_external_react.useContext(MenuCheckboxItemContext);
622
+ if (void 0 === context) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: MenuCheckboxItemContext is missing. MenuCheckboxItem parts must be placed within <Menu.CheckboxItem>.' : esm_formatErrorMessage(30));
623
+ return context;
624
+ }
625
+ let MenuCheckboxItemDataAttributes_MenuCheckboxItemDataAttributes = /*#__PURE__*/ function(MenuCheckboxItemDataAttributes) {
626
+ MenuCheckboxItemDataAttributes["checked"] = "data-checked";
627
+ MenuCheckboxItemDataAttributes["unchecked"] = "data-unchecked";
628
+ MenuCheckboxItemDataAttributes["disabled"] = "data-disabled";
629
+ MenuCheckboxItemDataAttributes["highlighted"] = "data-highlighted";
630
+ return MenuCheckboxItemDataAttributes;
631
+ }({});
632
+ const itemMapping = {
633
+ checked (value) {
634
+ if (value) return {
635
+ [MenuCheckboxItemDataAttributes_MenuCheckboxItemDataAttributes.checked]: ''
636
+ };
637
+ return {
638
+ [MenuCheckboxItemDataAttributes_MenuCheckboxItemDataAttributes.unchecked]: ''
639
+ };
640
+ },
641
+ ...transitionStatusMapping
642
+ };
643
+ const MenuCheckboxItem_MenuCheckboxItem = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
644
+ const { render, className, id: idProp, label, nativeButton = false, disabled = false, closeOnClick = false, checked: checkedProp, defaultChecked, onCheckedChange, style, ...elementProps } = componentProps;
645
+ const listItem = useCompositeListItem({
646
+ label
647
+ });
648
+ const menuPositionerContext = useMenuPositionerContext(true);
649
+ const id = useBaseUiId(idProp);
650
+ const { store } = useMenuRootContext();
651
+ const highlighted = store.useState('isActive', listItem.index);
652
+ const itemProps = store.useState('itemProps');
653
+ const [checked, setChecked] = useControlled({
654
+ controlled: checkedProp,
655
+ default: defaultChecked ?? false,
656
+ name: 'MenuCheckboxItem',
657
+ state: 'checked'
658
+ });
659
+ const { getItemProps, itemRef } = useMenuItem({
660
+ closeOnClick,
661
+ disabled,
662
+ highlighted,
663
+ id,
664
+ store,
665
+ nativeButton,
666
+ nodeId: menuPositionerContext?.context.nodeId,
667
+ itemMetadata: REGULAR_ITEM
668
+ });
669
+ const state = __rspack_external_react.useMemo(()=>({
670
+ disabled,
671
+ highlighted,
672
+ checked
673
+ }), [
674
+ disabled,
675
+ highlighted,
676
+ checked
677
+ ]);
678
+ function handleClick(event) {
679
+ const details = createChangeEventDetails(itemPress, event.nativeEvent, void 0, {
680
+ preventUnmountOnClose () {}
681
+ });
682
+ onCheckedChange?.(!checked, details);
683
+ if (details.isCanceled) return;
684
+ setChecked((currentlyChecked)=>!currentlyChecked);
685
+ }
686
+ const element = useRenderElement('div', componentProps, {
687
+ state,
688
+ stateAttributesMapping: itemMapping,
689
+ props: [
690
+ itemProps,
691
+ {
692
+ role: 'menuitemcheckbox',
693
+ 'aria-checked': checked,
694
+ onClick: handleClick
695
+ },
696
+ elementProps,
697
+ getItemProps
698
+ ],
699
+ ref: [
700
+ itemRef,
701
+ forwardedRef,
702
+ listItem.ref
703
+ ]
704
+ });
705
+ return /*#__PURE__*/ jsx(MenuCheckboxItemContext.Provider, {
706
+ value: state,
707
+ children: element
708
+ });
709
+ });
710
+ if ("production" !== process.env.NODE_ENV) MenuCheckboxItem_MenuCheckboxItem.displayName = "MenuCheckboxItem";
711
+ const MenuCheckboxItemIndicator_MenuCheckboxItemIndicator = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
712
+ const { render, className, style, keepMounted = false, ...elementProps } = componentProps;
713
+ const item = useMenuCheckboxItemContext();
714
+ const indicatorRef = __rspack_external_react.useRef(null);
715
+ const { transitionStatus, setMounted } = useTransitionStatus(item.checked);
716
+ useOpenChangeComplete({
717
+ open: item.checked,
718
+ ref: indicatorRef,
719
+ onComplete () {
720
+ if (!item.checked) setMounted(false);
721
+ }
722
+ });
723
+ const state = {
724
+ checked: item.checked,
725
+ disabled: item.disabled,
726
+ highlighted: item.highlighted,
727
+ transitionStatus
728
+ };
729
+ const element = useRenderElement('span', componentProps, {
730
+ state,
731
+ ref: [
732
+ forwardedRef,
733
+ indicatorRef
734
+ ],
735
+ stateAttributesMapping: itemMapping,
736
+ props: {
737
+ 'aria-hidden': true,
738
+ ...elementProps
739
+ },
740
+ enabled: keepMounted || item.checked
741
+ });
742
+ return element;
743
+ });
744
+ if ("production" !== process.env.NODE_ENV) MenuCheckboxItemIndicator_MenuCheckboxItemIndicator.displayName = "MenuCheckboxItemIndicator";
745
+ const MenuLinkItem_MenuLinkItem = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
746
+ const { render, className, id: idProp, label, closeOnClick = false, style, ...elementProps } = componentProps;
747
+ const linkRef = __rspack_external_react.useRef(null);
748
+ const listItem = useCompositeListItem({
749
+ label
750
+ });
751
+ const menuPositionerContext = useMenuPositionerContext(true);
752
+ const nodeId = menuPositionerContext?.context.nodeId;
753
+ const id = useBaseUiId(idProp);
754
+ const { store } = useMenuRootContext();
755
+ const highlighted = store.useState('isActive', listItem.index);
756
+ const itemProps = store.useState('itemProps');
757
+ const typingRef = store.context.typingRef;
758
+ const { getButtonProps, buttonRef } = useButton({
759
+ native: false,
760
+ composite: true
761
+ });
762
+ const commonProps = useMenuItemCommonProps({
763
+ closeOnClick,
764
+ highlighted,
765
+ id,
766
+ nodeId,
767
+ store,
768
+ typingRef,
769
+ itemRef: linkRef
770
+ });
771
+ function getItemProps(externalProps) {
772
+ return mergeProps(commonProps, externalProps, getButtonProps);
773
+ }
774
+ const state = {
775
+ highlighted
776
+ };
777
+ return useRenderElement('a', componentProps, {
778
+ state,
779
+ props: [
780
+ itemProps,
781
+ elementProps,
782
+ getItemProps
783
+ ],
784
+ ref: [
785
+ linkRef,
786
+ buttonRef,
787
+ forwardedRef,
788
+ listItem.ref
789
+ ]
790
+ });
791
+ });
792
+ if ("production" !== process.env.NODE_ENV) MenuLinkItem_MenuLinkItem.displayName = "MenuLinkItem";
793
+ const MenuRadioGroupContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
794
+ if ("production" !== process.env.NODE_ENV) MenuRadioGroupContext.displayName = "MenuRadioGroupContext";
795
+ function useMenuRadioGroupContext() {
796
+ const context = __rspack_external_react.useContext(MenuRadioGroupContext);
797
+ if (void 0 === context) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: MenuRadioGroupContext is missing. MenuRadioGroup parts must be placed within <Menu.RadioGroup>.' : esm_formatErrorMessage(34));
798
+ return context;
799
+ }
800
+ const MenuRadioGroup_MenuRadioGroup = /*#__PURE__*/ __rspack_external_react.memo(/*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
801
+ const { render, className, value: valueProp, defaultValue, onValueChange: onValueChangeProp, disabled = false, style, 'aria-labelledby': ariaLabelledByProp, ...elementProps } = componentProps;
802
+ const [labelId, setLabelId] = __rspack_external_react.useState(void 0);
803
+ const [value, setValueUnwrapped] = useControlled({
804
+ controlled: valueProp,
805
+ default: defaultValue,
806
+ name: 'MenuRadioGroup'
807
+ });
808
+ const setValue = useStableCallback((newValue, eventDetails)=>{
809
+ onValueChangeProp?.(newValue, eventDetails);
810
+ if (eventDetails.isCanceled) return;
811
+ setValueUnwrapped(newValue);
812
+ });
813
+ const state = {
814
+ disabled
815
+ };
816
+ const element = useRenderElement('div', componentProps, {
817
+ state,
818
+ ref: forwardedRef,
819
+ props: {
820
+ role: 'group',
821
+ 'aria-labelledby': ariaLabelledByProp ?? labelId,
822
+ 'aria-disabled': disabled || void 0,
823
+ ...elementProps
824
+ }
825
+ });
826
+ const context = __rspack_external_react.useMemo(()=>({
827
+ value,
828
+ setValue,
829
+ disabled
830
+ }), [
831
+ value,
832
+ setValue,
833
+ disabled
834
+ ]);
835
+ return /*#__PURE__*/ jsx(MenuGroupContext.Provider, {
836
+ value: setLabelId,
837
+ children: /*#__PURE__*/ jsx(MenuRadioGroupContext.Provider, {
838
+ value: context,
839
+ children: element
840
+ })
841
+ });
842
+ }));
843
+ if ("production" !== process.env.NODE_ENV) MenuRadioGroup_MenuRadioGroup.displayName = "MenuRadioGroup";
844
+ const MenuRadioItemContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
845
+ if ("production" !== process.env.NODE_ENV) MenuRadioItemContext.displayName = "MenuRadioItemContext";
846
+ function useMenuRadioItemContext() {
847
+ const context = __rspack_external_react.useContext(MenuRadioItemContext);
848
+ if (void 0 === context) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: MenuRadioItemContext is missing. MenuRadioItem parts must be placed within <Menu.RadioItem>.' : esm_formatErrorMessage(35));
849
+ return context;
850
+ }
851
+ const MenuRadioItem_MenuRadioItem = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
852
+ const { render, className, id: idProp, label, nativeButton = false, disabled: disabledProp = false, closeOnClick = false, value, style, ...elementProps } = componentProps;
853
+ const listItem = useCompositeListItem({
854
+ label
855
+ });
856
+ const menuPositionerContext = useMenuPositionerContext(true);
857
+ const id = useBaseUiId(idProp);
858
+ const { store } = useMenuRootContext();
859
+ const highlighted = store.useState('isActive', listItem.index);
860
+ const itemProps = store.useState('itemProps');
861
+ const { value: selectedValue, setValue: setSelectedValue, disabled: groupDisabled } = useMenuRadioGroupContext();
862
+ const disabled = groupDisabled || disabledProp;
863
+ const checked = selectedValue === value;
864
+ const { getItemProps, itemRef } = useMenuItem({
865
+ closeOnClick,
866
+ disabled,
867
+ highlighted,
868
+ id,
869
+ store,
870
+ nativeButton,
871
+ nodeId: menuPositionerContext?.context.nodeId,
872
+ itemMetadata: REGULAR_ITEM
873
+ });
874
+ const state = __rspack_external_react.useMemo(()=>({
875
+ disabled,
876
+ highlighted,
877
+ checked
878
+ }), [
879
+ disabled,
880
+ highlighted,
881
+ checked
882
+ ]);
883
+ function handleClick(event) {
884
+ const details = createChangeEventDetails(itemPress, event.nativeEvent, void 0, {
885
+ preventUnmountOnClose () {}
886
+ });
887
+ setSelectedValue(value, details);
888
+ }
889
+ const element = useRenderElement('div', componentProps, {
890
+ state,
891
+ stateAttributesMapping: itemMapping,
892
+ props: [
893
+ itemProps,
894
+ {
895
+ role: 'menuitemradio',
896
+ 'aria-checked': checked,
897
+ onClick: handleClick
898
+ },
899
+ elementProps,
900
+ getItemProps
901
+ ],
902
+ ref: [
903
+ itemRef,
904
+ forwardedRef,
905
+ listItem.ref
906
+ ]
907
+ });
908
+ return /*#__PURE__*/ jsx(MenuRadioItemContext.Provider, {
909
+ value: state,
910
+ children: element
911
+ });
912
+ });
913
+ if ("production" !== process.env.NODE_ENV) MenuRadioItem_MenuRadioItem.displayName = "MenuRadioItem";
914
+ const MenuRadioItemIndicator_MenuRadioItemIndicator = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
915
+ const { render, className, style, keepMounted = false, ...elementProps } = componentProps;
916
+ const item = useMenuRadioItemContext();
917
+ const indicatorRef = __rspack_external_react.useRef(null);
918
+ const { transitionStatus, setMounted } = useTransitionStatus(item.checked);
919
+ useOpenChangeComplete({
920
+ open: item.checked,
921
+ ref: indicatorRef,
922
+ onComplete () {
923
+ if (!item.checked) setMounted(false);
924
+ }
925
+ });
926
+ const state = {
927
+ checked: item.checked,
928
+ disabled: item.disabled,
929
+ highlighted: item.highlighted,
930
+ transitionStatus
931
+ };
932
+ const element = useRenderElement('span', componentProps, {
933
+ state,
934
+ stateAttributesMapping: itemMapping,
935
+ ref: [
936
+ forwardedRef,
937
+ indicatorRef
938
+ ],
939
+ props: {
940
+ 'aria-hidden': true,
941
+ ...elementProps
942
+ },
943
+ enabled: keepMounted || item.checked
944
+ });
945
+ return element;
946
+ });
947
+ if ("production" !== process.env.NODE_ENV) MenuRadioItemIndicator_MenuRadioItemIndicator.displayName = "MenuRadioItemIndicator";
948
+ const MenuSubmenuRootContext = /*#__PURE__*/ __rspack_external_react.createContext(void 0);
949
+ if ("production" !== process.env.NODE_ENV) MenuSubmenuRootContext.displayName = "MenuSubmenuRootContext";
950
+ function useMenuSubmenuRootContext() {
951
+ return __rspack_external_react.useContext(MenuSubmenuRootContext);
952
+ }
953
+ const MenuSubmenuTrigger_MenuSubmenuTrigger = /*#__PURE__*/ __rspack_external_react.forwardRef(function(componentProps, forwardedRef) {
954
+ const { render, className, style, label, id: idProp, nativeButton = false, openOnHover = true, delay = 100, closeDelay = 0, disabled: disabledProp = false, ...elementProps } = componentProps;
955
+ const listItem = useCompositeListItem();
956
+ const menuPositionerContext = useMenuPositionerContext();
957
+ const { store } = useMenuRootContext();
958
+ const thisTriggerId = useBaseUiId(idProp);
959
+ const open = store.useState('open');
960
+ const floatingRootContext = store.useState('floatingRootContext');
961
+ const floatingTreeRoot = store.useState('floatingTreeRoot');
962
+ const popupId = store.useState('triggerPopupId', thisTriggerId);
963
+ const baseRegisterTrigger = useTriggerRegistration(thisTriggerId, store);
964
+ const registerTrigger = __rspack_external_react.useCallback((element)=>{
965
+ const cleanup = baseRegisterTrigger(element);
966
+ if (null !== element && store.select('open') && null == store.select('activeTriggerId')) store.update({
967
+ activeTriggerId: thisTriggerId,
968
+ activeTriggerElement: element,
969
+ closeDelay
970
+ });
971
+ return cleanup;
972
+ }, [
973
+ baseRegisterTrigger,
974
+ closeDelay,
975
+ store,
976
+ thisTriggerId
977
+ ]);
978
+ const triggerElementRef = __rspack_external_react.useRef(null);
979
+ const handleTriggerElementRef = __rspack_external_react.useCallback((el)=>{
980
+ triggerElementRef.current = el;
981
+ store.set('activeTriggerElement', el);
982
+ }, [
983
+ store
984
+ ]);
985
+ if ('production' !== process.env.NODE_ENV) useIsoLayoutEffect(()=>{
986
+ const element = triggerElementRef.current;
987
+ if (element && isElementDisabled(element) && !disabledProp) {
988
+ const ownerStackMessage = SafeReact.captureOwnerStack?.() || '';
989
+ warn(`A disabled element was detected on <Menu.SubmenuTrigger>. To properly disable the trigger, use the \`disabled\` prop on the component instead of setting it on the rendered element.${ownerStackMessage}`);
990
+ }
991
+ });
992
+ const submenuRootContext = useMenuSubmenuRootContext();
993
+ if (!submenuRootContext?.parentMenu) throw new Error("production" !== process.env.NODE_ENV ? 'Base UI: <Menu.SubmenuTrigger> must be placed in <Menu.SubmenuRoot>.' : esm_formatErrorMessage(37));
994
+ store.useSyncedValue('closeDelay', closeDelay);
995
+ const parentMenuStore = submenuRootContext.parentMenu;
996
+ const itemProps = parentMenuStore.useState('itemProps');
997
+ const highlighted = parentMenuStore.useState('isActive', listItem.index);
998
+ const itemMetadata = __rspack_external_react.useMemo(()=>({
999
+ type: 'submenu-trigger',
1000
+ setActive () {
1001
+ parentMenuStore.set('activeIndex', listItem.index);
1002
+ }
1003
+ }), [
1004
+ parentMenuStore,
1005
+ listItem.index
1006
+ ]);
1007
+ const rootDisabled = store.useState('disabled');
1008
+ const disabled = disabledProp || rootDisabled;
1009
+ const { getItemProps, itemRef } = useMenuItem({
1010
+ closeOnClick: false,
1011
+ disabled,
1012
+ highlighted,
1013
+ id: thisTriggerId,
1014
+ store,
1015
+ typingRef: parentMenuStore.context.typingRef,
1016
+ nativeButton,
1017
+ itemMetadata,
1018
+ nodeId: menuPositionerContext?.context.nodeId
1019
+ });
1020
+ const hoverEnabled = store.useState('hoverEnabled');
1021
+ const allowMouseEnter = parentMenuStore.useState('allowMouseEnter');
1022
+ const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
1023
+ enabled: hoverEnabled && openOnHover && !disabled,
1024
+ handleClose: safePolygon({
1025
+ blockPointerEvents: true
1026
+ }),
1027
+ mouseOnly: true,
1028
+ move: true,
1029
+ restMs: delay,
1030
+ delay: allowMouseEnter ? {
1031
+ open: delay,
1032
+ close: closeDelay
1033
+ } : 0,
1034
+ triggerElementRef,
1035
+ externalTree: floatingTreeRoot,
1036
+ isClosing: ()=>'ending' === store.select('transitionStatus')
1037
+ });
1038
+ const click = useClick(floatingRootContext, {
1039
+ enabled: !disabled,
1040
+ event: 'mousedown',
1041
+ toggle: !openOnHover,
1042
+ ignoreMouse: openOnHover,
1043
+ stickIfOpen: false
1044
+ });
1045
+ const localInteractionProps = click.reference ?? EMPTY_OBJECT;
1046
+ const rootTriggerProps = store.useState('triggerProps', true);
1047
+ delete rootTriggerProps.id;
1048
+ const state = {
1049
+ disabled,
1050
+ highlighted,
1051
+ open
1052
+ };
1053
+ const element = useRenderElement('div', componentProps, {
1054
+ state,
1055
+ stateAttributesMapping: triggerOpenStateMapping,
1056
+ props: [
1057
+ localInteractionProps,
1058
+ hoverProps,
1059
+ rootTriggerProps,
1060
+ itemProps,
1061
+ {
1062
+ 'aria-controls': popupId,
1063
+ tabIndex: open || highlighted ? 0 : -1,
1064
+ onBlur () {
1065
+ if (highlighted) parentMenuStore.set('activeIndex', null);
1066
+ }
1067
+ },
1068
+ elementProps,
1069
+ getItemProps
1070
+ ],
1071
+ ref: [
1072
+ forwardedRef,
1073
+ listItem.ref,
1074
+ itemRef,
1075
+ registerTrigger,
1076
+ handleTriggerElementRef
1077
+ ]
1078
+ });
1079
+ return element;
1080
+ });
1081
+ if ("production" !== process.env.NODE_ENV) MenuSubmenuTrigger_MenuSubmenuTrigger.displayName = "MenuSubmenuTrigger";
1082
+ const selectors = {
1083
+ ...popupStoreSelectors,
1084
+ disabled: createSelector((state)=>'menubar' === state.parent.type ? state.parent.context.disabled || state.disabled : state.disabled),
1085
+ modal: createSelector((state)=>(void 0 === state.parent.type || 'context-menu' === state.parent.type) && (state.modal ?? true)),
1086
+ openMethod: createSelector((state)=>state.openMethod),
1087
+ allowMouseEnter: createSelector((state)=>state.allowMouseEnter),
1088
+ stickIfOpen: createSelector((state)=>state.stickIfOpen),
1089
+ parent: createSelector((state)=>state.parent),
1090
+ rootId: createSelector((state)=>{
1091
+ if ('menu' === state.parent.type) return state.parent.store.select('rootId');
1092
+ return void 0 !== state.parent.type ? state.parent.context.rootId : state.rootId;
1093
+ }),
1094
+ activeIndex: createSelector((state)=>state.activeIndex),
1095
+ isActive: createSelector((state, itemIndex)=>state.activeIndex === itemIndex),
1096
+ hoverEnabled: createSelector((state)=>state.hoverEnabled),
1097
+ instantType: createSelector((state)=>state.instantType),
1098
+ lastOpenChangeReason: createSelector((state)=>state.openChangeReason),
1099
+ floatingTreeRoot: createSelector((state)=>{
1100
+ if ('menu' === state.parent.type) return state.parent.store.select('floatingTreeRoot');
1101
+ return state.floatingTreeRoot;
1102
+ }),
1103
+ floatingNodeId: createSelector((state)=>state.floatingNodeId),
1104
+ floatingParentNodeId: createSelector((state)=>state.floatingParentNodeId),
1105
+ itemProps: createSelector((state)=>state.itemProps),
1106
+ closeDelay: createSelector((state)=>state.closeDelay),
1107
+ hasViewport: createSelector((state)=>state.hasViewport),
1108
+ keyboardEventRelay: createSelector((state)=>{
1109
+ if (state.keyboardEventRelay) return state.keyboardEventRelay;
1110
+ if ('menu' === state.parent.type) return state.parent.store.select('keyboardEventRelay');
1111
+ })
1112
+ };
1113
+ class MenuStore extends ReactStore {
1114
+ constructor(initialState){
1115
+ super({
1116
+ ...createInitialState(),
1117
+ ...initialState
1118
+ }, {
1119
+ positionerRef: /*#__PURE__*/ __rspack_external_react.createRef(),
1120
+ popupRef: /*#__PURE__*/ __rspack_external_react.createRef(),
1121
+ typingRef: {
1122
+ current: false
1123
+ },
1124
+ itemDomElements: {
1125
+ current: []
1126
+ },
1127
+ itemLabels: {
1128
+ current: []
1129
+ },
1130
+ allowMouseUpTriggerRef: {
1131
+ current: false
1132
+ },
1133
+ triggerFocusTargetRef: /*#__PURE__*/ __rspack_external_react.createRef(),
1134
+ beforeContentFocusGuardRef: /*#__PURE__*/ __rspack_external_react.createRef(),
1135
+ onOpenChangeComplete: void 0,
1136
+ triggerElements: new PopupTriggerMap()
1137
+ }, selectors);
1138
+ this.unsubscribeParentListener = this.observe('parent', (parent)=>{
1139
+ this.unsubscribeParentListener?.();
1140
+ if ('menu' === parent.type) {
1141
+ let rootId = parent.store.select('rootId');
1142
+ let floatingTreeRoot = parent.store.select('floatingTreeRoot');
1143
+ let keyboardEventRelay = parent.store.select('keyboardEventRelay');
1144
+ this.unsubscribeParentListener = parent.store.subscribe(()=>{
1145
+ const nextRootId = parent.store.select('rootId');
1146
+ const nextFloatingTreeRoot = parent.store.select('floatingTreeRoot');
1147
+ const nextKeyboardEventRelay = parent.store.select('keyboardEventRelay');
1148
+ if (rootId === nextRootId && floatingTreeRoot === nextFloatingTreeRoot && keyboardEventRelay === nextKeyboardEventRelay) return;
1149
+ rootId = nextRootId;
1150
+ floatingTreeRoot = nextFloatingTreeRoot;
1151
+ keyboardEventRelay = nextKeyboardEventRelay;
1152
+ this.notifyAll();
1153
+ });
1154
+ this.context.allowMouseUpTriggerRef = parent.store.context.allowMouseUpTriggerRef;
1155
+ return;
1156
+ }
1157
+ if (void 0 !== parent.type) this.context.allowMouseUpTriggerRef = parent.context.allowMouseUpTriggerRef;
1158
+ this.unsubscribeParentListener = null;
1159
+ });
1160
+ }
1161
+ setOpen(open, eventDetails) {
1162
+ this.state.floatingRootContext.context.events.emit('setOpen', {
1163
+ open,
1164
+ eventDetails
1165
+ });
1166
+ }
1167
+ static useStore(externalStore, initialState) {
1168
+ const internalStore = useRefWithInit(()=>new MenuStore(initialState)).current;
1169
+ return externalStore ?? internalStore;
1170
+ }
1171
+ unsubscribeParentListener = null;
1172
+ }
1173
+ function createInitialState() {
1174
+ return {
1175
+ ...createInitialPopupStoreState(),
1176
+ disabled: false,
1177
+ modal: true,
1178
+ openMethod: null,
1179
+ allowMouseEnter: false,
1180
+ stickIfOpen: true,
1181
+ parent: {
1182
+ type: void 0
1183
+ },
1184
+ rootId: void 0,
1185
+ activeIndex: null,
1186
+ hoverEnabled: true,
1187
+ instantType: void 0,
1188
+ openChangeReason: null,
1189
+ floatingTreeRoot: new FloatingTreeStore(),
1190
+ floatingNodeId: void 0,
1191
+ floatingParentNodeId: null,
1192
+ itemProps: EMPTY_OBJECT,
1193
+ keyboardEventRelay: void 0,
1194
+ closeDelay: 0,
1195
+ hasViewport: false
1196
+ };
1197
+ }
1198
+ const MenuRoot_MenuRoot = fastComponent(function(props) {
1199
+ const { children, open: openProp, onOpenChange, onOpenChangeComplete, defaultOpen = false, disabled: disabledProp = false, modal: modalProp, loopFocus = true, orientation = 'vertical', actionsRef, closeParentOnEsc = false, handle, triggerId: triggerIdProp, defaultTriggerId: defaultTriggerIdProp = null, highlightItemOnHover = true } = props;
1200
+ const contextMenuContext = useContextMenuRootContext(true);
1201
+ const parentMenuRootContext = useMenuRootContext(true);
1202
+ const menubarContext = useMenubarContext(true);
1203
+ const isSubmenu = useMenuSubmenuRootContext();
1204
+ const parentFromContext = __rspack_external_react.useMemo(()=>{
1205
+ if (isSubmenu && parentMenuRootContext) return {
1206
+ type: 'menu',
1207
+ store: parentMenuRootContext.store
1208
+ };
1209
+ if (menubarContext) return {
1210
+ type: 'menubar',
1211
+ context: menubarContext
1212
+ };
1213
+ if (contextMenuContext && !parentMenuRootContext) return {
1214
+ type: 'context-menu',
1215
+ context: contextMenuContext
1216
+ };
1217
+ return {
1218
+ type: void 0
1219
+ };
1220
+ }, [
1221
+ contextMenuContext,
1222
+ parentMenuRootContext,
1223
+ menubarContext,
1224
+ isSubmenu
1225
+ ]);
1226
+ const store = MenuStore.useStore(handle?.store, {
1227
+ open: defaultOpen,
1228
+ openProp,
1229
+ activeTriggerId: defaultTriggerIdProp,
1230
+ triggerIdProp,
1231
+ parent: parentFromContext
1232
+ });
1233
+ useOnFirstRender(()=>{
1234
+ if (void 0 === openProp && false === store.state.open && true === defaultOpen) store.update({
1235
+ open: true,
1236
+ activeTriggerId: defaultTriggerIdProp
1237
+ });
1238
+ });
1239
+ store.useControlledProp('openProp', openProp);
1240
+ store.useControlledProp('triggerIdProp', triggerIdProp);
1241
+ store.useContextCallback('onOpenChangeComplete', onOpenChangeComplete);
1242
+ const rootId = useId();
1243
+ const floatingId = useId();
1244
+ const floatingTreeRoot = store.useState('floatingTreeRoot');
1245
+ const floatingNodeIdFromContext = useFloatingNodeId(floatingTreeRoot);
1246
+ const floatingParentNodeIdFromContext = useFloatingParentNodeId();
1247
+ const open = store.useState('open');
1248
+ const activeTriggerElement = store.useState('activeTriggerElement');
1249
+ const positionerElement = store.useState('positionerElement');
1250
+ const hoverEnabled = store.useState('hoverEnabled');
1251
+ const disabled = store.useState('disabled');
1252
+ const lastOpenChangeReason = store.useState('lastOpenChangeReason');
1253
+ const parent = store.useState('parent');
1254
+ const activeIndex = store.useState('activeIndex');
1255
+ const payload = store.useState('payload');
1256
+ const floatingParentNodeId = store.useState('floatingParentNodeId');
1257
+ const openEventRef = __rspack_external_react.useRef(null);
1258
+ const allowOutsidePressDismissalRef = __rspack_external_react.useRef('context-menu' !== parent.type);
1259
+ const allowOutsidePressDismissalTimeout = useTimeout();
1260
+ const allowTouchToCloseRef = __rspack_external_react.useRef(true);
1261
+ const allowTouchToCloseTimeout = useTimeout();
1262
+ const nested = null != floatingParentNodeId;
1263
+ if ('production' !== process.env.NODE_ENV) {
1264
+ if (void 0 !== parent.type && void 0 !== modalProp) console.warn('Base UI: The `modal` prop is not supported on nested menus. It will be ignored.');
1265
+ }
1266
+ const { openMethod, triggerProps: interactionTypeProps } = useOpenInteractionType(open);
1267
+ store.useSyncedValues({
1268
+ disabled: disabledProp,
1269
+ modal: void 0 === parent.type ? modalProp : void 0,
1270
+ openMethod,
1271
+ rootId
1272
+ });
1273
+ useImplicitActiveTrigger(store);
1274
+ const { forceUnmount } = useOpenStateTransitions(open, store, ()=>{
1275
+ store.update({
1276
+ allowMouseEnter: false,
1277
+ stickIfOpen: true
1278
+ });
1279
+ });
1280
+ useIsoLayoutEffect(()=>{
1281
+ if (contextMenuContext && !parentMenuRootContext) store.update({
1282
+ parent: {
1283
+ type: 'context-menu',
1284
+ context: contextMenuContext
1285
+ },
1286
+ floatingNodeId: floatingNodeIdFromContext,
1287
+ floatingParentNodeId: floatingParentNodeIdFromContext
1288
+ });
1289
+ else if (parentMenuRootContext) store.update({
1290
+ floatingNodeId: floatingNodeIdFromContext,
1291
+ floatingParentNodeId: floatingParentNodeIdFromContext
1292
+ });
1293
+ }, [
1294
+ contextMenuContext,
1295
+ parentMenuRootContext,
1296
+ floatingNodeIdFromContext,
1297
+ floatingParentNodeIdFromContext,
1298
+ store
1299
+ ]);
1300
+ __rspack_external_react.useEffect(()=>{
1301
+ if (!open) openEventRef.current = null;
1302
+ if ('context-menu' !== parent.type) return;
1303
+ if (!open) {
1304
+ allowOutsidePressDismissalTimeout.clear();
1305
+ allowOutsidePressDismissalRef.current = false;
1306
+ return;
1307
+ }
1308
+ allowOutsidePressDismissalTimeout.start(500, ()=>{
1309
+ allowOutsidePressDismissalRef.current = true;
1310
+ });
1311
+ }, [
1312
+ allowOutsidePressDismissalTimeout,
1313
+ open,
1314
+ parent.type
1315
+ ]);
1316
+ useIsoLayoutEffect(()=>{
1317
+ if (!open && !hoverEnabled) store.set('hoverEnabled', true);
1318
+ }, [
1319
+ open,
1320
+ hoverEnabled,
1321
+ store
1322
+ ]);
1323
+ const setOpen = useStableCallback((nextOpen, eventDetails)=>{
1324
+ const reason = eventDetails.reason;
1325
+ if (open === nextOpen && eventDetails.trigger === activeTriggerElement && lastOpenChangeReason === reason) return;
1326
+ eventDetails.preventUnmountOnClose = ()=>{
1327
+ store.set('preventUnmountingOnClose', true);
1328
+ };
1329
+ if (!nextOpen && null == eventDetails.trigger) eventDetails.trigger = activeTriggerElement ?? void 0;
1330
+ onOpenChange?.(nextOpen, eventDetails);
1331
+ if (eventDetails.isCanceled) return;
1332
+ store.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
1333
+ const nativeEvent = eventDetails.event;
1334
+ if (false === nextOpen && nativeEvent?.type === 'click' && 'touch' === nativeEvent.pointerType && !allowTouchToCloseRef.current) return;
1335
+ if (!nextOpen && null !== activeIndex) {
1336
+ const activeOption = store.context.itemDomElements.current[activeIndex];
1337
+ queueMicrotask(()=>{
1338
+ activeOption?.setAttribute('tabindex', '-1');
1339
+ });
1340
+ }
1341
+ if (nextOpen && reason === triggerFocus) {
1342
+ allowTouchToCloseRef.current = false;
1343
+ allowTouchToCloseTimeout.start(300, ()=>{
1344
+ allowTouchToCloseRef.current = true;
1345
+ });
1346
+ } else {
1347
+ allowTouchToCloseRef.current = true;
1348
+ allowTouchToCloseTimeout.clear();
1349
+ }
1350
+ const isKeyboardClick = (reason === triggerPress || reason === itemPress) && 0 === nativeEvent.detail && nativeEvent?.isTrusted;
1351
+ const isDismissClose = !nextOpen && (reason === escapeKey || null == reason);
1352
+ const updatedState = {
1353
+ open: nextOpen,
1354
+ openChangeReason: reason
1355
+ };
1356
+ openEventRef.current = eventDetails.event ?? null;
1357
+ const newTriggerId = eventDetails.trigger?.id ?? null;
1358
+ if (newTriggerId || nextOpen) {
1359
+ updatedState.activeTriggerId = newTriggerId;
1360
+ updatedState.activeTriggerElement = eventDetails.trigger ?? null;
1361
+ }
1362
+ store.update(updatedState);
1363
+ if ('menubar' === parent.type && (reason === triggerFocus || reason === focusOut || reason === triggerHover || reason === reason_parts_listNavigation || reason === siblingOpen)) store.set('instantType', 'group');
1364
+ else if (isKeyboardClick || isDismissClose) store.set('instantType', isKeyboardClick ? 'click' : 'dismiss');
1365
+ else store.set('instantType', void 0);
1366
+ });
1367
+ const floatingRootContext = useSyncedFloatingRootContext({
1368
+ popupStore: store,
1369
+ floatingId,
1370
+ nested: null != floatingParentNodeIdFromContext,
1371
+ onOpenChange: setOpen
1372
+ });
1373
+ const floatingEvents = floatingRootContext.context.events;
1374
+ __rspack_external_react.useEffect(()=>{
1375
+ const handleSetOpenEvent = ({ open: nextOpen, eventDetails })=>setOpen(nextOpen, eventDetails);
1376
+ floatingEvents.on('setOpen', handleSetOpenEvent);
1377
+ return ()=>{
1378
+ floatingEvents?.off('setOpen', handleSetOpenEvent);
1379
+ };
1380
+ }, [
1381
+ floatingEvents,
1382
+ setOpen
1383
+ ]);
1384
+ const handleImperativeClose = __rspack_external_react.useCallback(()=>{
1385
+ store.setOpen(false, createChangeEventDetails(imperativeAction));
1386
+ }, [
1387
+ store
1388
+ ]);
1389
+ __rspack_external_react.useImperativeHandle(actionsRef, ()=>({
1390
+ unmount: forceUnmount,
1391
+ close: handleImperativeClose
1392
+ }), [
1393
+ forceUnmount,
1394
+ handleImperativeClose
1395
+ ]);
1396
+ let ctx;
1397
+ if ('context-menu' === parent.type) ctx = parent.context;
1398
+ __rspack_external_react.useImperativeHandle(ctx?.positionerRef, ()=>positionerElement, [
1399
+ positionerElement
1400
+ ]);
1401
+ __rspack_external_react.useImperativeHandle(ctx?.actionsRef, ()=>({
1402
+ setOpen
1403
+ }), [
1404
+ setOpen
1405
+ ]);
1406
+ const dismiss = useDismiss(floatingRootContext, {
1407
+ enabled: !disabled,
1408
+ bubbles: {
1409
+ escapeKey: closeParentOnEsc && 'menu' === parent.type
1410
+ },
1411
+ outsidePress () {
1412
+ if ('context-menu' !== parent.type || openEventRef.current?.type === 'contextmenu') return true;
1413
+ return allowOutsidePressDismissalRef.current;
1414
+ },
1415
+ externalTree: nested ? floatingTreeRoot : void 0
1416
+ });
1417
+ const direction = useDirection();
1418
+ const setActiveIndex = __rspack_external_react.useCallback((index)=>{
1419
+ if (store.select('activeIndex') === index) return;
1420
+ store.set('activeIndex', index);
1421
+ }, [
1422
+ store
1423
+ ]);
1424
+ const listNavigation = useListNavigation(floatingRootContext, {
1425
+ enabled: !disabled,
1426
+ listRef: store.context.itemDomElements,
1427
+ activeIndex,
1428
+ nested: void 0 !== parent.type,
1429
+ loopFocus,
1430
+ orientation,
1431
+ parentOrientation: 'menubar' === parent.type ? parent.context.orientation : void 0,
1432
+ rtl: 'rtl' === direction,
1433
+ disabledIndices: EMPTY_ARRAY,
1434
+ onNavigate: setActiveIndex,
1435
+ openOnArrowKeyDown: 'context-menu' !== parent.type,
1436
+ externalTree: nested ? floatingTreeRoot : void 0,
1437
+ focusItemOnHover: highlightItemOnHover
1438
+ });
1439
+ const onTyping = __rspack_external_react.useCallback((nextTyping)=>{
1440
+ store.context.typingRef.current = nextTyping;
1441
+ }, [
1442
+ store
1443
+ ]);
1444
+ const typeahead = useTypeahead(floatingRootContext, {
1445
+ listRef: store.context.itemLabels,
1446
+ elementsRef: store.context.itemDomElements,
1447
+ activeIndex,
1448
+ resetMs: 500,
1449
+ onMatch: (index)=>{
1450
+ if (open && index !== activeIndex) store.set('activeIndex', index);
1451
+ },
1452
+ onTyping
1453
+ });
1454
+ const activeTriggerProps = __rspack_external_react.useMemo(()=>{
1455
+ const mergedProps = mergeProps(typeahead.reference, listNavigation.reference, dismiss.reference, {
1456
+ onMouseMove () {
1457
+ store.set('allowMouseEnter', true);
1458
+ }
1459
+ }, interactionTypeProps);
1460
+ mergedProps['aria-haspopup'] = 'menu';
1461
+ mergedProps['aria-expanded'] = open;
1462
+ return mergedProps;
1463
+ }, [
1464
+ store,
1465
+ typeahead.reference,
1466
+ listNavigation.reference,
1467
+ dismiss.reference,
1468
+ interactionTypeProps,
1469
+ open
1470
+ ]);
1471
+ const inactiveTriggerProps = __rspack_external_react.useMemo(()=>{
1472
+ const mergedProps = mergeProps(listNavigation.trigger, dismiss.trigger, interactionTypeProps);
1473
+ mergedProps['aria-haspopup'] = 'menu';
1474
+ mergedProps['aria-expanded'] = false;
1475
+ return mergedProps;
1476
+ }, [
1477
+ listNavigation.trigger,
1478
+ dismiss.trigger,
1479
+ interactionTypeProps
1480
+ ]);
1481
+ const popupProps = __rspack_external_react.useMemo(()=>mergeProps(FOCUSABLE_POPUP_PROPS, {
1482
+ id: floatingId,
1483
+ role: 'menu',
1484
+ 'aria-labelledby': activeTriggerElement?.id,
1485
+ onMouseMove () {
1486
+ store.set('allowMouseEnter', true);
1487
+ if ('menu' === parent.type) store.set('hoverEnabled', false);
1488
+ },
1489
+ onClick () {
1490
+ if (store.select('hoverEnabled')) store.set('hoverEnabled', false);
1491
+ },
1492
+ onKeyDown (event) {
1493
+ const relay = store.select('keyboardEventRelay');
1494
+ if (relay && !event.isPropagationStopped()) relay(event);
1495
+ }
1496
+ }, typeahead.floating, listNavigation.floating, dismiss.floating), [
1497
+ activeTriggerElement,
1498
+ floatingId,
1499
+ parent.type,
1500
+ store,
1501
+ typeahead.floating,
1502
+ listNavigation.floating,
1503
+ dismiss.floating
1504
+ ]);
1505
+ const itemProps = listNavigation.item ?? EMPTY_OBJECT;
1506
+ usePopupInteractionProps(store, {
1507
+ floatingRootContext,
1508
+ activeTriggerProps,
1509
+ inactiveTriggerProps,
1510
+ popupProps,
1511
+ itemProps
1512
+ });
1513
+ const context = __rspack_external_react.useMemo(()=>({
1514
+ store,
1515
+ parent: parentFromContext
1516
+ }), [
1517
+ store,
1518
+ parentFromContext
1519
+ ]);
1520
+ const content = /*#__PURE__*/ jsx(MenuRootContext.Provider, {
1521
+ value: context,
1522
+ children: 'function' == typeof children ? children({
1523
+ payload
1524
+ }) : children
1525
+ });
1526
+ if (void 0 === parent.type || 'context-menu' === parent.type) return /*#__PURE__*/ jsx(FloatingTree, {
1527
+ externalTree: floatingTreeRoot,
1528
+ children: content
1529
+ });
1530
+ return content;
1531
+ });
1532
+ if ("production" !== process.env.NODE_ENV) MenuRoot_MenuRoot.displayName = "MenuRoot";
1533
+ function MenuSubmenuRoot(props) {
1534
+ const parentMenu = useMenuRootContext().store;
1535
+ const contextValue = __rspack_external_react.useMemo(()=>({
1536
+ parentMenu
1537
+ }), [
1538
+ parentMenu
1539
+ ]);
1540
+ return /*#__PURE__*/ jsx(MenuSubmenuRootContext.Provider, {
1541
+ value: contextValue,
1542
+ children: /*#__PURE__*/ jsx(MenuRoot_MenuRoot, {
1543
+ ...props
1544
+ })
1545
+ });
1546
+ }
1547
+ const MenuPortal_MenuPortal = /*#__PURE__*/ __rspack_external_react.forwardRef(function(props, forwardedRef) {
1548
+ const { keepMounted = false, ...portalProps } = props;
1549
+ const { store } = useMenuRootContext();
1550
+ const mounted = store.useState('mounted');
1551
+ const shouldRender = mounted || keepMounted;
1552
+ if (!shouldRender) return null;
1553
+ return /*#__PURE__*/ jsx(MenuPortalContext.Provider, {
1554
+ value: keepMounted,
1555
+ children: /*#__PURE__*/ jsx(FloatingPortal_FloatingPortal, {
1556
+ ref: forwardedRef,
1557
+ ...portalProps
1558
+ })
1559
+ });
1560
+ });
1561
+ if ("production" !== process.env.NODE_ENV) MenuPortal_MenuPortal.displayName = "MenuPortal";
1562
+ export { ContextMenuRootContext, MenuArrow_MenuArrow, MenuBackdrop_MenuBackdrop, MenuCheckboxItemIndicator_MenuCheckboxItemIndicator, MenuCheckboxItem_MenuCheckboxItem, MenuGroupLabel_MenuGroupLabel, MenuGroup_MenuGroup, MenuItem_MenuItem, MenuLinkItem_MenuLinkItem, MenuPopup_MenuPopup, MenuPortal_MenuPortal, MenuPositioner_MenuPositioner, MenuRadioGroup_MenuRadioGroup, MenuRadioItemIndicator_MenuRadioItemIndicator, MenuRadioItem_MenuRadioItem, MenuRootContext, MenuRoot_MenuRoot, MenuStore, MenuSubmenuRoot, MenuSubmenuTrigger_MenuSubmenuTrigger, findRootOwnerId, useContextMenuRootContext, useMenuPositionerContext, useMenuRootContext };