@radix-ui/react-menu 0.1.7-rc.20 → 0.1.7-rc.23

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.
package/dist/index.js CHANGED
@@ -44,23 +44,22 @@ var $213e4d2df823067d$exports = {};
44
44
 
45
45
  $parcel$export($213e4d2df823067d$exports, "createMenuScope", () => $213e4d2df823067d$export$4027731b685e72eb);
46
46
  $parcel$export($213e4d2df823067d$exports, "Menu", () => $213e4d2df823067d$export$d9b273488cd8ce6f);
47
- $parcel$export($213e4d2df823067d$exports, "MenuSub", () => $213e4d2df823067d$export$71bdb9d1e2909932);
48
47
  $parcel$export($213e4d2df823067d$exports, "MenuAnchor", () => $213e4d2df823067d$export$9fa5ebd18bee4d43);
49
48
  $parcel$export($213e4d2df823067d$exports, "MenuContent", () => $213e4d2df823067d$export$479f0f2f71193efe);
50
49
  $parcel$export($213e4d2df823067d$exports, "MenuGroup", () => $213e4d2df823067d$export$22a631d1f72787bb);
51
50
  $parcel$export($213e4d2df823067d$exports, "MenuLabel", () => $213e4d2df823067d$export$dd37bec0e8a99143);
52
51
  $parcel$export($213e4d2df823067d$exports, "MenuItem", () => $213e4d2df823067d$export$2ce376c2cc3355c8);
53
- $parcel$export($213e4d2df823067d$exports, "MenuSubTrigger", () => $213e4d2df823067d$export$5fbbb3ba7297405f);
54
52
  $parcel$export($213e4d2df823067d$exports, "MenuCheckboxItem", () => $213e4d2df823067d$export$f6f243521332502d);
55
53
  $parcel$export($213e4d2df823067d$exports, "MenuRadioGroup", () => $213e4d2df823067d$export$ea2200c9eee416b3);
56
54
  $parcel$export($213e4d2df823067d$exports, "MenuRadioItem", () => $213e4d2df823067d$export$69bd225e9817f6d0);
57
55
  $parcel$export($213e4d2df823067d$exports, "MenuItemIndicator", () => $213e4d2df823067d$export$a2593e23056970a3);
58
56
  $parcel$export($213e4d2df823067d$exports, "MenuSeparator", () => $213e4d2df823067d$export$1cec7dcdd713e220);
59
57
  $parcel$export($213e4d2df823067d$exports, "MenuArrow", () => $213e4d2df823067d$export$bcdda4773debf5fa);
58
+ $parcel$export($213e4d2df823067d$exports, "MenuSub", () => $213e4d2df823067d$export$71bdb9d1e2909932);
59
+ $parcel$export($213e4d2df823067d$exports, "MenuSubTrigger", () => $213e4d2df823067d$export$5fbbb3ba7297405f);
60
+ $parcel$export($213e4d2df823067d$exports, "MenuSubContent", () => $213e4d2df823067d$export$e7142ab31822bde6);
60
61
  $parcel$export($213e4d2df823067d$exports, "Root", () => $213e4d2df823067d$export$be92b6f5f03c0fe9);
61
- $parcel$export($213e4d2df823067d$exports, "Sub", () => $213e4d2df823067d$export$d7a01e11500dfb6f);
62
62
  $parcel$export($213e4d2df823067d$exports, "Anchor", () => $213e4d2df823067d$export$b688253958b8dfe7);
63
- $parcel$export($213e4d2df823067d$exports, "SubTrigger", () => $213e4d2df823067d$export$2ea8a7a591ac5eac);
64
63
  $parcel$export($213e4d2df823067d$exports, "Content", () => $213e4d2df823067d$export$7c6e2c02157bb7d2);
65
64
  $parcel$export($213e4d2df823067d$exports, "Group", () => $213e4d2df823067d$export$eb2fcfdbd7ba97d4);
66
65
  $parcel$export($213e4d2df823067d$exports, "Label", () => $213e4d2df823067d$export$b04be29aa201d4f5);
@@ -71,6 +70,9 @@ $parcel$export($213e4d2df823067d$exports, "RadioItem", () => $213e4d2df823067d$e
71
70
  $parcel$export($213e4d2df823067d$exports, "ItemIndicator", () => $213e4d2df823067d$export$c3468e2714d175fa);
72
71
  $parcel$export($213e4d2df823067d$exports, "Separator", () => $213e4d2df823067d$export$1ff3c3f08ae963c0);
73
72
  $parcel$export($213e4d2df823067d$exports, "Arrow", () => $213e4d2df823067d$export$21b07c8f274aebd5);
73
+ $parcel$export($213e4d2df823067d$exports, "Sub", () => $213e4d2df823067d$export$d7a01e11500dfb6f);
74
+ $parcel$export($213e4d2df823067d$exports, "SubTrigger", () => $213e4d2df823067d$export$2ea8a7a591ac5eac);
75
+ $parcel$export($213e4d2df823067d$exports, "SubContent", () => $213e4d2df823067d$export$6d4de93b380beddf);
74
76
 
75
77
 
76
78
 
@@ -140,8 +142,9 @@ const [$213e4d2df823067d$var$createMenuContext, $213e4d2df823067d$export$4027731
140
142
  const $213e4d2df823067d$var$usePopperScope = $cnSS2$radixuireactpopper.createPopperScope();
141
143
  const $213e4d2df823067d$var$useRovingFocusGroupScope = $cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope();
142
144
  const [$213e4d2df823067d$var$MenuProvider, $213e4d2df823067d$var$useMenuContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME);
145
+ const [$213e4d2df823067d$var$MenuRootProvider, $213e4d2df823067d$var$useMenuRootContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME);
143
146
  const $213e4d2df823067d$export$d9b273488cd8ce6f = (props)=>{
144
- const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true } = props;
147
+ const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true , allowPinchZoom: allowPinchZoom } = props;
145
148
  const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
146
149
  const [content, setContent] = $cnSS2$react.useState(null);
147
150
  const isUsingKeyboardRef = $cnSS2$react.useRef(false);
@@ -180,59 +183,25 @@ const $213e4d2df823067d$export$d9b273488cd8ce6f = (props)=>{
180
183
  }, []);
181
184
  return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
182
185
  scope: __scopeMenu,
183
- isSubmenu: false,
184
- isUsingKeyboardRef: isUsingKeyboardRef,
185
- dir: direction,
186
186
  open: open,
187
187
  onOpenChange: handleOpenChange,
188
188
  content: content,
189
- onContentChange: setContent,
190
- onRootClose: $cnSS2$react.useCallback(()=>handleOpenChange(false)
189
+ onContentChange: setContent
190
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootProvider, {
191
+ scope: __scopeMenu,
192
+ onClose: $cnSS2$react.useCallback(()=>handleOpenChange(false)
191
193
  , [
192
194
  handleOpenChange
193
195
  ]),
194
- modal: modal
195
- }, children));
196
+ isUsingKeyboardRef: isUsingKeyboardRef,
197
+ dir: direction,
198
+ modal: modal,
199
+ allowPinchZoom: allowPinchZoom
200
+ }, children)));
196
201
  };
197
202
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$d9b273488cd8ce6f, {
198
203
  displayName: $213e4d2df823067d$var$MENU_NAME
199
204
  });
200
- /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$SUB_NAME = 'MenuSub';
201
- const $213e4d2df823067d$export$71bdb9d1e2909932 = (props)=>{
202
- const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props;
203
- const parentMenuContext = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_NAME, __scopeMenu);
204
- const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
205
- const [trigger, setTrigger] = $cnSS2$react.useState(null);
206
- const [content, setContent] = $cnSS2$react.useState(null);
207
- const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus.
208
- $cnSS2$react.useEffect(()=>{
209
- if (parentMenuContext.open === false) handleOpenChange(false);
210
- return ()=>handleOpenChange(false)
211
- ;
212
- }, [
213
- parentMenuContext.open,
214
- handleOpenChange
215
- ]);
216
- return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
217
- scope: __scopeMenu,
218
- isSubmenu: true,
219
- isUsingKeyboardRef: parentMenuContext.isUsingKeyboardRef,
220
- dir: parentMenuContext.dir,
221
- open: open,
222
- onOpenChange: handleOpenChange,
223
- content: content,
224
- onContentChange: setContent,
225
- onRootClose: parentMenuContext.onRootClose,
226
- contentId: $cnSS2$radixuireactid.useId(),
227
- trigger: trigger,
228
- onTriggerChange: setTrigger,
229
- triggerId: $cnSS2$radixuireactid.useId(),
230
- modal: false
231
- }, children));
232
- };
233
- /*#__PURE__*/ Object.assign($213e4d2df823067d$export$71bdb9d1e2909932, {
234
- displayName: $213e4d2df823067d$var$SUB_NAME
235
- });
236
205
  /* -------------------------------------------------------------------------------------------------
237
206
  * MenuAnchor
238
207
  * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ANCHOR_NAME = 'MenuAnchor';
@@ -253,27 +222,20 @@ const [$213e4d2df823067d$var$MenuContentProvider, $213e4d2df823067d$var$useMenuC
253
222
  const $213e4d2df823067d$export$479f0f2f71193efe = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
254
223
  const { forceMount: forceMount , ...contentProps } = props;
255
224
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
225
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
256
226
  return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
257
227
  scope: props.__scopeMenu
258
228
  }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
259
229
  present: forceMount || context.open
260
230
  }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
261
231
  scope: props.__scopeMenu
262
- }, context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
232
+ }, rootContext.modal ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
263
233
  ref: forwardedRef
264
- })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
234
+ })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentNonModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
265
235
  ref: forwardedRef
266
236
  })))));
267
237
  });
268
- /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuRootContent = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
269
- const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
270
- return context.modal ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, {
271
- ref: forwardedRef
272
- })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentNonModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, {
273
- ref: forwardedRef
274
- }));
275
- });
276
- const $213e4d2df823067d$var$MenuRootContentModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
238
+ /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuRootContentModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
277
239
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
278
240
  const ref = $cnSS2$react.useRef(null);
279
241
  const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent`
@@ -306,52 +268,10 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
306
268
  onDismiss: ()=>context.onOpenChange(false)
307
269
  }));
308
270
  });
309
- /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuSubContent = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
310
- const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
311
- const ref = $cnSS2$react.useRef(null);
312
- const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
313
- return context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
314
- id: context.contentId,
315
- "aria-labelledby": context.triggerId
316
- }, props, {
317
- ref: composedRefs,
318
- align: "start",
319
- side: context.dir === 'rtl' ? 'left' : 'right',
320
- portalled: true,
321
- disableOutsidePointerEvents: false,
322
- disableOutsideScroll: false,
323
- trapFocus: false,
324
- onOpenAutoFocus: (event)=>{
325
- var _ref$current;
326
- // when opening a submenu, focus content for keyboard users only
327
- if (context.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
328
- event.preventDefault();
329
- } // The menu might close because of focusing another menu item in the parent menu. We
330
- ,
331
- onCloseAutoFocus: (event)=>event.preventDefault()
332
- ,
333
- onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>{
334
- // We prevent closing when the trigger is focused to avoid triggering a re-open animation
335
- // on pointer interaction.
336
- if (event.target !== context.trigger) context.onOpenChange(false);
337
- }),
338
- onEscapeKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onEscapeKeyDown, context.onRootClose),
339
- onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
340
- // Submenu key events bubble through portals. We only care about keys in this menu.
341
- const isKeyDownInside = event.currentTarget.contains(event.target);
342
- const isCloseKey = $213e4d2df823067d$var$SUB_CLOSE_KEYS[context.dir].includes(event.key);
343
- if (isKeyDownInside && isCloseKey) {
344
- var _context$trigger;
345
- context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus`
346
- (_context$trigger = context.trigger) === null || _context$trigger === void 0 || _context$trigger.focus(); // prevent window from scrolling
347
- event.preventDefault();
348
- }
349
- })
350
- })) : null;
351
- });
352
271
  /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuContentImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
353
- 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;
272
+ 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 , portalled: portalled , ...contentProps } = props;
354
273
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
274
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
355
275
  const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
356
276
  const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu);
357
277
  const getItems = $213e4d2df823067d$var$useCollection(__scopeMenu);
@@ -367,7 +287,7 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
367
287
  const PortalWrapper = portalled ? $cnSS2$radixuireactportal.Portal : $cnSS2$react.Fragment;
368
288
  const ScrollLockWrapper = disableOutsideScroll ? $cnSS2$reactremovescroll.RemoveScroll : $cnSS2$react.Fragment;
369
289
  const scrollLockWrapperProps = disableOutsideScroll ? {
370
- allowPinchZoom: allowPinchZoom
290
+ allowPinchZoom: rootContext.allowPinchZoom
371
291
  } : undefined;
372
292
  const handleTypeaheadSearch = (key)=>{
373
293
  var _items$find, _items$find2;
@@ -452,20 +372,20 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
452
372
  }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Root, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
453
373
  asChild: true
454
374
  }, rovingFocusGroupScope, {
455
- dir: context.dir,
375
+ dir: rootContext.dir,
456
376
  orientation: "vertical",
457
377
  loop: loop,
458
378
  currentTabStopId: currentItemId,
459
379
  onCurrentTabStopIdChange: setCurrentItemId,
460
380
  onEntryFocus: (event)=>{
461
381
  // only focus first item when using keyboard
462
- if (!context.isUsingKeyboardRef.current) event.preventDefault();
382
+ if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
463
383
  }
464
384
  }), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Content, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
465
385
  role: "menu",
466
386
  "aria-orientation": "vertical",
467
387
  "data-state": $213e4d2df823067d$var$getOpenState(context.open),
468
- dir: context.dir
388
+ dir: rootContext.dir
469
389
  }, popperScope, contentProps, {
470
390
  ref: composedRefs,
471
391
  style: {
@@ -549,7 +469,7 @@ const $213e4d2df823067d$var$ITEM_SELECT = 'menu.itemSelect';
549
469
  const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
550
470
  const { disabled: disabled = false , onSelect: onSelect , ...itemProps } = props;
551
471
  const ref = $cnSS2$react.useRef(null);
552
- const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
472
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
553
473
  const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
554
474
  const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
555
475
  const isPointerDownRef = $cnSS2$react.useRef(false);
@@ -566,7 +486,7 @@ const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.for
566
486
  });
567
487
  $cnSS2$radixuireactprimitive.dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);
568
488
  if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false;
569
- else context.onRootClose();
489
+ else rootContext.onClose();
570
490
  }
571
491
  };
572
492
  return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, itemProps, {
@@ -603,131 +523,6 @@ const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.for
603
523
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$2ce376c2cc3355c8, {
604
524
  displayName: $213e4d2df823067d$var$ITEM_NAME
605
525
  });
606
- /* -------------------------------------------------------------------------------------------------
607
- * MenuSubTrigger
608
- * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_TRIGGER_NAME = 'MenuSubTrigger';
609
- const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
610
- const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
611
- const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
612
- const openTimerRef = $cnSS2$react.useRef(null);
613
- const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext;
614
- const scope = {
615
- __scopeMenu: props.__scopeMenu
616
- };
617
- const clearOpenTimer = $cnSS2$react.useCallback(()=>{
618
- if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
619
- openTimerRef.current = null;
620
- }, []);
621
- $cnSS2$react.useEffect(()=>clearOpenTimer
622
- , [
623
- clearOpenTimer
624
- ]);
625
- $cnSS2$react.useEffect(()=>{
626
- const pointerGraceTimer = pointerGraceTimerRef.current;
627
- return ()=>{
628
- window.clearTimeout(pointerGraceTimer);
629
- onPointerGraceIntentChange(null);
630
- };
631
- }, [
632
- pointerGraceTimerRef,
633
- onPointerGraceIntentChange
634
- ]);
635
- return context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$9fa5ebd18bee4d43, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
636
- asChild: true
637
- }, scope), /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
638
- id: context.triggerId,
639
- "aria-haspopup": "menu",
640
- "aria-expanded": context.open,
641
- "aria-controls": context.contentId,
642
- "data-state": $213e4d2df823067d$var$getOpenState(context.open)
643
- }, props, {
644
- ref: $cnSS2$radixuireactcomposerefs.composeRefs(forwardedRef, context.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from
645
- ,
646
- onClick: (event)=>{
647
- var _props$onClick;
648
- (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event);
649
- if (props.disabled || event.defaultPrevented) return;
650
- /**
651
- * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
652
- * and we rely heavily on `onFocusOutside` for submenus to close when switching
653
- * between separate submenus.
654
- */ event.currentTarget.focus();
655
- if (!context.open) context.onOpenChange(true);
656
- },
657
- onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{
658
- contentContext.onItemEnter(event);
659
- if (event.defaultPrevented) return;
660
- if (!props.disabled && !context.open && !openTimerRef.current) {
661
- contentContext.onPointerGraceIntentChange(null);
662
- openTimerRef.current = window.setTimeout(()=>{
663
- context.onOpenChange(true);
664
- clearOpenTimer();
665
- }, 100);
666
- }
667
- })),
668
- onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>{
669
- var _context$content;
670
- clearOpenTimer();
671
- const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect();
672
- if (contentRect) {
673
- var _context$content2;
674
- // TODO: make sure to update this when we change positioning logic
675
- const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side;
676
- const rightSide = side === 'right';
677
- const bleed = rightSide ? -5 : 5;
678
- const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];
679
- const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];
680
- contentContext.onPointerGraceIntentChange({
681
- area: [
682
- // consistently within polygon bounds
683
- {
684
- x: event.clientX + bleed,
685
- y: event.clientY
686
- },
687
- {
688
- x: contentNearEdge,
689
- y: contentRect.top
690
- },
691
- {
692
- x: contentFarEdge,
693
- y: contentRect.top
694
- },
695
- {
696
- x: contentFarEdge,
697
- y: contentRect.bottom
698
- },
699
- {
700
- x: contentNearEdge,
701
- y: contentRect.bottom
702
- }
703
- ],
704
- side: side
705
- });
706
- window.clearTimeout(pointerGraceTimerRef.current);
707
- pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null)
708
- , 300);
709
- } else {
710
- contentContext.onTriggerLeave(event);
711
- if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened.
712
- contentContext.onPointerGraceIntentChange(null);
713
- }
714
- })),
715
- onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
716
- const isTypingAhead = contentContext.searchRef.current !== '';
717
- if (props.disabled || isTypingAhead && event.key === ' ') return;
718
- if ($213e4d2df823067d$var$SUB_OPEN_KEYS[context.dir].includes(event.key)) {
719
- var _context$content3;
720
- context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction
721
- // so we ensure content is given focus again when switching to keyboard.
722
- (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling
723
- event.preventDefault();
724
- }
725
- })
726
- }))) : null;
727
- });
728
- /*#__PURE__*/ Object.assign($213e4d2df823067d$export$5fbbb3ba7297405f, {
729
- displayName: $213e4d2df823067d$var$SUB_TRIGGER_NAME
730
- });
731
526
  /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuItemImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
732
527
  const { __scopeMenu: __scopeMenu , disabled: disabled = false , textValue: textValue , ...itemProps } = props;
733
528
  const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, __scopeMenu);
@@ -896,6 +691,227 @@ const $213e4d2df823067d$export$bcdda4773debf5fa = /*#__PURE__*/ $cnSS2$react.for
896
691
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$bcdda4773debf5fa, {
897
692
  displayName: $213e4d2df823067d$var$ARROW_NAME
898
693
  });
694
+ /* -------------------------------------------------------------------------------------------------
695
+ * MenuSub
696
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_NAME = 'MenuSub';
697
+ const [$213e4d2df823067d$var$MenuSubProvider, $213e4d2df823067d$var$useMenuSubContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$SUB_NAME);
698
+ const $213e4d2df823067d$export$71bdb9d1e2909932 = (props)=>{
699
+ const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props;
700
+ const parentMenuContext = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_NAME, __scopeMenu);
701
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
702
+ const [trigger, setTrigger] = $cnSS2$react.useState(null);
703
+ const [content, setContent] = $cnSS2$react.useState(null);
704
+ const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus.
705
+ $cnSS2$react.useEffect(()=>{
706
+ if (parentMenuContext.open === false) handleOpenChange(false);
707
+ return ()=>handleOpenChange(false)
708
+ ;
709
+ }, [
710
+ parentMenuContext.open,
711
+ handleOpenChange
712
+ ]);
713
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
714
+ scope: __scopeMenu,
715
+ open: open,
716
+ onOpenChange: handleOpenChange,
717
+ content: content,
718
+ onContentChange: setContent
719
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubProvider, {
720
+ scope: __scopeMenu,
721
+ contentId: $cnSS2$radixuireactid.useId(),
722
+ triggerId: $cnSS2$radixuireactid.useId(),
723
+ trigger: trigger,
724
+ onTriggerChange: setTrigger
725
+ }, children)));
726
+ };
727
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$71bdb9d1e2909932, {
728
+ displayName: $213e4d2df823067d$var$SUB_NAME
729
+ });
730
+ /* -------------------------------------------------------------------------------------------------
731
+ * MenuSubTrigger
732
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_TRIGGER_NAME = 'MenuSubTrigger';
733
+ const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
734
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
735
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
736
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
737
+ const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
738
+ const openTimerRef = $cnSS2$react.useRef(null);
739
+ const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext;
740
+ const scope = {
741
+ __scopeMenu: props.__scopeMenu
742
+ };
743
+ const clearOpenTimer = $cnSS2$react.useCallback(()=>{
744
+ if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
745
+ openTimerRef.current = null;
746
+ }, []);
747
+ $cnSS2$react.useEffect(()=>clearOpenTimer
748
+ , [
749
+ clearOpenTimer
750
+ ]);
751
+ $cnSS2$react.useEffect(()=>{
752
+ const pointerGraceTimer = pointerGraceTimerRef.current;
753
+ return ()=>{
754
+ window.clearTimeout(pointerGraceTimer);
755
+ onPointerGraceIntentChange(null);
756
+ };
757
+ }, [
758
+ pointerGraceTimerRef,
759
+ onPointerGraceIntentChange
760
+ ]);
761
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$9fa5ebd18bee4d43, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
762
+ asChild: true
763
+ }, scope), /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
764
+ id: subContext.triggerId,
765
+ "aria-haspopup": "menu",
766
+ "aria-expanded": context.open,
767
+ "aria-controls": subContext.contentId,
768
+ "data-state": $213e4d2df823067d$var$getOpenState(context.open)
769
+ }, props, {
770
+ ref: $cnSS2$radixuireactcomposerefs.composeRefs(forwardedRef, subContext.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from
771
+ ,
772
+ onClick: (event)=>{
773
+ var _props$onClick;
774
+ (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event);
775
+ if (props.disabled || event.defaultPrevented) return;
776
+ /**
777
+ * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
778
+ * and we rely heavily on `onFocusOutside` for submenus to close when switching
779
+ * between separate submenus.
780
+ */ event.currentTarget.focus();
781
+ if (!context.open) context.onOpenChange(true);
782
+ },
783
+ onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{
784
+ contentContext.onItemEnter(event);
785
+ if (event.defaultPrevented) return;
786
+ if (!props.disabled && !context.open && !openTimerRef.current) {
787
+ contentContext.onPointerGraceIntentChange(null);
788
+ openTimerRef.current = window.setTimeout(()=>{
789
+ context.onOpenChange(true);
790
+ clearOpenTimer();
791
+ }, 100);
792
+ }
793
+ })),
794
+ onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>{
795
+ var _context$content;
796
+ clearOpenTimer();
797
+ const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect();
798
+ if (contentRect) {
799
+ var _context$content2;
800
+ // TODO: make sure to update this when we change positioning logic
801
+ const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side;
802
+ const rightSide = side === 'right';
803
+ const bleed = rightSide ? -5 : 5;
804
+ const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];
805
+ const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];
806
+ contentContext.onPointerGraceIntentChange({
807
+ area: [
808
+ // consistently within polygon bounds
809
+ {
810
+ x: event.clientX + bleed,
811
+ y: event.clientY
812
+ },
813
+ {
814
+ x: contentNearEdge,
815
+ y: contentRect.top
816
+ },
817
+ {
818
+ x: contentFarEdge,
819
+ y: contentRect.top
820
+ },
821
+ {
822
+ x: contentFarEdge,
823
+ y: contentRect.bottom
824
+ },
825
+ {
826
+ x: contentNearEdge,
827
+ y: contentRect.bottom
828
+ }
829
+ ],
830
+ side: side
831
+ });
832
+ window.clearTimeout(pointerGraceTimerRef.current);
833
+ pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null)
834
+ , 300);
835
+ } else {
836
+ contentContext.onTriggerLeave(event);
837
+ if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened.
838
+ contentContext.onPointerGraceIntentChange(null);
839
+ }
840
+ })),
841
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
842
+ const isTypingAhead = contentContext.searchRef.current !== '';
843
+ if (props.disabled || isTypingAhead && event.key === ' ') return;
844
+ if ($213e4d2df823067d$var$SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
845
+ var _context$content3;
846
+ context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction
847
+ // so we ensure content is given focus again when switching to keyboard.
848
+ (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling
849
+ event.preventDefault();
850
+ }
851
+ })
852
+ })));
853
+ });
854
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$5fbbb3ba7297405f, {
855
+ displayName: $213e4d2df823067d$var$SUB_TRIGGER_NAME
856
+ });
857
+ /* -------------------------------------------------------------------------------------------------
858
+ * MenuSubContent
859
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_CONTENT_NAME = 'MenuSubContent';
860
+ const $213e4d2df823067d$export$e7142ab31822bde6 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
861
+ const { forceMount: forceMount , ...subContentProps } = props;
862
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
863
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
864
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_CONTENT_NAME, props.__scopeMenu);
865
+ const ref = $cnSS2$react.useRef(null);
866
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
867
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
868
+ scope: props.__scopeMenu
869
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
870
+ present: forceMount || context.open
871
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
872
+ scope: props.__scopeMenu
873
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
874
+ id: subContext.contentId,
875
+ "aria-labelledby": subContext.triggerId
876
+ }, subContentProps, {
877
+ ref: composedRefs,
878
+ align: "start",
879
+ side: rootContext.dir === 'rtl' ? 'left' : 'right',
880
+ portalled: true,
881
+ disableOutsidePointerEvents: false,
882
+ disableOutsideScroll: false,
883
+ trapFocus: false,
884
+ onOpenAutoFocus: (event)=>{
885
+ var _ref$current;
886
+ // when opening a submenu, focus content for keyboard users only
887
+ if (rootContext.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
888
+ event.preventDefault();
889
+ } // The menu might close because of focusing another menu item in the parent menu. We
890
+ ,
891
+ onCloseAutoFocus: (event)=>event.preventDefault()
892
+ ,
893
+ onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>{
894
+ // We prevent closing when the trigger is focused to avoid triggering a re-open animation
895
+ // on pointer interaction.
896
+ if (event.target !== subContext.trigger) context.onOpenChange(false);
897
+ }),
898
+ onEscapeKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onEscapeKeyDown, rootContext.onClose),
899
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
900
+ // Submenu key events bubble through portals. We only care about keys in this menu.
901
+ const isKeyDownInside = event.currentTarget.contains(event.target);
902
+ const isCloseKey = $213e4d2df823067d$var$SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
903
+ if (isKeyDownInside && isCloseKey) {
904
+ var _subContext$trigger;
905
+ context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus`
906
+ (_subContext$trigger = subContext.trigger) === null || _subContext$trigger === void 0 || _subContext$trigger.focus(); // prevent window from scrolling
907
+ event.preventDefault();
908
+ }
909
+ })
910
+ })))));
911
+ });
912
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$e7142ab31822bde6, {
913
+ displayName: $213e4d2df823067d$var$SUB_CONTENT_NAME
914
+ });
899
915
  /* -----------------------------------------------------------------------------------------------*/ function $213e4d2df823067d$var$getOpenState(open) {
900
916
  return open ? 'open' : 'closed';
901
917
  }
@@ -975,9 +991,7 @@ function $213e4d2df823067d$var$whenMouse(handler) {
975
991
  ;
976
992
  }
977
993
  const $213e4d2df823067d$export$be92b6f5f03c0fe9 = $213e4d2df823067d$export$d9b273488cd8ce6f;
978
- const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932;
979
994
  const $213e4d2df823067d$export$b688253958b8dfe7 = $213e4d2df823067d$export$9fa5ebd18bee4d43;
980
- const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f;
981
995
  const $213e4d2df823067d$export$7c6e2c02157bb7d2 = $213e4d2df823067d$export$479f0f2f71193efe;
982
996
  const $213e4d2df823067d$export$eb2fcfdbd7ba97d4 = $213e4d2df823067d$export$22a631d1f72787bb;
983
997
  const $213e4d2df823067d$export$b04be29aa201d4f5 = $213e4d2df823067d$export$dd37bec0e8a99143;
@@ -988,6 +1002,9 @@ const $213e4d2df823067d$export$371ab307eab489c0 = $213e4d2df823067d$export$69bd2
988
1002
  const $213e4d2df823067d$export$c3468e2714d175fa = $213e4d2df823067d$export$a2593e23056970a3;
989
1003
  const $213e4d2df823067d$export$1ff3c3f08ae963c0 = $213e4d2df823067d$export$1cec7dcdd713e220;
990
1004
  const $213e4d2df823067d$export$21b07c8f274aebd5 = $213e4d2df823067d$export$bcdda4773debf5fa;
1005
+ const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932;
1006
+ const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f;
1007
+ const $213e4d2df823067d$export$6d4de93b380beddf = $213e4d2df823067d$export$e7142ab31822bde6;
991
1008
 
992
1009
 
993
1010
  $parcel$exportWildcard(module.exports, $213e4d2df823067d$exports);