@tamagui/create-menu 2.0.0-rc.9 → 2.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 (148) hide show
  1. package/dist/cjs/MenuPredefined.cjs +159 -157
  2. package/dist/cjs/MenuPredefined.native.js +159 -157
  3. package/dist/cjs/MenuPredefined.native.js.map +1 -1
  4. package/dist/cjs/createBaseMenu.cjs +1150 -941
  5. package/dist/cjs/createBaseMenu.native.js +1280 -1108
  6. package/dist/cjs/createBaseMenu.native.js.map +1 -1
  7. package/dist/cjs/createNativeMenu/createNativeMenu.cjs +318 -159
  8. package/dist/cjs/createNativeMenu/createNativeMenu.native.js +430 -267
  9. package/dist/cjs/createNativeMenu/createNativeMenu.native.js.map +1 -1
  10. package/dist/cjs/createNativeMenu/createNativeMenuTypes.cjs +7 -5
  11. package/dist/cjs/createNativeMenu/createNativeMenuTypes.native.js +7 -5
  12. package/dist/cjs/createNativeMenu/createNativeMenuTypes.native.js.map +1 -1
  13. package/dist/cjs/createNativeMenu/utils.cjs +85 -42
  14. package/dist/cjs/createNativeMenu/utils.native.js +83 -58
  15. package/dist/cjs/createNativeMenu/utils.native.js.map +1 -1
  16. package/dist/cjs/createNativeMenu/withNativeMenu.cjs +27 -17
  17. package/dist/cjs/createNativeMenu/withNativeMenu.native.js +22 -14
  18. package/dist/cjs/createNativeMenu/withNativeMenu.native.js.map +1 -1
  19. package/dist/cjs/index.cjs +15 -12
  20. package/dist/cjs/index.native.js +15 -12
  21. package/dist/cjs/index.native.js.map +1 -1
  22. package/dist/esm/MenuPredefined.mjs +144 -144
  23. package/dist/esm/MenuPredefined.mjs.map +1 -1
  24. package/dist/esm/MenuPredefined.native.js +144 -144
  25. package/dist/esm/MenuPredefined.native.js.map +1 -1
  26. package/dist/esm/createBaseMenu.mjs +1110 -903
  27. package/dist/esm/createBaseMenu.mjs.map +1 -1
  28. package/dist/esm/createBaseMenu.native.js +1240 -1070
  29. package/dist/esm/createBaseMenu.native.js.map +1 -1
  30. package/dist/esm/createNativeMenu/createNativeMenu.mjs +291 -134
  31. package/dist/esm/createNativeMenu/createNativeMenu.mjs.map +1 -1
  32. package/dist/esm/createNativeMenu/createNativeMenu.native.js +377 -216
  33. package/dist/esm/createNativeMenu/createNativeMenu.native.js.map +1 -1
  34. package/dist/esm/createNativeMenu/utils.mjs +58 -17
  35. package/dist/esm/createNativeMenu/utils.mjs.map +1 -1
  36. package/dist/esm/createNativeMenu/utils.native.js +57 -34
  37. package/dist/esm/createNativeMenu/utils.native.js.map +1 -1
  38. package/dist/esm/createNativeMenu/withNativeMenu.mjs +13 -5
  39. package/dist/esm/createNativeMenu/withNativeMenu.mjs.map +1 -1
  40. package/dist/esm/createNativeMenu/withNativeMenu.native.js +8 -2
  41. package/dist/esm/createNativeMenu/withNativeMenu.native.js.map +1 -1
  42. package/dist/esm/index.js +5 -6
  43. package/dist/esm/index.js.map +1 -6
  44. package/dist/esm/index.mjs +2 -1
  45. package/dist/esm/index.mjs.map +1 -1
  46. package/dist/esm/index.native.js +2 -1
  47. package/dist/esm/index.native.js.map +1 -1
  48. package/dist/jsx/MenuPredefined.mjs +144 -144
  49. package/dist/jsx/MenuPredefined.mjs.map +1 -1
  50. package/dist/jsx/MenuPredefined.native.js +159 -157
  51. package/dist/jsx/MenuPredefined.native.js.map +1 -1
  52. package/dist/jsx/createBaseMenu.mjs +1110 -903
  53. package/dist/jsx/createBaseMenu.mjs.map +1 -1
  54. package/dist/jsx/createBaseMenu.native.js +1280 -1108
  55. package/dist/jsx/createBaseMenu.native.js.map +1 -1
  56. package/dist/jsx/createNativeMenu/createNativeMenu.mjs +291 -134
  57. package/dist/jsx/createNativeMenu/createNativeMenu.mjs.map +1 -1
  58. package/dist/jsx/createNativeMenu/createNativeMenu.native.js +430 -267
  59. package/dist/jsx/createNativeMenu/createNativeMenu.native.js.map +1 -1
  60. package/dist/jsx/createNativeMenu/createNativeMenuTypes.native.js +7 -5
  61. package/dist/jsx/createNativeMenu/utils.mjs +58 -17
  62. package/dist/jsx/createNativeMenu/utils.mjs.map +1 -1
  63. package/dist/jsx/createNativeMenu/utils.native.js +83 -58
  64. package/dist/jsx/createNativeMenu/utils.native.js.map +1 -1
  65. package/dist/jsx/createNativeMenu/withNativeMenu.mjs +13 -5
  66. package/dist/jsx/createNativeMenu/withNativeMenu.mjs.map +1 -1
  67. package/dist/jsx/createNativeMenu/withNativeMenu.native.js +22 -14
  68. package/dist/jsx/createNativeMenu/withNativeMenu.native.js.map +1 -1
  69. package/dist/jsx/index.js +5 -6
  70. package/dist/jsx/index.js.map +1 -6
  71. package/dist/jsx/index.mjs +2 -1
  72. package/dist/jsx/index.mjs.map +1 -1
  73. package/dist/jsx/index.native.js +15 -12
  74. package/dist/jsx/index.native.js.map +1 -1
  75. package/package.json +25 -25
  76. package/src/createBaseMenu.tsx +367 -266
  77. package/src/createNativeMenu/createNativeMenu.tsx +448 -220
  78. package/src/createNativeMenu/createNativeMenuTypes.ts +20 -20
  79. package/src/createNativeMenu/withNativeMenu.tsx +5 -3
  80. package/src/index.tsx +3 -5
  81. package/types/createBaseMenu.d.ts +117 -31
  82. package/types/createBaseMenu.d.ts.map +1 -1
  83. package/types/createNativeMenu/createNativeMenu.d.ts +21 -21
  84. package/types/createNativeMenu/createNativeMenu.d.ts.map +1 -1
  85. package/types/createNativeMenu/createNativeMenuTypes.d.ts +20 -20
  86. package/types/createNativeMenu/createNativeMenuTypes.d.ts.map +1 -1
  87. package/types/createNativeMenu/withNativeMenu.d.ts +3 -3
  88. package/types/createNativeMenu/withNativeMenu.d.ts.map +1 -1
  89. package/types/index.d.ts +3 -2
  90. package/types/index.d.ts.map +1 -1
  91. package/dist/cjs/MenuPredefined.js +0 -168
  92. package/dist/cjs/MenuPredefined.js.map +0 -6
  93. package/dist/cjs/createBaseMenu.js +0 -843
  94. package/dist/cjs/createBaseMenu.js.map +0 -6
  95. package/dist/cjs/createNativeMenu/createNativeMenu.js +0 -177
  96. package/dist/cjs/createNativeMenu/createNativeMenu.js.map +0 -6
  97. package/dist/cjs/createNativeMenu/createNativeMenuTypes.js +0 -14
  98. package/dist/cjs/createNativeMenu/createNativeMenuTypes.js.map +0 -6
  99. package/dist/cjs/createNativeMenu/index.cjs +0 -19
  100. package/dist/cjs/createNativeMenu/index.js +0 -16
  101. package/dist/cjs/createNativeMenu/index.js.map +0 -6
  102. package/dist/cjs/createNativeMenu/index.native.js +0 -22
  103. package/dist/cjs/createNativeMenu/index.native.js.map +0 -1
  104. package/dist/cjs/createNativeMenu/utils.js +0 -66
  105. package/dist/cjs/createNativeMenu/utils.js.map +0 -6
  106. package/dist/cjs/createNativeMenu/withNativeMenu.js +0 -30
  107. package/dist/cjs/createNativeMenu/withNativeMenu.js.map +0 -6
  108. package/dist/cjs/index.js +0 -23
  109. package/dist/cjs/index.js.map +0 -6
  110. package/dist/esm/MenuPredefined.js +0 -154
  111. package/dist/esm/MenuPredefined.js.map +0 -6
  112. package/dist/esm/createBaseMenu.js +0 -849
  113. package/dist/esm/createBaseMenu.js.map +0 -6
  114. package/dist/esm/createNativeMenu/createNativeMenu.js +0 -156
  115. package/dist/esm/createNativeMenu/createNativeMenu.js.map +0 -6
  116. package/dist/esm/createNativeMenu/createNativeMenuTypes.js +0 -1
  117. package/dist/esm/createNativeMenu/createNativeMenuTypes.js.map +0 -6
  118. package/dist/esm/createNativeMenu/index.js +0 -3
  119. package/dist/esm/createNativeMenu/index.js.map +0 -6
  120. package/dist/esm/createNativeMenu/index.mjs +0 -3
  121. package/dist/esm/createNativeMenu/index.mjs.map +0 -1
  122. package/dist/esm/createNativeMenu/index.native.js +0 -3
  123. package/dist/esm/createNativeMenu/index.native.js.map +0 -1
  124. package/dist/esm/createNativeMenu/utils.js +0 -47
  125. package/dist/esm/createNativeMenu/utils.js.map +0 -6
  126. package/dist/esm/createNativeMenu/withNativeMenu.js +0 -15
  127. package/dist/esm/createNativeMenu/withNativeMenu.js.map +0 -6
  128. package/dist/jsx/MenuPredefined.js +0 -154
  129. package/dist/jsx/MenuPredefined.js.map +0 -6
  130. package/dist/jsx/createBaseMenu.js +0 -849
  131. package/dist/jsx/createBaseMenu.js.map +0 -6
  132. package/dist/jsx/createNativeMenu/createNativeMenu.js +0 -156
  133. package/dist/jsx/createNativeMenu/createNativeMenu.js.map +0 -6
  134. package/dist/jsx/createNativeMenu/createNativeMenuTypes.js +0 -1
  135. package/dist/jsx/createNativeMenu/createNativeMenuTypes.js.map +0 -6
  136. package/dist/jsx/createNativeMenu/index.js +0 -3
  137. package/dist/jsx/createNativeMenu/index.js.map +0 -6
  138. package/dist/jsx/createNativeMenu/index.mjs +0 -3
  139. package/dist/jsx/createNativeMenu/index.mjs.map +0 -1
  140. package/dist/jsx/createNativeMenu/index.native.js +0 -22
  141. package/dist/jsx/createNativeMenu/index.native.js.map +0 -1
  142. package/dist/jsx/createNativeMenu/utils.js +0 -47
  143. package/dist/jsx/createNativeMenu/utils.js.map +0 -6
  144. package/dist/jsx/createNativeMenu/withNativeMenu.js +0 -15
  145. package/dist/jsx/createNativeMenu/withNativeMenu.js.map +0 -6
  146. package/src/createNativeMenu/index.tsx +0 -7
  147. package/types/createNativeMenu/index.d.ts +0 -4
  148. package/types/createNativeMenu/index.d.ts.map +0 -1
@@ -2,173 +2,291 @@ var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf,
6
- __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: !0
11
- });
12
- },
13
- __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
15
16
  get: () => from[key],
16
17
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
18
  });
18
- return to;
19
- };
19
+ }
20
+ return to;
21
+ };
20
22
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
26
- value: mod,
27
- enumerable: !0
28
- }) : target, mod)),
29
- __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
30
- value: !0
31
- }), mod);
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
+ value: mod,
29
+ enumerable: true
30
+ }) : target, mod));
31
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
+ value: true
33
+ }), mod);
32
34
  var createNativeMenu_exports = {};
33
35
  __export(createNativeMenu_exports, {
34
36
  createNativeMenu: () => createNativeMenu
35
37
  });
36
38
  module.exports = __toCommonJS(createNativeMenu_exports);
37
- var import_native = require("@tamagui/native"),
38
- import_web = require("@tamagui/web"),
39
- import_react = __toESM(require("react"), 1),
40
- import_jsx_runtime = require("react/jsx-runtime");
41
- const createNativeMenu = MenuType => {
42
- if (import_web.isWeb) return {
43
- Menu: (0, import_web.withStaticProperties)({}, {
44
- Trigger: {},
45
- Content: {},
46
- Item: {},
47
- ItemTitle: {},
48
- ItemSubtitle: {},
49
- SubTrigger: {},
50
- Group: {},
51
- ItemIcon: {},
52
- Separator: {},
53
- CheckboxItem: {},
54
- ItemIndicator: {},
55
- ItemImage: {},
56
- Label: {},
57
- Arrow: {},
58
- Sub: {},
59
- SubContent: {},
60
- Preview: {},
61
- Portal: {},
62
- RadioGroup: {},
63
- RadioItem: {},
64
- Auxiliary: {}
65
- })
39
+ var import_native = require("@tamagui/native");
40
+ var import_web = require("@tamagui/web");
41
+ var import_react = __toESM(require("react"), 1);
42
+ var import_jsx_runtime = require("react/jsx-runtime");
43
+ const MAPPED_TYPES = ["SubContent", "SubTrigger", "Content", "Sub", "Group", "CheckboxItem"];
44
+ const CONTAINER_TYPES = ["SubContent", "Content", "Sub", "Group"];
45
+ function getComponentType(displayName) {
46
+ for (const type of MAPPED_TYPES) {
47
+ if (displayName === type || displayName.includes(`(${type})`)) {
48
+ return type;
49
+ }
50
+ }
51
+ return null;
52
+ }
53
+ function isItemLike(props, displayName) {
54
+ if (getComponentType(displayName)) return false;
55
+ return "onSelect" in props || "textValue" in props;
56
+ }
57
+ function isPortalLike(displayName) {
58
+ return displayName === "Portal" || displayName.includes("Portal");
59
+ }
60
+ function isTriggerLike(displayName) {
61
+ return displayName === "Trigger" || displayName.includes("(Trigger)");
62
+ }
63
+ function composeHandlers(first, second) {
64
+ return (...args) => {
65
+ first?.(...args);
66
+ second?.(...args);
66
67
  };
67
- const zeego = (0, import_native.getZeego)();
68
- if (!zeego.isEnabled) return console.warn("Warning: Must call import '@tamagui/native/setup-zeego' at your app entry point to use native menus"), {
69
- Menu: {}
68
+ }
69
+ function getTriggerDebugName(menuType, props) {
70
+ const childProps = import_react.default.isValidElement(props.children) && props.children.props ? props.children.props : null;
71
+ const prefix = menuType === "ContextMenu" ? "ContextMenuTrigger" : "MenuTrigger";
72
+ const detail = childProps?.testID ?? childProps?.accessibilityLabel ?? (typeof props.textValue === "string" ? props.textValue : null);
73
+ return [prefix, detail].filter(Boolean).join(":") || prefix;
74
+ }
75
+ const emptyStub = () => null;
76
+ function createWebStubs() {
77
+ return {
78
+ Menu: (0, import_web.withStaticProperties)(emptyStub, {
79
+ Trigger: emptyStub,
80
+ Content: emptyStub,
81
+ Item: emptyStub,
82
+ ItemTitle: emptyStub,
83
+ ItemSubtitle: emptyStub,
84
+ SubTrigger: emptyStub,
85
+ Group: emptyStub,
86
+ ItemIcon: emptyStub,
87
+ Separator: emptyStub,
88
+ CheckboxItem: emptyStub,
89
+ ItemIndicator: emptyStub,
90
+ ItemImage: emptyStub,
91
+ Label: emptyStub,
92
+ Arrow: emptyStub,
93
+ Sub: emptyStub,
94
+ SubContent: emptyStub,
95
+ Preview: emptyStub,
96
+ Portal: emptyStub,
97
+ RadioGroup: emptyStub,
98
+ RadioItem: emptyStub,
99
+ Auxiliary: emptyStub
100
+ })
70
101
  };
71
- const {
72
- DropdownMenu: ZeegoDropdownMenu,
73
- ContextMenu: ZeegoContextMenu
74
- } = zeego.state,
75
- isContextMenu = MenuType === "ContextMenu",
76
- ZeegoMenu = isContextMenu ? ZeegoContextMenu : ZeegoDropdownMenu,
77
- COMPONENT_MAP = {
78
- SubContent: ZeegoMenu.SubContent,
79
- Content: ZeegoMenu.Content,
80
- Sub: ZeegoMenu.Sub,
81
- Group: ZeegoMenu.Group,
82
- SubTrigger: ZeegoMenu.SubTrigger
83
- },
84
- CONTAINER_TYPES = ["SubContent", "Content", "Sub", "Group"],
85
- getComponentType = displayName => {
86
- for (const type of ["SubContent", "SubTrigger", "Content", "Sub", "Group", "CheckboxItem"]) if (displayName === type || displayName.includes(`(${type})`)) return type;
102
+ }
103
+ const createNativeMenu = MenuType => {
104
+ if (import_web.isWeb) {
105
+ return createWebStubs();
106
+ }
107
+ const isContextMenu = MenuType === "ContextMenu";
108
+ const isAndroid = !import_web.isIos && !import_web.isWeb;
109
+ let resolved = null;
110
+ let warned = false;
111
+ function resolve() {
112
+ if (resolved) return resolved;
113
+ const zeego = (0, import_native.getZeego)();
114
+ if (!zeego.isEnabled) {
115
+ if (!warned) {
116
+ warned = true;
117
+ console.warn(`Warning: Must call import '@tamagui/native/setup-zeego' at your app entry point to use native menus`);
118
+ }
87
119
  return null;
88
- },
89
- isItemLike = (props, displayName) => getComponentType(displayName) ? !1 : "onSelect" in props || "textValue" in props,
90
- isPortal = displayName => displayName === "Portal" || displayName.includes("Portal"),
91
- transformForZeego = (children, shouldReverseOnIos = !1) => {
92
- const result = [];
93
- return import_react.default.Children.forEach(children, child => {
94
- if (!import_react.default.isValidElement(child)) {
95
- result.push(child);
96
- return;
97
- }
98
- const displayName = child.type?.displayName || "",
99
- props = child.props;
100
- if (isPortal(displayName)) {
101
- const portalChildren = transformForZeego(props.children, !1);
102
- import_react.default.Children.forEach(portalChildren, c => result.push(c));
103
- return;
104
- }
105
- const componentType = getComponentType(displayName);
106
- if (componentType === "CheckboxItem") {
107
- const {
108
- checked,
109
- onCheckedChange,
110
- value,
111
- onValueChange,
112
- children: children2,
113
- ...rest
114
- } = props,
115
- finalValue = value ?? (checked ? "on" : "off"),
116
- finalOnValueChange = onValueChange ?? (onCheckedChange && (v => onCheckedChange(v === "on"))),
117
- cleanChildren = import_react.default.Children.map(children2, child2 => import_react.default.isValidElement(child2) && (child2.type?.displayName || "").includes("ItemIndicator") ? null : child2);
118
- result.push(import_react.default.createElement(ZeegoMenu.CheckboxItem, {
119
- ...rest,
120
- key: child.key,
121
- value: finalValue,
122
- onValueChange: finalOnValueChange
123
- }, cleanChildren));
124
- return;
125
- }
126
- if (componentType) {
127
- const {
128
- children: childChildren,
129
- ...restProps
130
- } = props,
131
- isContainer = CONTAINER_TYPES.includes(componentType),
132
- shouldReverseChildren = componentType === "Content" || componentType === "SubContent";
133
- result.push(import_react.default.createElement(COMPONENT_MAP[componentType], {
134
- ...restProps,
135
- key: child.key
136
- }, isContainer ? transformForZeego(childChildren, shouldReverseChildren) : childChildren));
137
- return;
138
- }
139
- if (isItemLike(props, displayName)) {
140
- const {
141
- children: itemChildren,
142
- ...itemProps
143
- } = props;
144
- result.push(import_react.default.createElement(ZeegoMenu.Item, {
145
- ...itemProps,
146
- key: child.key
147
- }, itemChildren));
148
- return;
149
- }
120
+ }
121
+ const menu = isContextMenu ? zeego.state.ContextMenu : zeego.state.DropdownMenu;
122
+ resolved = {
123
+ menu,
124
+ componentMap: {
125
+ SubContent: menu.SubContent,
126
+ Content: menu.Content,
127
+ Sub: menu.Sub,
128
+ Group: menu.Group,
129
+ SubTrigger: menu.SubTrigger
130
+ }
131
+ };
132
+ return resolved;
133
+ }
134
+ function transformChildren(menu, map, children, shouldReverseOnIos = false, triggerBoundaryHandlers, radioContext) {
135
+ const result = [];
136
+ import_react.default.Children.forEach(children, child => {
137
+ if (!import_react.default.isValidElement(child)) {
150
138
  result.push(child);
151
- }), import_web.isIos && shouldReverseOnIos && !isContextMenu && result.reverse(), result;
152
- },
153
- Trigger = ZeegoMenu.Trigger,
154
- Content = ZeegoMenu.Content,
155
- Item = ZeegoMenu.Item,
156
- ItemTitle = ZeegoMenu.ItemTitle,
157
- ItemSubtitle = ZeegoMenu.ItemSubtitle,
158
- ItemIcon = ZeegoMenu.ItemIcon,
159
- ItemImage = ZeegoMenu.ItemImage,
160
- ItemIndicator = ZeegoMenu.ItemIndicator,
161
- Group = ZeegoMenu.Group,
162
- Label = ZeegoMenu.Label,
163
- Separator = ZeegoMenu.Separator,
164
- Sub = ZeegoMenu.Sub,
165
- SubTrigger = ZeegoMenu.SubTrigger,
166
- SubContent = ZeegoMenu.SubContent,
167
- Portal = ({
168
- children
169
- }) => /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
170
- children
139
+ return;
140
+ }
141
+ const displayName = child.type?.displayName || "";
142
+ const props = child.props;
143
+ if (isPortalLike(displayName)) {
144
+ const inner = transformChildren(menu, map, props.children, false, triggerBoundaryHandlers, radioContext);
145
+ import_react.default.Children.forEach(inner, c => result.push(c));
146
+ return;
147
+ }
148
+ if (displayName.includes("ScrollView")) {
149
+ const inner = transformChildren(menu, map, props.children, false, triggerBoundaryHandlers, radioContext);
150
+ import_react.default.Children.forEach(inner, c => result.push(c));
151
+ return;
152
+ }
153
+ if (isTriggerLike(displayName)) {
154
+ const debugName = getTriggerDebugName(MenuType, props);
155
+ const claim = () => triggerBoundaryHandlers?.claim(debugName);
156
+ const release = () => triggerBoundaryHandlers?.release(debugName);
157
+ result.push(import_react.default.cloneElement(child, {
158
+ onTouchStart: composeHandlers(claim, props.onTouchStart),
159
+ onTouchEnd: composeHandlers(props.onTouchEnd, release),
160
+ onTouchCancel: composeHandlers(props.onTouchCancel, release),
161
+ onResponderGrant: composeHandlers(claim, props.onResponderGrant),
162
+ onResponderRelease: composeHandlers(props.onResponderRelease, release),
163
+ onResponderTerminate: composeHandlers(props.onResponderTerminate, release),
164
+ onPressIn: composeHandlers(claim, props.onPressIn),
165
+ onPressOut: composeHandlers(props.onPressOut, release)
166
+ }));
167
+ return;
168
+ }
169
+ if (displayName.includes("RadioGroup")) {
170
+ const {
171
+ value: rgValue,
172
+ onValueChange: rgOnValueChange,
173
+ children: rgChildren,
174
+ ...rest
175
+ } = props;
176
+ result.push(import_react.default.createElement(menu.Group, {
177
+ ...rest,
178
+ key: child.key
179
+ }, transformChildren(menu, map, rgChildren, false, triggerBoundaryHandlers, {
180
+ value: rgValue,
181
+ onValueChange: rgOnValueChange
182
+ })));
183
+ return;
184
+ }
185
+ if (displayName.includes("RadioItem") && radioContext) {
186
+ const {
187
+ value: itemValue,
188
+ children: rChildren,
189
+ ...rest
190
+ } = props;
191
+ const cleanChildren = import_react.default.Children.map(rChildren, c => {
192
+ if (!import_react.default.isValidElement(c)) return c;
193
+ const dn = c.type?.displayName || "";
194
+ if (dn.includes("ItemIndicator")) return null;
195
+ return c;
196
+ });
197
+ result.push(import_react.default.createElement(menu.CheckboxItem, {
198
+ ...rest,
199
+ key: child.key,
200
+ value: itemValue === radioContext.value ? "on" : "off",
201
+ onValueChange: () => radioContext.onValueChange?.(itemValue)
202
+ }, cleanChildren));
203
+ return;
204
+ }
205
+ const componentType = getComponentType(displayName);
206
+ if (componentType === "CheckboxItem") {
207
+ const {
208
+ checked,
209
+ onCheckedChange,
210
+ value,
211
+ onValueChange,
212
+ children: cbChildren,
213
+ ...rest
214
+ } = props;
215
+ const finalValue = value ?? (checked ? "on" : "off");
216
+ const finalOnValueChange = onValueChange ?? (onCheckedChange && (v => onCheckedChange(v === "on")));
217
+ const cleanChildren = import_react.default.Children.map(cbChildren, c => {
218
+ if (!import_react.default.isValidElement(c)) return c;
219
+ const dn = c.type?.displayName || "";
220
+ if (dn.includes("ItemIndicator")) return null;
221
+ return c;
222
+ });
223
+ result.push(import_react.default.createElement(menu.CheckboxItem, {
224
+ ...rest,
225
+ key: child.key,
226
+ value: finalValue,
227
+ onValueChange: finalOnValueChange
228
+ }, cleanChildren));
229
+ return;
230
+ }
231
+ if (componentType) {
232
+ const {
233
+ children: childChildren,
234
+ ...restProps
235
+ } = props;
236
+ const isContainer = CONTAINER_TYPES.includes(componentType);
237
+ const shouldReverse = componentType === "Content" || componentType === "SubContent";
238
+ result.push(import_react.default.createElement(map[componentType], {
239
+ ...restProps,
240
+ key: child.key
241
+ }, isContainer ? transformChildren(menu, map, childChildren, shouldReverse, triggerBoundaryHandlers, radioContext) : childChildren));
242
+ return;
243
+ }
244
+ if (isItemLike(props, displayName)) {
245
+ const {
246
+ children: itemChildren,
247
+ ...itemProps
248
+ } = props;
249
+ result.push(import_react.default.createElement(menu.Item, {
250
+ ...itemProps,
251
+ key: child.key
252
+ }, itemChildren));
253
+ return;
254
+ }
255
+ result.push(child);
171
256
  });
257
+ if (import_web.isIos && shouldReverseOnIos && !isContextMenu) {
258
+ result.reverse();
259
+ }
260
+ return result;
261
+ }
262
+ function lazyZeego(name, displayName) {
263
+ const Comp = props => {
264
+ const z = resolve();
265
+ if (!z) return null;
266
+ return import_react.default.createElement(z.menu[name], props);
267
+ };
268
+ Comp.displayName = displayName || name;
269
+ return Comp;
270
+ }
271
+ const Trigger = lazyZeego("Trigger");
272
+ const Content = lazyZeego("Content");
273
+ const Item = lazyZeego("Item");
274
+ const ItemTitle = lazyZeego("ItemTitle");
275
+ const ItemSubtitle = lazyZeego("ItemSubtitle");
276
+ const ItemIcon = lazyZeego("ItemIcon");
277
+ const ItemImage = lazyZeego("ItemImage");
278
+ const ItemIndicator = lazyZeego("ItemIndicator");
279
+ const Group = lazyZeego("Group");
280
+ const Label = lazyZeego("Label");
281
+ const Separator = lazyZeego("Separator");
282
+ const Sub = lazyZeego("Sub");
283
+ const SubTrigger = lazyZeego("SubTrigger");
284
+ const SubContent = lazyZeego("SubContent");
285
+ const Portal = ({
286
+ children
287
+ }) => /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
288
+ children
289
+ });
172
290
  Portal.displayName = "Portal";
173
291
  const Arrow = () => null;
174
292
  Arrow.displayName = "Arrow";
@@ -184,26 +302,67 @@ const createNativeMenu = MenuType => {
184
302
  children
185
303
  });
186
304
  RadioItem.displayName = `${MenuType}RadioItem`;
187
- const CheckboxItem = props => null;
305
+ const CheckboxItem = () => null;
188
306
  CheckboxItem.displayName = "CheckboxItem";
189
- const Preview = isContextMenu ? ZeegoContextMenu.Preview : () => null;
307
+ const Preview = isContextMenu ? lazyZeego("Preview", `${MenuType}Preview`) : () => null;
190
308
  Preview.displayName = `${MenuType}Preview`;
191
- const Auxiliary = isContextMenu ? ZeegoContextMenu.Auxiliary : () => null;
309
+ const Auxiliary = isContextMenu ? lazyZeego("Auxiliary", `${MenuType}Auxiliary`) : () => null;
192
310
  Auxiliary.displayName = `${MenuType}Auxiliary`;
193
311
  const Menu = ({
194
312
  children,
195
313
  onOpenChange,
196
314
  onOpenWillChange
197
315
  }) => {
316
+ const triggerOwnerRef = import_react.default.useRef(null);
317
+ const claimTriggerBoundary = import_react.default.useCallback(debugName => {
318
+ if (triggerOwnerRef.current) {
319
+ (0, import_native.unstable_releaseExternalPressOwnership)(triggerOwnerRef.current, debugName);
320
+ }
321
+ triggerOwnerRef.current = (0, import_native.unstable_claimExternalPressOwnership)(debugName);
322
+ }, []);
323
+ const releaseTriggerBoundary = import_react.default.useCallback(debugName => {
324
+ if (!triggerOwnerRef.current) return;
325
+ (0, import_native.unstable_releaseExternalPressOwnership)(triggerOwnerRef.current, debugName);
326
+ triggerOwnerRef.current = null;
327
+ }, []);
328
+ import_react.default.useEffect(() => releaseTriggerBoundary, [releaseTriggerBoundary]);
329
+ const z = resolve();
330
+ if (!z) return null;
331
+ const handleOpenChange = import_react.default.useCallback(isOpen => {
332
+ if (!isOpen) {
333
+ releaseTriggerBoundary();
334
+ }
335
+ onOpenChange?.(isOpen);
336
+ }, [onOpenChange, releaseTriggerBoundary]);
337
+ const handleOpenWillChange = import_react.default.useCallback(willOpen => {
338
+ if (!willOpen) {
339
+ releaseTriggerBoundary();
340
+ }
341
+ onOpenWillChange?.(willOpen);
342
+ }, [onOpenWillChange, releaseTriggerBoundary]);
198
343
  const rootProps = {
199
- onOpenChange
344
+ onOpenChange: handleOpenChange
200
345
  };
201
- return isContextMenu && onOpenWillChange && (rootProps.onOpenWillChange = onOpenWillChange), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ZeegoMenu.Root, {
346
+ if (isContextMenu && onOpenWillChange) {
347
+ rootProps.onOpenWillChange = handleOpenWillChange;
348
+ }
349
+ const content = /* @__PURE__ */(0, import_jsx_runtime.jsx)(z.menu.Root, {
202
350
  ...rootProps,
203
- children: transformForZeego(children)
351
+ children: transformChildren(z.menu, z.componentMap, children, false, {
352
+ claim: claimTriggerBoundary,
353
+ release: releaseTriggerBoundary
354
+ })
204
355
  });
356
+ if (isAndroid) {
357
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_native.NativeMenuContext.Provider, {
358
+ value: true,
359
+ children: content
360
+ });
361
+ }
362
+ return content;
205
363
  };
206
- return Menu.displayName = MenuType, {
364
+ Menu.displayName = MenuType;
365
+ return {
207
366
  Menu: (0, import_web.withStaticProperties)(Menu, {
208
367
  Trigger,
209
368
  Content,