@tamagui/context-menu 2.0.0-1

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 (61) hide show
  1. package/dist/cjs/ContextMenu.cjs +182 -0
  2. package/dist/cjs/ContextMenu.js +145 -0
  3. package/dist/cjs/ContextMenu.js.map +6 -0
  4. package/dist/cjs/ContextMenu.native.js +191 -0
  5. package/dist/cjs/ContextMenu.native.js.map +1 -0
  6. package/dist/cjs/createNonNativeContextMenu.cjs +394 -0
  7. package/dist/cjs/createNonNativeContextMenu.js +318 -0
  8. package/dist/cjs/createNonNativeContextMenu.js.map +6 -0
  9. package/dist/cjs/createNonNativeContextMenu.native.js +420 -0
  10. package/dist/cjs/createNonNativeContextMenu.native.js.map +1 -0
  11. package/dist/cjs/index.cjs +39 -0
  12. package/dist/cjs/index.js +32 -0
  13. package/dist/cjs/index.js.map +6 -0
  14. package/dist/cjs/index.native.js +42 -0
  15. package/dist/cjs/index.native.js.map +1 -0
  16. package/dist/esm/ContextMenu.js +127 -0
  17. package/dist/esm/ContextMenu.js.map +6 -0
  18. package/dist/esm/ContextMenu.mjs +148 -0
  19. package/dist/esm/ContextMenu.mjs.map +1 -0
  20. package/dist/esm/ContextMenu.native.js +154 -0
  21. package/dist/esm/ContextMenu.native.js.map +1 -0
  22. package/dist/esm/createNonNativeContextMenu.js +307 -0
  23. package/dist/esm/createNonNativeContextMenu.js.map +6 -0
  24. package/dist/esm/createNonNativeContextMenu.mjs +359 -0
  25. package/dist/esm/createNonNativeContextMenu.mjs.map +1 -0
  26. package/dist/esm/createNonNativeContextMenu.native.js +382 -0
  27. package/dist/esm/createNonNativeContextMenu.native.js.map +1 -0
  28. package/dist/esm/index.js +18 -0
  29. package/dist/esm/index.js.map +6 -0
  30. package/dist/esm/index.mjs +16 -0
  31. package/dist/esm/index.mjs.map +1 -0
  32. package/dist/esm/index.native.js +16 -0
  33. package/dist/esm/index.native.js.map +1 -0
  34. package/dist/jsx/ContextMenu.js +127 -0
  35. package/dist/jsx/ContextMenu.js.map +6 -0
  36. package/dist/jsx/ContextMenu.mjs +148 -0
  37. package/dist/jsx/ContextMenu.mjs.map +1 -0
  38. package/dist/jsx/ContextMenu.native.js +191 -0
  39. package/dist/jsx/ContextMenu.native.js.map +1 -0
  40. package/dist/jsx/createNonNativeContextMenu.js +307 -0
  41. package/dist/jsx/createNonNativeContextMenu.js.map +6 -0
  42. package/dist/jsx/createNonNativeContextMenu.mjs +359 -0
  43. package/dist/jsx/createNonNativeContextMenu.mjs.map +1 -0
  44. package/dist/jsx/createNonNativeContextMenu.native.js +420 -0
  45. package/dist/jsx/createNonNativeContextMenu.native.js.map +1 -0
  46. package/dist/jsx/index.js +18 -0
  47. package/dist/jsx/index.js.map +6 -0
  48. package/dist/jsx/index.mjs +16 -0
  49. package/dist/jsx/index.mjs.map +1 -0
  50. package/dist/jsx/index.native.js +42 -0
  51. package/dist/jsx/index.native.js.map +1 -0
  52. package/package.json +56 -0
  53. package/src/ContextMenu.tsx +187 -0
  54. package/src/createNonNativeContextMenu.tsx +607 -0
  55. package/src/index.tsx +17 -0
  56. package/types/ContextMenu.d.ts +98 -0
  57. package/types/ContextMenu.d.ts.map +1 -0
  58. package/types/createNonNativeContextMenu.d.ts +123 -0
  59. package/types/createNonNativeContextMenu.d.ts.map +1 -0
  60. package/types/index.d.ts +96 -0
  61. package/types/index.d.ts.map +1 -0
@@ -0,0 +1,307 @@
1
+ import { createBaseMenu } from "@tamagui/create-menu";
2
+ import { useControllableState } from "@tamagui/use-controllable-state";
3
+ import {
4
+ composeEventHandlers,
5
+ composeRefs,
6
+ createStyledContext,
7
+ isAndroid,
8
+ isWeb,
9
+ Slot,
10
+ View,
11
+ withStaticProperties
12
+ } from "@tamagui/web";
13
+ import React, { useId } from "react";
14
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
+ const CONTEXTMENU_CONTEXT = "ContextMenuContext";
16
+ function createNonNativeContextMenu(params) {
17
+ const { Menu } = createBaseMenu(params), CONTEXT_MENU_NAME = "ContextMenu", { Provider: ContextMenuProvider, useStyledContext: useContextMenuContext } = createStyledContext(), ContextMenuComp = (props) => {
18
+ const { scope, children, onOpenChange, dir, modal = !0, ...rest } = props, [open, setOpen] = React.useState(!1), triggerRef = React.useRef(null), handleOpenChange = React.useCallback(
19
+ (open2) => {
20
+ setOpen(open2), onOpenChange?.(open2);
21
+ },
22
+ [onOpenChange]
23
+ );
24
+ return /* @__PURE__ */ jsx(
25
+ ContextMenuProvider,
26
+ {
27
+ scope,
28
+ triggerId: useId(),
29
+ triggerRef,
30
+ contentId: useId(),
31
+ open,
32
+ onOpenChange: handleOpenChange,
33
+ modal,
34
+ children: /* @__PURE__ */ jsx(
35
+ Menu,
36
+ {
37
+ scope: scope || CONTEXTMENU_CONTEXT,
38
+ dir,
39
+ open,
40
+ onOpenChange: handleOpenChange,
41
+ modal,
42
+ ...rest,
43
+ children
44
+ }
45
+ )
46
+ }
47
+ );
48
+ };
49
+ ContextMenuComp.displayName = CONTEXT_MENU_NAME;
50
+ const TRIGGER_NAME = "ContextMenuTrigger", ContextMenuTrigger = View.styleable(
51
+ (props, forwardedRef) => {
52
+ const { scope, style, disabled = !1, asChild, children, ...triggerProps } = props, context = useContextMenuContext(scope), pointRef = React.useRef({ x: 0, y: 0 }), virtualRef = React.useMemo(
53
+ () => ({
54
+ current: {
55
+ getBoundingClientRect: () => isWeb ? DOMRect.fromRect({ width: 0, height: 0, ...pointRef.current }) : { width: 0, height: 0, top: 0, left: 0, ...pointRef.current },
56
+ ...!isWeb && {
57
+ measure: (c) => c(pointRef.current.x, pointRef.current.y, 0, 0),
58
+ measureInWindow: (c) => c(pointRef.current.x, pointRef.current.y, 0, 0)
59
+ }
60
+ }
61
+ }),
62
+ [pointRef.current.x, pointRef.current.y]
63
+ ), longPressTimerRef = React.useRef(0), clearLongPress = React.useCallback(
64
+ () => window.clearTimeout(longPressTimerRef.current),
65
+ []
66
+ ), handleOpen = (event) => {
67
+ isWeb && (event instanceof MouseEvent || event instanceof PointerEvent) ? pointRef.current = { x: event.clientX, y: event.clientY } : pointRef.current = {
68
+ x: event.nativeEvent.pageX,
69
+ y: event.nativeEvent.pageY
70
+ }, context.onOpenChange(!0);
71
+ };
72
+ React.useEffect(() => clearLongPress, [clearLongPress]), React.useEffect(
73
+ () => void (disabled && clearLongPress()),
74
+ [disabled, clearLongPress]
75
+ );
76
+ const Comp = asChild ? Slot : View;
77
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
78
+ /* @__PURE__ */ jsx(Menu.Anchor, { scope: scope || CONTEXTMENU_CONTEXT, virtualRef }),
79
+ /* @__PURE__ */ jsx(
80
+ Comp,
81
+ {
82
+ tag: "span",
83
+ componentName: TRIGGER_NAME,
84
+ id: context.triggerId,
85
+ "data-state": context.open ? "open" : "closed",
86
+ "data-disabled": disabled ? "" : void 0,
87
+ ...triggerProps,
88
+ ref: composeRefs(forwardedRef, context.triggerRef),
89
+ style: isWeb ? { WebkitTouchCallout: "none", ...style } : null,
90
+ ...isWeb && {
91
+ onContextMenu: disabled ? props.onContextMenu : composeEventHandlers(props.onContextMenu, (event) => {
92
+ clearLongPress(), handleOpen(event), event.preventDefault();
93
+ }),
94
+ onPointerDown: disabled ? props.onPointerDown : composeEventHandlers(props.onPointerDown, (event) => {
95
+ event.pointerType !== "mouse" && (clearLongPress(), longPressTimerRef.current = window.setTimeout(
96
+ () => handleOpen(event),
97
+ 700
98
+ ));
99
+ }),
100
+ onPointerMove: disabled ? props.onPointerMove : composeEventHandlers(props.onPointerMove, (event) => {
101
+ event.pointerType !== "mouse" && clearLongPress();
102
+ }),
103
+ onPointerCancel: disabled ? props.onPointerCancel : composeEventHandlers(props.onPointerCancel, (event) => {
104
+ event.pointerType !== "mouse" && clearLongPress();
105
+ }),
106
+ onPointerUp: disabled ? props.onPointerUp : composeEventHandlers(props.onPointerUp, (event) => {
107
+ event.pointerType !== "mouse" && clearLongPress();
108
+ })
109
+ },
110
+ ...!isWeb && {
111
+ onLongPress: disabled ? props.onLongPress : composeEventHandlers(props.onLongPress, (event) => {
112
+ clearLongPress(), handleOpen(event), event.preventDefault();
113
+ })
114
+ },
115
+ children
116
+ }
117
+ )
118
+ ] });
119
+ }
120
+ );
121
+ ContextMenuTrigger.displayName = TRIGGER_NAME;
122
+ const PORTAL_NAME = "ContextMenuPortal", ContextMenuPortal = (props) => {
123
+ const { scope, children, ...portalProps } = props, context = isAndroid ? useContextMenuContext(scope) : null, content = isAndroid ? /* @__PURE__ */ jsx(ContextMenuProvider, { ...context, children }) : children;
124
+ return /* @__PURE__ */ jsx(Menu.Portal, { scope: scope || CONTEXTMENU_CONTEXT, ...portalProps, children: content });
125
+ };
126
+ ContextMenuPortal.displayName = PORTAL_NAME;
127
+ const CONTENT_NAME = "ContextMenuContent", ContextMenuContent = React.forwardRef((props, forwardedRef) => {
128
+ const { scope, ...contentProps } = props, context = useContextMenuContext(scope), hasInteractedOutsideRef = React.useRef(!1);
129
+ return /* @__PURE__ */ jsx(
130
+ Menu.Content,
131
+ {
132
+ id: context.contentId,
133
+ "aria-labelledby": context.triggerId,
134
+ scope: scope || CONTEXTMENU_CONTEXT,
135
+ ...contentProps,
136
+ ref: forwardedRef,
137
+ onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
138
+ hasInteractedOutsideRef.current || context.triggerRef.current?.focus(), hasInteractedOutsideRef.current = !1, event.preventDefault();
139
+ }),
140
+ onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {
141
+ const originalEvent = event.detail.originalEvent, ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === !0, isRightClick = originalEvent.button === 2 || ctrlLeftClick;
142
+ (!context.modal || isRightClick) && (hasInteractedOutsideRef.current = !0);
143
+ })
144
+ }
145
+ );
146
+ });
147
+ ContextMenuContent.displayName = CONTENT_NAME;
148
+ const ITEM_NAME = "ContextMenuItem", ContextMenuItem = React.forwardRef((props, forwardedRef) => {
149
+ const { scope, ...itemProps } = props;
150
+ return /* @__PURE__ */ jsx(
151
+ Menu.Item,
152
+ {
153
+ componentName: ITEM_NAME,
154
+ scope: scope || CONTEXTMENU_CONTEXT,
155
+ ...itemProps,
156
+ ref: forwardedRef
157
+ }
158
+ );
159
+ });
160
+ ContextMenuItem.displayName = ITEM_NAME;
161
+ const CHECKBOX_ITEM_NAME = "ContextMenuCheckboxItem", ContextMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {
162
+ const { scope, ...checkboxItemProps } = props;
163
+ return /* @__PURE__ */ jsx(
164
+ Menu.CheckboxItem,
165
+ {
166
+ componentName: CHECKBOX_ITEM_NAME,
167
+ scope: scope || CONTEXTMENU_CONTEXT,
168
+ ...checkboxItemProps,
169
+ ref: forwardedRef
170
+ }
171
+ );
172
+ });
173
+ ContextMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
174
+ const RADIO_GROUP_NAME = "ContextMenuRadioGroup", ContextMenuRadioGroup = React.forwardRef((props, forwardedRef) => {
175
+ const { scope, ...radioGroupProps } = props;
176
+ return /* @__PURE__ */ jsx(
177
+ Menu.RadioGroup,
178
+ {
179
+ scope: scope || CONTEXTMENU_CONTEXT,
180
+ ...radioGroupProps,
181
+ ref: forwardedRef
182
+ }
183
+ );
184
+ });
185
+ ContextMenuRadioGroup.displayName = RADIO_GROUP_NAME;
186
+ const RADIO_ITEM_NAME = "ContextMenuRadioItem", ContextMenuRadioItem = React.forwardRef((props, forwardedRef) => {
187
+ const { scope, ...radioItemProps } = props;
188
+ return /* @__PURE__ */ jsx(
189
+ Menu.RadioItem,
190
+ {
191
+ componentName: RADIO_ITEM_NAME,
192
+ scope: scope || CONTEXTMENU_CONTEXT,
193
+ ...radioItemProps,
194
+ ref: forwardedRef
195
+ }
196
+ );
197
+ });
198
+ ContextMenuRadioItem.displayName = RADIO_ITEM_NAME;
199
+ const INDICATOR_NAME = "ContextMenuItemIndicator", ContextMenuItemIndicator = Menu.ItemIndicator.styleable((props, forwardedRef) => {
200
+ const { scope, ...itemIndicatorProps } = props;
201
+ return /* @__PURE__ */ jsx(
202
+ Menu.ItemIndicator,
203
+ {
204
+ componentName: INDICATOR_NAME,
205
+ scope: scope || CONTEXTMENU_CONTEXT,
206
+ ...itemIndicatorProps,
207
+ ref: forwardedRef
208
+ }
209
+ );
210
+ });
211
+ ContextMenuItemIndicator.displayName = INDICATOR_NAME;
212
+ const SUB_NAME = "ContextMenuSub", ContextMenuSub = (props) => {
213
+ const { scope, children, onOpenChange, open: openProp, defaultOpen, ...rest } = props, [open, setOpen] = useControllableState({
214
+ prop: openProp,
215
+ defaultProp: defaultOpen,
216
+ onChange: onOpenChange
217
+ });
218
+ return /* @__PURE__ */ jsx(
219
+ Menu.Sub,
220
+ {
221
+ scope: scope || CONTEXTMENU_CONTEXT,
222
+ open,
223
+ onOpenChange: setOpen,
224
+ ...rest,
225
+ children
226
+ }
227
+ );
228
+ };
229
+ ContextMenuSub.displayName = SUB_NAME;
230
+ const SUB_TRIGGER_NAME = "ContextMenuSubTrigger", ContextMenuSubTrigger = View.styleable(
231
+ (props, forwardedRef) => {
232
+ const { scope, ...subTriggerProps } = props;
233
+ return /* @__PURE__ */ jsx(
234
+ Menu.SubTrigger,
235
+ {
236
+ componentName: SUB_TRIGGER_NAME,
237
+ scope: scope || CONTEXTMENU_CONTEXT,
238
+ ...subTriggerProps,
239
+ ref: forwardedRef
240
+ }
241
+ );
242
+ }
243
+ );
244
+ ContextMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
245
+ const SUB_CONTENT_NAME = "ContextMenuSubContent", ContextMenuSubContent = React.forwardRef((props, forwardedRef) => {
246
+ const { scope, ...subContentProps } = props;
247
+ return /* @__PURE__ */ jsx(
248
+ Menu.SubContent,
249
+ {
250
+ scope: scope || CONTEXTMENU_CONTEXT,
251
+ ...subContentProps,
252
+ ref: forwardedRef,
253
+ style: isWeb ? {
254
+ ...props.style,
255
+ "--tamagui-context-menu-content-transform-origin": "var(--tamagui-popper-transform-origin)",
256
+ "--tamagui-context-menu-content-available-width": "var(--tamagui-popper-available-width)",
257
+ "--tamagui-context-menu-content-available-height": "var(--tamagui-popper-available-height)",
258
+ "--tamagui-context-menu-trigger-width": "var(--tamagui-popper-anchor-width)",
259
+ "--tamagui-context-menu-trigger-height": "var(--tamagui-popper-anchor-height)"
260
+ } : null
261
+ }
262
+ );
263
+ });
264
+ ContextMenuSubContent.displayName = SUB_CONTENT_NAME;
265
+ const ARROW_NAME = "ContextMenuArrow", ContextMenuArrow = React.forwardRef((props, forwardedRef) => {
266
+ const { scope, ...arrowProps } = props;
267
+ return /* @__PURE__ */ jsx(
268
+ Menu.Arrow,
269
+ {
270
+ componentName: ARROW_NAME,
271
+ scope: scope || CONTEXTMENU_CONTEXT,
272
+ ...arrowProps,
273
+ ref: forwardedRef
274
+ }
275
+ );
276
+ });
277
+ ContextMenuArrow.displayName = ARROW_NAME;
278
+ const ContextMenuGroup = Menu.Group, ContextMenuLabel = Menu.Label, ContextMenuSeparator = Menu.Separator, ContextMenuItemTitle = Menu.ItemTitle, ContextMenuItemSubTitle = Menu.ItemSubtitle, ContextMenuItemImage = Menu.ItemImage, ContextMenuItemIcon = Menu.ItemIcon;
279
+ return withStaticProperties(ContextMenuComp, {
280
+ Root: ContextMenuComp,
281
+ Trigger: ContextMenuTrigger,
282
+ Portal: ContextMenuPortal,
283
+ Content: ContextMenuContent,
284
+ Group: ContextMenuGroup,
285
+ Label: ContextMenuLabel,
286
+ Item: ContextMenuItem,
287
+ CheckboxItem: ContextMenuCheckboxItem,
288
+ RadioGroup: ContextMenuRadioGroup,
289
+ RadioItem: ContextMenuRadioItem,
290
+ ItemIndicator: ContextMenuItemIndicator,
291
+ Separator: ContextMenuSeparator,
292
+ Arrow: ContextMenuArrow,
293
+ Sub: ContextMenuSub,
294
+ SubTrigger: ContextMenuSubTrigger,
295
+ SubContent: ContextMenuSubContent,
296
+ ItemTitle: ContextMenuItemTitle,
297
+ ItemSubtitle: ContextMenuItemSubTitle,
298
+ ItemIcon: ContextMenuItemIcon,
299
+ ItemImage: ContextMenuItemImage,
300
+ Preview: () => null
301
+ });
302
+ }
303
+ export {
304
+ CONTEXTMENU_CONTEXT,
305
+ createNonNativeContextMenu
306
+ };
307
+ //# sourceMappingURL=createNonNativeContextMenu.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createNonNativeContextMenu.tsx"],
4
+ "mappings": "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",
5
+ "names": ["open"]
6
+ }
@@ -0,0 +1,359 @@
1
+ import { createBaseMenu } from "@tamagui/create-menu";
2
+ import { useControllableState } from "@tamagui/use-controllable-state";
3
+ import { composeEventHandlers, composeRefs, createStyledContext, isAndroid, isWeb, Slot, View, withStaticProperties } from "@tamagui/web";
4
+ import React, { useId } from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ const CONTEXTMENU_CONTEXT = "ContextMenuContext";
7
+ function createNonNativeContextMenu(params) {
8
+ const {
9
+ Menu
10
+ } = createBaseMenu(params),
11
+ CONTEXT_MENU_NAME = "ContextMenu",
12
+ {
13
+ Provider: ContextMenuProvider,
14
+ useStyledContext: useContextMenuContext
15
+ } = createStyledContext(),
16
+ ContextMenuComp = props => {
17
+ const {
18
+ scope,
19
+ children,
20
+ onOpenChange,
21
+ dir,
22
+ modal = !0,
23
+ ...rest
24
+ } = props,
25
+ [open, setOpen] = React.useState(!1),
26
+ triggerRef = React.useRef(null),
27
+ handleOpenChange = React.useCallback(open2 => {
28
+ setOpen(open2), onOpenChange?.(open2);
29
+ }, [onOpenChange]);
30
+ return /* @__PURE__ */jsx(ContextMenuProvider, {
31
+ scope,
32
+ triggerId: useId(),
33
+ triggerRef,
34
+ contentId: useId(),
35
+ open,
36
+ onOpenChange: handleOpenChange,
37
+ modal,
38
+ children: /* @__PURE__ */jsx(Menu, {
39
+ scope: scope || CONTEXTMENU_CONTEXT,
40
+ dir,
41
+ open,
42
+ onOpenChange: handleOpenChange,
43
+ modal,
44
+ ...rest,
45
+ children
46
+ })
47
+ });
48
+ };
49
+ ContextMenuComp.displayName = CONTEXT_MENU_NAME;
50
+ const TRIGGER_NAME = "ContextMenuTrigger",
51
+ ContextMenuTrigger = View.styleable((props, forwardedRef) => {
52
+ const {
53
+ scope,
54
+ style,
55
+ disabled = !1,
56
+ asChild,
57
+ children,
58
+ ...triggerProps
59
+ } = props,
60
+ context = useContextMenuContext(scope),
61
+ pointRef = React.useRef({
62
+ x: 0,
63
+ y: 0
64
+ }),
65
+ virtualRef = React.useMemo(() => ({
66
+ current: {
67
+ getBoundingClientRect: () => isWeb ? DOMRect.fromRect({
68
+ width: 0,
69
+ height: 0,
70
+ ...pointRef.current
71
+ }) : {
72
+ width: 0,
73
+ height: 0,
74
+ top: 0,
75
+ left: 0,
76
+ ...pointRef.current
77
+ },
78
+ ...(!isWeb && {
79
+ measure: c => c(pointRef.current.x, pointRef.current.y, 0, 0),
80
+ measureInWindow: c => c(pointRef.current.x, pointRef.current.y, 0, 0)
81
+ })
82
+ }
83
+ }), [pointRef.current.x, pointRef.current.y]),
84
+ longPressTimerRef = React.useRef(0),
85
+ clearLongPress = React.useCallback(() => window.clearTimeout(longPressTimerRef.current), []),
86
+ handleOpen = event => {
87
+ isWeb && (event instanceof MouseEvent || event instanceof PointerEvent) ? pointRef.current = {
88
+ x: event.clientX,
89
+ y: event.clientY
90
+ } : pointRef.current = {
91
+ x: event.nativeEvent.pageX,
92
+ y: event.nativeEvent.pageY
93
+ }, context.onOpenChange(!0);
94
+ };
95
+ React.useEffect(() => clearLongPress, [clearLongPress]), React.useEffect(() => void (disabled && clearLongPress()), [disabled, clearLongPress]);
96
+ const Comp = asChild ? Slot : View;
97
+ return /* @__PURE__ */jsxs(Fragment, {
98
+ children: [/* @__PURE__ */jsx(Menu.Anchor, {
99
+ scope: scope || CONTEXTMENU_CONTEXT,
100
+ virtualRef
101
+ }), /* @__PURE__ */jsx(Comp, {
102
+ tag: "span",
103
+ componentName: TRIGGER_NAME,
104
+ id: context.triggerId,
105
+ "data-state": context.open ? "open" : "closed",
106
+ "data-disabled": disabled ? "" : void 0,
107
+ ...triggerProps,
108
+ ref: composeRefs(forwardedRef, context.triggerRef),
109
+ style: isWeb ? {
110
+ WebkitTouchCallout: "none",
111
+ ...style
112
+ } : null,
113
+ ...(isWeb && {
114
+ onContextMenu: disabled ? props.onContextMenu : composeEventHandlers(props.onContextMenu, event => {
115
+ clearLongPress(), handleOpen(event), event.preventDefault();
116
+ }),
117
+ onPointerDown: disabled ? props.onPointerDown : composeEventHandlers(props.onPointerDown, event => {
118
+ event.pointerType !== "mouse" && (clearLongPress(), longPressTimerRef.current = window.setTimeout(() => handleOpen(event), 700));
119
+ }),
120
+ onPointerMove: disabled ? props.onPointerMove : composeEventHandlers(props.onPointerMove, event => {
121
+ event.pointerType !== "mouse" && clearLongPress();
122
+ }),
123
+ onPointerCancel: disabled ? props.onPointerCancel : composeEventHandlers(props.onPointerCancel, event => {
124
+ event.pointerType !== "mouse" && clearLongPress();
125
+ }),
126
+ onPointerUp: disabled ? props.onPointerUp : composeEventHandlers(props.onPointerUp, event => {
127
+ event.pointerType !== "mouse" && clearLongPress();
128
+ })
129
+ }),
130
+ ...(!isWeb && {
131
+ onLongPress: disabled ? props.onLongPress : composeEventHandlers(props.onLongPress, event => {
132
+ clearLongPress(), handleOpen(event), event.preventDefault();
133
+ })
134
+ }),
135
+ children
136
+ })]
137
+ });
138
+ });
139
+ ContextMenuTrigger.displayName = TRIGGER_NAME;
140
+ const PORTAL_NAME = "ContextMenuPortal",
141
+ ContextMenuPortal = props => {
142
+ const {
143
+ scope,
144
+ children,
145
+ ...portalProps
146
+ } = props,
147
+ context = isAndroid ? useContextMenuContext(scope) : null,
148
+ content = isAndroid ? /* @__PURE__ */jsx(ContextMenuProvider, {
149
+ ...context,
150
+ children
151
+ }) : children;
152
+ return /* @__PURE__ */jsx(Menu.Portal, {
153
+ scope: scope || CONTEXTMENU_CONTEXT,
154
+ ...portalProps,
155
+ children: content
156
+ });
157
+ };
158
+ ContextMenuPortal.displayName = PORTAL_NAME;
159
+ const CONTENT_NAME = "ContextMenuContent",
160
+ ContextMenuContent = React.forwardRef((props, forwardedRef) => {
161
+ const {
162
+ scope,
163
+ ...contentProps
164
+ } = props,
165
+ context = useContextMenuContext(scope),
166
+ hasInteractedOutsideRef = React.useRef(!1);
167
+ return /* @__PURE__ */jsx(Menu.Content, {
168
+ id: context.contentId,
169
+ "aria-labelledby": context.triggerId,
170
+ scope: scope || CONTEXTMENU_CONTEXT,
171
+ ...contentProps,
172
+ ref: forwardedRef,
173
+ onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, event => {
174
+ hasInteractedOutsideRef.current || context.triggerRef.current?.focus(), hasInteractedOutsideRef.current = !1, event.preventDefault();
175
+ }),
176
+ onInteractOutside: composeEventHandlers(props.onInteractOutside, event => {
177
+ const originalEvent = event.detail.originalEvent,
178
+ ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === !0,
179
+ isRightClick = originalEvent.button === 2 || ctrlLeftClick;
180
+ (!context.modal || isRightClick) && (hasInteractedOutsideRef.current = !0);
181
+ })
182
+ });
183
+ });
184
+ ContextMenuContent.displayName = CONTENT_NAME;
185
+ const ITEM_NAME = "ContextMenuItem",
186
+ ContextMenuItem = React.forwardRef((props, forwardedRef) => {
187
+ const {
188
+ scope,
189
+ ...itemProps
190
+ } = props;
191
+ return /* @__PURE__ */jsx(Menu.Item, {
192
+ componentName: ITEM_NAME,
193
+ scope: scope || CONTEXTMENU_CONTEXT,
194
+ ...itemProps,
195
+ ref: forwardedRef
196
+ });
197
+ });
198
+ ContextMenuItem.displayName = ITEM_NAME;
199
+ const CHECKBOX_ITEM_NAME = "ContextMenuCheckboxItem",
200
+ ContextMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {
201
+ const {
202
+ scope,
203
+ ...checkboxItemProps
204
+ } = props;
205
+ return /* @__PURE__ */jsx(Menu.CheckboxItem, {
206
+ componentName: CHECKBOX_ITEM_NAME,
207
+ scope: scope || CONTEXTMENU_CONTEXT,
208
+ ...checkboxItemProps,
209
+ ref: forwardedRef
210
+ });
211
+ });
212
+ ContextMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
213
+ const RADIO_GROUP_NAME = "ContextMenuRadioGroup",
214
+ ContextMenuRadioGroup = React.forwardRef((props, forwardedRef) => {
215
+ const {
216
+ scope,
217
+ ...radioGroupProps
218
+ } = props;
219
+ return /* @__PURE__ */jsx(Menu.RadioGroup, {
220
+ scope: scope || CONTEXTMENU_CONTEXT,
221
+ ...radioGroupProps,
222
+ ref: forwardedRef
223
+ });
224
+ });
225
+ ContextMenuRadioGroup.displayName = RADIO_GROUP_NAME;
226
+ const RADIO_ITEM_NAME = "ContextMenuRadioItem",
227
+ ContextMenuRadioItem = React.forwardRef((props, forwardedRef) => {
228
+ const {
229
+ scope,
230
+ ...radioItemProps
231
+ } = props;
232
+ return /* @__PURE__ */jsx(Menu.RadioItem, {
233
+ componentName: RADIO_ITEM_NAME,
234
+ scope: scope || CONTEXTMENU_CONTEXT,
235
+ ...radioItemProps,
236
+ ref: forwardedRef
237
+ });
238
+ });
239
+ ContextMenuRadioItem.displayName = RADIO_ITEM_NAME;
240
+ const INDICATOR_NAME = "ContextMenuItemIndicator",
241
+ ContextMenuItemIndicator = Menu.ItemIndicator.styleable((props, forwardedRef) => {
242
+ const {
243
+ scope,
244
+ ...itemIndicatorProps
245
+ } = props;
246
+ return /* @__PURE__ */jsx(Menu.ItemIndicator, {
247
+ componentName: INDICATOR_NAME,
248
+ scope: scope || CONTEXTMENU_CONTEXT,
249
+ ...itemIndicatorProps,
250
+ ref: forwardedRef
251
+ });
252
+ });
253
+ ContextMenuItemIndicator.displayName = INDICATOR_NAME;
254
+ const SUB_NAME = "ContextMenuSub",
255
+ ContextMenuSub = props => {
256
+ const {
257
+ scope,
258
+ children,
259
+ onOpenChange,
260
+ open: openProp,
261
+ defaultOpen,
262
+ ...rest
263
+ } = props,
264
+ [open, setOpen] = useControllableState({
265
+ prop: openProp,
266
+ defaultProp: defaultOpen,
267
+ onChange: onOpenChange
268
+ });
269
+ return /* @__PURE__ */jsx(Menu.Sub, {
270
+ scope: scope || CONTEXTMENU_CONTEXT,
271
+ open,
272
+ onOpenChange: setOpen,
273
+ ...rest,
274
+ children
275
+ });
276
+ };
277
+ ContextMenuSub.displayName = SUB_NAME;
278
+ const SUB_TRIGGER_NAME = "ContextMenuSubTrigger",
279
+ ContextMenuSubTrigger = View.styleable((props, forwardedRef) => {
280
+ const {
281
+ scope,
282
+ ...subTriggerProps
283
+ } = props;
284
+ return /* @__PURE__ */jsx(Menu.SubTrigger, {
285
+ componentName: SUB_TRIGGER_NAME,
286
+ scope: scope || CONTEXTMENU_CONTEXT,
287
+ ...subTriggerProps,
288
+ ref: forwardedRef
289
+ });
290
+ });
291
+ ContextMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
292
+ const SUB_CONTENT_NAME = "ContextMenuSubContent",
293
+ ContextMenuSubContent = React.forwardRef((props, forwardedRef) => {
294
+ const {
295
+ scope,
296
+ ...subContentProps
297
+ } = props;
298
+ return /* @__PURE__ */jsx(Menu.SubContent, {
299
+ scope: scope || CONTEXTMENU_CONTEXT,
300
+ ...subContentProps,
301
+ ref: forwardedRef,
302
+ style: isWeb ? {
303
+ ...props.style,
304
+ "--tamagui-context-menu-content-transform-origin": "var(--tamagui-popper-transform-origin)",
305
+ "--tamagui-context-menu-content-available-width": "var(--tamagui-popper-available-width)",
306
+ "--tamagui-context-menu-content-available-height": "var(--tamagui-popper-available-height)",
307
+ "--tamagui-context-menu-trigger-width": "var(--tamagui-popper-anchor-width)",
308
+ "--tamagui-context-menu-trigger-height": "var(--tamagui-popper-anchor-height)"
309
+ } : null
310
+ });
311
+ });
312
+ ContextMenuSubContent.displayName = SUB_CONTENT_NAME;
313
+ const ARROW_NAME = "ContextMenuArrow",
314
+ ContextMenuArrow = React.forwardRef((props, forwardedRef) => {
315
+ const {
316
+ scope,
317
+ ...arrowProps
318
+ } = props;
319
+ return /* @__PURE__ */jsx(Menu.Arrow, {
320
+ componentName: ARROW_NAME,
321
+ scope: scope || CONTEXTMENU_CONTEXT,
322
+ ...arrowProps,
323
+ ref: forwardedRef
324
+ });
325
+ });
326
+ ContextMenuArrow.displayName = ARROW_NAME;
327
+ const ContextMenuGroup = Menu.Group,
328
+ ContextMenuLabel = Menu.Label,
329
+ ContextMenuSeparator = Menu.Separator,
330
+ ContextMenuItemTitle = Menu.ItemTitle,
331
+ ContextMenuItemSubTitle = Menu.ItemSubtitle,
332
+ ContextMenuItemImage = Menu.ItemImage,
333
+ ContextMenuItemIcon = Menu.ItemIcon;
334
+ return withStaticProperties(ContextMenuComp, {
335
+ Root: ContextMenuComp,
336
+ Trigger: ContextMenuTrigger,
337
+ Portal: ContextMenuPortal,
338
+ Content: ContextMenuContent,
339
+ Group: ContextMenuGroup,
340
+ Label: ContextMenuLabel,
341
+ Item: ContextMenuItem,
342
+ CheckboxItem: ContextMenuCheckboxItem,
343
+ RadioGroup: ContextMenuRadioGroup,
344
+ RadioItem: ContextMenuRadioItem,
345
+ ItemIndicator: ContextMenuItemIndicator,
346
+ Separator: ContextMenuSeparator,
347
+ Arrow: ContextMenuArrow,
348
+ Sub: ContextMenuSub,
349
+ SubTrigger: ContextMenuSubTrigger,
350
+ SubContent: ContextMenuSubContent,
351
+ ItemTitle: ContextMenuItemTitle,
352
+ ItemSubtitle: ContextMenuItemSubTitle,
353
+ ItemIcon: ContextMenuItemIcon,
354
+ ItemImage: ContextMenuItemImage,
355
+ Preview: () => null
356
+ });
357
+ }
358
+ export { CONTEXTMENU_CONTEXT, createNonNativeContextMenu };
359
+ //# sourceMappingURL=createNonNativeContextMenu.mjs.map