@radix-ui/react-menu 0.1.7-rc.8 → 1.0.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.
@@ -1,57 +1,25 @@
1
1
  import $epM9y$babelruntimehelpersesmextends from "@babel/runtime/helpers/esm/extends";
2
2
  import {useState as $epM9y$useState, useRef as $epM9y$useRef, useEffect as $epM9y$useEffect, createElement as $epM9y$createElement, useCallback as $epM9y$useCallback, forwardRef as $epM9y$forwardRef, Fragment as $epM9y$Fragment} from "react";
3
- import {RemoveScroll as $epM9y$RemoveScroll} from "react-remove-scroll";
4
- import {hideOthers as $epM9y$hideOthers} from "aria-hidden";
5
3
  import {composeEventHandlers as $epM9y$composeEventHandlers} from "@radix-ui/primitive";
6
4
  import {createCollection as $epM9y$createCollection} from "@radix-ui/react-collection";
7
5
  import {useComposedRefs as $epM9y$useComposedRefs, composeRefs as $epM9y$composeRefs} from "@radix-ui/react-compose-refs";
8
6
  import {createContextScope as $epM9y$createContextScope} from "@radix-ui/react-context";
7
+ import {useDirection as $epM9y$useDirection} from "@radix-ui/react-direction";
9
8
  import {DismissableLayer as $epM9y$DismissableLayer} from "@radix-ui/react-dismissable-layer";
9
+ import {useFocusGuards as $epM9y$useFocusGuards} from "@radix-ui/react-focus-guards";
10
10
  import {FocusScope as $epM9y$FocusScope} from "@radix-ui/react-focus-scope";
11
- import {Presence as $epM9y$Presence} from "@radix-ui/react-presence";
12
- import {Primitive as $epM9y$Primitive} from "@radix-ui/react-primitive";
11
+ import {useId as $epM9y$useId} from "@radix-ui/react-id";
13
12
  import {createPopperScope as $epM9y$createPopperScope, Root as $epM9y$Root, Anchor as $epM9y$Anchor, Content as $epM9y$Content, Arrow as $epM9y$Arrow} from "@radix-ui/react-popper";
14
13
  import {Portal as $epM9y$Portal} from "@radix-ui/react-portal";
14
+ import {Presence as $epM9y$Presence} from "@radix-ui/react-presence";
15
+ import {Primitive as $epM9y$Primitive, dispatchDiscreteCustomEvent as $epM9y$dispatchDiscreteCustomEvent} from "@radix-ui/react-primitive";
15
16
  import {createRovingFocusGroupScope as $epM9y$createRovingFocusGroupScope, Root as $epM9y$Root1, Item as $epM9y$Item} from "@radix-ui/react-roving-focus";
16
- import {useDirection as $epM9y$useDirection} from "@radix-ui/react-direction";
17
+ import {Slot as $epM9y$Slot} from "@radix-ui/react-slot";
17
18
  import {useCallbackRef as $epM9y$useCallbackRef} from "@radix-ui/react-use-callback-ref";
18
- import {useFocusGuards as $epM9y$useFocusGuards} from "@radix-ui/react-focus-guards";
19
- import {useId as $epM9y$useId} from "@radix-ui/react-id";
19
+ import {hideOthers as $epM9y$hideOthers} from "aria-hidden";
20
+ import {RemoveScroll as $epM9y$RemoveScroll} from "react-remove-scroll";
20
21
 
21
- function $parcel$export(e, n, v, s) {
22
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
23
- }
24
- var $6cc32821e9371a1c$exports = {};
25
22
 
26
- $parcel$export($6cc32821e9371a1c$exports, "createMenuScope", () => $6cc32821e9371a1c$export$4027731b685e72eb);
27
- $parcel$export($6cc32821e9371a1c$exports, "Menu", () => $6cc32821e9371a1c$export$d9b273488cd8ce6f);
28
- $parcel$export($6cc32821e9371a1c$exports, "MenuSub", () => $6cc32821e9371a1c$export$71bdb9d1e2909932);
29
- $parcel$export($6cc32821e9371a1c$exports, "MenuAnchor", () => $6cc32821e9371a1c$export$9fa5ebd18bee4d43);
30
- $parcel$export($6cc32821e9371a1c$exports, "MenuContent", () => $6cc32821e9371a1c$export$479f0f2f71193efe);
31
- $parcel$export($6cc32821e9371a1c$exports, "MenuGroup", () => $6cc32821e9371a1c$export$22a631d1f72787bb);
32
- $parcel$export($6cc32821e9371a1c$exports, "MenuLabel", () => $6cc32821e9371a1c$export$dd37bec0e8a99143);
33
- $parcel$export($6cc32821e9371a1c$exports, "MenuItem", () => $6cc32821e9371a1c$export$2ce376c2cc3355c8);
34
- $parcel$export($6cc32821e9371a1c$exports, "MenuSubTrigger", () => $6cc32821e9371a1c$export$5fbbb3ba7297405f);
35
- $parcel$export($6cc32821e9371a1c$exports, "MenuCheckboxItem", () => $6cc32821e9371a1c$export$f6f243521332502d);
36
- $parcel$export($6cc32821e9371a1c$exports, "MenuRadioGroup", () => $6cc32821e9371a1c$export$ea2200c9eee416b3);
37
- $parcel$export($6cc32821e9371a1c$exports, "MenuRadioItem", () => $6cc32821e9371a1c$export$69bd225e9817f6d0);
38
- $parcel$export($6cc32821e9371a1c$exports, "MenuItemIndicator", () => $6cc32821e9371a1c$export$a2593e23056970a3);
39
- $parcel$export($6cc32821e9371a1c$exports, "MenuSeparator", () => $6cc32821e9371a1c$export$1cec7dcdd713e220);
40
- $parcel$export($6cc32821e9371a1c$exports, "MenuArrow", () => $6cc32821e9371a1c$export$bcdda4773debf5fa);
41
- $parcel$export($6cc32821e9371a1c$exports, "Root", () => $6cc32821e9371a1c$export$be92b6f5f03c0fe9);
42
- $parcel$export($6cc32821e9371a1c$exports, "Sub", () => $6cc32821e9371a1c$export$d7a01e11500dfb6f);
43
- $parcel$export($6cc32821e9371a1c$exports, "Anchor", () => $6cc32821e9371a1c$export$b688253958b8dfe7);
44
- $parcel$export($6cc32821e9371a1c$exports, "SubTrigger", () => $6cc32821e9371a1c$export$2ea8a7a591ac5eac);
45
- $parcel$export($6cc32821e9371a1c$exports, "Content", () => $6cc32821e9371a1c$export$7c6e2c02157bb7d2);
46
- $parcel$export($6cc32821e9371a1c$exports, "Group", () => $6cc32821e9371a1c$export$eb2fcfdbd7ba97d4);
47
- $parcel$export($6cc32821e9371a1c$exports, "Label", () => $6cc32821e9371a1c$export$b04be29aa201d4f5);
48
- $parcel$export($6cc32821e9371a1c$exports, "Item", () => $6cc32821e9371a1c$export$6d08773d2e66f8f2);
49
- $parcel$export($6cc32821e9371a1c$exports, "CheckboxItem", () => $6cc32821e9371a1c$export$16ce288f89fa631c);
50
- $parcel$export($6cc32821e9371a1c$exports, "RadioGroup", () => $6cc32821e9371a1c$export$a98f0dcb43a68a25);
51
- $parcel$export($6cc32821e9371a1c$exports, "RadioItem", () => $6cc32821e9371a1c$export$371ab307eab489c0);
52
- $parcel$export($6cc32821e9371a1c$exports, "ItemIndicator", () => $6cc32821e9371a1c$export$c3468e2714d175fa);
53
- $parcel$export($6cc32821e9371a1c$exports, "Separator", () => $6cc32821e9371a1c$export$1ff3c3f08ae963c0);
54
- $parcel$export($6cc32821e9371a1c$exports, "Arrow", () => $6cc32821e9371a1c$export$21b07c8f274aebd5);
55
23
 
56
24
 
57
25
 
@@ -121,6 +89,7 @@ const [$6cc32821e9371a1c$var$createMenuContext, $6cc32821e9371a1c$export$4027731
121
89
  const $6cc32821e9371a1c$var$usePopperScope = $epM9y$createPopperScope();
122
90
  const $6cc32821e9371a1c$var$useRovingFocusGroupScope = $epM9y$createRovingFocusGroupScope();
123
91
  const [$6cc32821e9371a1c$var$MenuProvider, $6cc32821e9371a1c$var$useMenuContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$MENU_NAME);
92
+ const [$6cc32821e9371a1c$var$MenuRootProvider, $6cc32821e9371a1c$var$useMenuRootContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$MENU_NAME);
124
93
  const $6cc32821e9371a1c$export$d9b273488cd8ce6f = (props)=>{
125
94
  const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true } = props;
126
95
  const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu);
@@ -161,59 +130,24 @@ const $6cc32821e9371a1c$export$d9b273488cd8ce6f = (props)=>{
161
130
  }, []);
162
131
  return /*#__PURE__*/ $epM9y$createElement($epM9y$Root, popperScope, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuProvider, {
163
132
  scope: __scopeMenu,
164
- isSubmenu: false,
165
- isUsingKeyboardRef: isUsingKeyboardRef,
166
- dir: direction,
167
133
  open: open,
168
134
  onOpenChange: handleOpenChange,
169
135
  content: content,
170
- onContentChange: setContent,
171
- onRootClose: $epM9y$useCallback(()=>handleOpenChange(false)
136
+ onContentChange: setContent
137
+ }, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootProvider, {
138
+ scope: __scopeMenu,
139
+ onClose: $epM9y$useCallback(()=>handleOpenChange(false)
172
140
  , [
173
141
  handleOpenChange
174
142
  ]),
143
+ isUsingKeyboardRef: isUsingKeyboardRef,
144
+ dir: direction,
175
145
  modal: modal
176
- }, children));
146
+ }, children)));
177
147
  };
178
148
  /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$d9b273488cd8ce6f, {
179
149
  displayName: $6cc32821e9371a1c$var$MENU_NAME
180
150
  });
181
- /* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$SUB_NAME = 'MenuSub';
182
- const $6cc32821e9371a1c$export$71bdb9d1e2909932 = (props)=>{
183
- const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props;
184
- const parentMenuContext = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$SUB_NAME, __scopeMenu);
185
- const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu);
186
- const [trigger, setTrigger] = $epM9y$useState(null);
187
- const [content, setContent] = $epM9y$useState(null);
188
- const handleOpenChange = $epM9y$useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus.
189
- $epM9y$useEffect(()=>{
190
- if (parentMenuContext.open === false) handleOpenChange(false);
191
- return ()=>handleOpenChange(false)
192
- ;
193
- }, [
194
- parentMenuContext.open,
195
- handleOpenChange
196
- ]);
197
- return /*#__PURE__*/ $epM9y$createElement($epM9y$Root, popperScope, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuProvider, {
198
- scope: __scopeMenu,
199
- isSubmenu: true,
200
- isUsingKeyboardRef: parentMenuContext.isUsingKeyboardRef,
201
- dir: parentMenuContext.dir,
202
- open: open,
203
- onOpenChange: handleOpenChange,
204
- content: content,
205
- onContentChange: setContent,
206
- onRootClose: parentMenuContext.onRootClose,
207
- contentId: $epM9y$useId(),
208
- trigger: trigger,
209
- onTriggerChange: setTrigger,
210
- triggerId: $epM9y$useId(),
211
- modal: false
212
- }, children));
213
- };
214
- /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$71bdb9d1e2909932, {
215
- displayName: $6cc32821e9371a1c$var$SUB_NAME
216
- });
217
151
  /* -------------------------------------------------------------------------------------------------
218
152
  * MenuAnchor
219
153
  * -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$ANCHOR_NAME = 'MenuAnchor';
@@ -227,34 +161,50 @@ const $6cc32821e9371a1c$export$9fa5ebd18bee4d43 = /*#__PURE__*/ $epM9y$forwardRe
227
161
  /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$9fa5ebd18bee4d43, {
228
162
  displayName: $6cc32821e9371a1c$var$ANCHOR_NAME
229
163
  });
164
+ /* -------------------------------------------------------------------------------------------------
165
+ * MenuPortal
166
+ * -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$PORTAL_NAME = 'MenuPortal';
167
+ const [$6cc32821e9371a1c$var$PortalProvider, $6cc32821e9371a1c$var$usePortalContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$PORTAL_NAME, {
168
+ forceMount: undefined
169
+ });
170
+ const $6cc32821e9371a1c$export$793392f970497feb = (props)=>{
171
+ const { __scopeMenu: __scopeMenu , forceMount: forceMount , children: children , container: container } = props;
172
+ const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$PORTAL_NAME, __scopeMenu);
173
+ return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$PortalProvider, {
174
+ scope: __scopeMenu,
175
+ forceMount: forceMount
176
+ }, /*#__PURE__*/ $epM9y$createElement($epM9y$Presence, {
177
+ present: forceMount || context.open
178
+ }, /*#__PURE__*/ $epM9y$createElement($epM9y$Portal, {
179
+ asChild: true,
180
+ container: container
181
+ }, children)));
182
+ };
183
+ /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$793392f970497feb, {
184
+ displayName: $6cc32821e9371a1c$var$PORTAL_NAME
185
+ });
230
186
  /* -------------------------------------------------------------------------------------------------
231
187
  * MenuContent
232
188
  * -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$CONTENT_NAME = 'MenuContent';
233
189
  const [$6cc32821e9371a1c$var$MenuContentProvider, $6cc32821e9371a1c$var$useMenuContentContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$CONTENT_NAME);
234
190
  const $6cc32821e9371a1c$export$479f0f2f71193efe = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
235
- const { forceMount: forceMount , ...contentProps } = props;
191
+ const portalContext = $6cc32821e9371a1c$var$usePortalContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
192
+ const { forceMount: forceMount = portalContext.forceMount , ...contentProps } = props;
236
193
  const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
194
+ const rootContext = $6cc32821e9371a1c$var$useMenuRootContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
237
195
  return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$Collection.Provider, {
238
196
  scope: props.__scopeMenu
239
197
  }, /*#__PURE__*/ $epM9y$createElement($epM9y$Presence, {
240
198
  present: forceMount || context.open
241
199
  }, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$Collection.Slot, {
242
200
  scope: props.__scopeMenu
243
- }, context.isSubmenu ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuSubContent, $epM9y$babelruntimehelpersesmextends({}, contentProps, {
201
+ }, rootContext.modal ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContentModal, $epM9y$babelruntimehelpersesmextends({}, contentProps, {
244
202
  ref: forwardedRef
245
- })) : /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContent, $epM9y$babelruntimehelpersesmextends({}, contentProps, {
203
+ })) : /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContentNonModal, $epM9y$babelruntimehelpersesmextends({}, contentProps, {
246
204
  ref: forwardedRef
247
205
  })))));
248
206
  });
249
- /* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuRootContent = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
250
- const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
251
- return context.modal ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContentModal, $epM9y$babelruntimehelpersesmextends({}, props, {
252
- ref: forwardedRef
253
- })) : /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContentNonModal, $epM9y$babelruntimehelpersesmextends({}, props, {
254
- ref: forwardedRef
255
- }));
256
- });
257
- const $6cc32821e9371a1c$var$MenuRootContentModal = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
207
+ /* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuRootContentModal = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
258
208
  const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
259
209
  const ref = $epM9y$useRef(null);
260
210
  const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent`
@@ -287,52 +237,10 @@ const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwa
287
237
  onDismiss: ()=>context.onOpenChange(false)
288
238
  }));
289
239
  });
290
- /* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuSubContent = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
291
- const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
292
- const ref = $epM9y$useRef(null);
293
- const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref);
294
- return context.isSubmenu ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentImpl, $epM9y$babelruntimehelpersesmextends({
295
- id: context.contentId,
296
- "aria-labelledby": context.triggerId
297
- }, props, {
298
- ref: composedRefs,
299
- align: "start",
300
- side: context.dir === 'rtl' ? 'left' : 'right',
301
- portalled: true,
302
- disableOutsidePointerEvents: false,
303
- disableOutsideScroll: false,
304
- trapFocus: false,
305
- onOpenAutoFocus: (event)=>{
306
- var _ref$current;
307
- // when opening a submenu, focus content for keyboard users only
308
- if (context.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
309
- event.preventDefault();
310
- } // The menu might close because of focusing another menu item in the parent menu. We
311
- ,
312
- onCloseAutoFocus: (event)=>event.preventDefault()
313
- ,
314
- onFocusOutside: $epM9y$composeEventHandlers(props.onFocusOutside, (event)=>{
315
- // We prevent closing when the trigger is focused to avoid triggering a re-open animation
316
- // on pointer interaction.
317
- if (event.target !== context.trigger) context.onOpenChange(false);
318
- }),
319
- onEscapeKeyDown: $epM9y$composeEventHandlers(props.onEscapeKeyDown, context.onRootClose),
320
- onKeyDown: $epM9y$composeEventHandlers(props.onKeyDown, (event)=>{
321
- // Submenu key events bubble through portals. We only care about keys in this menu.
322
- const isKeyDownInside = event.currentTarget.contains(event.target);
323
- const isCloseKey = $6cc32821e9371a1c$var$SUB_CLOSE_KEYS[context.dir].includes(event.key);
324
- if (isKeyDownInside && isCloseKey) {
325
- var _context$trigger;
326
- context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus`
327
- (_context$trigger = context.trigger) === null || _context$trigger === void 0 || _context$trigger.focus(); // prevent window from scrolling
328
- event.preventDefault();
329
- }
330
- })
331
- })) : null;
332
- });
333
240
  /* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuContentImpl = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
334
- const { __scopeMenu: __scopeMenu , loop: loop = false , trapFocus: trapFocus , onOpenAutoFocus: onOpenAutoFocus , onCloseAutoFocus: onCloseAutoFocus , disableOutsidePointerEvents: disableOutsidePointerEvents , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , onFocusOutside: onFocusOutside , onInteractOutside: onInteractOutside , onDismiss: onDismiss , disableOutsideScroll: disableOutsideScroll , allowPinchZoom: allowPinchZoom , portalled: portalled , ...contentProps } = props;
241
+ const { __scopeMenu: __scopeMenu , loop: loop = false , trapFocus: trapFocus , onOpenAutoFocus: onOpenAutoFocus , onCloseAutoFocus: onCloseAutoFocus , disableOutsidePointerEvents: disableOutsidePointerEvents , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , onFocusOutside: onFocusOutside , onInteractOutside: onInteractOutside , onDismiss: onDismiss , disableOutsideScroll: disableOutsideScroll , ...contentProps } = props;
335
242
  const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, __scopeMenu);
243
+ const rootContext = $6cc32821e9371a1c$var$useMenuRootContext($6cc32821e9371a1c$var$CONTENT_NAME, __scopeMenu);
336
244
  const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu);
337
245
  const rovingFocusGroupScope = $6cc32821e9371a1c$var$useRovingFocusGroupScope(__scopeMenu);
338
246
  const getItems = $6cc32821e9371a1c$var$useCollection(__scopeMenu);
@@ -345,10 +253,10 @@ const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwa
345
253
  const pointerGraceIntentRef = $epM9y$useRef(null);
346
254
  const pointerDirRef = $epM9y$useRef('right');
347
255
  const lastPointerXRef = $epM9y$useRef(0);
348
- const PortalWrapper = portalled ? $epM9y$Portal : $epM9y$Fragment;
349
256
  const ScrollLockWrapper = disableOutsideScroll ? $epM9y$RemoveScroll : $epM9y$Fragment;
350
257
  const scrollLockWrapperProps = disableOutsideScroll ? {
351
- allowPinchZoom: allowPinchZoom
258
+ as: $epM9y$Slot,
259
+ allowPinchZoom: true
352
260
  } : undefined;
353
261
  const handleTypeaheadSearch = (key)=>{
354
262
  var _items$find, _items$find2;
@@ -386,7 +294,7 @@ const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwa
386
294
  const isMovingTowards = pointerDirRef.current === ((_pointerGraceIntentRe = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe === void 0 ? void 0 : _pointerGraceIntentRe.side);
387
295
  return isMovingTowards && $6cc32821e9371a1c$var$isPointerInGraceArea(event, (_pointerGraceIntentRe2 = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe2 === void 0 ? void 0 : _pointerGraceIntentRe2.area);
388
296
  }, []);
389
- return /*#__PURE__*/ $epM9y$createElement(PortalWrapper, null, /*#__PURE__*/ $epM9y$createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentProvider, {
297
+ return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentProvider, {
390
298
  scope: __scopeMenu,
391
299
  searchRef: searchRef,
392
300
  onItemEnter: $epM9y$useCallback((event)=>{
@@ -411,7 +319,7 @@ const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwa
411
319
  onPointerGraceIntentChange: $epM9y$useCallback((intent)=>{
412
320
  pointerGraceIntentRef.current = intent;
413
321
  }, [])
414
- }, /*#__PURE__*/ $epM9y$createElement($epM9y$FocusScope, {
322
+ }, /*#__PURE__*/ $epM9y$createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/ $epM9y$createElement($epM9y$FocusScope, {
415
323
  asChild: true,
416
324
  trapped: trapFocus,
417
325
  onMountAutoFocus: $epM9y$composeEventHandlers(onOpenAutoFocus, (event)=>{
@@ -433,20 +341,20 @@ const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwa
433
341
  }, /*#__PURE__*/ $epM9y$createElement($epM9y$Root1, $epM9y$babelruntimehelpersesmextends({
434
342
  asChild: true
435
343
  }, rovingFocusGroupScope, {
436
- dir: context.dir,
344
+ dir: rootContext.dir,
437
345
  orientation: "vertical",
438
346
  loop: loop,
439
347
  currentTabStopId: currentItemId,
440
348
  onCurrentTabStopIdChange: setCurrentItemId,
441
349
  onEntryFocus: (event)=>{
442
350
  // only focus first item when using keyboard
443
- if (!context.isUsingKeyboardRef.current) event.preventDefault();
351
+ if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
444
352
  }
445
353
  }), /*#__PURE__*/ $epM9y$createElement($epM9y$Content, $epM9y$babelruntimehelpersesmextends({
446
354
  role: "menu",
447
355
  "aria-orientation": "vertical",
448
356
  "data-state": $6cc32821e9371a1c$var$getOpenState(context.open),
449
- dir: context.dir
357
+ dir: rootContext.dir
450
358
  }, popperScope, contentProps, {
451
359
  ref: composedRefs,
452
360
  style: {
@@ -456,7 +364,7 @@ const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwa
456
364
  onKeyDown: $epM9y$composeEventHandlers(contentProps.onKeyDown, (event)=>{
457
365
  // submenu key events bubble through portals. We only care about keys in this menu.
458
366
  const target = event.target;
459
- const isKeyDownInside = event.currentTarget.contains(target);
367
+ const isKeyDownInside = target.closest('[role="menu"]') === event.currentTarget;
460
368
  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
461
369
  const isCharacterKey = event.key.length === 1;
462
370
  if (isKeyDownInside) {
@@ -492,7 +400,7 @@ const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwa
492
400
  lastPointerXRef.current = event.clientX;
493
401
  }
494
402
  }))
495
- }))))))));
403
+ })))))));
496
404
  });
497
405
  /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$479f0f2f71193efe, {
498
406
  displayName: $6cc32821e9371a1c$var$CONTENT_NAME
@@ -530,14 +438,14 @@ const $6cc32821e9371a1c$var$ITEM_SELECT = 'menu.itemSelect';
530
438
  const $6cc32821e9371a1c$export$2ce376c2cc3355c8 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
531
439
  const { disabled: disabled = false , onSelect: onSelect , ...itemProps } = props;
532
440
  const ref = $epM9y$useRef(null);
533
- const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$ITEM_NAME, props.__scopeMenu);
441
+ const rootContext = $6cc32821e9371a1c$var$useMenuRootContext($6cc32821e9371a1c$var$ITEM_NAME, props.__scopeMenu);
534
442
  const contentContext = $6cc32821e9371a1c$var$useMenuContentContext($6cc32821e9371a1c$var$ITEM_NAME, props.__scopeMenu);
535
443
  const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref);
536
444
  const isPointerDownRef = $epM9y$useRef(false);
537
445
  const handleSelect = ()=>{
538
446
  const menuItem = ref.current;
539
447
  if (!disabled && menuItem) {
540
- const itemSelectEvent = new Event($6cc32821e9371a1c$var$ITEM_SELECT, {
448
+ const itemSelectEvent = new CustomEvent($6cc32821e9371a1c$var$ITEM_SELECT, {
541
449
  bubbles: true,
542
450
  cancelable: true
543
451
  });
@@ -545,9 +453,9 @@ const $6cc32821e9371a1c$export$2ce376c2cc3355c8 = /*#__PURE__*/ $epM9y$forwardRe
545
453
  , {
546
454
  once: true
547
455
  });
548
- menuItem.dispatchEvent(itemSelectEvent);
456
+ $epM9y$dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);
549
457
  if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false;
550
- else context.onRootClose();
458
+ else rootContext.onClose();
551
459
  }
552
460
  };
553
461
  return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuItemImpl, $epM9y$babelruntimehelpersesmextends({}, itemProps, {
@@ -584,137 +492,13 @@ const $6cc32821e9371a1c$export$2ce376c2cc3355c8 = /*#__PURE__*/ $epM9y$forwardRe
584
492
  /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$2ce376c2cc3355c8, {
585
493
  displayName: $6cc32821e9371a1c$var$ITEM_NAME
586
494
  });
587
- /* -------------------------------------------------------------------------------------------------
588
- * MenuSubTrigger
589
- * -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$SUB_TRIGGER_NAME = 'MenuSubTrigger';
590
- const $6cc32821e9371a1c$export$5fbbb3ba7297405f = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
591
- const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu);
592
- const contentContext = $6cc32821e9371a1c$var$useMenuContentContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu);
593
- const openTimerRef = $epM9y$useRef(null);
594
- const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext;
595
- const scope = {
596
- __scopeMenu: props.__scopeMenu
597
- };
598
- const clearOpenTimer = $epM9y$useCallback(()=>{
599
- if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
600
- openTimerRef.current = null;
601
- }, []);
602
- $epM9y$useEffect(()=>clearOpenTimer
603
- , [
604
- clearOpenTimer
605
- ]);
606
- $epM9y$useEffect(()=>{
607
- const pointerGraceTimer = pointerGraceTimerRef.current;
608
- return ()=>{
609
- window.clearTimeout(pointerGraceTimer);
610
- onPointerGraceIntentChange(null);
611
- };
612
- }, [
613
- pointerGraceTimerRef,
614
- onPointerGraceIntentChange
615
- ]);
616
- return context.isSubmenu ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$export$9fa5ebd18bee4d43, $epM9y$babelruntimehelpersesmextends({
617
- asChild: true
618
- }, scope), /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuItemImpl, $epM9y$babelruntimehelpersesmextends({
619
- id: context.triggerId,
620
- "aria-haspopup": "menu",
621
- "aria-expanded": context.open,
622
- "aria-controls": context.contentId,
623
- "data-state": $6cc32821e9371a1c$var$getOpenState(context.open)
624
- }, props, {
625
- ref: $epM9y$composeRefs(forwardedRef, context.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from
626
- ,
627
- onClick: (event)=>{
628
- var _props$onClick;
629
- (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event);
630
- if (props.disabled || event.defaultPrevented) return;
631
- /**
632
- * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
633
- * and we rely heavily on `onFocusOutside` for submenus to close when switching
634
- * between separate submenus.
635
- */ event.currentTarget.focus();
636
- if (!context.open) context.onOpenChange(true);
637
- },
638
- onPointerMove: $epM9y$composeEventHandlers(props.onPointerMove, $6cc32821e9371a1c$var$whenMouse((event)=>{
639
- contentContext.onItemEnter(event);
640
- if (event.defaultPrevented) return;
641
- if (!props.disabled && !context.open && !openTimerRef.current) {
642
- contentContext.onPointerGraceIntentChange(null);
643
- openTimerRef.current = window.setTimeout(()=>{
644
- context.onOpenChange(true);
645
- clearOpenTimer();
646
- }, 100);
647
- }
648
- })),
649
- onPointerLeave: $epM9y$composeEventHandlers(props.onPointerLeave, $6cc32821e9371a1c$var$whenMouse((event)=>{
650
- var _context$content;
651
- clearOpenTimer();
652
- const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect();
653
- if (contentRect) {
654
- var _context$content2;
655
- // TODO: make sure to update this when we change positioning logic
656
- const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side;
657
- const rightSide = side === 'right';
658
- const bleed = rightSide ? -5 : 5;
659
- const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];
660
- const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];
661
- contentContext.onPointerGraceIntentChange({
662
- area: [
663
- // consistently within polygon bounds
664
- {
665
- x: event.clientX + bleed,
666
- y: event.clientY
667
- },
668
- {
669
- x: contentNearEdge,
670
- y: contentRect.top
671
- },
672
- {
673
- x: contentFarEdge,
674
- y: contentRect.top
675
- },
676
- {
677
- x: contentFarEdge,
678
- y: contentRect.bottom
679
- },
680
- {
681
- x: contentNearEdge,
682
- y: contentRect.bottom
683
- }
684
- ],
685
- side: side
686
- });
687
- window.clearTimeout(pointerGraceTimerRef.current);
688
- pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null)
689
- , 300);
690
- } else {
691
- contentContext.onTriggerLeave(event);
692
- if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened.
693
- contentContext.onPointerGraceIntentChange(null);
694
- }
695
- })),
696
- onKeyDown: $epM9y$composeEventHandlers(props.onKeyDown, (event)=>{
697
- const isTypingAhead = contentContext.searchRef.current !== '';
698
- if (props.disabled || isTypingAhead && event.key === ' ') return;
699
- if ($6cc32821e9371a1c$var$SUB_OPEN_KEYS[context.dir].includes(event.key)) {
700
- var _context$content3;
701
- context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction
702
- // so we ensure content is given focus again when switching to keyboard.
703
- (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling
704
- event.preventDefault();
705
- }
706
- })
707
- }))) : null;
708
- });
709
- /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$5fbbb3ba7297405f, {
710
- displayName: $6cc32821e9371a1c$var$SUB_TRIGGER_NAME
711
- });
712
495
  /* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuItemImpl = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
713
496
  const { __scopeMenu: __scopeMenu , disabled: disabled = false , textValue: textValue , ...itemProps } = props;
714
497
  const contentContext = $6cc32821e9371a1c$var$useMenuContentContext($6cc32821e9371a1c$var$ITEM_NAME, __scopeMenu);
715
498
  const rovingFocusGroupScope = $6cc32821e9371a1c$var$useRovingFocusGroupScope(__scopeMenu);
716
499
  const ref = $epM9y$useRef(null);
717
- const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref); // get the item's `.textContent` as default strategy for typeahead `textValue`
500
+ const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref);
501
+ const [isFocused, setIsFocused] = $epM9y$useState(false); // get the item's `.textContent` as default strategy for typeahead `textValue`
718
502
  const [textContent, setTextContent] = $epM9y$useState('');
719
503
  $epM9y$useEffect(()=>{
720
504
  const menuItem = ref.current;
@@ -735,6 +519,7 @@ const $6cc32821e9371a1c$export$5fbbb3ba7297405f = /*#__PURE__*/ $epM9y$forwardRe
735
519
  focusable: !disabled
736
520
  }), /*#__PURE__*/ $epM9y$createElement($epM9y$Primitive.div, $epM9y$babelruntimehelpersesmextends({
737
521
  role: "menuitem",
522
+ "data-highlighted": isFocused ? '' : undefined,
738
523
  "aria-disabled": disabled || undefined,
739
524
  "data-disabled": disabled ? '' : undefined
740
525
  }, itemProps, {
@@ -750,7 +535,11 @@ const $6cc32821e9371a1c$export$5fbbb3ba7297405f = /*#__PURE__*/ $epM9y$forwardRe
750
535
  }
751
536
  })),
752
537
  onPointerLeave: $epM9y$composeEventHandlers(props.onPointerLeave, $6cc32821e9371a1c$var$whenMouse((event)=>contentContext.onItemLeave(event)
753
- ))
538
+ )),
539
+ onFocus: $epM9y$composeEventHandlers(props.onFocus, ()=>setIsFocused(true)
540
+ ),
541
+ onBlur: $epM9y$composeEventHandlers(props.onBlur, ()=>setIsFocused(false)
542
+ )
754
543
  }))));
755
544
  });
756
545
  /* -------------------------------------------------------------------------------------------------
@@ -871,6 +660,227 @@ const $6cc32821e9371a1c$export$bcdda4773debf5fa = /*#__PURE__*/ $epM9y$forwardRe
871
660
  /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$bcdda4773debf5fa, {
872
661
  displayName: $6cc32821e9371a1c$var$ARROW_NAME
873
662
  });
663
+ /* -------------------------------------------------------------------------------------------------
664
+ * MenuSub
665
+ * -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$SUB_NAME = 'MenuSub';
666
+ const [$6cc32821e9371a1c$var$MenuSubProvider, $6cc32821e9371a1c$var$useMenuSubContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$SUB_NAME);
667
+ const $6cc32821e9371a1c$export$71bdb9d1e2909932 = (props)=>{
668
+ const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props;
669
+ const parentMenuContext = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$SUB_NAME, __scopeMenu);
670
+ const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu);
671
+ const [trigger, setTrigger] = $epM9y$useState(null);
672
+ const [content, setContent] = $epM9y$useState(null);
673
+ const handleOpenChange = $epM9y$useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus.
674
+ $epM9y$useEffect(()=>{
675
+ if (parentMenuContext.open === false) handleOpenChange(false);
676
+ return ()=>handleOpenChange(false)
677
+ ;
678
+ }, [
679
+ parentMenuContext.open,
680
+ handleOpenChange
681
+ ]);
682
+ return /*#__PURE__*/ $epM9y$createElement($epM9y$Root, popperScope, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuProvider, {
683
+ scope: __scopeMenu,
684
+ open: open,
685
+ onOpenChange: handleOpenChange,
686
+ content: content,
687
+ onContentChange: setContent
688
+ }, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuSubProvider, {
689
+ scope: __scopeMenu,
690
+ contentId: $epM9y$useId(),
691
+ triggerId: $epM9y$useId(),
692
+ trigger: trigger,
693
+ onTriggerChange: setTrigger
694
+ }, children)));
695
+ };
696
+ /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$71bdb9d1e2909932, {
697
+ displayName: $6cc32821e9371a1c$var$SUB_NAME
698
+ });
699
+ /* -------------------------------------------------------------------------------------------------
700
+ * MenuSubTrigger
701
+ * -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$SUB_TRIGGER_NAME = 'MenuSubTrigger';
702
+ const $6cc32821e9371a1c$export$5fbbb3ba7297405f = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
703
+ const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu);
704
+ const rootContext = $6cc32821e9371a1c$var$useMenuRootContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu);
705
+ const subContext = $6cc32821e9371a1c$var$useMenuSubContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu);
706
+ const contentContext = $6cc32821e9371a1c$var$useMenuContentContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu);
707
+ const openTimerRef = $epM9y$useRef(null);
708
+ const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext;
709
+ const scope = {
710
+ __scopeMenu: props.__scopeMenu
711
+ };
712
+ const clearOpenTimer = $epM9y$useCallback(()=>{
713
+ if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
714
+ openTimerRef.current = null;
715
+ }, []);
716
+ $epM9y$useEffect(()=>clearOpenTimer
717
+ , [
718
+ clearOpenTimer
719
+ ]);
720
+ $epM9y$useEffect(()=>{
721
+ const pointerGraceTimer = pointerGraceTimerRef.current;
722
+ return ()=>{
723
+ window.clearTimeout(pointerGraceTimer);
724
+ onPointerGraceIntentChange(null);
725
+ };
726
+ }, [
727
+ pointerGraceTimerRef,
728
+ onPointerGraceIntentChange
729
+ ]);
730
+ return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$export$9fa5ebd18bee4d43, $epM9y$babelruntimehelpersesmextends({
731
+ asChild: true
732
+ }, scope), /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuItemImpl, $epM9y$babelruntimehelpersesmextends({
733
+ id: subContext.triggerId,
734
+ "aria-haspopup": "menu",
735
+ "aria-expanded": context.open,
736
+ "aria-controls": subContext.contentId,
737
+ "data-state": $6cc32821e9371a1c$var$getOpenState(context.open)
738
+ }, props, {
739
+ ref: $epM9y$composeRefs(forwardedRef, subContext.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from
740
+ ,
741
+ onClick: (event)=>{
742
+ var _props$onClick;
743
+ (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event);
744
+ if (props.disabled || event.defaultPrevented) return;
745
+ /**
746
+ * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
747
+ * and we rely heavily on `onFocusOutside` for submenus to close when switching
748
+ * between separate submenus.
749
+ */ event.currentTarget.focus();
750
+ if (!context.open) context.onOpenChange(true);
751
+ },
752
+ onPointerMove: $epM9y$composeEventHandlers(props.onPointerMove, $6cc32821e9371a1c$var$whenMouse((event)=>{
753
+ contentContext.onItemEnter(event);
754
+ if (event.defaultPrevented) return;
755
+ if (!props.disabled && !context.open && !openTimerRef.current) {
756
+ contentContext.onPointerGraceIntentChange(null);
757
+ openTimerRef.current = window.setTimeout(()=>{
758
+ context.onOpenChange(true);
759
+ clearOpenTimer();
760
+ }, 100);
761
+ }
762
+ })),
763
+ onPointerLeave: $epM9y$composeEventHandlers(props.onPointerLeave, $6cc32821e9371a1c$var$whenMouse((event)=>{
764
+ var _context$content;
765
+ clearOpenTimer();
766
+ const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect();
767
+ if (contentRect) {
768
+ var _context$content2;
769
+ // TODO: make sure to update this when we change positioning logic
770
+ const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side;
771
+ const rightSide = side === 'right';
772
+ const bleed = rightSide ? -5 : 5;
773
+ const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];
774
+ const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];
775
+ contentContext.onPointerGraceIntentChange({
776
+ area: [
777
+ // consistently within polygon bounds
778
+ {
779
+ x: event.clientX + bleed,
780
+ y: event.clientY
781
+ },
782
+ {
783
+ x: contentNearEdge,
784
+ y: contentRect.top
785
+ },
786
+ {
787
+ x: contentFarEdge,
788
+ y: contentRect.top
789
+ },
790
+ {
791
+ x: contentFarEdge,
792
+ y: contentRect.bottom
793
+ },
794
+ {
795
+ x: contentNearEdge,
796
+ y: contentRect.bottom
797
+ }
798
+ ],
799
+ side: side
800
+ });
801
+ window.clearTimeout(pointerGraceTimerRef.current);
802
+ pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null)
803
+ , 300);
804
+ } else {
805
+ contentContext.onTriggerLeave(event);
806
+ if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened.
807
+ contentContext.onPointerGraceIntentChange(null);
808
+ }
809
+ })),
810
+ onKeyDown: $epM9y$composeEventHandlers(props.onKeyDown, (event)=>{
811
+ const isTypingAhead = contentContext.searchRef.current !== '';
812
+ if (props.disabled || isTypingAhead && event.key === ' ') return;
813
+ if ($6cc32821e9371a1c$var$SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
814
+ var _context$content3;
815
+ context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction
816
+ // so we ensure content is given focus again when switching to keyboard.
817
+ (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling
818
+ event.preventDefault();
819
+ }
820
+ })
821
+ })));
822
+ });
823
+ /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$5fbbb3ba7297405f, {
824
+ displayName: $6cc32821e9371a1c$var$SUB_TRIGGER_NAME
825
+ });
826
+ /* -------------------------------------------------------------------------------------------------
827
+ * MenuSubContent
828
+ * -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$SUB_CONTENT_NAME = 'MenuSubContent';
829
+ const $6cc32821e9371a1c$export$e7142ab31822bde6 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{
830
+ const portalContext = $6cc32821e9371a1c$var$usePortalContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
831
+ const { forceMount: forceMount = portalContext.forceMount , ...subContentProps } = props;
832
+ const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
833
+ const rootContext = $6cc32821e9371a1c$var$useMenuRootContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu);
834
+ const subContext = $6cc32821e9371a1c$var$useMenuSubContext($6cc32821e9371a1c$var$SUB_CONTENT_NAME, props.__scopeMenu);
835
+ const ref = $epM9y$useRef(null);
836
+ const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref);
837
+ return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$Collection.Provider, {
838
+ scope: props.__scopeMenu
839
+ }, /*#__PURE__*/ $epM9y$createElement($epM9y$Presence, {
840
+ present: forceMount || context.open
841
+ }, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$Collection.Slot, {
842
+ scope: props.__scopeMenu
843
+ }, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentImpl, $epM9y$babelruntimehelpersesmextends({
844
+ id: subContext.contentId,
845
+ "aria-labelledby": subContext.triggerId
846
+ }, subContentProps, {
847
+ ref: composedRefs,
848
+ align: "start",
849
+ side: rootContext.dir === 'rtl' ? 'left' : 'right',
850
+ disableOutsidePointerEvents: false,
851
+ disableOutsideScroll: false,
852
+ trapFocus: false,
853
+ onOpenAutoFocus: (event)=>{
854
+ var _ref$current;
855
+ // when opening a submenu, focus content for keyboard users only
856
+ if (rootContext.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
857
+ event.preventDefault();
858
+ } // The menu might close because of focusing another menu item in the parent menu. We
859
+ ,
860
+ onCloseAutoFocus: (event)=>event.preventDefault()
861
+ ,
862
+ onFocusOutside: $epM9y$composeEventHandlers(props.onFocusOutside, (event)=>{
863
+ // We prevent closing when the trigger is focused to avoid triggering a re-open animation
864
+ // on pointer interaction.
865
+ if (event.target !== subContext.trigger) context.onOpenChange(false);
866
+ }),
867
+ onEscapeKeyDown: $epM9y$composeEventHandlers(props.onEscapeKeyDown, rootContext.onClose),
868
+ onKeyDown: $epM9y$composeEventHandlers(props.onKeyDown, (event)=>{
869
+ // Submenu key events bubble through portals. We only care about keys in this menu.
870
+ const isKeyDownInside = event.currentTarget.contains(event.target);
871
+ const isCloseKey = $6cc32821e9371a1c$var$SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
872
+ if (isKeyDownInside && isCloseKey) {
873
+ var _subContext$trigger;
874
+ context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus`
875
+ (_subContext$trigger = subContext.trigger) === null || _subContext$trigger === void 0 || _subContext$trigger.focus(); // prevent window from scrolling
876
+ event.preventDefault();
877
+ }
878
+ })
879
+ })))));
880
+ });
881
+ /*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$e7142ab31822bde6, {
882
+ displayName: $6cc32821e9371a1c$var$SUB_CONTENT_NAME
883
+ });
874
884
  /* -----------------------------------------------------------------------------------------------*/ function $6cc32821e9371a1c$var$getOpenState(open) {
875
885
  return open ? 'open' : 'closed';
876
886
  }
@@ -950,9 +960,8 @@ function $6cc32821e9371a1c$var$whenMouse(handler) {
950
960
  ;
951
961
  }
952
962
  const $6cc32821e9371a1c$export$be92b6f5f03c0fe9 = $6cc32821e9371a1c$export$d9b273488cd8ce6f;
953
- const $6cc32821e9371a1c$export$d7a01e11500dfb6f = $6cc32821e9371a1c$export$71bdb9d1e2909932;
954
963
  const $6cc32821e9371a1c$export$b688253958b8dfe7 = $6cc32821e9371a1c$export$9fa5ebd18bee4d43;
955
- const $6cc32821e9371a1c$export$2ea8a7a591ac5eac = $6cc32821e9371a1c$export$5fbbb3ba7297405f;
964
+ const $6cc32821e9371a1c$export$602eac185826482c = $6cc32821e9371a1c$export$793392f970497feb;
956
965
  const $6cc32821e9371a1c$export$7c6e2c02157bb7d2 = $6cc32821e9371a1c$export$479f0f2f71193efe;
957
966
  const $6cc32821e9371a1c$export$eb2fcfdbd7ba97d4 = $6cc32821e9371a1c$export$22a631d1f72787bb;
958
967
  const $6cc32821e9371a1c$export$b04be29aa201d4f5 = $6cc32821e9371a1c$export$dd37bec0e8a99143;
@@ -963,9 +972,12 @@ const $6cc32821e9371a1c$export$371ab307eab489c0 = $6cc32821e9371a1c$export$69bd2
963
972
  const $6cc32821e9371a1c$export$c3468e2714d175fa = $6cc32821e9371a1c$export$a2593e23056970a3;
964
973
  const $6cc32821e9371a1c$export$1ff3c3f08ae963c0 = $6cc32821e9371a1c$export$1cec7dcdd713e220;
965
974
  const $6cc32821e9371a1c$export$21b07c8f274aebd5 = $6cc32821e9371a1c$export$bcdda4773debf5fa;
975
+ const $6cc32821e9371a1c$export$d7a01e11500dfb6f = $6cc32821e9371a1c$export$71bdb9d1e2909932;
976
+ const $6cc32821e9371a1c$export$2ea8a7a591ac5eac = $6cc32821e9371a1c$export$5fbbb3ba7297405f;
977
+ const $6cc32821e9371a1c$export$6d4de93b380beddf = $6cc32821e9371a1c$export$e7142ab31822bde6;
966
978
 
967
979
 
968
980
 
969
981
 
970
- export {$6cc32821e9371a1c$export$4027731b685e72eb as createMenuScope, $6cc32821e9371a1c$export$d9b273488cd8ce6f as Menu, $6cc32821e9371a1c$export$71bdb9d1e2909932 as MenuSub, $6cc32821e9371a1c$export$9fa5ebd18bee4d43 as MenuAnchor, $6cc32821e9371a1c$export$479f0f2f71193efe as MenuContent, $6cc32821e9371a1c$export$22a631d1f72787bb as MenuGroup, $6cc32821e9371a1c$export$dd37bec0e8a99143 as MenuLabel, $6cc32821e9371a1c$export$2ce376c2cc3355c8 as MenuItem, $6cc32821e9371a1c$export$5fbbb3ba7297405f as MenuSubTrigger, $6cc32821e9371a1c$export$f6f243521332502d as MenuCheckboxItem, $6cc32821e9371a1c$export$ea2200c9eee416b3 as MenuRadioGroup, $6cc32821e9371a1c$export$69bd225e9817f6d0 as MenuRadioItem, $6cc32821e9371a1c$export$a2593e23056970a3 as MenuItemIndicator, $6cc32821e9371a1c$export$1cec7dcdd713e220 as MenuSeparator, $6cc32821e9371a1c$export$bcdda4773debf5fa as MenuArrow, $6cc32821e9371a1c$export$be92b6f5f03c0fe9 as Root, $6cc32821e9371a1c$export$d7a01e11500dfb6f as Sub, $6cc32821e9371a1c$export$b688253958b8dfe7 as Anchor, $6cc32821e9371a1c$export$2ea8a7a591ac5eac as SubTrigger, $6cc32821e9371a1c$export$7c6e2c02157bb7d2 as Content, $6cc32821e9371a1c$export$eb2fcfdbd7ba97d4 as Group, $6cc32821e9371a1c$export$b04be29aa201d4f5 as Label, $6cc32821e9371a1c$export$6d08773d2e66f8f2 as Item, $6cc32821e9371a1c$export$16ce288f89fa631c as CheckboxItem, $6cc32821e9371a1c$export$a98f0dcb43a68a25 as RadioGroup, $6cc32821e9371a1c$export$371ab307eab489c0 as RadioItem, $6cc32821e9371a1c$export$c3468e2714d175fa as ItemIndicator, $6cc32821e9371a1c$export$1ff3c3f08ae963c0 as Separator, $6cc32821e9371a1c$export$21b07c8f274aebd5 as Arrow};
982
+ export {$6cc32821e9371a1c$export$4027731b685e72eb as createMenuScope, $6cc32821e9371a1c$export$d9b273488cd8ce6f as Menu, $6cc32821e9371a1c$export$9fa5ebd18bee4d43 as MenuAnchor, $6cc32821e9371a1c$export$793392f970497feb as MenuPortal, $6cc32821e9371a1c$export$479f0f2f71193efe as MenuContent, $6cc32821e9371a1c$export$22a631d1f72787bb as MenuGroup, $6cc32821e9371a1c$export$dd37bec0e8a99143 as MenuLabel, $6cc32821e9371a1c$export$2ce376c2cc3355c8 as MenuItem, $6cc32821e9371a1c$export$f6f243521332502d as MenuCheckboxItem, $6cc32821e9371a1c$export$ea2200c9eee416b3 as MenuRadioGroup, $6cc32821e9371a1c$export$69bd225e9817f6d0 as MenuRadioItem, $6cc32821e9371a1c$export$a2593e23056970a3 as MenuItemIndicator, $6cc32821e9371a1c$export$1cec7dcdd713e220 as MenuSeparator, $6cc32821e9371a1c$export$bcdda4773debf5fa as MenuArrow, $6cc32821e9371a1c$export$71bdb9d1e2909932 as MenuSub, $6cc32821e9371a1c$export$5fbbb3ba7297405f as MenuSubTrigger, $6cc32821e9371a1c$export$e7142ab31822bde6 as MenuSubContent, $6cc32821e9371a1c$export$be92b6f5f03c0fe9 as Root, $6cc32821e9371a1c$export$b688253958b8dfe7 as Anchor, $6cc32821e9371a1c$export$602eac185826482c as Portal, $6cc32821e9371a1c$export$7c6e2c02157bb7d2 as Content, $6cc32821e9371a1c$export$eb2fcfdbd7ba97d4 as Group, $6cc32821e9371a1c$export$b04be29aa201d4f5 as Label, $6cc32821e9371a1c$export$6d08773d2e66f8f2 as Item, $6cc32821e9371a1c$export$16ce288f89fa631c as CheckboxItem, $6cc32821e9371a1c$export$a98f0dcb43a68a25 as RadioGroup, $6cc32821e9371a1c$export$371ab307eab489c0 as RadioItem, $6cc32821e9371a1c$export$c3468e2714d175fa as ItemIndicator, $6cc32821e9371a1c$export$1ff3c3f08ae963c0 as Separator, $6cc32821e9371a1c$export$21b07c8f274aebd5 as Arrow, $6cc32821e9371a1c$export$d7a01e11500dfb6f as Sub, $6cc32821e9371a1c$export$2ea8a7a591ac5eac as SubTrigger, $6cc32821e9371a1c$export$6d4de93b380beddf as SubContent};
971
983
  //# sourceMappingURL=index.module.js.map