@tamagui/create-menu 2.7.7 → 3.0.0-beta.643.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 (113) hide show
  1. package/dist/cjs/createBaseMenu.cjs +1033 -1247
  2. package/dist/cjs/createBaseMenu.native.cjs +1217 -0
  3. package/dist/cjs/createBaseMenu.native.js +1155 -1387
  4. package/dist/cjs/createBaseMenu.native.js.map +1 -1
  5. package/dist/cjs/createNativeMenu/createNativeMenu.cjs +346 -377
  6. package/dist/cjs/createNativeMenu/createNativeMenu.native.cjs +439 -0
  7. package/dist/cjs/createNativeMenu/createNativeMenu.native.js +405 -439
  8. package/dist/cjs/createNativeMenu/createNativeMenu.native.js.map +1 -1
  9. package/dist/cjs/createNativeMenu/createNativeMenuTypes.cjs +10 -11
  10. package/dist/cjs/createNativeMenu/createNativeMenuTypes.native.cjs +19 -0
  11. package/dist/cjs/createNativeMenu/createNativeMenuTypes.native.js +10 -10
  12. package/dist/cjs/createNativeMenu/createNativeMenuTypes.native.js.map +1 -1
  13. package/dist/cjs/createNativeMenu/utils.cjs +76 -86
  14. package/dist/cjs/createNativeMenu/utils.native.cjs +107 -0
  15. package/dist/cjs/createNativeMenu/utils.native.js +82 -92
  16. package/dist/cjs/createNativeMenu/utils.native.js.map +1 -1
  17. package/dist/cjs/createNativeMenu/withNativeMenu.cjs +27 -35
  18. package/dist/cjs/createNativeMenu/withNativeMenu.native.cjs +42 -0
  19. package/dist/cjs/createNativeMenu/withNativeMenu.native.js +27 -34
  20. package/dist/cjs/createNativeMenu/withNativeMenu.native.js.map +1 -1
  21. package/dist/cjs/index.cjs +9 -20
  22. package/dist/cjs/index.native.cjs +23 -0
  23. package/dist/cjs/index.native.js +10 -20
  24. package/dist/cjs/index.native.js.map +1 -1
  25. package/dist/esm/createBaseMenu.mjs +1021 -1225
  26. package/dist/esm/createBaseMenu.mjs.map +1 -1
  27. package/dist/esm/createBaseMenu.native.js +1144 -1367
  28. package/dist/esm/createBaseMenu.native.js.map +1 -1
  29. package/dist/esm/createNativeMenu/createNativeMenu.mjs +332 -353
  30. package/dist/esm/createNativeMenu/createNativeMenu.mjs.map +1 -1
  31. package/dist/esm/createNativeMenu/createNativeMenu.native.js +392 -417
  32. package/dist/esm/createNativeMenu/createNativeMenu.native.js.map +1 -1
  33. package/dist/esm/createNativeMenu/createNativeMenuTypes.mjs +0 -2
  34. package/dist/esm/createNativeMenu/createNativeMenuTypes.native.js +0 -2
  35. package/dist/esm/createNativeMenu/utils.mjs +55 -57
  36. package/dist/esm/createNativeMenu/utils.mjs.map +1 -1
  37. package/dist/esm/createNativeMenu/utils.native.js +62 -65
  38. package/dist/esm/createNativeMenu/utils.native.js.map +1 -1
  39. package/dist/esm/createNativeMenu/withNativeMenu.mjs +14 -17
  40. package/dist/esm/createNativeMenu/withNativeMenu.mjs.map +1 -1
  41. package/dist/esm/createNativeMenu/withNativeMenu.native.js +15 -18
  42. package/dist/esm/createNativeMenu/withNativeMenu.native.js.map +1 -1
  43. package/dist/esm/index.js +5 -6
  44. package/dist/esm/index.mjs +5 -6
  45. package/dist/esm/index.native.js +5 -6
  46. package/dist/jsx/createBaseMenu.mjs +1021 -1225
  47. package/dist/jsx/createBaseMenu.mjs.map +1 -1
  48. package/dist/jsx/createBaseMenu.native.cjs +1217 -0
  49. package/dist/jsx/createBaseMenu.native.js +1155 -1387
  50. package/dist/jsx/createBaseMenu.native.js.map +1 -1
  51. package/dist/jsx/createNativeMenu/createNativeMenu.mjs +332 -353
  52. package/dist/jsx/createNativeMenu/createNativeMenu.mjs.map +1 -1
  53. package/dist/jsx/createNativeMenu/createNativeMenu.native.cjs +439 -0
  54. package/dist/jsx/createNativeMenu/createNativeMenu.native.js +405 -439
  55. package/dist/jsx/createNativeMenu/createNativeMenu.native.js.map +1 -1
  56. package/dist/jsx/createNativeMenu/createNativeMenuTypes.mjs +0 -2
  57. package/dist/jsx/createNativeMenu/createNativeMenuTypes.native.cjs +19 -0
  58. package/dist/jsx/createNativeMenu/createNativeMenuTypes.native.js +10 -10
  59. package/dist/jsx/createNativeMenu/createNativeMenuTypes.native.js.map +1 -1
  60. package/dist/jsx/createNativeMenu/utils.mjs +55 -57
  61. package/dist/jsx/createNativeMenu/utils.mjs.map +1 -1
  62. package/dist/jsx/createNativeMenu/utils.native.cjs +107 -0
  63. package/dist/jsx/createNativeMenu/utils.native.js +82 -92
  64. package/dist/jsx/createNativeMenu/utils.native.js.map +1 -1
  65. package/dist/jsx/createNativeMenu/withNativeMenu.mjs +14 -17
  66. package/dist/jsx/createNativeMenu/withNativeMenu.mjs.map +1 -1
  67. package/dist/jsx/createNativeMenu/withNativeMenu.native.cjs +42 -0
  68. package/dist/jsx/createNativeMenu/withNativeMenu.native.js +27 -34
  69. package/dist/jsx/createNativeMenu/withNativeMenu.native.js.map +1 -1
  70. package/dist/jsx/index.js +5 -6
  71. package/dist/jsx/index.mjs +5 -6
  72. package/dist/jsx/index.native.cjs +23 -0
  73. package/dist/jsx/index.native.js +10 -20
  74. package/dist/jsx/index.native.js.map +1 -1
  75. package/package.json +23 -22
  76. package/src/createBaseMenu.tsx +211 -231
  77. package/src/createNativeMenu/createNativeMenuTypes.ts +0 -6
  78. package/src/createNativeMenu/utils.tsx +6 -6
  79. package/src/createNativeMenu/withNativeMenu.tsx +1 -2
  80. package/src/index.tsx +0 -1
  81. package/types/createBaseMenu.d.ts +38 -126
  82. package/types/createBaseMenu.d.ts.map +1 -1
  83. package/types/createNativeMenu/createNativeMenu.d.ts +1 -1
  84. package/types/createNativeMenu/createNativeMenu.d.ts.map +1 -1
  85. package/types/createNativeMenu/createNativeMenuTypes.d.ts +0 -6
  86. package/types/createNativeMenu/createNativeMenuTypes.d.ts.map +1 -1
  87. package/types/createNativeMenu/utils.d.ts +5 -5
  88. package/types/createNativeMenu/utils.d.ts.map +1 -1
  89. package/types/createNativeMenu/withNativeMenu.d.ts.map +1 -1
  90. package/types/index.d.ts +0 -1
  91. package/types/index.d.ts.map +1 -1
  92. package/dist/cjs/MenuPredefined.cjs +0 -191
  93. package/dist/cjs/MenuPredefined.native.js +0 -194
  94. package/dist/cjs/MenuPredefined.native.js.map +0 -1
  95. package/dist/esm/MenuPredefined.mjs +0 -166
  96. package/dist/esm/MenuPredefined.mjs.map +0 -1
  97. package/dist/esm/MenuPredefined.native.js +0 -166
  98. package/dist/esm/MenuPredefined.native.js.map +0 -1
  99. package/dist/esm/createNativeMenu/createNativeMenuTypes.mjs.map +0 -1
  100. package/dist/esm/createNativeMenu/createNativeMenuTypes.native.js.map +0 -1
  101. package/dist/esm/index.js.map +0 -1
  102. package/dist/esm/index.mjs.map +0 -1
  103. package/dist/esm/index.native.js.map +0 -1
  104. package/dist/jsx/MenuPredefined.mjs +0 -166
  105. package/dist/jsx/MenuPredefined.mjs.map +0 -1
  106. package/dist/jsx/MenuPredefined.native.js +0 -194
  107. package/dist/jsx/MenuPredefined.native.js.map +0 -1
  108. package/dist/jsx/createNativeMenu/createNativeMenuTypes.mjs.map +0 -1
  109. package/dist/jsx/index.js.map +0 -1
  110. package/dist/jsx/index.mjs.map +0 -1
  111. package/src/MenuPredefined.tsx +0 -204
  112. package/types/MenuPredefined.d.ts +0 -31
  113. package/types/MenuPredefined.d.ts.map +0 -1
@@ -1,436 +1,411 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { getNativeMenuAdapter, NativeMenuContext, unstable_claimExternalPressOwnership, unstable_releaseExternalPressOwnership } from "@tamagui/native";
3
- import { isWeb, withStaticProperties, isIos } from "@tamagui/web";
1
+ import { Fragment, jsx } from "react/jsx-runtime";
2
+ import { NativeMenuContext, getNativeMenuAdapter, unstable_claimExternalPressOwnership, unstable_releaseExternalPressOwnership } from "@tamagui/native";
3
+ import { isIos, isWeb, withStaticProperties } from "@tamagui/web";
4
4
  import React from "react";
5
- var MAPPED_TYPES = ["SubContent", "SubTrigger", "Content", "Sub", "Group", "Item", "ItemTitle", "ItemSubtitle", "ItemIcon", "ItemImage", "ItemIndicator", "Label", "Separator", "CheckboxItem", "Preview", "Auxiliary"];
6
- var CONTAINER_TYPES = ["SubContent", "SubTrigger", "Content", "Sub", "Group", "Item"];
5
+
6
+ var MAPPED_TYPES = [
7
+ "SubContent",
8
+ "SubTrigger",
9
+ "Content",
10
+ "Sub",
11
+ "Group",
12
+ "Item",
13
+ "ItemTitle",
14
+ "ItemSubtitle",
15
+ "ItemIcon",
16
+ "ItemImage",
17
+ "ItemIndicator",
18
+ "Label",
19
+ "Separator",
20
+ "CheckboxItem",
21
+ "Preview",
22
+ "Auxiliary"
23
+ ];
24
+ var CONTAINER_TYPES = [
25
+ "SubContent",
26
+ "SubTrigger",
27
+ "Content",
28
+ "Sub",
29
+ "Group",
30
+ "Item"
31
+ ];
7
32
  function getComponentType(displayName) {
8
- var _iteratorNormalCompletion = true,
9
- _didIteratorError = false,
10
- _iteratorError = void 0;
11
- try {
12
- for (var _iterator = MAPPED_TYPES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
13
- var type = _step.value;
14
- if (displayName === type || displayName === `Menu${type}` || displayName === `ContextMenu${type}` || displayName.includes(`(${type})`)) {
15
- return type;
16
- }
17
- }
18
- } catch (err) {
19
- _didIteratorError = true;
20
- _iteratorError = err;
21
- } finally {
22
- try {
23
- if (!_iteratorNormalCompletion && _iterator.return != null) {
24
- _iterator.return();
25
- }
26
- } finally {
27
- if (_didIteratorError) {
28
- throw _iteratorError;
29
- }
30
- }
31
- }
32
- return null;
33
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
34
+ try {
35
+ for (var _iterator = MAPPED_TYPES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
36
+ var type = _step.value;
37
+ if (displayName === type || displayName === `Menu${type}` || displayName === `ContextMenu${type}` || displayName.includes(`(${type})`)) {
38
+ return type;
39
+ }
40
+ }
41
+ } catch (err) {
42
+ _didIteratorError = true;
43
+ _iteratorError = err;
44
+ } finally {
45
+ try {
46
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
47
+ _iterator.return();
48
+ }
49
+ } finally {
50
+ if (_didIteratorError) {
51
+ throw _iteratorError;
52
+ }
53
+ }
54
+ }
55
+ return null;
33
56
  }
34
57
  function isItemLike(props, displayName) {
35
- if (getComponentType(displayName)) return false;
36
- return "onSelect" in props || "textValue" in props;
58
+ if (getComponentType(displayName)) return false;
59
+ return "onSelect" in props || "textValue" in props;
37
60
  }
38
61
  function isPortalLike(displayName) {
39
- return displayName === "Portal" || displayName.includes("Portal");
62
+ return displayName === "Portal" || displayName.includes("Portal");
40
63
  }
41
64
  function isTriggerLike(displayName) {
42
- return displayName === "Trigger" || displayName.includes("(Trigger)");
65
+ return displayName === "Trigger" || displayName.includes("(Trigger)");
43
66
  }
44
67
  function composeHandlers(first, second) {
45
- return function () {
46
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
47
- args[_key] = arguments[_key];
48
- }
49
- first === null || first === void 0 ? void 0 : first(...args);
50
- second === null || second === void 0 ? void 0 : second(...args);
51
- };
68
+ return function() {
69
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
70
+ args[_key] = arguments[_key];
71
+ }
72
+ first === null || first === void 0 ? void 0 : first(...args);
73
+ second === null || second === void 0 ? void 0 : second(...args);
74
+ };
52
75
  }
53
76
  function getTriggerDebugName(menuType, props) {
54
- var childProps = /* @__PURE__ */React.isValidElement(props.children) && props.children.props ? props.children.props : null;
55
- var prefix = menuType === "ContextMenu" ? "ContextMenuTrigger" : "MenuTrigger";
56
- var _childProps_testID, _ref;
57
- var detail = (_ref = (_childProps_testID = childProps === null || childProps === void 0 ? void 0 : childProps.testID) !== null && _childProps_testID !== void 0 ? _childProps_testID : childProps === null || childProps === void 0 ? void 0 : childProps.accessibilityLabel) !== null && _ref !== void 0 ? _ref : typeof props.textValue === "string" ? props.textValue : null;
58
- return [prefix, detail].filter(Boolean).join(":") || prefix;
77
+ var childProps = /* @__PURE__ */ React.isValidElement(props.children) && props.children.props ? props.children.props : null;
78
+ var prefix = menuType === "ContextMenu" ? "ContextMenuTrigger" : "MenuTrigger";
79
+ var _childProps_testID, _ref;
80
+ var detail = (_ref = (_childProps_testID = childProps === null || childProps === void 0 ? void 0 : childProps.testID) !== null && _childProps_testID !== void 0 ? _childProps_testID : childProps === null || childProps === void 0 ? void 0 : childProps.accessibilityLabel) !== null && _ref !== void 0 ? _ref : typeof props.textValue === "string" ? props.textValue : null;
81
+ return [prefix, detail].filter(Boolean).join(":") || prefix;
59
82
  }
60
- var emptyStub = function () {
61
- return null;
83
+ var emptyStub = function() {
84
+ return null;
62
85
  };
63
86
  function createWebStubs() {
64
- return {
65
- Menu: withStaticProperties(emptyStub, {
66
- Trigger: emptyStub,
67
- Content: emptyStub,
68
- Item: emptyStub,
69
- ItemTitle: emptyStub,
70
- ItemSubtitle: emptyStub,
71
- SubTrigger: emptyStub,
72
- Group: emptyStub,
73
- ItemIcon: emptyStub,
74
- Separator: emptyStub,
75
- CheckboxItem: emptyStub,
76
- ItemIndicator: emptyStub,
77
- ItemImage: emptyStub,
78
- Label: emptyStub,
79
- Arrow: emptyStub,
80
- Sub: emptyStub,
81
- SubContent: emptyStub,
82
- Preview: emptyStub,
83
- Portal: emptyStub,
84
- RadioGroup: emptyStub,
85
- RadioItem: emptyStub,
86
- Auxiliary: emptyStub
87
- })
88
- };
87
+ return { Menu: withStaticProperties(emptyStub, {
88
+ Trigger: emptyStub,
89
+ Content: emptyStub,
90
+ Item: emptyStub,
91
+ ItemTitle: emptyStub,
92
+ ItemSubtitle: emptyStub,
93
+ SubTrigger: emptyStub,
94
+ Group: emptyStub,
95
+ ItemIcon: emptyStub,
96
+ Separator: emptyStub,
97
+ CheckboxItem: emptyStub,
98
+ ItemIndicator: emptyStub,
99
+ ItemImage: emptyStub,
100
+ Label: emptyStub,
101
+ Arrow: emptyStub,
102
+ Sub: emptyStub,
103
+ SubContent: emptyStub,
104
+ Preview: emptyStub,
105
+ Portal: emptyStub,
106
+ RadioGroup: emptyStub,
107
+ RadioItem: emptyStub,
108
+ Auxiliary: emptyStub
109
+ }) };
89
110
  }
90
- var createNativeMenu = function (MenuType) {
91
- if (isWeb) {
92
- return createWebStubs();
93
- }
94
- var isContextMenu = MenuType === "ContextMenu";
95
- var isAndroid = !isIos && !isWeb;
96
- var resolved = null;
97
- var warned = false;
98
- function resolve() {
99
- if (resolved) return resolved;
100
- var adapter = getNativeMenuAdapter();
101
- if (!adapter) {
102
- if (!warned) {
103
- warned = true;
104
- console.warn(`Warning: Register a native menu adapter before rendering Tamagui native menus`);
105
- }
106
- return null;
107
- }
108
- var menu = isContextMenu ? adapter.ContextMenu : adapter.Menu;
109
- resolved = {
110
- menu,
111
- componentMap: {
112
- SubContent: menu.SubContent,
113
- SubTrigger: menu.SubTrigger,
114
- Content: menu.Content,
115
- Sub: menu.Sub,
116
- Group: menu.Group,
117
- Item: menu.Item,
118
- ItemTitle: menu.ItemTitle,
119
- ItemSubtitle: menu.ItemSubtitle,
120
- ItemIcon: menu.ItemIcon,
121
- ItemImage: menu.ItemImage,
122
- ItemIndicator: menu.ItemIndicator,
123
- Label: menu.Label,
124
- Separator: menu.Separator,
125
- CheckboxItem: menu.CheckboxItem,
126
- Preview: menu.Preview,
127
- Auxiliary: menu.Auxiliary
128
- }
129
- };
130
- return resolved;
131
- }
132
- function transformChildren(menu, map, children) {
133
- var shouldReverseOnIos = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false,
134
- triggerBoundaryHandlers = arguments.length > 4 ? arguments[4] : void 0,
135
- radioContext = arguments.length > 5 ? arguments[5] : void 0;
136
- var result = [];
137
- React.Children.forEach(children, function (child) {
138
- var _child_type;
139
- if (! /* @__PURE__ */React.isValidElement(child)) {
140
- result.push(child);
141
- return;
142
- }
143
- var displayName = ((_child_type = child.type) === null || _child_type === void 0 ? void 0 : _child_type.displayName) || "";
144
- var props = child.props;
145
- if (isPortalLike(displayName)) {
146
- var inner = transformChildren(menu, map, props.children, false, triggerBoundaryHandlers, radioContext);
147
- React.Children.forEach(inner, function (c) {
148
- return result.push(c);
149
- });
150
- return;
151
- }
152
- if (displayName.includes("ScrollView")) {
153
- var inner1 = transformChildren(menu, map, props.children, false, triggerBoundaryHandlers, radioContext);
154
- React.Children.forEach(inner1, function (c) {
155
- return result.push(c);
156
- });
157
- return;
158
- }
159
- if (isTriggerLike(displayName)) {
160
- var debugName = getTriggerDebugName(MenuType, props);
161
- var claim = function () {
162
- return triggerBoundaryHandlers === null || triggerBoundaryHandlers === void 0 ? void 0 : triggerBoundaryHandlers.claim(debugName);
163
- };
164
- var release = function () {
165
- return triggerBoundaryHandlers === null || triggerBoundaryHandlers === void 0 ? void 0 : triggerBoundaryHandlers.release(debugName);
166
- };
167
- var {
168
- children: triggerChildren,
169
- ...triggerProps
170
- } = props;
171
- result.push(/* @__PURE__ */React.createElement(menu.Trigger, {
172
- ...triggerProps,
173
- key: child.key,
174
- onTouchStart: composeHandlers(claim, props.onTouchStart),
175
- onTouchEnd: composeHandlers(props.onTouchEnd, release),
176
- onTouchCancel: composeHandlers(props.onTouchCancel, release),
177
- onResponderGrant: composeHandlers(claim, props.onResponderGrant),
178
- onResponderRelease: composeHandlers(props.onResponderRelease, release),
179
- onResponderTerminate: composeHandlers(props.onResponderTerminate, release),
180
- onPressIn: composeHandlers(claim, props.onPressIn),
181
- onPressOut: composeHandlers(props.onPressOut, release)
182
- }, triggerChildren));
183
- return;
184
- }
185
- if (displayName.includes("RadioGroup")) {
186
- var {
187
- value: rgValue,
188
- onValueChange: rgOnValueChange,
189
- children: rgChildren,
190
- ...rest
191
- } = props;
192
- result.push(/* @__PURE__ */React.createElement(menu.Group, {
193
- ...rest,
194
- key: child.key
195
- }, transformChildren(menu, map, rgChildren, false, triggerBoundaryHandlers, {
196
- value: rgValue,
197
- onValueChange: rgOnValueChange
198
- })));
199
- return;
200
- }
201
- if (displayName.includes("RadioItem") && radioContext) {
202
- var {
203
- value: itemValue,
204
- children: rChildren,
205
- ...rest1
206
- } = props;
207
- var cleanChildren = React.Children.map(rChildren, function (c) {
208
- var _c_type;
209
- if (! /* @__PURE__ */React.isValidElement(c)) return c;
210
- var dn = ((_c_type = c.type) === null || _c_type === void 0 ? void 0 : _c_type.displayName) || "";
211
- if (dn.includes("ItemIndicator")) return null;
212
- return c;
213
- });
214
- result.push(/* @__PURE__ */React.createElement(menu.CheckboxItem, {
215
- ...rest1,
216
- key: child.key,
217
- value: itemValue === radioContext.value ? "on" : "off",
218
- onValueChange: function () {
219
- var _radioContext_onValueChange;
220
- return (_radioContext_onValueChange = radioContext.onValueChange) === null || _radioContext_onValueChange === void 0 ? void 0 : _radioContext_onValueChange.call(radioContext, itemValue);
221
- }
222
- }, transformChildren(menu, map, cleanChildren, false, triggerBoundaryHandlers, radioContext)));
223
- return;
224
- }
225
- var componentType = getComponentType(displayName);
226
- if (componentType === "CheckboxItem") {
227
- var {
228
- checked,
229
- onCheckedChange,
230
- value,
231
- onValueChange,
232
- children: cbChildren,
233
- ...rest2
234
- } = props;
235
- var finalValue = value !== null && value !== void 0 ? value : checked ? "on" : "off";
236
- var finalOnValueChange = onValueChange !== null && onValueChange !== void 0 ? onValueChange : onCheckedChange && function (v) {
237
- return onCheckedChange(v === "on");
238
- };
239
- var cleanChildren1 = React.Children.map(cbChildren, function (c) {
240
- var _c_type;
241
- if (! /* @__PURE__ */React.isValidElement(c)) return c;
242
- var dn = ((_c_type = c.type) === null || _c_type === void 0 ? void 0 : _c_type.displayName) || "";
243
- if (dn.includes("ItemIndicator")) return null;
244
- return c;
245
- });
246
- result.push(/* @__PURE__ */React.createElement(menu.CheckboxItem, {
247
- ...rest2,
248
- key: child.key,
249
- value: finalValue,
250
- onValueChange: finalOnValueChange
251
- }, transformChildren(menu, map, cleanChildren1, false, triggerBoundaryHandlers, radioContext)));
252
- return;
253
- }
254
- if (componentType) {
255
- var {
256
- children: childChildren,
257
- ...restProps
258
- } = props;
259
- var AdapterComponent = map[componentType];
260
- var isContainer = CONTAINER_TYPES.includes(componentType);
261
- var shouldReverse = componentType === "Content" || componentType === "SubContent";
262
- result.push(/* @__PURE__ */React.createElement(AdapterComponent, {
263
- ...restProps,
264
- key: child.key
265
- }, isContainer ? transformChildren(menu, map, childChildren, shouldReverse, triggerBoundaryHandlers, radioContext) : childChildren));
266
- return;
267
- }
268
- if (isItemLike(props, displayName)) {
269
- var {
270
- children: itemChildren,
271
- ...itemProps
272
- } = props;
273
- result.push(/* @__PURE__ */React.createElement(menu.Item, {
274
- ...itemProps,
275
- key: child.key
276
- }, transformChildren(menu, map, itemChildren, false, triggerBoundaryHandlers, radioContext)));
277
- return;
278
- }
279
- result.push(child);
280
- });
281
- if (isIos && shouldReverseOnIos && !isContextMenu) {
282
- result.reverse();
283
- }
284
- return result;
285
- }
286
- function lazyAdapter(name, displayName) {
287
- var Comp = function (props) {
288
- var z = resolve();
289
- if (!z) return null;
290
- return /* @__PURE__ */React.createElement(z.menu[name], props);
291
- };
292
- Comp.displayName = displayName || name;
293
- return Comp;
294
- }
295
- var Trigger = lazyAdapter("Trigger");
296
- var Content = lazyAdapter("Content");
297
- var Item = lazyAdapter("Item");
298
- var ItemTitle = lazyAdapter("ItemTitle");
299
- var ItemSubtitle = lazyAdapter("ItemSubtitle");
300
- var ItemIcon = lazyAdapter("ItemIcon");
301
- var ItemImage = lazyAdapter("ItemImage");
302
- var ItemIndicator = lazyAdapter("ItemIndicator");
303
- var Group = lazyAdapter("Group");
304
- var Label = lazyAdapter("Label");
305
- var Separator = lazyAdapter("Separator");
306
- var Sub = lazyAdapter("Sub");
307
- var SubTrigger = lazyAdapter("SubTrigger");
308
- var SubContent = lazyAdapter("SubContent");
309
- var Portal = function (param) {
310
- var {
311
- children
312
- } = param;
313
- return /* @__PURE__ */_jsx(_Fragment, {
314
- children
315
- });
316
- };
317
- Portal.displayName = "Portal";
318
- var Arrow = function () {
319
- return null;
320
- };
321
- Arrow.displayName = "Arrow";
322
- var RadioGroup = function (param) {
323
- var {
324
- children
325
- } = param;
326
- return /* @__PURE__ */_jsx(_Fragment, {
327
- children
328
- });
329
- };
330
- RadioGroup.displayName = `${MenuType}RadioGroup`;
331
- var RadioItem = function (param) {
332
- var {
333
- children
334
- } = param;
335
- return /* @__PURE__ */_jsx(_Fragment, {
336
- children
337
- });
338
- };
339
- RadioItem.displayName = `${MenuType}RadioItem`;
340
- var CheckboxItem = function () {
341
- return null;
342
- };
343
- CheckboxItem.displayName = "CheckboxItem";
344
- var Preview = isContextMenu ? lazyAdapter("Preview", `${MenuType}Preview`) : function () {
345
- return null;
346
- };
347
- Preview.displayName = `${MenuType}Preview`;
348
- var Auxiliary = isContextMenu ? lazyAdapter("Auxiliary", `${MenuType}Auxiliary`) : function () {
349
- return null;
350
- };
351
- Auxiliary.displayName = `${MenuType}Auxiliary`;
352
- var Menu = function (param) {
353
- var {
354
- children,
355
- onOpenChange,
356
- onOpenWillChange
357
- } = param;
358
- var triggerOwnerRef = React.useRef(null);
359
- var claimTriggerBoundary = React.useCallback(function (debugName) {
360
- if (triggerOwnerRef.current) {
361
- unstable_releaseExternalPressOwnership(triggerOwnerRef.current, debugName);
362
- }
363
- triggerOwnerRef.current = unstable_claimExternalPressOwnership(debugName);
364
- }, []);
365
- var releaseTriggerBoundary = React.useCallback(function (debugName) {
366
- if (!triggerOwnerRef.current) return;
367
- unstable_releaseExternalPressOwnership(triggerOwnerRef.current, debugName);
368
- triggerOwnerRef.current = null;
369
- }, []);
370
- React.useEffect(function () {
371
- return releaseTriggerBoundary;
372
- }, [releaseTriggerBoundary]);
373
- var z = resolve();
374
- if (!z) return null;
375
- var handleOpenChange = React.useCallback(function (isOpen) {
376
- if (!isOpen) {
377
- releaseTriggerBoundary();
378
- }
379
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(isOpen);
380
- }, [onOpenChange, releaseTriggerBoundary]);
381
- var handleOpenWillChange = React.useCallback(function (willOpen) {
382
- if (!willOpen) {
383
- releaseTriggerBoundary();
384
- }
385
- onOpenWillChange === null || onOpenWillChange === void 0 ? void 0 : onOpenWillChange(willOpen);
386
- }, [onOpenWillChange, releaseTriggerBoundary]);
387
- var rootProps = {
388
- onOpenChange: handleOpenChange
389
- };
390
- if (isContextMenu && onOpenWillChange) {
391
- rootProps.onOpenWillChange = handleOpenWillChange;
392
- }
393
- var content = /* @__PURE__ */_jsx(z.menu.Root, {
394
- ...rootProps,
395
- children: transformChildren(z.menu, z.componentMap, children, false, {
396
- claim: claimTriggerBoundary,
397
- release: releaseTriggerBoundary
398
- })
399
- });
400
- if (isAndroid) {
401
- return /* @__PURE__ */_jsx(NativeMenuContext.Provider, {
402
- value: true,
403
- children: content
404
- });
405
- }
406
- return content;
407
- };
408
- Menu.displayName = MenuType;
409
- return {
410
- Menu: withStaticProperties(Menu, {
411
- Trigger,
412
- Content,
413
- Item,
414
- ItemTitle,
415
- ItemSubtitle,
416
- ItemIcon,
417
- ItemImage,
418
- ItemIndicator,
419
- Group,
420
- Label,
421
- Separator,
422
- Sub,
423
- SubTrigger,
424
- SubContent,
425
- CheckboxItem,
426
- Portal,
427
- RadioGroup,
428
- RadioItem,
429
- Arrow,
430
- Preview,
431
- Auxiliary
432
- })
433
- };
111
+ var createNativeMenu = function(MenuType) {
112
+ if (isWeb) {
113
+ return createWebStubs();
114
+ }
115
+ var isContextMenu = MenuType === "ContextMenu";
116
+ var isAndroid = !isIos && !isWeb;
117
+ var resolved = null;
118
+ var warned = false;
119
+ function resolve() {
120
+ if (resolved) return resolved;
121
+ var adapter = getNativeMenuAdapter();
122
+ if (!adapter) {
123
+ if (!warned) {
124
+ warned = true;
125
+ console.warn(`Warning: Register a native menu adapter before rendering Tamagui native menus`);
126
+ }
127
+ return null;
128
+ }
129
+ var menu = isContextMenu ? adapter.ContextMenu : adapter.Menu;
130
+ resolved = {
131
+ menu,
132
+ componentMap: {
133
+ SubContent: menu.SubContent,
134
+ SubTrigger: menu.SubTrigger,
135
+ Content: menu.Content,
136
+ Sub: menu.Sub,
137
+ Group: menu.Group,
138
+ Item: menu.Item,
139
+ ItemTitle: menu.ItemTitle,
140
+ ItemSubtitle: menu.ItemSubtitle,
141
+ ItemIcon: menu.ItemIcon,
142
+ ItemImage: menu.ItemImage,
143
+ ItemIndicator: menu.ItemIndicator,
144
+ Label: menu.Label,
145
+ Separator: menu.Separator,
146
+ CheckboxItem: menu.CheckboxItem,
147
+ Preview: menu.Preview,
148
+ Auxiliary: menu.Auxiliary
149
+ }
150
+ };
151
+ return resolved;
152
+ }
153
+ function transformChildren(menu, map, children) {
154
+ var shouldReverseOnIos = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false, triggerBoundaryHandlers = arguments.length > 4 ? arguments[4] : void 0, radioContext = arguments.length > 5 ? arguments[5] : void 0;
155
+ var result = [];
156
+ React.Children.forEach(children, function(child) {
157
+ var _child_type;
158
+ if (!/* @__PURE__ */ React.isValidElement(child)) {
159
+ result.push(child);
160
+ return;
161
+ }
162
+ var displayName = ((_child_type = child.type) === null || _child_type === void 0 ? void 0 : _child_type.displayName) || "";
163
+ var props = child.props;
164
+ if (isPortalLike(displayName)) {
165
+ var inner = transformChildren(menu, map, props.children, false, triggerBoundaryHandlers, radioContext);
166
+ React.Children.forEach(inner, function(c) {
167
+ return result.push(c);
168
+ });
169
+ return;
170
+ }
171
+ if (displayName.includes("ScrollView")) {
172
+ var inner1 = transformChildren(menu, map, props.children, false, triggerBoundaryHandlers, radioContext);
173
+ React.Children.forEach(inner1, function(c) {
174
+ return result.push(c);
175
+ });
176
+ return;
177
+ }
178
+ if (isTriggerLike(displayName)) {
179
+ var debugName = getTriggerDebugName(MenuType, props);
180
+ var claim = function() {
181
+ return triggerBoundaryHandlers === null || triggerBoundaryHandlers === void 0 ? void 0 : triggerBoundaryHandlers.claim(debugName);
182
+ };
183
+ var release = function() {
184
+ return triggerBoundaryHandlers === null || triggerBoundaryHandlers === void 0 ? void 0 : triggerBoundaryHandlers.release(debugName);
185
+ };
186
+ var { children: triggerChildren, ...triggerProps } = props;
187
+ result.push(/* @__PURE__ */ React.createElement(menu.Trigger, {
188
+ ...triggerProps,
189
+ key: child.key,
190
+ onTouchStart: composeHandlers(claim, props.onTouchStart),
191
+ onTouchEnd: composeHandlers(props.onTouchEnd, release),
192
+ onTouchCancel: composeHandlers(props.onTouchCancel, release),
193
+ onResponderGrant: composeHandlers(claim, props.onResponderGrant),
194
+ onResponderRelease: composeHandlers(props.onResponderRelease, release),
195
+ onResponderTerminate: composeHandlers(props.onResponderTerminate, release),
196
+ onPressIn: composeHandlers(claim, props.onPressIn),
197
+ onPressOut: composeHandlers(props.onPressOut, release)
198
+ }, triggerChildren));
199
+ return;
200
+ }
201
+ if (displayName.includes("RadioGroup")) {
202
+ var { value: rgValue, onValueChange: rgOnValueChange, children: rgChildren, ...rest } = props;
203
+ result.push(/* @__PURE__ */ React.createElement(menu.Group, {
204
+ ...rest,
205
+ key: child.key
206
+ }, transformChildren(menu, map, rgChildren, false, triggerBoundaryHandlers, {
207
+ value: rgValue,
208
+ onValueChange: rgOnValueChange
209
+ })));
210
+ return;
211
+ }
212
+ if (displayName.includes("RadioItem") && radioContext) {
213
+ var { value: itemValue, children: rChildren, ...rest1 } = props;
214
+ var cleanChildren = React.Children.map(rChildren, function(c) {
215
+ var _c_type;
216
+ if (!/* @__PURE__ */ React.isValidElement(c)) return c;
217
+ var dn = ((_c_type = c.type) === null || _c_type === void 0 ? void 0 : _c_type.displayName) || "";
218
+ if (dn.includes("ItemIndicator")) return null;
219
+ return c;
220
+ });
221
+ result.push(/* @__PURE__ */ React.createElement(menu.CheckboxItem, {
222
+ ...rest1,
223
+ key: child.key,
224
+ value: itemValue === radioContext.value ? "on" : "off",
225
+ onValueChange: function() {
226
+ var _radioContext_onValueChange;
227
+ return (_radioContext_onValueChange = radioContext.onValueChange) === null || _radioContext_onValueChange === void 0 ? void 0 : _radioContext_onValueChange.call(radioContext, itemValue);
228
+ }
229
+ }, transformChildren(menu, map, cleanChildren, false, triggerBoundaryHandlers, radioContext)));
230
+ return;
231
+ }
232
+ var componentType = getComponentType(displayName);
233
+ if (componentType === "CheckboxItem") {
234
+ var { checked, onCheckedChange, value, onValueChange, children: cbChildren, ...rest2 } = props;
235
+ var finalValue = value !== null && value !== void 0 ? value : checked ? "on" : "off";
236
+ var finalOnValueChange = onValueChange !== null && onValueChange !== void 0 ? onValueChange : onCheckedChange && function(v) {
237
+ return onCheckedChange(v === "on");
238
+ };
239
+ var cleanChildren1 = React.Children.map(cbChildren, function(c) {
240
+ var _c_type;
241
+ if (!/* @__PURE__ */ React.isValidElement(c)) return c;
242
+ var dn = ((_c_type = c.type) === null || _c_type === void 0 ? void 0 : _c_type.displayName) || "";
243
+ if (dn.includes("ItemIndicator")) return null;
244
+ return c;
245
+ });
246
+ result.push(/* @__PURE__ */ React.createElement(menu.CheckboxItem, {
247
+ ...rest2,
248
+ key: child.key,
249
+ value: finalValue,
250
+ onValueChange: finalOnValueChange
251
+ }, transformChildren(menu, map, cleanChildren1, false, triggerBoundaryHandlers, radioContext)));
252
+ return;
253
+ }
254
+ if (componentType) {
255
+ var { children: childChildren, ...restProps } = props;
256
+ var AdapterComponent = map[componentType];
257
+ var isContainer = CONTAINER_TYPES.includes(componentType);
258
+ var shouldReverse = componentType === "Content" || componentType === "SubContent";
259
+ result.push(/* @__PURE__ */ React.createElement(AdapterComponent, {
260
+ ...restProps,
261
+ key: child.key
262
+ }, isContainer ? transformChildren(menu, map, childChildren, shouldReverse, triggerBoundaryHandlers, radioContext) : childChildren));
263
+ return;
264
+ }
265
+ if (isItemLike(props, displayName)) {
266
+ var { children: itemChildren, ...itemProps } = props;
267
+ result.push(/* @__PURE__ */ React.createElement(menu.Item, {
268
+ ...itemProps,
269
+ key: child.key
270
+ }, transformChildren(menu, map, itemChildren, false, triggerBoundaryHandlers, radioContext)));
271
+ return;
272
+ }
273
+ result.push(child);
274
+ });
275
+ if (isIos && shouldReverseOnIos && !isContextMenu) {
276
+ result.reverse();
277
+ }
278
+ return result;
279
+ }
280
+ function lazyAdapter(name, displayName) {
281
+ var Comp = function(props) {
282
+ var z = resolve();
283
+ if (!z) return null;
284
+ return /* @__PURE__ */ React.createElement(z.menu[name], props);
285
+ };
286
+ Comp.displayName = displayName || name;
287
+ return Comp;
288
+ }
289
+ var Trigger = lazyAdapter("Trigger");
290
+ var Content = lazyAdapter("Content");
291
+ var Item = lazyAdapter("Item");
292
+ var ItemTitle = lazyAdapter("ItemTitle");
293
+ var ItemSubtitle = lazyAdapter("ItemSubtitle");
294
+ var ItemIcon = lazyAdapter("ItemIcon");
295
+ var ItemImage = lazyAdapter("ItemImage");
296
+ var ItemIndicator = lazyAdapter("ItemIndicator");
297
+ var Group = lazyAdapter("Group");
298
+ var Label = lazyAdapter("Label");
299
+ var Separator = lazyAdapter("Separator");
300
+ var Sub = lazyAdapter("Sub");
301
+ var SubTrigger = lazyAdapter("SubTrigger");
302
+ var SubContent = lazyAdapter("SubContent");
303
+ var Portal = function(param) {
304
+ var { children } = param;
305
+ return /* @__PURE__ */ jsx(Fragment, { children });
306
+ };
307
+ Portal.displayName = "Portal";
308
+ var Arrow = function() {
309
+ return null;
310
+ };
311
+ Arrow.displayName = "Arrow";
312
+ var RadioGroup = function(param) {
313
+ var { children } = param;
314
+ return /* @__PURE__ */ jsx(Fragment, { children });
315
+ };
316
+ RadioGroup.displayName = `${MenuType}RadioGroup`;
317
+ var RadioItem = function(param) {
318
+ var { children } = param;
319
+ return /* @__PURE__ */ jsx(Fragment, { children });
320
+ };
321
+ RadioItem.displayName = `${MenuType}RadioItem`;
322
+ var CheckboxItem = function() {
323
+ return null;
324
+ };
325
+ CheckboxItem.displayName = "CheckboxItem";
326
+ var Preview = isContextMenu ? lazyAdapter("Preview", `${MenuType}Preview`) : function() {
327
+ return null;
328
+ };
329
+ Preview.displayName = `${MenuType}Preview`;
330
+ var Auxiliary = isContextMenu ? lazyAdapter("Auxiliary", `${MenuType}Auxiliary`) : function() {
331
+ return null;
332
+ };
333
+ Auxiliary.displayName = `${MenuType}Auxiliary`;
334
+ var Menu = function(param) {
335
+ var { children, onOpenChange, onOpenWillChange } = param;
336
+ var triggerOwnerRef = React.useRef(null);
337
+ var claimTriggerBoundary = React.useCallback(function(debugName) {
338
+ if (triggerOwnerRef.current) {
339
+ unstable_releaseExternalPressOwnership(triggerOwnerRef.current, debugName);
340
+ }
341
+ triggerOwnerRef.current = unstable_claimExternalPressOwnership(debugName);
342
+ }, []);
343
+ var releaseTriggerBoundary = React.useCallback(function(debugName) {
344
+ if (!triggerOwnerRef.current) return;
345
+ unstable_releaseExternalPressOwnership(triggerOwnerRef.current, debugName);
346
+ triggerOwnerRef.current = null;
347
+ }, []);
348
+ React.useEffect(function() {
349
+ return releaseTriggerBoundary;
350
+ }, [releaseTriggerBoundary]);
351
+ var z = resolve();
352
+ if (!z) return null;
353
+ var handleOpenChange = React.useCallback(function(isOpen) {
354
+ if (!isOpen) {
355
+ releaseTriggerBoundary();
356
+ }
357
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(isOpen);
358
+ }, [onOpenChange, releaseTriggerBoundary]);
359
+ var handleOpenWillChange = React.useCallback(function(willOpen) {
360
+ if (!willOpen) {
361
+ releaseTriggerBoundary();
362
+ }
363
+ onOpenWillChange === null || onOpenWillChange === void 0 ? void 0 : onOpenWillChange(willOpen);
364
+ }, [onOpenWillChange, releaseTriggerBoundary]);
365
+ var rootProps = { onOpenChange: handleOpenChange };
366
+ if (isContextMenu && onOpenWillChange) {
367
+ rootProps.onOpenWillChange = handleOpenWillChange;
368
+ }
369
+ var content = /* @__PURE__ */ jsx(z.menu.Root, {
370
+ ...rootProps,
371
+ children: transformChildren(z.menu, z.componentMap, children, false, {
372
+ claim: claimTriggerBoundary,
373
+ release: releaseTriggerBoundary
374
+ })
375
+ });
376
+ if (isAndroid) {
377
+ return /* @__PURE__ */ jsx(NativeMenuContext.Provider, {
378
+ value: true,
379
+ children: content
380
+ });
381
+ }
382
+ return content;
383
+ };
384
+ Menu.displayName = MenuType;
385
+ return { Menu: withStaticProperties(Menu, {
386
+ Trigger,
387
+ Content,
388
+ Item,
389
+ ItemTitle,
390
+ ItemSubtitle,
391
+ ItemIcon,
392
+ ItemImage,
393
+ ItemIndicator,
394
+ Group,
395
+ Label,
396
+ Separator,
397
+ Sub,
398
+ SubTrigger,
399
+ SubContent,
400
+ CheckboxItem,
401
+ Portal,
402
+ RadioGroup,
403
+ RadioItem,
404
+ Arrow,
405
+ Preview,
406
+ Auxiliary
407
+ }) };
434
408
  };
409
+
435
410
  export { createNativeMenu };
436
411
  //# sourceMappingURL=createNativeMenu.native.js.map