@tamagui/create-menu 2.0.0-rc.4 → 2.0.0-rc.40

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 (149) 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 +1144 -933
  5. package/dist/cjs/createBaseMenu.native.js +1266 -1100
  6. package/dist/cjs/createBaseMenu.native.js.map +1 -1
  7. package/dist/cjs/createNativeMenu/createNativeMenu.cjs +282 -159
  8. package/dist/cjs/createNativeMenu/createNativeMenu.native.js +390 -268
  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 +1104 -895
  27. package/dist/esm/createBaseMenu.mjs.map +1 -1
  28. package/dist/esm/createBaseMenu.native.js +1226 -1062
  29. package/dist/esm/createBaseMenu.native.js.map +1 -1
  30. package/dist/esm/createNativeMenu/createNativeMenu.mjs +255 -134
  31. package/dist/esm/createNativeMenu/createNativeMenu.mjs.map +1 -1
  32. package/dist/esm/createNativeMenu/createNativeMenu.native.js +336 -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 +1104 -895
  53. package/dist/jsx/createBaseMenu.mjs.map +1 -1
  54. package/dist/jsx/createBaseMenu.native.js +1266 -1100
  55. package/dist/jsx/createBaseMenu.native.js.map +1 -1
  56. package/dist/jsx/createNativeMenu/createNativeMenu.mjs +255 -134
  57. package/dist/jsx/createNativeMenu/createNativeMenu.mjs.map +1 -1
  58. package/dist/jsx/createNativeMenu/createNativeMenu.native.js +390 -268
  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 -27
  76. package/src/MenuPredefined.tsx +1 -1
  77. package/src/createBaseMenu.tsx +359 -271
  78. package/src/createNativeMenu/createNativeMenu.tsx +383 -222
  79. package/src/createNativeMenu/createNativeMenuTypes.ts +20 -20
  80. package/src/createNativeMenu/withNativeMenu.tsx +5 -3
  81. package/src/index.tsx +3 -5
  82. package/types/createBaseMenu.d.ts +121 -35
  83. package/types/createBaseMenu.d.ts.map +1 -1
  84. package/types/createNativeMenu/createNativeMenu.d.ts +21 -21
  85. package/types/createNativeMenu/createNativeMenu.d.ts.map +1 -1
  86. package/types/createNativeMenu/createNativeMenuTypes.d.ts +20 -20
  87. package/types/createNativeMenu/createNativeMenuTypes.d.ts.map +1 -1
  88. package/types/createNativeMenu/withNativeMenu.d.ts +3 -3
  89. package/types/createNativeMenu/withNativeMenu.d.ts.map +1 -1
  90. package/types/index.d.ts +3 -2
  91. package/types/index.d.ts.map +1 -1
  92. package/dist/cjs/MenuPredefined.js +0 -168
  93. package/dist/cjs/MenuPredefined.js.map +0 -6
  94. package/dist/cjs/createBaseMenu.js +0 -832
  95. package/dist/cjs/createBaseMenu.js.map +0 -6
  96. package/dist/cjs/createNativeMenu/createNativeMenu.js +0 -177
  97. package/dist/cjs/createNativeMenu/createNativeMenu.js.map +0 -6
  98. package/dist/cjs/createNativeMenu/createNativeMenuTypes.js +0 -14
  99. package/dist/cjs/createNativeMenu/createNativeMenuTypes.js.map +0 -6
  100. package/dist/cjs/createNativeMenu/index.cjs +0 -19
  101. package/dist/cjs/createNativeMenu/index.js +0 -16
  102. package/dist/cjs/createNativeMenu/index.js.map +0 -6
  103. package/dist/cjs/createNativeMenu/index.native.js +0 -22
  104. package/dist/cjs/createNativeMenu/index.native.js.map +0 -1
  105. package/dist/cjs/createNativeMenu/utils.js +0 -66
  106. package/dist/cjs/createNativeMenu/utils.js.map +0 -6
  107. package/dist/cjs/createNativeMenu/withNativeMenu.js +0 -30
  108. package/dist/cjs/createNativeMenu/withNativeMenu.js.map +0 -6
  109. package/dist/cjs/index.js +0 -23
  110. package/dist/cjs/index.js.map +0 -6
  111. package/dist/esm/MenuPredefined.js +0 -154
  112. package/dist/esm/MenuPredefined.js.map +0 -6
  113. package/dist/esm/createBaseMenu.js +0 -838
  114. package/dist/esm/createBaseMenu.js.map +0 -6
  115. package/dist/esm/createNativeMenu/createNativeMenu.js +0 -156
  116. package/dist/esm/createNativeMenu/createNativeMenu.js.map +0 -6
  117. package/dist/esm/createNativeMenu/createNativeMenuTypes.js +0 -1
  118. package/dist/esm/createNativeMenu/createNativeMenuTypes.js.map +0 -6
  119. package/dist/esm/createNativeMenu/index.js +0 -3
  120. package/dist/esm/createNativeMenu/index.js.map +0 -6
  121. package/dist/esm/createNativeMenu/index.mjs +0 -3
  122. package/dist/esm/createNativeMenu/index.mjs.map +0 -1
  123. package/dist/esm/createNativeMenu/index.native.js +0 -3
  124. package/dist/esm/createNativeMenu/index.native.js.map +0 -1
  125. package/dist/esm/createNativeMenu/utils.js +0 -47
  126. package/dist/esm/createNativeMenu/utils.js.map +0 -6
  127. package/dist/esm/createNativeMenu/withNativeMenu.js +0 -15
  128. package/dist/esm/createNativeMenu/withNativeMenu.js.map +0 -6
  129. package/dist/jsx/MenuPredefined.js +0 -154
  130. package/dist/jsx/MenuPredefined.js.map +0 -6
  131. package/dist/jsx/createBaseMenu.js +0 -838
  132. package/dist/jsx/createBaseMenu.js.map +0 -6
  133. package/dist/jsx/createNativeMenu/createNativeMenu.js +0 -156
  134. package/dist/jsx/createNativeMenu/createNativeMenu.js.map +0 -6
  135. package/dist/jsx/createNativeMenu/createNativeMenuTypes.js +0 -1
  136. package/dist/jsx/createNativeMenu/createNativeMenuTypes.js.map +0 -6
  137. package/dist/jsx/createNativeMenu/index.js +0 -3
  138. package/dist/jsx/createNativeMenu/index.js.map +0 -6
  139. package/dist/jsx/createNativeMenu/index.mjs +0 -3
  140. package/dist/jsx/createNativeMenu/index.mjs.map +0 -1
  141. package/dist/jsx/createNativeMenu/index.native.js +0 -22
  142. package/dist/jsx/createNativeMenu/index.native.js.map +0 -1
  143. package/dist/jsx/createNativeMenu/utils.js +0 -47
  144. package/dist/jsx/createNativeMenu/utils.js.map +0 -6
  145. package/dist/jsx/createNativeMenu/withNativeMenu.js +0 -15
  146. package/dist/jsx/createNativeMenu/withNativeMenu.js.map +0 -6
  147. package/src/createNativeMenu/index.tsx +0 -7
  148. package/types/createNativeMenu/index.d.ts +0 -4
  149. package/types/createNativeMenu/index.d.ts.map +0 -1
@@ -2,173 +2,255 @@ 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) {
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);
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);
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
+ const componentType = getComponentType(displayName);
170
+ if (componentType === "CheckboxItem") {
171
+ const {
172
+ checked,
173
+ onCheckedChange,
174
+ value,
175
+ onValueChange,
176
+ children: cbChildren,
177
+ ...rest
178
+ } = props;
179
+ const finalValue = value ?? (checked ? "on" : "off");
180
+ const finalOnValueChange = onValueChange ?? (onCheckedChange && (v => onCheckedChange(v === "on")));
181
+ const cleanChildren = import_react.default.Children.map(cbChildren, c => {
182
+ if (!import_react.default.isValidElement(c)) return c;
183
+ const dn = c.type?.displayName || "";
184
+ if (dn.includes("ItemIndicator")) return null;
185
+ return c;
186
+ });
187
+ result.push(import_react.default.createElement(menu.CheckboxItem, {
188
+ ...rest,
189
+ key: child.key,
190
+ value: finalValue,
191
+ onValueChange: finalOnValueChange
192
+ }, cleanChildren));
193
+ return;
194
+ }
195
+ if (componentType) {
196
+ const {
197
+ children: childChildren,
198
+ ...restProps
199
+ } = props;
200
+ const isContainer = CONTAINER_TYPES.includes(componentType);
201
+ const shouldReverse = componentType === "Content" || componentType === "SubContent";
202
+ result.push(import_react.default.createElement(map[componentType], {
203
+ ...restProps,
204
+ key: child.key
205
+ }, isContainer ? transformChildren(menu, map, childChildren, shouldReverse, triggerBoundaryHandlers) : childChildren));
206
+ return;
207
+ }
208
+ if (isItemLike(props, displayName)) {
209
+ const {
210
+ children: itemChildren,
211
+ ...itemProps
212
+ } = props;
213
+ result.push(import_react.default.createElement(menu.Item, {
214
+ ...itemProps,
215
+ key: child.key
216
+ }, itemChildren));
217
+ return;
218
+ }
219
+ result.push(child);
171
220
  });
221
+ if (import_web.isIos && shouldReverseOnIos && !isContextMenu) {
222
+ result.reverse();
223
+ }
224
+ return result;
225
+ }
226
+ function lazyZeego(name, displayName) {
227
+ const Comp = props => {
228
+ const z = resolve();
229
+ if (!z) return null;
230
+ return import_react.default.createElement(z.menu[name], props);
231
+ };
232
+ Comp.displayName = displayName || name;
233
+ return Comp;
234
+ }
235
+ const Trigger = lazyZeego("Trigger");
236
+ const Content = lazyZeego("Content");
237
+ const Item = lazyZeego("Item");
238
+ const ItemTitle = lazyZeego("ItemTitle");
239
+ const ItemSubtitle = lazyZeego("ItemSubtitle");
240
+ const ItemIcon = lazyZeego("ItemIcon");
241
+ const ItemImage = lazyZeego("ItemImage");
242
+ const ItemIndicator = lazyZeego("ItemIndicator");
243
+ const Group = lazyZeego("Group");
244
+ const Label = lazyZeego("Label");
245
+ const Separator = lazyZeego("Separator");
246
+ const Sub = lazyZeego("Sub");
247
+ const SubTrigger = lazyZeego("SubTrigger");
248
+ const SubContent = lazyZeego("SubContent");
249
+ const Portal = ({
250
+ children
251
+ }) => /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
252
+ children
253
+ });
172
254
  Portal.displayName = "Portal";
173
255
  const Arrow = () => null;
174
256
  Arrow.displayName = "Arrow";
@@ -184,26 +266,67 @@ const createNativeMenu = MenuType => {
184
266
  children
185
267
  });
186
268
  RadioItem.displayName = `${MenuType}RadioItem`;
187
- const CheckboxItem = props => null;
269
+ const CheckboxItem = () => null;
188
270
  CheckboxItem.displayName = "CheckboxItem";
189
- const Preview = isContextMenu ? ZeegoContextMenu.Preview : () => null;
271
+ const Preview = isContextMenu ? lazyZeego("Preview", `${MenuType}Preview`) : () => null;
190
272
  Preview.displayName = `${MenuType}Preview`;
191
- const Auxiliary = isContextMenu ? ZeegoContextMenu.Auxiliary : () => null;
273
+ const Auxiliary = isContextMenu ? lazyZeego("Auxiliary", `${MenuType}Auxiliary`) : () => null;
192
274
  Auxiliary.displayName = `${MenuType}Auxiliary`;
193
275
  const Menu = ({
194
276
  children,
195
277
  onOpenChange,
196
278
  onOpenWillChange
197
279
  }) => {
280
+ const triggerOwnerRef = import_react.default.useRef(null);
281
+ const claimTriggerBoundary = import_react.default.useCallback(debugName => {
282
+ if (triggerOwnerRef.current) {
283
+ (0, import_native.unstable_releaseExternalPressOwnership)(triggerOwnerRef.current, debugName);
284
+ }
285
+ triggerOwnerRef.current = (0, import_native.unstable_claimExternalPressOwnership)(debugName);
286
+ }, []);
287
+ const releaseTriggerBoundary = import_react.default.useCallback(debugName => {
288
+ if (!triggerOwnerRef.current) return;
289
+ (0, import_native.unstable_releaseExternalPressOwnership)(triggerOwnerRef.current, debugName);
290
+ triggerOwnerRef.current = null;
291
+ }, []);
292
+ import_react.default.useEffect(() => releaseTriggerBoundary, [releaseTriggerBoundary]);
293
+ const z = resolve();
294
+ if (!z) return null;
295
+ const handleOpenChange = import_react.default.useCallback(isOpen => {
296
+ if (!isOpen) {
297
+ releaseTriggerBoundary();
298
+ }
299
+ onOpenChange?.(isOpen);
300
+ }, [onOpenChange, releaseTriggerBoundary]);
301
+ const handleOpenWillChange = import_react.default.useCallback(willOpen => {
302
+ if (!willOpen) {
303
+ releaseTriggerBoundary();
304
+ }
305
+ onOpenWillChange?.(willOpen);
306
+ }, [onOpenWillChange, releaseTriggerBoundary]);
198
307
  const rootProps = {
199
- onOpenChange
308
+ onOpenChange: handleOpenChange
200
309
  };
201
- return isContextMenu && onOpenWillChange && (rootProps.onOpenWillChange = onOpenWillChange), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ZeegoMenu.Root, {
310
+ if (isContextMenu && onOpenWillChange) {
311
+ rootProps.onOpenWillChange = handleOpenWillChange;
312
+ }
313
+ const content = /* @__PURE__ */(0, import_jsx_runtime.jsx)(z.menu.Root, {
202
314
  ...rootProps,
203
- children: transformForZeego(children)
315
+ children: transformChildren(z.menu, z.componentMap, children, false, {
316
+ claim: claimTriggerBoundary,
317
+ release: releaseTriggerBoundary
318
+ })
204
319
  });
320
+ if (isAndroid) {
321
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_native.NativeMenuContext.Provider, {
322
+ value: true,
323
+ children: content
324
+ });
325
+ }
326
+ return content;
205
327
  };
206
- return Menu.displayName = MenuType, {
328
+ Menu.displayName = MenuType;
329
+ return {
207
330
  Menu: (0, import_web.withStaticProperties)(Menu, {
208
331
  Trigger,
209
332
  Content,