@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.
Files changed (36) hide show
  1. package/dist/cjs/Menu.cjs +1 -0
  2. package/dist/cjs/Menu.native.cjs +1 -0
  3. package/dist/cjs/Menu.native.js +1 -0
  4. package/dist/cjs/Menu.native.js.map +1 -1
  5. package/dist/cjs/createNonNativeMenu.cjs +185 -13
  6. package/dist/cjs/createNonNativeMenu.native.cjs +229 -22
  7. package/dist/cjs/createNonNativeMenu.native.js +229 -22
  8. package/dist/cjs/createNonNativeMenu.native.js.map +1 -1
  9. package/dist/esm/Menu.mjs +1 -0
  10. package/dist/esm/Menu.mjs.map +1 -1
  11. package/dist/esm/Menu.native.js +1 -0
  12. package/dist/esm/Menu.native.js.map +1 -1
  13. package/dist/esm/createNonNativeMenu.mjs +185 -13
  14. package/dist/esm/createNonNativeMenu.mjs.map +1 -1
  15. package/dist/esm/createNonNativeMenu.native.js +229 -22
  16. package/dist/esm/createNonNativeMenu.native.js.map +1 -1
  17. package/dist/jsx/Menu.mjs +1 -0
  18. package/dist/jsx/Menu.mjs.map +1 -1
  19. package/dist/jsx/Menu.native.cjs +1 -0
  20. package/dist/jsx/Menu.native.js +1 -0
  21. package/dist/jsx/Menu.native.js.map +1 -1
  22. package/dist/jsx/createNonNativeMenu.mjs +185 -13
  23. package/dist/jsx/createNonNativeMenu.mjs.map +1 -1
  24. package/dist/jsx/createNonNativeMenu.native.cjs +229 -22
  25. package/dist/jsx/createNonNativeMenu.native.js +229 -22
  26. package/dist/jsx/createNonNativeMenu.native.js.map +1 -1
  27. package/package.json +14 -12
  28. package/src/Menu.tsx +1 -0
  29. package/src/createNonNativeMenu.tsx +273 -18
  30. package/src/index.tsx +2 -0
  31. package/types/Menu.d.ts +31 -14
  32. package/types/Menu.d.ts.map +1 -1
  33. package/types/createNonNativeMenu.d.ts +33 -33
  34. package/types/createNonNativeMenu.d.ts.map +1 -1
  35. package/types/index.d.ts +32 -14
  36. 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
- activateSelf();
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
- activateSelf();
310
+ openSelf();
161
311
  }
162
312
  context.onOpenToggle();
163
313
  }
164
314
  if (event.key === "ArrowDown") {
165
- activateSelf();
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":["esm/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":["esm/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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"}