@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.
package/dist/index.js CHANGED
@@ -1,76 +1,65 @@
1
1
  var $cnSS2$babelruntimehelpersextends = require("@babel/runtime/helpers/extends");
2
2
  var $cnSS2$react = require("react");
3
- var $cnSS2$reactremovescroll = require("react-remove-scroll");
4
- var $cnSS2$ariahidden = require("aria-hidden");
5
3
  var $cnSS2$radixuiprimitive = require("@radix-ui/primitive");
6
4
  var $cnSS2$radixuireactcollection = require("@radix-ui/react-collection");
7
5
  var $cnSS2$radixuireactcomposerefs = require("@radix-ui/react-compose-refs");
8
6
  var $cnSS2$radixuireactcontext = require("@radix-ui/react-context");
7
+ var $cnSS2$radixuireactdirection = require("@radix-ui/react-direction");
9
8
  var $cnSS2$radixuireactdismissablelayer = require("@radix-ui/react-dismissable-layer");
9
+ var $cnSS2$radixuireactfocusguards = require("@radix-ui/react-focus-guards");
10
10
  var $cnSS2$radixuireactfocusscope = require("@radix-ui/react-focus-scope");
11
- var $cnSS2$radixuireactpresence = require("@radix-ui/react-presence");
12
- var $cnSS2$radixuireactprimitive = require("@radix-ui/react-primitive");
11
+ var $cnSS2$radixuireactid = require("@radix-ui/react-id");
13
12
  var $cnSS2$radixuireactpopper = require("@radix-ui/react-popper");
14
13
  var $cnSS2$radixuireactportal = require("@radix-ui/react-portal");
14
+ var $cnSS2$radixuireactpresence = require("@radix-ui/react-presence");
15
+ var $cnSS2$radixuireactprimitive = require("@radix-ui/react-primitive");
15
16
  var $cnSS2$radixuireactrovingfocus = require("@radix-ui/react-roving-focus");
16
- var $cnSS2$radixuireactdirection = require("@radix-ui/react-direction");
17
+ var $cnSS2$radixuireactslot = require("@radix-ui/react-slot");
17
18
  var $cnSS2$radixuireactusecallbackref = require("@radix-ui/react-use-callback-ref");
18
- var $cnSS2$radixuireactfocusguards = require("@radix-ui/react-focus-guards");
19
- var $cnSS2$radixuireactid = require("@radix-ui/react-id");
20
-
21
- function $parcel$exportWildcard(dest, source) {
22
- Object.keys(source).forEach(function(key) {
23
- if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
24
- return;
25
- }
26
-
27
- Object.defineProperty(dest, key, {
28
- enumerable: true,
29
- get: function get() {
30
- return source[key];
31
- }
32
- });
33
- });
19
+ var $cnSS2$ariahidden = require("aria-hidden");
20
+ var $cnSS2$reactremovescroll = require("react-remove-scroll");
34
21
 
35
- return dest;
22
+ function $parcel$export(e, n, v, s) {
23
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
36
24
  }
37
25
  function $parcel$interopDefault(a) {
38
26
  return a && a.__esModule ? a.default : a;
39
27
  }
40
- function $parcel$export(e, n, v, s) {
41
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
42
- }
43
- var $213e4d2df823067d$exports = {};
44
28
 
45
- $parcel$export($213e4d2df823067d$exports, "createMenuScope", () => $213e4d2df823067d$export$4027731b685e72eb);
46
- $parcel$export($213e4d2df823067d$exports, "Menu", () => $213e4d2df823067d$export$d9b273488cd8ce6f);
47
- $parcel$export($213e4d2df823067d$exports, "MenuSub", () => $213e4d2df823067d$export$71bdb9d1e2909932);
48
- $parcel$export($213e4d2df823067d$exports, "MenuAnchor", () => $213e4d2df823067d$export$9fa5ebd18bee4d43);
49
- $parcel$export($213e4d2df823067d$exports, "MenuContent", () => $213e4d2df823067d$export$479f0f2f71193efe);
50
- $parcel$export($213e4d2df823067d$exports, "MenuGroup", () => $213e4d2df823067d$export$22a631d1f72787bb);
51
- $parcel$export($213e4d2df823067d$exports, "MenuLabel", () => $213e4d2df823067d$export$dd37bec0e8a99143);
52
- $parcel$export($213e4d2df823067d$exports, "MenuItem", () => $213e4d2df823067d$export$2ce376c2cc3355c8);
53
- $parcel$export($213e4d2df823067d$exports, "MenuSubTrigger", () => $213e4d2df823067d$export$5fbbb3ba7297405f);
54
- $parcel$export($213e4d2df823067d$exports, "MenuCheckboxItem", () => $213e4d2df823067d$export$f6f243521332502d);
55
- $parcel$export($213e4d2df823067d$exports, "MenuRadioGroup", () => $213e4d2df823067d$export$ea2200c9eee416b3);
56
- $parcel$export($213e4d2df823067d$exports, "MenuRadioItem", () => $213e4d2df823067d$export$69bd225e9817f6d0);
57
- $parcel$export($213e4d2df823067d$exports, "MenuItemIndicator", () => $213e4d2df823067d$export$a2593e23056970a3);
58
- $parcel$export($213e4d2df823067d$exports, "MenuSeparator", () => $213e4d2df823067d$export$1cec7dcdd713e220);
59
- $parcel$export($213e4d2df823067d$exports, "MenuArrow", () => $213e4d2df823067d$export$bcdda4773debf5fa);
60
- $parcel$export($213e4d2df823067d$exports, "Root", () => $213e4d2df823067d$export$be92b6f5f03c0fe9);
61
- $parcel$export($213e4d2df823067d$exports, "Sub", () => $213e4d2df823067d$export$d7a01e11500dfb6f);
62
- $parcel$export($213e4d2df823067d$exports, "Anchor", () => $213e4d2df823067d$export$b688253958b8dfe7);
63
- $parcel$export($213e4d2df823067d$exports, "SubTrigger", () => $213e4d2df823067d$export$2ea8a7a591ac5eac);
64
- $parcel$export($213e4d2df823067d$exports, "Content", () => $213e4d2df823067d$export$7c6e2c02157bb7d2);
65
- $parcel$export($213e4d2df823067d$exports, "Group", () => $213e4d2df823067d$export$eb2fcfdbd7ba97d4);
66
- $parcel$export($213e4d2df823067d$exports, "Label", () => $213e4d2df823067d$export$b04be29aa201d4f5);
67
- $parcel$export($213e4d2df823067d$exports, "Item", () => $213e4d2df823067d$export$6d08773d2e66f8f2);
68
- $parcel$export($213e4d2df823067d$exports, "CheckboxItem", () => $213e4d2df823067d$export$16ce288f89fa631c);
69
- $parcel$export($213e4d2df823067d$exports, "RadioGroup", () => $213e4d2df823067d$export$a98f0dcb43a68a25);
70
- $parcel$export($213e4d2df823067d$exports, "RadioItem", () => $213e4d2df823067d$export$371ab307eab489c0);
71
- $parcel$export($213e4d2df823067d$exports, "ItemIndicator", () => $213e4d2df823067d$export$c3468e2714d175fa);
72
- $parcel$export($213e4d2df823067d$exports, "Separator", () => $213e4d2df823067d$export$1ff3c3f08ae963c0);
73
- $parcel$export($213e4d2df823067d$exports, "Arrow", () => $213e4d2df823067d$export$21b07c8f274aebd5);
29
+ $parcel$export(module.exports, "createMenuScope", () => $213e4d2df823067d$export$4027731b685e72eb);
30
+ $parcel$export(module.exports, "Menu", () => $213e4d2df823067d$export$d9b273488cd8ce6f);
31
+ $parcel$export(module.exports, "MenuAnchor", () => $213e4d2df823067d$export$9fa5ebd18bee4d43);
32
+ $parcel$export(module.exports, "MenuPortal", () => $213e4d2df823067d$export$793392f970497feb);
33
+ $parcel$export(module.exports, "MenuContent", () => $213e4d2df823067d$export$479f0f2f71193efe);
34
+ $parcel$export(module.exports, "MenuGroup", () => $213e4d2df823067d$export$22a631d1f72787bb);
35
+ $parcel$export(module.exports, "MenuLabel", () => $213e4d2df823067d$export$dd37bec0e8a99143);
36
+ $parcel$export(module.exports, "MenuItem", () => $213e4d2df823067d$export$2ce376c2cc3355c8);
37
+ $parcel$export(module.exports, "MenuCheckboxItem", () => $213e4d2df823067d$export$f6f243521332502d);
38
+ $parcel$export(module.exports, "MenuRadioGroup", () => $213e4d2df823067d$export$ea2200c9eee416b3);
39
+ $parcel$export(module.exports, "MenuRadioItem", () => $213e4d2df823067d$export$69bd225e9817f6d0);
40
+ $parcel$export(module.exports, "MenuItemIndicator", () => $213e4d2df823067d$export$a2593e23056970a3);
41
+ $parcel$export(module.exports, "MenuSeparator", () => $213e4d2df823067d$export$1cec7dcdd713e220);
42
+ $parcel$export(module.exports, "MenuArrow", () => $213e4d2df823067d$export$bcdda4773debf5fa);
43
+ $parcel$export(module.exports, "MenuSub", () => $213e4d2df823067d$export$71bdb9d1e2909932);
44
+ $parcel$export(module.exports, "MenuSubTrigger", () => $213e4d2df823067d$export$5fbbb3ba7297405f);
45
+ $parcel$export(module.exports, "MenuSubContent", () => $213e4d2df823067d$export$e7142ab31822bde6);
46
+ $parcel$export(module.exports, "Root", () => $213e4d2df823067d$export$be92b6f5f03c0fe9);
47
+ $parcel$export(module.exports, "Anchor", () => $213e4d2df823067d$export$b688253958b8dfe7);
48
+ $parcel$export(module.exports, "Portal", () => $213e4d2df823067d$export$602eac185826482c);
49
+ $parcel$export(module.exports, "Content", () => $213e4d2df823067d$export$7c6e2c02157bb7d2);
50
+ $parcel$export(module.exports, "Group", () => $213e4d2df823067d$export$eb2fcfdbd7ba97d4);
51
+ $parcel$export(module.exports, "Label", () => $213e4d2df823067d$export$b04be29aa201d4f5);
52
+ $parcel$export(module.exports, "Item", () => $213e4d2df823067d$export$6d08773d2e66f8f2);
53
+ $parcel$export(module.exports, "CheckboxItem", () => $213e4d2df823067d$export$16ce288f89fa631c);
54
+ $parcel$export(module.exports, "RadioGroup", () => $213e4d2df823067d$export$a98f0dcb43a68a25);
55
+ $parcel$export(module.exports, "RadioItem", () => $213e4d2df823067d$export$371ab307eab489c0);
56
+ $parcel$export(module.exports, "ItemIndicator", () => $213e4d2df823067d$export$c3468e2714d175fa);
57
+ $parcel$export(module.exports, "Separator", () => $213e4d2df823067d$export$1ff3c3f08ae963c0);
58
+ $parcel$export(module.exports, "Arrow", () => $213e4d2df823067d$export$21b07c8f274aebd5);
59
+ $parcel$export(module.exports, "Sub", () => $213e4d2df823067d$export$d7a01e11500dfb6f);
60
+ $parcel$export(module.exports, "SubTrigger", () => $213e4d2df823067d$export$2ea8a7a591ac5eac);
61
+ $parcel$export(module.exports, "SubContent", () => $213e4d2df823067d$export$6d4de93b380beddf);
62
+
74
63
 
75
64
 
76
65
 
@@ -140,6 +129,7 @@ const [$213e4d2df823067d$var$createMenuContext, $213e4d2df823067d$export$4027731
140
129
  const $213e4d2df823067d$var$usePopperScope = $cnSS2$radixuireactpopper.createPopperScope();
141
130
  const $213e4d2df823067d$var$useRovingFocusGroupScope = $cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope();
142
131
  const [$213e4d2df823067d$var$MenuProvider, $213e4d2df823067d$var$useMenuContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME);
132
+ const [$213e4d2df823067d$var$MenuRootProvider, $213e4d2df823067d$var$useMenuRootContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME);
143
133
  const $213e4d2df823067d$export$d9b273488cd8ce6f = (props)=>{
144
134
  const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true } = props;
145
135
  const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
@@ -180,59 +170,24 @@ const $213e4d2df823067d$export$d9b273488cd8ce6f = (props)=>{
180
170
  }, []);
181
171
  return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
182
172
  scope: __scopeMenu,
183
- isSubmenu: false,
184
- isUsingKeyboardRef: isUsingKeyboardRef,
185
- dir: direction,
186
173
  open: open,
187
174
  onOpenChange: handleOpenChange,
188
175
  content: content,
189
- onContentChange: setContent,
190
- onRootClose: $cnSS2$react.useCallback(()=>handleOpenChange(false)
176
+ onContentChange: setContent
177
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootProvider, {
178
+ scope: __scopeMenu,
179
+ onClose: $cnSS2$react.useCallback(()=>handleOpenChange(false)
191
180
  , [
192
181
  handleOpenChange
193
182
  ]),
183
+ isUsingKeyboardRef: isUsingKeyboardRef,
184
+ dir: direction,
194
185
  modal: modal
195
- }, children));
186
+ }, children)));
196
187
  };
197
188
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$d9b273488cd8ce6f, {
198
189
  displayName: $213e4d2df823067d$var$MENU_NAME
199
190
  });
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
191
  /* -------------------------------------------------------------------------------------------------
237
192
  * MenuAnchor
238
193
  * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ANCHOR_NAME = 'MenuAnchor';
@@ -246,34 +201,50 @@ const $213e4d2df823067d$export$9fa5ebd18bee4d43 = /*#__PURE__*/ $cnSS2$react.for
246
201
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$9fa5ebd18bee4d43, {
247
202
  displayName: $213e4d2df823067d$var$ANCHOR_NAME
248
203
  });
204
+ /* -------------------------------------------------------------------------------------------------
205
+ * MenuPortal
206
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$PORTAL_NAME = 'MenuPortal';
207
+ const [$213e4d2df823067d$var$PortalProvider, $213e4d2df823067d$var$usePortalContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$PORTAL_NAME, {
208
+ forceMount: undefined
209
+ });
210
+ const $213e4d2df823067d$export$793392f970497feb = (props)=>{
211
+ const { __scopeMenu: __scopeMenu , forceMount: forceMount , children: children , container: container } = props;
212
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$PORTAL_NAME, __scopeMenu);
213
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$PortalProvider, {
214
+ scope: __scopeMenu,
215
+ forceMount: forceMount
216
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
217
+ present: forceMount || context.open
218
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactportal.Portal, {
219
+ asChild: true,
220
+ container: container
221
+ }, children)));
222
+ };
223
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$793392f970497feb, {
224
+ displayName: $213e4d2df823067d$var$PORTAL_NAME
225
+ });
249
226
  /* -------------------------------------------------------------------------------------------------
250
227
  * MenuContent
251
228
  * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$CONTENT_NAME = 'MenuContent';
252
229
  const [$213e4d2df823067d$var$MenuContentProvider, $213e4d2df823067d$var$useMenuContentContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$CONTENT_NAME);
253
230
  const $213e4d2df823067d$export$479f0f2f71193efe = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
254
- const { forceMount: forceMount , ...contentProps } = props;
231
+ const portalContext = $213e4d2df823067d$var$usePortalContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
232
+ const { forceMount: forceMount = portalContext.forceMount , ...contentProps } = props;
255
233
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
234
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
256
235
  return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
257
236
  scope: props.__scopeMenu
258
237
  }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
259
238
  present: forceMount || context.open
260
239
  }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
261
240
  scope: props.__scopeMenu
262
- }, context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
241
+ }, rootContext.modal ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
263
242
  ref: forwardedRef
264
- })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
243
+ })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentNonModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
265
244
  ref: forwardedRef
266
245
  })))));
267
246
  });
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)=>{
247
+ /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuRootContentModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
277
248
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
278
249
  const ref = $cnSS2$react.useRef(null);
279
250
  const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent`
@@ -306,52 +277,10 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
306
277
  onDismiss: ()=>context.onOpenChange(false)
307
278
  }));
308
279
  });
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
280
  /* ---------------------------------------------------------------------------------------------- */ 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;
281
+ 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;
354
282
  const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
283
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
355
284
  const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
356
285
  const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu);
357
286
  const getItems = $213e4d2df823067d$var$useCollection(__scopeMenu);
@@ -364,10 +293,10 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
364
293
  const pointerGraceIntentRef = $cnSS2$react.useRef(null);
365
294
  const pointerDirRef = $cnSS2$react.useRef('right');
366
295
  const lastPointerXRef = $cnSS2$react.useRef(0);
367
- const PortalWrapper = portalled ? $cnSS2$radixuireactportal.Portal : $cnSS2$react.Fragment;
368
296
  const ScrollLockWrapper = disableOutsideScroll ? $cnSS2$reactremovescroll.RemoveScroll : $cnSS2$react.Fragment;
369
297
  const scrollLockWrapperProps = disableOutsideScroll ? {
370
- allowPinchZoom: allowPinchZoom
298
+ as: $cnSS2$radixuireactslot.Slot,
299
+ allowPinchZoom: true
371
300
  } : undefined;
372
301
  const handleTypeaheadSearch = (key)=>{
373
302
  var _items$find, _items$find2;
@@ -405,7 +334,7 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
405
334
  const isMovingTowards = pointerDirRef.current === ((_pointerGraceIntentRe = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe === void 0 ? void 0 : _pointerGraceIntentRe.side);
406
335
  return isMovingTowards && $213e4d2df823067d$var$isPointerInGraceArea(event, (_pointerGraceIntentRe2 = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe2 === void 0 ? void 0 : _pointerGraceIntentRe2.area);
407
336
  }, []);
408
- return /*#__PURE__*/ $cnSS2$react.createElement(PortalWrapper, null, /*#__PURE__*/ $cnSS2$react.createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentProvider, {
337
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentProvider, {
409
338
  scope: __scopeMenu,
410
339
  searchRef: searchRef,
411
340
  onItemEnter: $cnSS2$react.useCallback((event)=>{
@@ -430,7 +359,7 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
430
359
  onPointerGraceIntentChange: $cnSS2$react.useCallback((intent)=>{
431
360
  pointerGraceIntentRef.current = intent;
432
361
  }, [])
433
- }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactfocusscope.FocusScope, {
362
+ }, /*#__PURE__*/ $cnSS2$react.createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactfocusscope.FocusScope, {
434
363
  asChild: true,
435
364
  trapped: trapFocus,
436
365
  onMountAutoFocus: $cnSS2$radixuiprimitive.composeEventHandlers(onOpenAutoFocus, (event)=>{
@@ -452,20 +381,20 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
452
381
  }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Root, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
453
382
  asChild: true
454
383
  }, rovingFocusGroupScope, {
455
- dir: context.dir,
384
+ dir: rootContext.dir,
456
385
  orientation: "vertical",
457
386
  loop: loop,
458
387
  currentTabStopId: currentItemId,
459
388
  onCurrentTabStopIdChange: setCurrentItemId,
460
389
  onEntryFocus: (event)=>{
461
390
  // only focus first item when using keyboard
462
- if (!context.isUsingKeyboardRef.current) event.preventDefault();
391
+ if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
463
392
  }
464
393
  }), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Content, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
465
394
  role: "menu",
466
395
  "aria-orientation": "vertical",
467
396
  "data-state": $213e4d2df823067d$var$getOpenState(context.open),
468
- dir: context.dir
397
+ dir: rootContext.dir
469
398
  }, popperScope, contentProps, {
470
399
  ref: composedRefs,
471
400
  style: {
@@ -475,7 +404,7 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
475
404
  onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(contentProps.onKeyDown, (event)=>{
476
405
  // submenu key events bubble through portals. We only care about keys in this menu.
477
406
  const target = event.target;
478
- const isKeyDownInside = event.currentTarget.contains(target);
407
+ const isKeyDownInside = target.closest('[role="menu"]') === event.currentTarget;
479
408
  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
480
409
  const isCharacterKey = event.key.length === 1;
481
410
  if (isKeyDownInside) {
@@ -511,7 +440,7 @@ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react
511
440
  lastPointerXRef.current = event.clientX;
512
441
  }
513
442
  }))
514
- }))))))));
443
+ })))))));
515
444
  });
516
445
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$479f0f2f71193efe, {
517
446
  displayName: $213e4d2df823067d$var$CONTENT_NAME
@@ -549,14 +478,14 @@ const $213e4d2df823067d$var$ITEM_SELECT = 'menu.itemSelect';
549
478
  const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
550
479
  const { disabled: disabled = false , onSelect: onSelect , ...itemProps } = props;
551
480
  const ref = $cnSS2$react.useRef(null);
552
- const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
481
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
553
482
  const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
554
483
  const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
555
484
  const isPointerDownRef = $cnSS2$react.useRef(false);
556
485
  const handleSelect = ()=>{
557
486
  const menuItem = ref.current;
558
487
  if (!disabled && menuItem) {
559
- const itemSelectEvent = new Event($213e4d2df823067d$var$ITEM_SELECT, {
488
+ const itemSelectEvent = new CustomEvent($213e4d2df823067d$var$ITEM_SELECT, {
560
489
  bubbles: true,
561
490
  cancelable: true
562
491
  });
@@ -564,9 +493,9 @@ const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.for
564
493
  , {
565
494
  once: true
566
495
  });
567
- menuItem.dispatchEvent(itemSelectEvent);
496
+ $cnSS2$radixuireactprimitive.dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);
568
497
  if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false;
569
- else context.onRootClose();
498
+ else rootContext.onClose();
570
499
  }
571
500
  };
572
501
  return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, itemProps, {
@@ -603,137 +532,13 @@ const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.for
603
532
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$2ce376c2cc3355c8, {
604
533
  displayName: $213e4d2df823067d$var$ITEM_NAME
605
534
  });
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
535
  /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuItemImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
732
536
  const { __scopeMenu: __scopeMenu , disabled: disabled = false , textValue: textValue , ...itemProps } = props;
733
537
  const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, __scopeMenu);
734
538
  const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu);
735
539
  const ref = $cnSS2$react.useRef(null);
736
- const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // get the item's `.textContent` as default strategy for typeahead `textValue`
540
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
541
+ const [isFocused, setIsFocused] = $cnSS2$react.useState(false); // get the item's `.textContent` as default strategy for typeahead `textValue`
737
542
  const [textContent, setTextContent] = $cnSS2$react.useState('');
738
543
  $cnSS2$react.useEffect(()=>{
739
544
  const menuItem = ref.current;
@@ -754,6 +559,7 @@ const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.for
754
559
  focusable: !disabled
755
560
  }), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
756
561
  role: "menuitem",
562
+ "data-highlighted": isFocused ? '' : undefined,
757
563
  "aria-disabled": disabled || undefined,
758
564
  "data-disabled": disabled ? '' : undefined
759
565
  }, itemProps, {
@@ -769,7 +575,11 @@ const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.for
769
575
  }
770
576
  })),
771
577
  onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>contentContext.onItemLeave(event)
772
- ))
578
+ )),
579
+ onFocus: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocus, ()=>setIsFocused(true)
580
+ ),
581
+ onBlur: $cnSS2$radixuiprimitive.composeEventHandlers(props.onBlur, ()=>setIsFocused(false)
582
+ )
773
583
  }))));
774
584
  });
775
585
  /* -------------------------------------------------------------------------------------------------
@@ -890,6 +700,227 @@ const $213e4d2df823067d$export$bcdda4773debf5fa = /*#__PURE__*/ $cnSS2$react.for
890
700
  /*#__PURE__*/ Object.assign($213e4d2df823067d$export$bcdda4773debf5fa, {
891
701
  displayName: $213e4d2df823067d$var$ARROW_NAME
892
702
  });
703
+ /* -------------------------------------------------------------------------------------------------
704
+ * MenuSub
705
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_NAME = 'MenuSub';
706
+ const [$213e4d2df823067d$var$MenuSubProvider, $213e4d2df823067d$var$useMenuSubContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$SUB_NAME);
707
+ const $213e4d2df823067d$export$71bdb9d1e2909932 = (props)=>{
708
+ const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props;
709
+ const parentMenuContext = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_NAME, __scopeMenu);
710
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
711
+ const [trigger, setTrigger] = $cnSS2$react.useState(null);
712
+ const [content, setContent] = $cnSS2$react.useState(null);
713
+ const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus.
714
+ $cnSS2$react.useEffect(()=>{
715
+ if (parentMenuContext.open === false) handleOpenChange(false);
716
+ return ()=>handleOpenChange(false)
717
+ ;
718
+ }, [
719
+ parentMenuContext.open,
720
+ handleOpenChange
721
+ ]);
722
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
723
+ scope: __scopeMenu,
724
+ open: open,
725
+ onOpenChange: handleOpenChange,
726
+ content: content,
727
+ onContentChange: setContent
728
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubProvider, {
729
+ scope: __scopeMenu,
730
+ contentId: $cnSS2$radixuireactid.useId(),
731
+ triggerId: $cnSS2$radixuireactid.useId(),
732
+ trigger: trigger,
733
+ onTriggerChange: setTrigger
734
+ }, children)));
735
+ };
736
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$71bdb9d1e2909932, {
737
+ displayName: $213e4d2df823067d$var$SUB_NAME
738
+ });
739
+ /* -------------------------------------------------------------------------------------------------
740
+ * MenuSubTrigger
741
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_TRIGGER_NAME = 'MenuSubTrigger';
742
+ const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
743
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
744
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
745
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
746
+ const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
747
+ const openTimerRef = $cnSS2$react.useRef(null);
748
+ const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext;
749
+ const scope = {
750
+ __scopeMenu: props.__scopeMenu
751
+ };
752
+ const clearOpenTimer = $cnSS2$react.useCallback(()=>{
753
+ if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
754
+ openTimerRef.current = null;
755
+ }, []);
756
+ $cnSS2$react.useEffect(()=>clearOpenTimer
757
+ , [
758
+ clearOpenTimer
759
+ ]);
760
+ $cnSS2$react.useEffect(()=>{
761
+ const pointerGraceTimer = pointerGraceTimerRef.current;
762
+ return ()=>{
763
+ window.clearTimeout(pointerGraceTimer);
764
+ onPointerGraceIntentChange(null);
765
+ };
766
+ }, [
767
+ pointerGraceTimerRef,
768
+ onPointerGraceIntentChange
769
+ ]);
770
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$9fa5ebd18bee4d43, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
771
+ asChild: true
772
+ }, scope), /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
773
+ id: subContext.triggerId,
774
+ "aria-haspopup": "menu",
775
+ "aria-expanded": context.open,
776
+ "aria-controls": subContext.contentId,
777
+ "data-state": $213e4d2df823067d$var$getOpenState(context.open)
778
+ }, props, {
779
+ ref: $cnSS2$radixuireactcomposerefs.composeRefs(forwardedRef, subContext.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from
780
+ ,
781
+ onClick: (event)=>{
782
+ var _props$onClick;
783
+ (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event);
784
+ if (props.disabled || event.defaultPrevented) return;
785
+ /**
786
+ * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
787
+ * and we rely heavily on `onFocusOutside` for submenus to close when switching
788
+ * between separate submenus.
789
+ */ event.currentTarget.focus();
790
+ if (!context.open) context.onOpenChange(true);
791
+ },
792
+ onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{
793
+ contentContext.onItemEnter(event);
794
+ if (event.defaultPrevented) return;
795
+ if (!props.disabled && !context.open && !openTimerRef.current) {
796
+ contentContext.onPointerGraceIntentChange(null);
797
+ openTimerRef.current = window.setTimeout(()=>{
798
+ context.onOpenChange(true);
799
+ clearOpenTimer();
800
+ }, 100);
801
+ }
802
+ })),
803
+ onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>{
804
+ var _context$content;
805
+ clearOpenTimer();
806
+ const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect();
807
+ if (contentRect) {
808
+ var _context$content2;
809
+ // TODO: make sure to update this when we change positioning logic
810
+ const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side;
811
+ const rightSide = side === 'right';
812
+ const bleed = rightSide ? -5 : 5;
813
+ const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];
814
+ const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];
815
+ contentContext.onPointerGraceIntentChange({
816
+ area: [
817
+ // consistently within polygon bounds
818
+ {
819
+ x: event.clientX + bleed,
820
+ y: event.clientY
821
+ },
822
+ {
823
+ x: contentNearEdge,
824
+ y: contentRect.top
825
+ },
826
+ {
827
+ x: contentFarEdge,
828
+ y: contentRect.top
829
+ },
830
+ {
831
+ x: contentFarEdge,
832
+ y: contentRect.bottom
833
+ },
834
+ {
835
+ x: contentNearEdge,
836
+ y: contentRect.bottom
837
+ }
838
+ ],
839
+ side: side
840
+ });
841
+ window.clearTimeout(pointerGraceTimerRef.current);
842
+ pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null)
843
+ , 300);
844
+ } else {
845
+ contentContext.onTriggerLeave(event);
846
+ if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened.
847
+ contentContext.onPointerGraceIntentChange(null);
848
+ }
849
+ })),
850
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
851
+ const isTypingAhead = contentContext.searchRef.current !== '';
852
+ if (props.disabled || isTypingAhead && event.key === ' ') return;
853
+ if ($213e4d2df823067d$var$SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
854
+ var _context$content3;
855
+ context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction
856
+ // so we ensure content is given focus again when switching to keyboard.
857
+ (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling
858
+ event.preventDefault();
859
+ }
860
+ })
861
+ })));
862
+ });
863
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$5fbbb3ba7297405f, {
864
+ displayName: $213e4d2df823067d$var$SUB_TRIGGER_NAME
865
+ });
866
+ /* -------------------------------------------------------------------------------------------------
867
+ * MenuSubContent
868
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_CONTENT_NAME = 'MenuSubContent';
869
+ const $213e4d2df823067d$export$e7142ab31822bde6 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
870
+ const portalContext = $213e4d2df823067d$var$usePortalContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
871
+ const { forceMount: forceMount = portalContext.forceMount , ...subContentProps } = props;
872
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
873
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
874
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_CONTENT_NAME, props.__scopeMenu);
875
+ const ref = $cnSS2$react.useRef(null);
876
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
877
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
878
+ scope: props.__scopeMenu
879
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
880
+ present: forceMount || context.open
881
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
882
+ scope: props.__scopeMenu
883
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
884
+ id: subContext.contentId,
885
+ "aria-labelledby": subContext.triggerId
886
+ }, subContentProps, {
887
+ ref: composedRefs,
888
+ align: "start",
889
+ side: rootContext.dir === 'rtl' ? 'left' : 'right',
890
+ disableOutsidePointerEvents: false,
891
+ disableOutsideScroll: false,
892
+ trapFocus: false,
893
+ onOpenAutoFocus: (event)=>{
894
+ var _ref$current;
895
+ // when opening a submenu, focus content for keyboard users only
896
+ if (rootContext.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
897
+ event.preventDefault();
898
+ } // The menu might close because of focusing another menu item in the parent menu. We
899
+ ,
900
+ onCloseAutoFocus: (event)=>event.preventDefault()
901
+ ,
902
+ onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>{
903
+ // We prevent closing when the trigger is focused to avoid triggering a re-open animation
904
+ // on pointer interaction.
905
+ if (event.target !== subContext.trigger) context.onOpenChange(false);
906
+ }),
907
+ onEscapeKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onEscapeKeyDown, rootContext.onClose),
908
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
909
+ // Submenu key events bubble through portals. We only care about keys in this menu.
910
+ const isKeyDownInside = event.currentTarget.contains(event.target);
911
+ const isCloseKey = $213e4d2df823067d$var$SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
912
+ if (isKeyDownInside && isCloseKey) {
913
+ var _subContext$trigger;
914
+ context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus`
915
+ (_subContext$trigger = subContext.trigger) === null || _subContext$trigger === void 0 || _subContext$trigger.focus(); // prevent window from scrolling
916
+ event.preventDefault();
917
+ }
918
+ })
919
+ })))));
920
+ });
921
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$e7142ab31822bde6, {
922
+ displayName: $213e4d2df823067d$var$SUB_CONTENT_NAME
923
+ });
893
924
  /* -----------------------------------------------------------------------------------------------*/ function $213e4d2df823067d$var$getOpenState(open) {
894
925
  return open ? 'open' : 'closed';
895
926
  }
@@ -969,9 +1000,8 @@ function $213e4d2df823067d$var$whenMouse(handler) {
969
1000
  ;
970
1001
  }
971
1002
  const $213e4d2df823067d$export$be92b6f5f03c0fe9 = $213e4d2df823067d$export$d9b273488cd8ce6f;
972
- const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932;
973
1003
  const $213e4d2df823067d$export$b688253958b8dfe7 = $213e4d2df823067d$export$9fa5ebd18bee4d43;
974
- const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f;
1004
+ const $213e4d2df823067d$export$602eac185826482c = $213e4d2df823067d$export$793392f970497feb;
975
1005
  const $213e4d2df823067d$export$7c6e2c02157bb7d2 = $213e4d2df823067d$export$479f0f2f71193efe;
976
1006
  const $213e4d2df823067d$export$eb2fcfdbd7ba97d4 = $213e4d2df823067d$export$22a631d1f72787bb;
977
1007
  const $213e4d2df823067d$export$b04be29aa201d4f5 = $213e4d2df823067d$export$dd37bec0e8a99143;
@@ -982,9 +1012,11 @@ const $213e4d2df823067d$export$371ab307eab489c0 = $213e4d2df823067d$export$69bd2
982
1012
  const $213e4d2df823067d$export$c3468e2714d175fa = $213e4d2df823067d$export$a2593e23056970a3;
983
1013
  const $213e4d2df823067d$export$1ff3c3f08ae963c0 = $213e4d2df823067d$export$1cec7dcdd713e220;
984
1014
  const $213e4d2df823067d$export$21b07c8f274aebd5 = $213e4d2df823067d$export$bcdda4773debf5fa;
1015
+ const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932;
1016
+ const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f;
1017
+ const $213e4d2df823067d$export$6d4de93b380beddf = $213e4d2df823067d$export$e7142ab31822bde6;
985
1018
 
986
1019
 
987
- $parcel$exportWildcard(module.exports, $213e4d2df823067d$exports);
988
1020
 
989
1021
 
990
1022
  //# sourceMappingURL=index.js.map