@radix-ui/react-menu 0.1.7-rc.21 → 0.1.7-rc.22

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,6 +142,7 @@ 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
147
  const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true } = props;
145
148
  const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
@@ -180,59 +183,24 @@ 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
  ]),
196
+ isUsingKeyboardRef: isUsingKeyboardRef,
197
+ dir: direction,
194
198
  modal: modal
195
- }, children));
199
+ }, children)));
196
200
  };
197
201
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$d9b273488cd8ce6f, {
198
202
  displayName: $213e4d2df823067d$var$MENU_NAME
199
203
  });
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
204
  /* -------------------------------------------------------------------------------------------------
237
205
  * MenuAnchor
238
206
  * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ANCHOR_NAME = 'MenuAnchor';
@@ -253,27 +221,20 @@ const [$213e4d2df823067d$var$MenuContentProvider, $213e4d2df823067d$var$useMenuC
253
221
  const $213e4d2df823067d$export$479f0f2f71193efe = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
254
222
  const { forceMount: forceMount , ...contentProps } = props;
255
223
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
224
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
256
225
  return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
257
226
  scope: props.__scopeMenu
258
227
  }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
259
228
  present: forceMount || context.open
260
229
  }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
261
230
  scope: props.__scopeMenu
262
- }, context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
231
+ }, rootContext.modal ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
263
232
  ref: forwardedRef
264
- })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
233
+ })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentNonModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
265
234
  ref: forwardedRef
266
235
  })))));
267
236
  });
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)=>{
237
+ /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuRootContentModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
277
238
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
278
239
  const ref = $cnSS2$react.useRef(null);
279
240
  const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent`
@@ -306,52 +267,10 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
306
267
  onDismiss: ()=>context.onOpenChange(false)
307
268
  }));
308
269
  });
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
270
  /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuContentImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
353
271
  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;
354
272
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
273
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
355
274
  const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
356
275
  const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu);
357
276
  const getItems = $213e4d2df823067d$var$useCollection(__scopeMenu);
@@ -452,20 +371,20 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
452
371
  }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Root, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
453
372
  asChild: true
454
373
  }, rovingFocusGroupScope, {
455
- dir: context.dir,
374
+ dir: rootContext.dir,
456
375
  orientation: "vertical",
457
376
  loop: loop,
458
377
  currentTabStopId: currentItemId,
459
378
  onCurrentTabStopIdChange: setCurrentItemId,
460
379
  onEntryFocus: (event)=>{
461
380
  // only focus first item when using keyboard
462
- if (!context.isUsingKeyboardRef.current) event.preventDefault();
381
+ if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
463
382
  }
464
383
  }), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Content, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
465
384
  role: "menu",
466
385
  "aria-orientation": "vertical",
467
386
  "data-state": $213e4d2df823067d$var$getOpenState(context.open),
468
- dir: context.dir
387
+ dir: rootContext.dir
469
388
  }, popperScope, contentProps, {
470
389
  ref: composedRefs,
471
390
  style: {
@@ -549,7 +468,7 @@ const $213e4d2df823067d$var$ITEM_SELECT = 'menu.itemSelect';
549
468
  const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
550
469
  const { disabled: disabled = false , onSelect: onSelect , ...itemProps } = props;
551
470
  const ref = $cnSS2$react.useRef(null);
552
- const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
471
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
553
472
  const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
554
473
  const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
555
474
  const isPointerDownRef = $cnSS2$react.useRef(false);
@@ -566,7 +485,7 @@ const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.for
566
485
  });
567
486
  $cnSS2$radixuireactprimitive.dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);
568
487
  if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false;
569
- else context.onRootClose();
488
+ else rootContext.onClose();
570
489
  }
571
490
  };
572
491
  return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, itemProps, {
@@ -603,131 +522,6 @@ const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.for
603
522
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$2ce376c2cc3355c8, {
604
523
  displayName: $213e4d2df823067d$var$ITEM_NAME
605
524
  });
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
525
  /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuItemImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
732
526
  const { __scopeMenu: __scopeMenu , disabled: disabled = false , textValue: textValue , ...itemProps } = props;
733
527
  const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, __scopeMenu);
@@ -896,6 +690,227 @@ const $213e4d2df823067d$export$bcdda4773debf5fa = /*#__PURE__*/ $cnSS2$react.for
896
690
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$bcdda4773debf5fa, {
897
691
  displayName: $213e4d2df823067d$var$ARROW_NAME
898
692
  });
693
+ /* -------------------------------------------------------------------------------------------------
694
+ * MenuSub
695
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_NAME = 'MenuSub';
696
+ const [$213e4d2df823067d$var$MenuSubProvider, $213e4d2df823067d$var$useMenuSubContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$SUB_NAME);
697
+ const $213e4d2df823067d$export$71bdb9d1e2909932 = (props)=>{
698
+ const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props;
699
+ const parentMenuContext = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_NAME, __scopeMenu);
700
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
701
+ const [trigger, setTrigger] = $cnSS2$react.useState(null);
702
+ const [content, setContent] = $cnSS2$react.useState(null);
703
+ const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus.
704
+ $cnSS2$react.useEffect(()=>{
705
+ if (parentMenuContext.open === false) handleOpenChange(false);
706
+ return ()=>handleOpenChange(false)
707
+ ;
708
+ }, [
709
+ parentMenuContext.open,
710
+ handleOpenChange
711
+ ]);
712
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
713
+ scope: __scopeMenu,
714
+ open: open,
715
+ onOpenChange: handleOpenChange,
716
+ content: content,
717
+ onContentChange: setContent
718
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubProvider, {
719
+ scope: __scopeMenu,
720
+ contentId: $cnSS2$radixuireactid.useId(),
721
+ triggerId: $cnSS2$radixuireactid.useId(),
722
+ trigger: trigger,
723
+ onTriggerChange: setTrigger
724
+ }, children)));
725
+ };
726
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$71bdb9d1e2909932, {
727
+ displayName: $213e4d2df823067d$var$SUB_NAME
728
+ });
729
+ /* -------------------------------------------------------------------------------------------------
730
+ * MenuSubTrigger
731
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_TRIGGER_NAME = 'MenuSubTrigger';
732
+ const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
733
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
734
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
735
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
736
+ const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
737
+ const openTimerRef = $cnSS2$react.useRef(null);
738
+ const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext;
739
+ const scope = {
740
+ __scopeMenu: props.__scopeMenu
741
+ };
742
+ const clearOpenTimer = $cnSS2$react.useCallback(()=>{
743
+ if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
744
+ openTimerRef.current = null;
745
+ }, []);
746
+ $cnSS2$react.useEffect(()=>clearOpenTimer
747
+ , [
748
+ clearOpenTimer
749
+ ]);
750
+ $cnSS2$react.useEffect(()=>{
751
+ const pointerGraceTimer = pointerGraceTimerRef.current;
752
+ return ()=>{
753
+ window.clearTimeout(pointerGraceTimer);
754
+ onPointerGraceIntentChange(null);
755
+ };
756
+ }, [
757
+ pointerGraceTimerRef,
758
+ onPointerGraceIntentChange
759
+ ]);
760
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$9fa5ebd18bee4d43, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
761
+ asChild: true
762
+ }, scope), /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
763
+ id: subContext.triggerId,
764
+ "aria-haspopup": "menu",
765
+ "aria-expanded": context.open,
766
+ "aria-controls": subContext.contentId,
767
+ "data-state": $213e4d2df823067d$var$getOpenState(context.open)
768
+ }, props, {
769
+ ref: $cnSS2$radixuireactcomposerefs.composeRefs(forwardedRef, subContext.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from
770
+ ,
771
+ onClick: (event)=>{
772
+ var _props$onClick;
773
+ (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event);
774
+ if (props.disabled || event.defaultPrevented) return;
775
+ /**
776
+ * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
777
+ * and we rely heavily on `onFocusOutside` for submenus to close when switching
778
+ * between separate submenus.
779
+ */ event.currentTarget.focus();
780
+ if (!context.open) context.onOpenChange(true);
781
+ },
782
+ onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{
783
+ contentContext.onItemEnter(event);
784
+ if (event.defaultPrevented) return;
785
+ if (!props.disabled && !context.open && !openTimerRef.current) {
786
+ contentContext.onPointerGraceIntentChange(null);
787
+ openTimerRef.current = window.setTimeout(()=>{
788
+ context.onOpenChange(true);
789
+ clearOpenTimer();
790
+ }, 100);
791
+ }
792
+ })),
793
+ onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>{
794
+ var _context$content;
795
+ clearOpenTimer();
796
+ const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect();
797
+ if (contentRect) {
798
+ var _context$content2;
799
+ // TODO: make sure to update this when we change positioning logic
800
+ const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side;
801
+ const rightSide = side === 'right';
802
+ const bleed = rightSide ? -5 : 5;
803
+ const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];
804
+ const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];
805
+ contentContext.onPointerGraceIntentChange({
806
+ area: [
807
+ // consistently within polygon bounds
808
+ {
809
+ x: event.clientX + bleed,
810
+ y: event.clientY
811
+ },
812
+ {
813
+ x: contentNearEdge,
814
+ y: contentRect.top
815
+ },
816
+ {
817
+ x: contentFarEdge,
818
+ y: contentRect.top
819
+ },
820
+ {
821
+ x: contentFarEdge,
822
+ y: contentRect.bottom
823
+ },
824
+ {
825
+ x: contentNearEdge,
826
+ y: contentRect.bottom
827
+ }
828
+ ],
829
+ side: side
830
+ });
831
+ window.clearTimeout(pointerGraceTimerRef.current);
832
+ pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null)
833
+ , 300);
834
+ } else {
835
+ contentContext.onTriggerLeave(event);
836
+ if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened.
837
+ contentContext.onPointerGraceIntentChange(null);
838
+ }
839
+ })),
840
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
841
+ const isTypingAhead = contentContext.searchRef.current !== '';
842
+ if (props.disabled || isTypingAhead && event.key === ' ') return;
843
+ if ($213e4d2df823067d$var$SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
844
+ var _context$content3;
845
+ context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction
846
+ // so we ensure content is given focus again when switching to keyboard.
847
+ (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling
848
+ event.preventDefault();
849
+ }
850
+ })
851
+ })));
852
+ });
853
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$5fbbb3ba7297405f, {
854
+ displayName: $213e4d2df823067d$var$SUB_TRIGGER_NAME
855
+ });
856
+ /* -------------------------------------------------------------------------------------------------
857
+ * MenuSubContent
858
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_CONTENT_NAME = 'MenuSubContent';
859
+ const $213e4d2df823067d$export$e7142ab31822bde6 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
860
+ const { forceMount: forceMount , ...subContentProps } = props;
861
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
862
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
863
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_CONTENT_NAME, props.__scopeMenu);
864
+ const ref = $cnSS2$react.useRef(null);
865
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
866
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
867
+ scope: props.__scopeMenu
868
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
869
+ present: forceMount || context.open
870
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
871
+ scope: props.__scopeMenu
872
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
873
+ id: subContext.contentId,
874
+ "aria-labelledby": subContext.triggerId
875
+ }, subContentProps, {
876
+ ref: composedRefs,
877
+ align: "start",
878
+ side: rootContext.dir === 'rtl' ? 'left' : 'right',
879
+ portalled: true,
880
+ disableOutsidePointerEvents: false,
881
+ disableOutsideScroll: false,
882
+ trapFocus: false,
883
+ onOpenAutoFocus: (event)=>{
884
+ var _ref$current;
885
+ // when opening a submenu, focus content for keyboard users only
886
+ if (rootContext.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
887
+ event.preventDefault();
888
+ } // The menu might close because of focusing another menu item in the parent menu. We
889
+ ,
890
+ onCloseAutoFocus: (event)=>event.preventDefault()
891
+ ,
892
+ onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>{
893
+ // We prevent closing when the trigger is focused to avoid triggering a re-open animation
894
+ // on pointer interaction.
895
+ if (event.target !== subContext.trigger) context.onOpenChange(false);
896
+ }),
897
+ onEscapeKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onEscapeKeyDown, rootContext.onClose),
898
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
899
+ // Submenu key events bubble through portals. We only care about keys in this menu.
900
+ const isKeyDownInside = event.currentTarget.contains(event.target);
901
+ const isCloseKey = $213e4d2df823067d$var$SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
902
+ if (isKeyDownInside && isCloseKey) {
903
+ var _subContext$trigger;
904
+ context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus`
905
+ (_subContext$trigger = subContext.trigger) === null || _subContext$trigger === void 0 || _subContext$trigger.focus(); // prevent window from scrolling
906
+ event.preventDefault();
907
+ }
908
+ })
909
+ })))));
910
+ });
911
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$e7142ab31822bde6, {
912
+ displayName: $213e4d2df823067d$var$SUB_CONTENT_NAME
913
+ });
899
914
  /* -----------------------------------------------------------------------------------------------*/ function $213e4d2df823067d$var$getOpenState(open) {
900
915
  return open ? 'open' : 'closed';
901
916
  }
@@ -975,9 +990,7 @@ function $213e4d2df823067d$var$whenMouse(handler) {
975
990
  ;
976
991
  }
977
992
  const $213e4d2df823067d$export$be92b6f5f03c0fe9 = $213e4d2df823067d$export$d9b273488cd8ce6f;
978
- const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932;
979
993
  const $213e4d2df823067d$export$b688253958b8dfe7 = $213e4d2df823067d$export$9fa5ebd18bee4d43;
980
- const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f;
981
994
  const $213e4d2df823067d$export$7c6e2c02157bb7d2 = $213e4d2df823067d$export$479f0f2f71193efe;
982
995
  const $213e4d2df823067d$export$eb2fcfdbd7ba97d4 = $213e4d2df823067d$export$22a631d1f72787bb;
983
996
  const $213e4d2df823067d$export$b04be29aa201d4f5 = $213e4d2df823067d$export$dd37bec0e8a99143;
@@ -988,6 +1001,9 @@ const $213e4d2df823067d$export$371ab307eab489c0 = $213e4d2df823067d$export$69bd2
988
1001
  const $213e4d2df823067d$export$c3468e2714d175fa = $213e4d2df823067d$export$a2593e23056970a3;
989
1002
  const $213e4d2df823067d$export$1ff3c3f08ae963c0 = $213e4d2df823067d$export$1cec7dcdd713e220;
990
1003
  const $213e4d2df823067d$export$21b07c8f274aebd5 = $213e4d2df823067d$export$bcdda4773debf5fa;
1004
+ const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932;
1005
+ const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f;
1006
+ const $213e4d2df823067d$export$6d4de93b380beddf = $213e4d2df823067d$export$e7142ab31822bde6;
991
1007
 
992
1008
 
993
1009
  $parcel$exportWildcard(module.exports, $213e4d2df823067d$exports);