@tamagui/menu 3.0.0-beta.924.1 → 3.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/cjs/Menu.cjs +1 -0
- package/dist/cjs/Menu.native.cjs +1 -0
- package/dist/cjs/Menu.native.js +1 -0
- package/dist/cjs/Menu.native.js.map +1 -1
- package/dist/cjs/createNonNativeMenu.cjs +185 -13
- package/dist/cjs/createNonNativeMenu.native.cjs +229 -22
- package/dist/cjs/createNonNativeMenu.native.js +229 -22
- package/dist/cjs/createNonNativeMenu.native.js.map +1 -1
- package/dist/esm/Menu.mjs +1 -0
- package/dist/esm/Menu.mjs.map +1 -1
- package/dist/esm/Menu.native.js +1 -0
- package/dist/esm/Menu.native.js.map +1 -1
- package/dist/esm/createNonNativeMenu.mjs +185 -13
- package/dist/esm/createNonNativeMenu.mjs.map +1 -1
- package/dist/esm/createNonNativeMenu.native.js +229 -22
- package/dist/esm/createNonNativeMenu.native.js.map +1 -1
- package/dist/jsx/Menu.mjs +1 -0
- package/dist/jsx/Menu.mjs.map +1 -1
- package/dist/jsx/Menu.native.cjs +1 -0
- package/dist/jsx/Menu.native.js +1 -0
- package/dist/jsx/Menu.native.js.map +1 -1
- package/dist/jsx/createNonNativeMenu.mjs +185 -13
- package/dist/jsx/createNonNativeMenu.mjs.map +1 -1
- package/dist/jsx/createNonNativeMenu.native.cjs +229 -22
- package/dist/jsx/createNonNativeMenu.native.js +229 -22
- package/dist/jsx/createNonNativeMenu.native.js.map +1 -1
- package/package.json +14 -12
- package/src/Menu.tsx +1 -0
- package/src/createNonNativeMenu.tsx +273 -18
- package/src/index.tsx +2 -0
- package/types/Menu.d.ts +31 -14
- package/types/Menu.d.ts.map +1 -1
- package/types/createNonNativeMenu.d.ts +33 -33
- package/types/createNonNativeMenu.d.ts.map +1 -1
- package/types/index.d.ts +32 -14
- package/types/index.d.ts.map +1 -1
|
@@ -9,9 +9,90 @@ import { useId } from "react";
|
|
|
9
9
|
import { jsx } from "react/jsx-runtime";
|
|
10
10
|
|
|
11
11
|
const DROPDOWN_MENU_CONTEXT = "MenuContext";
|
|
12
|
+
const TriggerGroupContext = React.createContext(null);
|
|
13
|
+
const MenuTriggerGroup = createStyledHOC(View, ({ children, dir = "ltr", ...props }, forwardedRef) => {
|
|
14
|
+
const entries = React.useRef(/* @__PURE__ */ new Map());
|
|
15
|
+
const active = React.useRef(null);
|
|
16
|
+
const [tabStopId, setTabStopId] = React.useState(null);
|
|
17
|
+
const register = useEvent((entry) => {
|
|
18
|
+
entries.current.set(entry.id, entry);
|
|
19
|
+
if (!entry.disabled) setTabStopId((id) => id ?? entry.id);
|
|
20
|
+
return () => {
|
|
21
|
+
entries.current.delete(entry.id);
|
|
22
|
+
if (active.current === entry) active.current = null;
|
|
23
|
+
setTabStopId((id) => id === entry.id ? [...entries.current.values()].find((item) => !item.disabled)?.id ?? null : id);
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
const activate = useEvent((entry) => {
|
|
27
|
+
const previous = active.current;
|
|
28
|
+
active.current = entry;
|
|
29
|
+
setTabStopId(entry.id);
|
|
30
|
+
if (previous && previous.openRef !== entry.openRef && previous.openRef.current) {
|
|
31
|
+
previous.onOpenChange(false);
|
|
32
|
+
}
|
|
33
|
+
entry.activate();
|
|
34
|
+
});
|
|
35
|
+
const isOpen = useEvent(() => Boolean(active.current?.openRef.current));
|
|
36
|
+
const isActive = useEvent((openRef) => active.current?.openRef === openRef);
|
|
37
|
+
const contains = useEvent((target) => [...entries.current.values()].some((entry) => entry.ref.current?.contains(target)));
|
|
38
|
+
const move = useEvent((id, key, open) => {
|
|
39
|
+
const ordered = [...entries.current.values()].filter((entry) => !entry.disabled).sort((a, b) => {
|
|
40
|
+
const first = a.ref.current;
|
|
41
|
+
const second = b.ref.current;
|
|
42
|
+
return first && second && first.compareDocumentPosition(second) & 2 ? 1 : -1;
|
|
43
|
+
});
|
|
44
|
+
const index = ordered.findIndex((entry) => entry.id === id);
|
|
45
|
+
if (index === -1) return;
|
|
46
|
+
const step = key === "ArrowRight" === (dir === "ltr") ? 1 : -1;
|
|
47
|
+
const next = ordered[(index + step + ordered.length) % ordered.length];
|
|
48
|
+
next.ref.current?.focus?.();
|
|
49
|
+
if (open) {
|
|
50
|
+
activate(next);
|
|
51
|
+
next.onOpenChange(true);
|
|
52
|
+
requestAnimationFrame(() => next.focusContent());
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
const onFocus = useEvent((id) => setTabStopId(id));
|
|
56
|
+
const value = React.useMemo(() => ({
|
|
57
|
+
dir,
|
|
58
|
+
tabStopId,
|
|
59
|
+
register,
|
|
60
|
+
activate,
|
|
61
|
+
isOpen,
|
|
62
|
+
isActive,
|
|
63
|
+
contains,
|
|
64
|
+
move,
|
|
65
|
+
onFocus
|
|
66
|
+
}), [
|
|
67
|
+
dir,
|
|
68
|
+
tabStopId,
|
|
69
|
+
register,
|
|
70
|
+
activate,
|
|
71
|
+
isOpen,
|
|
72
|
+
isActive,
|
|
73
|
+
contains,
|
|
74
|
+
move,
|
|
75
|
+
onFocus
|
|
76
|
+
]);
|
|
77
|
+
return /* @__PURE__ */ jsx(TriggerGroupContext.Provider, {
|
|
78
|
+
value,
|
|
79
|
+
children: /* @__PURE__ */ jsx(View, {
|
|
80
|
+
flexDirection: "row",
|
|
81
|
+
role: "menubar",
|
|
82
|
+
...props,
|
|
83
|
+
...isWeb && { dir },
|
|
84
|
+
ref: forwardedRef,
|
|
85
|
+
children
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
MenuTriggerGroup.displayName = "MenuTriggerGroup";
|
|
12
90
|
function useMenuTriggerSetup(open) {
|
|
13
91
|
const triggerStateSettersRef = React.useRef(/* @__PURE__ */ new Map());
|
|
14
92
|
const activeTriggerIdRef = React.useRef(null);
|
|
93
|
+
const triggerGroupsRef = React.useRef(/* @__PURE__ */ new Map());
|
|
94
|
+
const activeGroupRef = React.useRef(null);
|
|
95
|
+
const [activeGroup, setActiveGroup] = React.useState(null);
|
|
15
96
|
const setActiveTrigger = useEvent((id) => {
|
|
16
97
|
const prevId = activeTriggerIdRef.current;
|
|
17
98
|
if (prevId === id) return;
|
|
@@ -19,18 +100,24 @@ function useMenuTriggerSetup(open) {
|
|
|
19
100
|
triggerStateSettersRef.current.get(prevId)?.(false);
|
|
20
101
|
}
|
|
21
102
|
activeTriggerIdRef.current = id;
|
|
103
|
+
activeGroupRef.current = id ? triggerGroupsRef.current.get(id) ?? null : null;
|
|
104
|
+
setActiveGroup(activeGroupRef.current);
|
|
22
105
|
if (id && open) {
|
|
23
106
|
triggerStateSettersRef.current.get(id)?.(true);
|
|
24
107
|
}
|
|
25
108
|
});
|
|
26
|
-
const registerTrigger = useEvent((id, setOpenState) => {
|
|
109
|
+
const registerTrigger = useEvent((id, setOpenState, group) => {
|
|
110
|
+
triggerGroupsRef.current.set(id, group);
|
|
27
111
|
triggerStateSettersRef.current.set(id, setOpenState);
|
|
28
112
|
setOpenState(activeTriggerIdRef.current === id && open);
|
|
29
113
|
});
|
|
30
114
|
const unregisterTrigger = useEvent((id) => {
|
|
31
115
|
triggerStateSettersRef.current.delete(id);
|
|
116
|
+
triggerGroupsRef.current.delete(id);
|
|
32
117
|
if (activeTriggerIdRef.current === id) {
|
|
33
118
|
activeTriggerIdRef.current = null;
|
|
119
|
+
activeGroupRef.current = null;
|
|
120
|
+
setActiveGroup(null);
|
|
34
121
|
}
|
|
35
122
|
});
|
|
36
123
|
React.useEffect(() => {
|
|
@@ -46,7 +133,10 @@ function useMenuTriggerSetup(open) {
|
|
|
46
133
|
return {
|
|
47
134
|
setActiveTrigger,
|
|
48
135
|
registerTrigger,
|
|
49
|
-
unregisterTrigger
|
|
136
|
+
unregisterTrigger,
|
|
137
|
+
activeTriggerIdRef,
|
|
138
|
+
activeGroupRef,
|
|
139
|
+
activeGroup
|
|
50
140
|
};
|
|
51
141
|
}
|
|
52
142
|
function createNonNativeMenu() {
|
|
@@ -55,6 +145,7 @@ function createNonNativeMenu() {
|
|
|
55
145
|
const { Provider: MenuProvider, useStyledContext: useMenuContext } = createStyledContext();
|
|
56
146
|
const MenuComp = (props) => {
|
|
57
147
|
const { scope, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true, ...rest } = props;
|
|
148
|
+
const outerGroup = React.useContext(TriggerGroupContext);
|
|
58
149
|
const triggerRef = React.useRef(null);
|
|
59
150
|
const [open = false, setOpen] = useControllableState({
|
|
60
151
|
prop: openProp,
|
|
@@ -63,7 +154,8 @@ function createNonNativeMenu() {
|
|
|
63
154
|
});
|
|
64
155
|
const openRef = React.useRef(open);
|
|
65
156
|
openRef.current = open;
|
|
66
|
-
const { setActiveTrigger, registerTrigger, unregisterTrigger } = useMenuTriggerSetup(open);
|
|
157
|
+
const { setActiveTrigger, registerTrigger, unregisterTrigger, activeTriggerIdRef, activeGroupRef, activeGroup } = useMenuTriggerSetup(open);
|
|
158
|
+
const effectiveModal = outerGroup || activeGroup ? false : modal;
|
|
67
159
|
return /* @__PURE__ */ jsx(MenuProvider, {
|
|
68
160
|
scope,
|
|
69
161
|
triggerId: useId(),
|
|
@@ -72,16 +164,18 @@ function createNonNativeMenu() {
|
|
|
72
164
|
openRef,
|
|
73
165
|
onOpenChange: React.useCallback((nextOpen) => setOpen(nextOpen), [setOpen]),
|
|
74
166
|
onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
|
|
75
|
-
modal,
|
|
167
|
+
modal: effectiveModal,
|
|
76
168
|
setActiveTrigger,
|
|
77
169
|
registerTrigger,
|
|
78
170
|
unregisterTrigger,
|
|
171
|
+
activeTriggerIdRef,
|
|
172
|
+
activeGroupRef,
|
|
79
173
|
children: /* @__PURE__ */ jsx(Menu, {
|
|
80
174
|
scope: scope || "MenuContext",
|
|
81
175
|
open,
|
|
82
176
|
onOpenChange: setOpen,
|
|
83
|
-
dir,
|
|
84
|
-
modal,
|
|
177
|
+
dir: dir ?? outerGroup?.dir,
|
|
178
|
+
modal: effectiveModal,
|
|
85
179
|
...rest,
|
|
86
180
|
children
|
|
87
181
|
})
|
|
@@ -93,6 +187,7 @@ function createNonNativeMenu() {
|
|
|
93
187
|
const MenuTrigger = createStyledHOC(View, (props, forwardedRef) => {
|
|
94
188
|
const { scope, asChild, children, disabled = false, onKeydown, onKeyDown = onKeydown, ...triggerProps } = props;
|
|
95
189
|
const context = useMenuContext(scope);
|
|
190
|
+
const group = React.useContext(TriggerGroupContext);
|
|
96
191
|
const popperCtx = usePopperContextSlow(scope || "MenuContext");
|
|
97
192
|
const Comp = asChild ? Slot : View;
|
|
98
193
|
const isTouchDevice = useIsTouchDevice();
|
|
@@ -101,12 +196,13 @@ function createNonNativeMenu() {
|
|
|
101
196
|
const [triggerOpen, setTriggerOpen] = React.useState(false);
|
|
102
197
|
const { registerTrigger, unregisterTrigger } = context;
|
|
103
198
|
React.useEffect(() => {
|
|
104
|
-
registerTrigger(triggerId, setTriggerOpen);
|
|
199
|
+
registerTrigger(triggerId, setTriggerOpen, group);
|
|
105
200
|
return () => unregisterTrigger(triggerId);
|
|
106
201
|
}, [
|
|
107
202
|
registerTrigger,
|
|
108
203
|
unregisterTrigger,
|
|
109
|
-
triggerId
|
|
204
|
+
triggerId,
|
|
205
|
+
group?.register
|
|
110
206
|
]);
|
|
111
207
|
const activateSelf = React.useCallback(() => {
|
|
112
208
|
context.setActiveTrigger(triggerId);
|
|
@@ -123,13 +219,39 @@ function createNonNativeMenu() {
|
|
|
123
219
|
triggerId,
|
|
124
220
|
popperCtx
|
|
125
221
|
]);
|
|
222
|
+
const activate = useEvent(activateSelf);
|
|
223
|
+
const focusContent = useEvent(() => {
|
|
224
|
+
document.getElementById(context.contentId)?.querySelector("[role^=\"menuitem\"]:not([data-disabled])")?.focus();
|
|
225
|
+
});
|
|
226
|
+
const entry = React.useRef(null);
|
|
227
|
+
if (!entry.current) {
|
|
228
|
+
entry.current = {
|
|
229
|
+
id: triggerId,
|
|
230
|
+
ref: triggerElRef,
|
|
231
|
+
openRef: context.openRef,
|
|
232
|
+
disabled,
|
|
233
|
+
activate,
|
|
234
|
+
focusContent,
|
|
235
|
+
onOpenChange: context.onOpenChange
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
entry.current.disabled = disabled;
|
|
239
|
+
entry.current.onOpenChange = context.onOpenChange;
|
|
240
|
+
const registerGroup = group?.register;
|
|
241
|
+
React.useEffect(() => registerGroup?.(entry.current), [registerGroup]);
|
|
242
|
+
const openSelf = () => {
|
|
243
|
+
if (group) group.activate(entry.current);
|
|
244
|
+
else activateSelf();
|
|
245
|
+
};
|
|
246
|
+
const shouldRejectHover = () => disabled || context.openRef.current && context.activeTriggerIdRef.current !== triggerId && !group?.isActive(context.openRef);
|
|
126
247
|
const pressEvent = isWeb ? isTouchDevice ? "onClick" : "onPointerDown" : "onPress";
|
|
127
248
|
return /* @__PURE__ */ jsx(MenuTriggerFrame, {
|
|
128
249
|
asChild: true,
|
|
129
250
|
className: `is_${TRIGGER_NAME}`,
|
|
130
251
|
scope: scope || "MenuContext",
|
|
131
252
|
children: /* @__PURE__ */ jsx(Comp, {
|
|
132
|
-
role: "button",
|
|
253
|
+
role: group ? "menuitem" : "button",
|
|
254
|
+
tabIndex: group ? group.tabStopId === triggerId ? 0 : -1 : void 0,
|
|
133
255
|
id: context.triggerId,
|
|
134
256
|
"aria-haspopup": "menu",
|
|
135
257
|
"aria-expanded": triggerOpen,
|
|
@@ -137,15 +259,38 @@ function createNonNativeMenu() {
|
|
|
137
259
|
"data-state": triggerOpen ? "open" : "closed",
|
|
138
260
|
"data-disabled": disabled ? "" : void 0,
|
|
139
261
|
"aria-disabled": disabled || void 0,
|
|
140
|
-
ref: composeRefs(forwardedRef, context.triggerRef, triggerElRef),
|
|
262
|
+
ref: composeRefs(forwardedRef, group ? void 0 : context.triggerRef, triggerElRef),
|
|
141
263
|
...triggerProps,
|
|
264
|
+
onFocus: composeEventHandlers(props.onFocus, () => {
|
|
265
|
+
if (!disabled) group?.onFocus(triggerId);
|
|
266
|
+
}),
|
|
267
|
+
onPointerEnter: (event) => {
|
|
268
|
+
if (shouldRejectHover()) {
|
|
269
|
+
event.preventDefault();
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
props.onPointerEnter?.(event);
|
|
273
|
+
},
|
|
274
|
+
onMouseEnter: (event) => {
|
|
275
|
+
if (shouldRejectHover()) {
|
|
276
|
+
event.preventDefault();
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
composeEventHandlers(props.onMouseEnter, () => {
|
|
280
|
+
if (group?.isOpen() && !triggerOpen) {
|
|
281
|
+
triggerElRef.current?.focus?.();
|
|
282
|
+
openSelf();
|
|
283
|
+
context.onOpenChange(true);
|
|
284
|
+
}
|
|
285
|
+
})?.(event);
|
|
286
|
+
},
|
|
142
287
|
...{ [pressEvent]: composeEventHandlers(props[pressEvent], (event) => {
|
|
143
288
|
if (!disabled) {
|
|
144
289
|
if (isWeb && event instanceof PointerEvent && event.button !== 0 && event.ctrlKey === true) return;
|
|
145
290
|
if (context.openRef.current) {
|
|
146
291
|
context.setActiveTrigger(null);
|
|
147
292
|
} else {
|
|
148
|
-
|
|
293
|
+
openSelf();
|
|
149
294
|
}
|
|
150
295
|
context.onOpenToggle();
|
|
151
296
|
if (!context.openRef.current) event.preventDefault();
|
|
@@ -153,16 +298,21 @@ function createNonNativeMenu() {
|
|
|
153
298
|
}) },
|
|
154
299
|
...isWeb && { onKeyDown: composeEventHandlers(onKeyDown, (event) => {
|
|
155
300
|
if (disabled) return;
|
|
301
|
+
if (group && ["ArrowLeft", "ArrowRight"].includes(event.key)) {
|
|
302
|
+
group.move(triggerId, event.key, group.isOpen());
|
|
303
|
+
event.preventDefault();
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
156
306
|
if (["Enter", " "].includes(event.key)) {
|
|
157
307
|
if (context.openRef.current) {
|
|
158
308
|
context.setActiveTrigger(null);
|
|
159
309
|
} else {
|
|
160
|
-
|
|
310
|
+
openSelf();
|
|
161
311
|
}
|
|
162
312
|
context.onOpenToggle();
|
|
163
313
|
}
|
|
164
314
|
if (event.key === "ArrowDown") {
|
|
165
|
-
|
|
315
|
+
openSelf();
|
|
166
316
|
context.onOpenChange(true);
|
|
167
317
|
}
|
|
168
318
|
if ([
|
|
@@ -202,7 +352,24 @@ function createNonNativeMenu() {
|
|
|
202
352
|
scope: scope || "MenuContext",
|
|
203
353
|
...contentProps,
|
|
204
354
|
ref: forwardedRef,
|
|
355
|
+
onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
|
|
356
|
+
const group = context.activeGroupRef.current;
|
|
357
|
+
if (!group || !["ArrowLeft", "ArrowRight"].includes(event.key)) return;
|
|
358
|
+
const target = event.target;
|
|
359
|
+
if (target.closest("[data-tamagui-menu-content]") !== event.currentTarget) return;
|
|
360
|
+
if (target.closest("[aria-haspopup=\"menu\"]") && event.key === (group.dir === "rtl" ? "ArrowLeft" : "ArrowRight")) return;
|
|
361
|
+
const id = context.activeTriggerIdRef.current;
|
|
362
|
+
if (id) {
|
|
363
|
+
group.move(id, event.key, true);
|
|
364
|
+
event.preventDefault();
|
|
365
|
+
}
|
|
366
|
+
}),
|
|
205
367
|
onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
|
|
368
|
+
const group = context.activeGroupRef.current;
|
|
369
|
+
if (group && !group.isActive(context.openRef)) {
|
|
370
|
+
event.cancel();
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
206
373
|
if (!hasInteractedOutsideRef.current) {
|
|
207
374
|
requestAnimationFrame(() => {
|
|
208
375
|
const activeEl = document.activeElement;
|
|
@@ -215,6 +382,10 @@ function createNonNativeMenu() {
|
|
|
215
382
|
event.cancel();
|
|
216
383
|
}),
|
|
217
384
|
onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {
|
|
385
|
+
if (context.activeGroupRef.current?.contains(event.event?.target ?? null)) {
|
|
386
|
+
event.cancel();
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
218
389
|
if (event.interaction !== "pointer" || !event.event) return;
|
|
219
390
|
const originalEvent = event.event;
|
|
220
391
|
const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
|
|
@@ -295,6 +466,7 @@ function createNonNativeMenu() {
|
|
|
295
466
|
return withStaticProperties(MenuComp, {
|
|
296
467
|
Root: MenuComp,
|
|
297
468
|
Trigger: MenuTrigger,
|
|
469
|
+
TriggerGroup: MenuTriggerGroup,
|
|
298
470
|
Portal: MenuPortal,
|
|
299
471
|
Content: MenuContent,
|
|
300
472
|
Group,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNonNativeMenu.js","names":[],"sources":["jsx/createNonNativeMenu.js"],"sourcesContent":["import { createStyledHOC } from \"@tamagui/core\";\nimport {\n createBaseMenu\n} from \"@tamagui/create-menu\";\nimport { usePopperContextSlow } from \"@tamagui/popper\";\nimport { ScrollView } from \"@tamagui/scroll-view\";\nimport { useControllableState } from \"@tamagui/use-controllable-state\";\nimport {\n composeEventHandlers,\n composeRefs,\n createStyledContext,\n isAndroid,\n isWeb,\n Slot,\n styled,\n useEvent,\n useIsTouchDevice,\n View,\n withStaticProperties\n} from \"@tamagui/web\";\nimport * as React from \"react\";\nimport { useId } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nconst DROPDOWN_MENU_CONTEXT = \"MenuContext\";\nfunction useMenuTriggerSetup(open) {\n const triggerStateSettersRef = React.useRef(/* @__PURE__ */ new Map());\n const activeTriggerIdRef = React.useRef(null);\n const setActiveTrigger = useEvent((id) => {\n const prevId = activeTriggerIdRef.current;\n if (prevId === id) return;\n if (prevId) {\n triggerStateSettersRef.current.get(prevId)?.(false);\n }\n activeTriggerIdRef.current = id;\n if (id && open) {\n triggerStateSettersRef.current.get(id)?.(true);\n }\n });\n const registerTrigger = useEvent((id, setOpenState) => {\n triggerStateSettersRef.current.set(id, setOpenState);\n setOpenState(activeTriggerIdRef.current === id && open);\n });\n const unregisterTrigger = useEvent((id) => {\n triggerStateSettersRef.current.delete(id);\n if (activeTriggerIdRef.current === id) {\n activeTriggerIdRef.current = null;\n }\n });\n React.useEffect(() => {\n if (!open) {\n setActiveTrigger(null);\n return;\n }\n const activeId = activeTriggerIdRef.current;\n if (activeId) {\n triggerStateSettersRef.current.get(activeId)?.(true);\n }\n }, [open, setActiveTrigger]);\n return { setActiveTrigger, registerTrigger, unregisterTrigger };\n}\nfunction createNonNativeMenu() {\n const { Menu } = createBaseMenu();\n const DROPDOWN_MENU_NAME = \"Menu\";\n const { Provider: MenuProvider, useStyledContext: useMenuContext } = createStyledContext();\n const MenuComp = (props) => {\n const {\n scope,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n ...rest\n } = props;\n const triggerRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n const openRef = React.useRef(open);\n openRef.current = open;\n const { setActiveTrigger, registerTrigger, unregisterTrigger } = useMenuTriggerSetup(open);\n return /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n openRef,\n onOpenChange: React.useCallback(\n (nextOpen) => setOpen(nextOpen),\n [setOpen]\n ),\n onOpenToggle: React.useCallback(\n () => setOpen((prevOpen) => !prevOpen),\n [setOpen]\n ),\n modal,\n setActiveTrigger,\n registerTrigger,\n unregisterTrigger,\n children: /* @__PURE__ */ jsx(\n Menu,\n {\n scope: scope || DROPDOWN_MENU_CONTEXT,\n open,\n onOpenChange: setOpen,\n dir,\n modal,\n ...rest,\n children\n }\n )\n }\n );\n };\n MenuComp.displayName = DROPDOWN_MENU_NAME;\n const TRIGGER_NAME = \"MenuTrigger\";\n const MenuTriggerFrame = Menu.Anchor;\n const MenuTrigger = createStyledHOC(\n View,\n (props, forwardedRef) => {\n const {\n scope,\n asChild,\n children,\n disabled = false,\n onKeydown,\n onKeyDown = onKeydown,\n ...triggerProps\n } = props;\n const context = useMenuContext(scope);\n const popperCtx = usePopperContextSlow(scope || DROPDOWN_MENU_CONTEXT);\n const Comp = asChild ? Slot : View;\n const isTouchDevice = useIsTouchDevice();\n const triggerElRef = React.useRef(null);\n const triggerId = React.useId();\n const [triggerOpen, setTriggerOpen] = React.useState(false);\n const { registerTrigger, unregisterTrigger } = context;\n React.useEffect(() => {\n registerTrigger(triggerId, setTriggerOpen);\n return () => unregisterTrigger(triggerId);\n }, [registerTrigger, unregisterTrigger, triggerId]);\n const activateSelf = React.useCallback(() => {\n context.setActiveTrigger(triggerId);\n const el = triggerElRef.current;\n if (el) {\n context.triggerRef.current = el;\n if (el instanceof HTMLElement) {\n popperCtx.refs?.setReference(el);\n requestAnimationFrame(() => popperCtx.update?.());\n }\n }\n }, [context, triggerId, popperCtx]);\n const pressEvent = isWeb ? isTouchDevice ? \"onClick\" : \"onPointerDown\" : \"onPress\";\n return /* @__PURE__ */ jsx(\n MenuTriggerFrame,\n {\n asChild: true,\n className: `is_${TRIGGER_NAME}`,\n scope: scope || DROPDOWN_MENU_CONTEXT,\n children: /* @__PURE__ */ jsx(\n Comp,\n {\n role: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": triggerOpen,\n \"aria-controls\": triggerOpen ? context.contentId : void 0,\n \"data-state\": triggerOpen ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n ref: composeRefs(forwardedRef, context.triggerRef, triggerElRef),\n ...triggerProps,\n ...{\n [pressEvent]: composeEventHandlers(\n //@ts-ignore\n props[pressEvent],\n (event) => {\n if (!disabled) {\n if (isWeb && event instanceof PointerEvent && event.button !== 0 && event.ctrlKey === true)\n return;\n if (context.openRef.current) {\n context.setActiveTrigger(null);\n } else {\n activateSelf();\n }\n context.onOpenToggle();\n if (!context.openRef.current) event.preventDefault();\n }\n }\n )\n },\n ...isWeb && {\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) {\n if (context.openRef.current) {\n context.setActiveTrigger(null);\n } else {\n activateSelf();\n }\n context.onOpenToggle();\n }\n if (event.key === \"ArrowDown\") {\n activateSelf();\n context.onOpenChange(true);\n }\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key))\n event.preventDefault();\n })\n },\n children\n }\n )\n }\n );\n }\n );\n MenuTrigger.displayName = TRIGGER_NAME;\n const PORTAL_NAME = \"MenuPortal\";\n const MenuPortal = (props) => {\n const { scope, children, ...portalProps } = props;\n const context = isAndroid ? useMenuContext(scope) : null;\n const content = isAndroid ? /* @__PURE__ */ jsx(MenuProvider, { ...context, children }) : children;\n return /* @__PURE__ */ jsx(Menu.Portal, { scope: scope || DROPDOWN_MENU_CONTEXT, ...portalProps, children: content });\n };\n MenuPortal.displayName = PORTAL_NAME;\n const CONTENT_NAME = \"MenuContent\";\n const MenuContent = createStyledHOC(\n Menu.Content,\n (props, forwardedRef) => {\n const { scope, ...contentProps } = props;\n const context = useMenuContext(scope);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n Menu.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n scope: scope || DROPDOWN_MENU_CONTEXT,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) {\n requestAnimationFrame(() => {\n const activeEl = document.activeElement;\n if (!activeEl || activeEl === document.body) {\n context.triggerRef.current?.focus();\n }\n });\n }\n hasInteractedOutsideRef.current = false;\n event.cancel();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n if (event.interaction !== \"pointer\" || !event.event) return;\n const originalEvent = event.event;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: isWeb ? {\n ...props.style,\n ...{\n \"--tamagui-menu-content-transform-origin\": \"var(--tamagui-popper-transform-origin)\",\n \"--tamagui-menu-content-available-width\": \"var(--tamagui-popper-available-width)\",\n \"--tamagui-menu-content-available-height\": \"var(--tamagui-popper-available-height)\",\n \"--tamagui-menu-trigger-width\": \"var(--tamagui-popper-anchor-width)\",\n \"--tamagui-menu-trigger-height\": \"var(--tamagui-popper-anchor-height)\"\n }\n } : props.style\n }\n );\n }\n );\n MenuContent.displayName = CONTENT_NAME;\n const DROPDOWN_MENU_SUB_NAME = \"MenuSub\";\n const MenuSub = (props) => {\n const { scope, children, open: openProp, onOpenChange, defaultOpen, ...rest } = props;\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(\n Menu.Sub,\n {\n scope: scope || DROPDOWN_MENU_CONTEXT,\n open,\n onOpenChange: setOpen,\n ...rest,\n children\n }\n );\n };\n MenuSub.displayName = DROPDOWN_MENU_SUB_NAME;\n const SUB_CONTENT_NAME = \"MenuSubContent\";\n const MenuSubContent = createStyledHOC(\n Menu.SubContent,\n (props, forwardedRef) => {\n const { scope, ...subContentProps } = props;\n return /* @__PURE__ */ jsx(\n Menu.SubContent,\n {\n scope: scope || DROPDOWN_MENU_CONTEXT,\n ...subContentProps,\n ref: forwardedRef,\n style: isWeb ? {\n ...props.style,\n ...{\n \"--tamagui-menu-content-transform-origin\": \"var(--tamagui-popper-transform-origin)\",\n \"--tamagui-menu-content-available-width\": \"var(--tamagui-popper-available-width)\",\n \"--tamagui-menu-content-available-height\": \"var(--tamagui-popper-available-height)\",\n \"--tamagui-menu-trigger-width\": \"var(--tamagui-popper-anchor-width)\",\n \"--tamagui-menu-trigger-height\": \"var(--tamagui-popper-anchor-height)\"\n }\n } : null\n }\n );\n }\n );\n MenuSubContent.displayName = SUB_CONTENT_NAME;\n const MenuScrollView = styled(ScrollView, {\n flexShrink: 1,\n alignSelf: \"stretch\",\n maxHeight: \"web:var(--tamagui-menu-content-available-height)\",\n showsHorizontalScrollIndicator: false,\n showsVerticalScrollIndicator: false\n });\n const Group = Menu.Group;\n const Label = Menu.Label;\n const Item = Menu.Item;\n const CheckboxItem = Menu.CheckboxItem;\n const RadioGroup = Menu.RadioGroup;\n const RadioItem = Menu.RadioItem;\n const ItemIndicator = Menu.ItemIndicator;\n const Separator = Menu.Separator;\n const Arrow = Menu.Arrow;\n const SubTrigger = Menu.SubTrigger;\n const ItemTitle = Menu.ItemTitle;\n const ItemSubtitle = Menu.ItemSubtitle;\n const ItemImage = Menu.ItemImage;\n const ItemIcon = Menu.ItemIcon;\n return withStaticProperties(MenuComp, {\n Root: MenuComp,\n Trigger: MenuTrigger,\n Portal: MenuPortal,\n Content: MenuContent,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub: MenuSub,\n SubTrigger,\n SubContent: MenuSubContent,\n ItemTitle,\n ItemSubtitle,\n ItemImage,\n ItemIcon,\n ScrollView: MenuScrollView\n });\n}\nexport {\n DROPDOWN_MENU_CONTEXT,\n createNonNativeMenu\n};\n//# sourceMappingURL=createNonNativeMenu.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createNonNativeMenu.js","names":[],"sources":["jsx/createNonNativeMenu.js"],"sourcesContent":["import { createStyledHOC } from \"@tamagui/core\";\nimport {\n createBaseMenu\n} from \"@tamagui/create-menu\";\nimport { usePopperContextSlow } from \"@tamagui/popper\";\nimport { ScrollView } from \"@tamagui/scroll-view\";\nimport { useControllableState } from \"@tamagui/use-controllable-state\";\nimport {\n composeEventHandlers,\n composeRefs,\n createStyledContext,\n isAndroid,\n isWeb,\n Slot,\n styled,\n useEvent,\n useIsTouchDevice,\n View,\n withStaticProperties\n} from \"@tamagui/web\";\nimport * as React from \"react\";\nimport { useId } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nconst DROPDOWN_MENU_CONTEXT = \"MenuContext\";\nconst TriggerGroupContext = React.createContext(null);\nconst MenuTriggerGroup = createStyledHOC(\n View,\n ({ children, dir = \"ltr\", ...props }, forwardedRef) => {\n const entries = React.useRef(/* @__PURE__ */ new Map());\n const active = React.useRef(null);\n const [tabStopId, setTabStopId] = React.useState(null);\n const register = useEvent((entry) => {\n entries.current.set(entry.id, entry);\n if (!entry.disabled) setTabStopId((id) => id ?? entry.id);\n return () => {\n entries.current.delete(entry.id);\n if (active.current === entry) active.current = null;\n setTabStopId(\n (id) => id === entry.id ? [...entries.current.values()].find((item) => !item.disabled)?.id ?? null : id\n );\n };\n });\n const activate = useEvent((entry) => {\n const previous = active.current;\n active.current = entry;\n setTabStopId(entry.id);\n if (previous && previous.openRef !== entry.openRef && previous.openRef.current) {\n previous.onOpenChange(false);\n }\n entry.activate();\n });\n const isOpen = useEvent(() => Boolean(active.current?.openRef.current));\n const isActive = useEvent(\n (openRef) => active.current?.openRef === openRef\n );\n const contains = useEvent(\n (target) => [...entries.current.values()].some(\n (entry) => entry.ref.current?.contains(target)\n )\n );\n const move = useEvent((id, key, open) => {\n const ordered = [...entries.current.values()].filter((entry) => !entry.disabled).sort((a, b) => {\n const first = a.ref.current;\n const second = b.ref.current;\n return first && second && first.compareDocumentPosition(second) & 2 ? 1 : -1;\n });\n const index = ordered.findIndex((entry) => entry.id === id);\n if (index === -1) return;\n const step = key === \"ArrowRight\" === (dir === \"ltr\") ? 1 : -1;\n const next = ordered[(index + step + ordered.length) % ordered.length];\n next.ref.current?.focus?.();\n if (open) {\n activate(next);\n next.onOpenChange(true);\n requestAnimationFrame(() => next.focusContent());\n }\n });\n const onFocus = useEvent((id) => setTabStopId(id));\n const value = React.useMemo(\n () => ({\n dir,\n tabStopId,\n register,\n activate,\n isOpen,\n isActive,\n contains,\n move,\n onFocus\n }),\n [dir, tabStopId, register, activate, isOpen, isActive, contains, move, onFocus]\n );\n return /* @__PURE__ */ jsx(TriggerGroupContext.Provider, { value, children: /* @__PURE__ */ jsx(\n View,\n {\n flexDirection: \"row\",\n role: \"menubar\",\n ...props,\n ...isWeb && { dir },\n ref: forwardedRef,\n children\n }\n ) });\n }\n);\nMenuTriggerGroup.displayName = \"MenuTriggerGroup\";\nfunction useMenuTriggerSetup(open) {\n const triggerStateSettersRef = React.useRef(/* @__PURE__ */ new Map());\n const activeTriggerIdRef = React.useRef(null);\n const triggerGroupsRef = React.useRef(\n /* @__PURE__ */ new Map()\n );\n const activeGroupRef = React.useRef(null);\n const [activeGroup, setActiveGroup] = React.useState(\n null\n );\n const setActiveTrigger = useEvent((id) => {\n const prevId = activeTriggerIdRef.current;\n if (prevId === id) return;\n if (prevId) {\n triggerStateSettersRef.current.get(prevId)?.(false);\n }\n activeTriggerIdRef.current = id;\n activeGroupRef.current = id ? triggerGroupsRef.current.get(id) ?? null : null;\n setActiveGroup(activeGroupRef.current);\n if (id && open) {\n triggerStateSettersRef.current.get(id)?.(true);\n }\n });\n const registerTrigger = useEvent(\n (id, setOpenState, group) => {\n triggerGroupsRef.current.set(id, group);\n triggerStateSettersRef.current.set(id, setOpenState);\n setOpenState(activeTriggerIdRef.current === id && open);\n }\n );\n const unregisterTrigger = useEvent((id) => {\n triggerStateSettersRef.current.delete(id);\n triggerGroupsRef.current.delete(id);\n if (activeTriggerIdRef.current === id) {\n activeTriggerIdRef.current = null;\n activeGroupRef.current = null;\n setActiveGroup(null);\n }\n });\n React.useEffect(() => {\n if (!open) {\n setActiveTrigger(null);\n return;\n }\n const activeId = activeTriggerIdRef.current;\n if (activeId) {\n triggerStateSettersRef.current.get(activeId)?.(true);\n }\n }, [open, setActiveTrigger]);\n return {\n setActiveTrigger,\n registerTrigger,\n unregisterTrigger,\n activeTriggerIdRef,\n activeGroupRef,\n activeGroup\n };\n}\nfunction createNonNativeMenu() {\n const { Menu } = createBaseMenu();\n const DROPDOWN_MENU_NAME = \"Menu\";\n const { Provider: MenuProvider, useStyledContext: useMenuContext } = createStyledContext();\n const MenuComp = (props) => {\n const {\n scope,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n ...rest\n } = props;\n const outerGroup = React.useContext(TriggerGroupContext);\n const triggerRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n const openRef = React.useRef(open);\n openRef.current = open;\n const {\n setActiveTrigger,\n registerTrigger,\n unregisterTrigger,\n activeTriggerIdRef,\n activeGroupRef,\n activeGroup\n } = useMenuTriggerSetup(open);\n const effectiveModal = outerGroup || activeGroup ? false : modal;\n return /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n openRef,\n onOpenChange: React.useCallback(\n (nextOpen) => setOpen(nextOpen),\n [setOpen]\n ),\n onOpenToggle: React.useCallback(\n () => setOpen((prevOpen) => !prevOpen),\n [setOpen]\n ),\n modal: effectiveModal,\n setActiveTrigger,\n registerTrigger,\n unregisterTrigger,\n activeTriggerIdRef,\n activeGroupRef,\n children: /* @__PURE__ */ jsx(\n Menu,\n {\n scope: scope || DROPDOWN_MENU_CONTEXT,\n open,\n onOpenChange: setOpen,\n dir: dir ?? outerGroup?.dir,\n modal: effectiveModal,\n ...rest,\n children\n }\n )\n }\n );\n };\n MenuComp.displayName = DROPDOWN_MENU_NAME;\n const TRIGGER_NAME = \"MenuTrigger\";\n const MenuTriggerFrame = Menu.Anchor;\n const MenuTrigger = createStyledHOC(\n View,\n (props, forwardedRef) => {\n const {\n scope,\n asChild,\n children,\n disabled = false,\n onKeydown,\n onKeyDown = onKeydown,\n ...triggerProps\n } = props;\n const context = useMenuContext(scope);\n const group = React.useContext(TriggerGroupContext);\n const popperCtx = usePopperContextSlow(scope || DROPDOWN_MENU_CONTEXT);\n const Comp = asChild ? Slot : View;\n const isTouchDevice = useIsTouchDevice();\n const triggerElRef = React.useRef(null);\n const triggerId = React.useId();\n const [triggerOpen, setTriggerOpen] = React.useState(false);\n const { registerTrigger, unregisterTrigger } = context;\n React.useEffect(() => {\n registerTrigger(triggerId, setTriggerOpen, group);\n return () => unregisterTrigger(triggerId);\n }, [registerTrigger, unregisterTrigger, triggerId, group?.register]);\n const activateSelf = React.useCallback(() => {\n context.setActiveTrigger(triggerId);\n const el = triggerElRef.current;\n if (el) {\n context.triggerRef.current = el;\n if (el instanceof HTMLElement) {\n popperCtx.refs?.setReference(el);\n requestAnimationFrame(() => popperCtx.update?.());\n }\n }\n }, [context, triggerId, popperCtx]);\n const activate = useEvent(activateSelf);\n const focusContent = useEvent(() => {\n document.getElementById(context.contentId)?.querySelector('[role^=\"menuitem\"]:not([data-disabled])')?.focus();\n });\n const entry = React.useRef(null);\n if (!entry.current) {\n entry.current = {\n id: triggerId,\n ref: triggerElRef,\n openRef: context.openRef,\n disabled,\n activate,\n focusContent,\n onOpenChange: context.onOpenChange\n };\n }\n entry.current.disabled = disabled;\n entry.current.onOpenChange = context.onOpenChange;\n const registerGroup = group?.register;\n React.useEffect(() => registerGroup?.(entry.current), [registerGroup]);\n const openSelf = () => {\n if (group) group.activate(entry.current);\n else activateSelf();\n };\n const shouldRejectHover = () => disabled || context.openRef.current && context.activeTriggerIdRef.current !== triggerId && !group?.isActive(context.openRef);\n const pressEvent = isWeb ? isTouchDevice ? \"onClick\" : \"onPointerDown\" : \"onPress\";\n return /* @__PURE__ */ jsx(\n MenuTriggerFrame,\n {\n asChild: true,\n className: `is_${TRIGGER_NAME}`,\n scope: scope || DROPDOWN_MENU_CONTEXT,\n children: /* @__PURE__ */ jsx(\n Comp,\n {\n role: group ? \"menuitem\" : \"button\",\n tabIndex: group ? group.tabStopId === triggerId ? 0 : -1 : void 0,\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": triggerOpen,\n \"aria-controls\": triggerOpen ? context.contentId : void 0,\n \"data-state\": triggerOpen ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n ref: composeRefs(\n forwardedRef,\n group ? void 0 : context.triggerRef,\n triggerElRef\n ),\n ...triggerProps,\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!disabled) group?.onFocus(triggerId);\n }),\n onPointerEnter: (event) => {\n if (shouldRejectHover()) {\n event.preventDefault();\n return;\n }\n props.onPointerEnter?.(event);\n },\n onMouseEnter: (event) => {\n if (shouldRejectHover()) {\n event.preventDefault();\n return;\n }\n composeEventHandlers(props.onMouseEnter, () => {\n if (group?.isOpen() && !triggerOpen) {\n triggerElRef.current?.focus?.();\n openSelf();\n context.onOpenChange(true);\n }\n })?.(event);\n },\n ...{\n [pressEvent]: composeEventHandlers(\n //@ts-ignore\n props[pressEvent],\n (event) => {\n if (!disabled) {\n if (isWeb && event instanceof PointerEvent && event.button !== 0 && event.ctrlKey === true)\n return;\n if (context.openRef.current) {\n context.setActiveTrigger(null);\n } else {\n openSelf();\n }\n context.onOpenToggle();\n if (!context.openRef.current) event.preventDefault();\n }\n }\n )\n },\n ...isWeb && {\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (disabled) return;\n if (group && [\"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\n group.move(triggerId, event.key, group.isOpen());\n event.preventDefault();\n return;\n }\n if ([\"Enter\", \" \"].includes(event.key)) {\n if (context.openRef.current) {\n context.setActiveTrigger(null);\n } else {\n openSelf();\n }\n context.onOpenToggle();\n }\n if (event.key === \"ArrowDown\") {\n openSelf();\n context.onOpenChange(true);\n }\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key))\n event.preventDefault();\n })\n },\n children\n }\n )\n }\n );\n }\n );\n MenuTrigger.displayName = TRIGGER_NAME;\n const PORTAL_NAME = \"MenuPortal\";\n const MenuPortal = (props) => {\n const { scope, children, ...portalProps } = props;\n const context = isAndroid ? useMenuContext(scope) : null;\n const content = isAndroid ? /* @__PURE__ */ jsx(MenuProvider, { ...context, children }) : children;\n return /* @__PURE__ */ jsx(Menu.Portal, { scope: scope || DROPDOWN_MENU_CONTEXT, ...portalProps, children: content });\n };\n MenuPortal.displayName = PORTAL_NAME;\n const CONTENT_NAME = \"MenuContent\";\n const MenuContent = createStyledHOC(\n Menu.Content,\n (props, forwardedRef) => {\n const { scope, ...contentProps } = props;\n const context = useMenuContext(scope);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n Menu.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n scope: scope || DROPDOWN_MENU_CONTEXT,\n ...contentProps,\n ref: forwardedRef,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const group = context.activeGroupRef.current;\n if (!group || ![\"ArrowLeft\", \"ArrowRight\"].includes(event.key)) return;\n const target = event.target;\n if (target.closest(\"[data-tamagui-menu-content]\") !== event.currentTarget)\n return;\n if (target.closest('[aria-haspopup=\"menu\"]') && event.key === (group.dir === \"rtl\" ? \"ArrowLeft\" : \"ArrowRight\"))\n return;\n const id = context.activeTriggerIdRef.current;\n if (id) {\n group.move(id, event.key, true);\n event.preventDefault();\n }\n }),\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n const group = context.activeGroupRef.current;\n if (group && !group.isActive(context.openRef)) {\n event.cancel();\n return;\n }\n if (!hasInteractedOutsideRef.current) {\n requestAnimationFrame(() => {\n const activeEl = document.activeElement;\n if (!activeEl || activeEl === document.body) {\n context.triggerRef.current?.focus();\n }\n });\n }\n hasInteractedOutsideRef.current = false;\n event.cancel();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n if (context.activeGroupRef.current?.contains(event.event?.target ?? null)) {\n event.cancel();\n return;\n }\n if (event.interaction !== \"pointer\" || !event.event) return;\n const originalEvent = event.event;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: isWeb ? {\n ...props.style,\n ...{\n \"--tamagui-menu-content-transform-origin\": \"var(--tamagui-popper-transform-origin)\",\n \"--tamagui-menu-content-available-width\": \"var(--tamagui-popper-available-width)\",\n \"--tamagui-menu-content-available-height\": \"var(--tamagui-popper-available-height)\",\n \"--tamagui-menu-trigger-width\": \"var(--tamagui-popper-anchor-width)\",\n \"--tamagui-menu-trigger-height\": \"var(--tamagui-popper-anchor-height)\"\n }\n } : props.style\n }\n );\n }\n );\n MenuContent.displayName = CONTENT_NAME;\n const DROPDOWN_MENU_SUB_NAME = \"MenuSub\";\n const MenuSub = (props) => {\n const { scope, children, open: openProp, onOpenChange, defaultOpen, ...rest } = props;\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(\n Menu.Sub,\n {\n scope: scope || DROPDOWN_MENU_CONTEXT,\n open,\n onOpenChange: setOpen,\n ...rest,\n children\n }\n );\n };\n MenuSub.displayName = DROPDOWN_MENU_SUB_NAME;\n const SUB_CONTENT_NAME = \"MenuSubContent\";\n const MenuSubContent = createStyledHOC(\n Menu.SubContent,\n (props, forwardedRef) => {\n const { scope, ...subContentProps } = props;\n return /* @__PURE__ */ jsx(\n Menu.SubContent,\n {\n scope: scope || DROPDOWN_MENU_CONTEXT,\n ...subContentProps,\n ref: forwardedRef,\n style: isWeb ? {\n ...props.style,\n ...{\n \"--tamagui-menu-content-transform-origin\": \"var(--tamagui-popper-transform-origin)\",\n \"--tamagui-menu-content-available-width\": \"var(--tamagui-popper-available-width)\",\n \"--tamagui-menu-content-available-height\": \"var(--tamagui-popper-available-height)\",\n \"--tamagui-menu-trigger-width\": \"var(--tamagui-popper-anchor-width)\",\n \"--tamagui-menu-trigger-height\": \"var(--tamagui-popper-anchor-height)\"\n }\n } : null\n }\n );\n }\n );\n MenuSubContent.displayName = SUB_CONTENT_NAME;\n const MenuScrollView = styled(ScrollView, {\n flexShrink: 1,\n alignSelf: \"stretch\",\n maxHeight: \"web:var(--tamagui-menu-content-available-height)\",\n showsHorizontalScrollIndicator: false,\n showsVerticalScrollIndicator: false\n });\n const Group = Menu.Group;\n const Label = Menu.Label;\n const Item = Menu.Item;\n const CheckboxItem = Menu.CheckboxItem;\n const RadioGroup = Menu.RadioGroup;\n const RadioItem = Menu.RadioItem;\n const ItemIndicator = Menu.ItemIndicator;\n const Separator = Menu.Separator;\n const Arrow = Menu.Arrow;\n const SubTrigger = Menu.SubTrigger;\n const ItemTitle = Menu.ItemTitle;\n const ItemSubtitle = Menu.ItemSubtitle;\n const ItemImage = Menu.ItemImage;\n const ItemIcon = Menu.ItemIcon;\n return withStaticProperties(MenuComp, {\n Root: MenuComp,\n Trigger: MenuTrigger,\n TriggerGroup: MenuTriggerGroup,\n Portal: MenuPortal,\n Content: MenuContent,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub: MenuSub,\n SubTrigger,\n SubContent: MenuSubContent,\n ItemTitle,\n ItemSubtitle,\n ItemImage,\n ItemIcon,\n ScrollView: MenuScrollView\n });\n}\nexport {\n DROPDOWN_MENU_CONTEXT,\n createNonNativeMenu\n};\n//# sourceMappingURL=createNonNativeMenu.js.map\n"],"mappings":"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"}
|