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