@tamagui/native 2.7.7 → 3.0.0-beta.637.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 (225) hide show
  1. package/dist/cjs/PressBoundary.cjs +53 -71
  2. package/dist/cjs/PressBoundary.native.cjs +86 -0
  3. package/dist/cjs/PressBoundary.native.js +63 -80
  4. package/dist/cjs/PressBoundary.native.js.map +1 -1
  5. package/dist/cjs/burntState.cjs +29 -32
  6. package/dist/cjs/burntState.native.cjs +45 -0
  7. package/dist/cjs/burntState.native.js +29 -31
  8. package/dist/cjs/burntState.native.js.map +1 -1
  9. package/dist/cjs/components.cjs +35 -55
  10. package/dist/cjs/components.native.cjs +56 -0
  11. package/dist/cjs/components.native.js +35 -54
  12. package/dist/cjs/components.native.js.map +1 -1
  13. package/dist/cjs/expoUIMenuAdapter.cjs +240 -254
  14. package/dist/cjs/expoUIMenuAdapter.native.cjs +315 -0
  15. package/dist/cjs/expoUIMenuAdapter.native.js +285 -303
  16. package/dist/cjs/expoUIMenuAdapter.native.js.map +1 -1
  17. package/dist/cjs/gesture-handler.cjs +21 -22
  18. package/dist/cjs/gesture-handler.native.cjs +38 -0
  19. package/dist/cjs/gesture-handler.native.js +21 -21
  20. package/dist/cjs/gesture-handler.native.js.map +1 -1
  21. package/dist/cjs/gestureState.cjs +202 -207
  22. package/dist/cjs/gestureState.native.cjs +262 -0
  23. package/dist/cjs/gestureState.native.js +215 -219
  24. package/dist/cjs/gestureState.native.js.map +1 -1
  25. package/dist/cjs/globalState.cjs +31 -34
  26. package/dist/cjs/globalState.native.cjs +44 -0
  27. package/dist/cjs/globalState.native.js +31 -33
  28. package/dist/cjs/globalState.native.js.map +1 -1
  29. package/dist/cjs/index.cjs +34 -34
  30. package/dist/cjs/index.native.cjs +59 -0
  31. package/dist/cjs/index.native.js +34 -33
  32. package/dist/cjs/index.native.js.map +1 -1
  33. package/dist/cjs/keyboardControllerState.cjs +28 -29
  34. package/dist/cjs/keyboardControllerState.native.cjs +50 -0
  35. package/dist/cjs/keyboardControllerState.native.js +28 -28
  36. package/dist/cjs/keyboardControllerState.native.js.map +1 -1
  37. package/dist/cjs/linearGradientState.cjs +28 -31
  38. package/dist/cjs/linearGradientState.native.cjs +44 -0
  39. package/dist/cjs/linearGradientState.native.js +28 -30
  40. package/dist/cjs/linearGradientState.native.js.map +1 -1
  41. package/dist/cjs/nativeMenuContext.cjs +15 -18
  42. package/dist/cjs/nativeMenuContext.native.cjs +28 -0
  43. package/dist/cjs/nativeMenuContext.native.js +15 -17
  44. package/dist/cjs/nativeMenuContext.native.js.map +1 -1
  45. package/dist/cjs/nativeMenuState.cjs +27 -28
  46. package/dist/cjs/nativeMenuState.native.cjs +47 -0
  47. package/dist/cjs/nativeMenuState.native.js +27 -27
  48. package/dist/cjs/nativeMenuState.native.js.map +1 -1
  49. package/dist/cjs/portalState.cjs +28 -31
  50. package/dist/cjs/portalState.native.cjs +44 -0
  51. package/dist/cjs/portalState.native.js +28 -30
  52. package/dist/cjs/portalState.native.js.map +1 -1
  53. package/dist/cjs/safeAreaState.cjs +77 -53
  54. package/dist/cjs/safeAreaState.native.cjs +101 -0
  55. package/dist/cjs/safeAreaState.native.js +79 -52
  56. package/dist/cjs/safeAreaState.native.js.map +1 -1
  57. package/dist/cjs/setup-burnt.cjs +15 -14
  58. package/dist/cjs/setup-burnt.native.cjs +20 -0
  59. package/dist/cjs/setup-burnt.native.js +15 -13
  60. package/dist/cjs/setup-burnt.native.js.map +1 -1
  61. package/dist/cjs/setup-expo-linear-gradient.cjs +14 -13
  62. package/dist/cjs/setup-expo-linear-gradient.native.cjs +19 -0
  63. package/dist/cjs/setup-expo-linear-gradient.native.js +14 -12
  64. package/dist/cjs/setup-expo-linear-gradient.native.js.map +1 -1
  65. package/dist/cjs/setup-expo-ui-menu.cjs +12 -13
  66. package/dist/cjs/setup-expo-ui-menu.native.cjs +18 -0
  67. package/dist/cjs/setup-expo-ui-menu.native.js +12 -12
  68. package/dist/cjs/setup-expo-ui-menu.native.js.map +1 -1
  69. package/dist/cjs/setup-gesture-handler.cjs +51 -57
  70. package/dist/cjs/setup-gesture-handler.native.cjs +72 -0
  71. package/dist/cjs/setup-gesture-handler.native.js +51 -56
  72. package/dist/cjs/setup-gesture-handler.native.js.map +1 -1
  73. package/dist/cjs/setup-keyboard-controller.native.cjs +28 -0
  74. package/dist/cjs/setup-keyboard-controller.native.js +23 -29
  75. package/dist/cjs/setup-keyboard-controller.native.js.map +1 -1
  76. package/dist/cjs/setup-safe-area.cjs +17 -3
  77. package/dist/cjs/setup-safe-area.native.cjs +28 -0
  78. package/dist/cjs/setup-safe-area.native.js +23 -16
  79. package/dist/cjs/setup-safe-area.native.js.map +1 -1
  80. package/dist/cjs/setup-teleport.cjs +16 -15
  81. package/dist/cjs/setup-teleport.native.cjs +21 -0
  82. package/dist/cjs/setup-teleport.native.js +16 -14
  83. package/dist/cjs/setup-teleport.native.js.map +1 -1
  84. package/dist/cjs/setup-worklets.cjs +19 -18
  85. package/dist/cjs/setup-worklets.native.cjs +24 -0
  86. package/dist/cjs/setup-worklets.native.js +19 -17
  87. package/dist/cjs/setup-worklets.native.js.map +1 -1
  88. package/dist/cjs/setup-zeego.cjs +18 -17
  89. package/dist/cjs/setup-zeego.native.cjs +23 -0
  90. package/dist/cjs/setup-zeego.native.js +18 -16
  91. package/dist/cjs/setup-zeego.native.js.map +1 -1
  92. package/dist/cjs/types.cjs +10 -11
  93. package/dist/cjs/types.native.cjs +19 -0
  94. package/dist/cjs/types.native.js +10 -10
  95. package/dist/cjs/types.native.js.map +1 -1
  96. package/dist/cjs/workletsState.cjs +31 -34
  97. package/dist/cjs/workletsState.native.cjs +47 -0
  98. package/dist/cjs/workletsState.native.js +31 -33
  99. package/dist/cjs/workletsState.native.js.map +1 -1
  100. package/dist/esm/PressBoundary.mjs +37 -45
  101. package/dist/esm/PressBoundary.mjs.map +1 -1
  102. package/dist/esm/PressBoundary.native.js +48 -56
  103. package/dist/esm/PressBoundary.native.js.map +1 -1
  104. package/dist/esm/burntState.mjs +16 -14
  105. package/dist/esm/burntState.mjs.map +1 -1
  106. package/dist/esm/burntState.native.js +16 -14
  107. package/dist/esm/burntState.native.js.map +1 -1
  108. package/dist/esm/components.mjs +20 -37
  109. package/dist/esm/components.mjs.map +1 -1
  110. package/dist/esm/components.native.js +21 -38
  111. package/dist/esm/components.native.js.map +1 -1
  112. package/dist/esm/expoUIMenuAdapter.mjs +224 -228
  113. package/dist/esm/expoUIMenuAdapter.mjs.map +1 -1
  114. package/dist/esm/expoUIMenuAdapter.native.js +270 -279
  115. package/dist/esm/expoUIMenuAdapter.native.js.map +1 -1
  116. package/dist/esm/gesture-handler.mjs +3 -4
  117. package/dist/esm/gesture-handler.native.js +3 -4
  118. package/dist/esm/gestureState.mjs +185 -187
  119. package/dist/esm/gestureState.mjs.map +1 -1
  120. package/dist/esm/gestureState.native.js +198 -200
  121. package/dist/esm/gestureState.native.js.map +1 -1
  122. package/dist/esm/globalState.mjs +17 -16
  123. package/dist/esm/globalState.mjs.map +1 -1
  124. package/dist/esm/globalState.native.js +17 -16
  125. package/dist/esm/globalState.native.js.map +1 -1
  126. package/dist/esm/index.js +5 -6
  127. package/dist/esm/index.mjs +5 -6
  128. package/dist/esm/index.native.js +5 -6
  129. package/dist/esm/keyboardControllerState.mjs +13 -11
  130. package/dist/esm/keyboardControllerState.mjs.map +1 -1
  131. package/dist/esm/keyboardControllerState.native.js +13 -11
  132. package/dist/esm/keyboardControllerState.native.js.map +1 -1
  133. package/dist/esm/linearGradientState.mjs +15 -13
  134. package/dist/esm/linearGradientState.mjs.map +1 -1
  135. package/dist/esm/linearGradientState.native.js +15 -13
  136. package/dist/esm/linearGradientState.native.js.map +1 -1
  137. package/dist/esm/nativeMenuContext.mjs +2 -0
  138. package/dist/esm/nativeMenuContext.mjs.map +1 -1
  139. package/dist/esm/nativeMenuContext.native.js +2 -0
  140. package/dist/esm/nativeMenuContext.native.js.map +1 -1
  141. package/dist/esm/nativeMenuState.mjs +13 -11
  142. package/dist/esm/nativeMenuState.mjs.map +1 -1
  143. package/dist/esm/nativeMenuState.native.js +13 -11
  144. package/dist/esm/nativeMenuState.native.js.map +1 -1
  145. package/dist/esm/portalState.mjs +15 -13
  146. package/dist/esm/portalState.mjs.map +1 -1
  147. package/dist/esm/portalState.native.js +15 -13
  148. package/dist/esm/portalState.native.js.map +1 -1
  149. package/dist/esm/safeAreaState.mjs +64 -38
  150. package/dist/esm/safeAreaState.mjs.map +1 -1
  151. package/dist/esm/safeAreaState.native.js +66 -38
  152. package/dist/esm/safeAreaState.native.js.map +1 -1
  153. package/dist/esm/setup-burnt.mjs +20 -13
  154. package/dist/esm/setup-burnt.mjs.map +1 -1
  155. package/dist/esm/setup-burnt.native.js +20 -13
  156. package/dist/esm/setup-burnt.native.js.map +1 -1
  157. package/dist/esm/setup-expo-linear-gradient.mjs +19 -12
  158. package/dist/esm/setup-expo-linear-gradient.mjs.map +1 -1
  159. package/dist/esm/setup-expo-linear-gradient.native.js +19 -12
  160. package/dist/esm/setup-expo-linear-gradient.native.js.map +1 -1
  161. package/dist/esm/setup-expo-ui-menu.mjs +17 -12
  162. package/dist/esm/setup-expo-ui-menu.mjs.map +1 -1
  163. package/dist/esm/setup-expo-ui-menu.native.js +17 -12
  164. package/dist/esm/setup-expo-ui-menu.native.js.map +1 -1
  165. package/dist/esm/setup-gesture-handler.mjs +42 -40
  166. package/dist/esm/setup-gesture-handler.mjs.map +1 -1
  167. package/dist/esm/setup-gesture-handler.native.js +42 -40
  168. package/dist/esm/setup-gesture-handler.native.js.map +1 -1
  169. package/dist/esm/setup-keyboard-controller.mjs +0 -2
  170. package/dist/esm/setup-keyboard-controller.native.js +28 -29
  171. package/dist/esm/setup-keyboard-controller.native.js.map +1 -1
  172. package/dist/esm/setup-safe-area.mjs +0 -4
  173. package/dist/esm/setup-safe-area.native.js +23 -22
  174. package/dist/esm/setup-safe-area.native.js.map +1 -1
  175. package/dist/esm/setup-teleport.mjs +21 -14
  176. package/dist/esm/setup-teleport.mjs.map +1 -1
  177. package/dist/esm/setup-teleport.native.js +21 -14
  178. package/dist/esm/setup-teleport.native.js.map +1 -1
  179. package/dist/esm/setup-worklets.mjs +24 -17
  180. package/dist/esm/setup-worklets.mjs.map +1 -1
  181. package/dist/esm/setup-worklets.native.js +24 -17
  182. package/dist/esm/setup-worklets.native.js.map +1 -1
  183. package/dist/esm/setup-zeego.mjs +23 -16
  184. package/dist/esm/setup-zeego.mjs.map +1 -1
  185. package/dist/esm/setup-zeego.native.js +23 -16
  186. package/dist/esm/setup-zeego.native.js.map +1 -1
  187. package/dist/esm/types.mjs +0 -2
  188. package/dist/esm/types.native.js +0 -2
  189. package/dist/esm/workletsState.mjs +18 -16
  190. package/dist/esm/workletsState.mjs.map +1 -1
  191. package/dist/esm/workletsState.native.js +18 -16
  192. package/dist/esm/workletsState.native.js.map +1 -1
  193. package/package.json +84 -7
  194. package/src/PressBoundary.tsx +48 -45
  195. package/src/expoUIMenuAdapter.tsx +1 -2
  196. package/src/gestureState.ts +2 -2
  197. package/src/index.ts +1 -1
  198. package/src/safeAreaState.ts +59 -27
  199. package/src/setup-safe-area.ts +27 -22
  200. package/src/setup-safe-area.web.ts +2 -0
  201. package/src/types.ts +1 -0
  202. package/types/PressBoundary.d.ts +3 -1
  203. package/types/PressBoundary.d.ts.map +2 -2
  204. package/types/expoUIMenuAdapter.d.ts.map +2 -2
  205. package/types/gestureState.d.ts.map +1 -1
  206. package/types/index.d.ts +1 -1
  207. package/types/index.d.ts.map +2 -2
  208. package/types/safeAreaState.d.ts +5 -2
  209. package/types/safeAreaState.d.ts.map +2 -2
  210. package/types/setup-safe-area.d.ts.map +1 -1
  211. package/types/setup-safe-area.web.d.ts +3 -0
  212. package/types/setup-safe-area.web.d.ts.map +11 -0
  213. package/types/types.d.ts +1 -0
  214. package/types/types.d.ts.map +2 -2
  215. package/.turbo/turbo-build.log +0 -2
  216. package/dist/esm/gesture-handler.mjs.map +0 -1
  217. package/dist/esm/gesture-handler.native.js.map +0 -1
  218. package/dist/esm/index.js.map +0 -1
  219. package/dist/esm/index.mjs.map +0 -1
  220. package/dist/esm/index.native.js.map +0 -1
  221. package/dist/esm/setup-keyboard-controller.mjs.map +0 -1
  222. package/dist/esm/setup-safe-area.mjs.map +0 -1
  223. package/dist/esm/types.mjs.map +0 -1
  224. package/dist/esm/types.native.js.map +0 -1
  225. package/tsconfig.json +0 -12
@@ -1,3 +1,4 @@
1
+
1
2
  var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -5,275 +6,260 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
5
6
  var __getProtoOf = Object.getPrototypeOf;
6
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
8
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: true
11
- });
9
+ for (var name in all) __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true
12
+ });
12
13
  };
13
14
  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, {
16
- get: () => from[key],
17
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
- });
19
- }
20
- return to;
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
17
+ get: () => from[key],
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
21
+ return to;
21
22
  };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
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
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
24
+ value: mod,
25
+ enumerable: true
30
26
  }) : target, mod));
31
- var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
- value: true
33
- }), mod);
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
28
  var expoUIMenuAdapter_exports = {};
35
- __export(expoUIMenuAdapter_exports, {
36
- createExpoUIMenuAdapter: () => createExpoUIMenuAdapter
37
- });
29
+ __export(expoUIMenuAdapter_exports, { createExpoUIMenuAdapter: () => createExpoUIMenuAdapter });
38
30
  module.exports = __toCommonJS(expoUIMenuAdapter_exports);
39
31
  var import_react = __toESM(require("react"), 1);
40
32
  var import_jsx_runtime = require("react/jsx-runtime");
41
33
  function marker(name) {
42
- const Marker = () => null;
43
- Marker.displayName = `ExpoUI${name}`;
44
- return Marker;
34
+ const Marker = () => null;
35
+ Marker.displayName = `ExpoUI${name}`;
36
+ return Marker;
45
37
  }
46
38
  function isMarkerType(candidate, type) {
47
- if (candidate === type) return true;
48
- const wanted = type.displayName;
49
- if (!wanted) return false;
50
- return typeof candidate === "function" && candidate.displayName === wanted;
39
+ if (candidate === type) return true;
40
+ const wanted = type.displayName;
41
+ if (!wanted) return false;
42
+ return typeof candidate === "function" && candidate.displayName === wanted;
51
43
  }
52
44
  function elementOfType(children, type) {
53
- for (const child of import_react.default.Children.toArray(children)) {
54
- if (import_react.default.isValidElement(child) && isMarkerType(child.type, type)) {
55
- return child;
56
- }
57
- }
58
- return null;
45
+ for (const child of import_react.default.Children.toArray(children)) {
46
+ if (import_react.default.isValidElement(child) && isMarkerType(child.type, type)) {
47
+ return child;
48
+ }
49
+ }
50
+ return null;
59
51
  }
60
- const warnedUnsupported = /* @__PURE__ */new Set();
52
+ const warnedUnsupported = /* @__PURE__ */ new Set();
61
53
  function warnUnsupported(feature) {
62
- if (warnedUnsupported.has(feature) || process.env.NODE_ENV === "production") {
63
- return;
64
- }
65
- warnedUnsupported.add(feature);
66
- console.warn(`[Tamagui] @expo/ui/community/menu does not support ${feature}, so it will not render. Register a different native menu adapter if you need it.`);
54
+ if (warnedUnsupported.has(feature) || process.env.NODE_ENV === "production") {
55
+ return;
56
+ }
57
+ warnedUnsupported.add(feature);
58
+ console.warn(`[Tamagui] @expo/ui/community/menu does not support ${feature}, so it will not render. Register a different native menu adapter if you need it.`);
67
59
  }
68
60
  function textFromNode(node) {
69
- if (typeof node === "string" || typeof node === "number") return String(node);
70
- if (!import_react.default.isValidElement(node)) return "";
71
- return import_react.default.Children.toArray(node.props.children).map(textFromNode).join("");
61
+ if (typeof node === "string" || typeof node === "number") return String(node);
62
+ if (!import_react.default.isValidElement(node)) return "";
63
+ return import_react.default.Children.toArray(node.props.children).map(textFromNode).join("");
64
+ }
65
+ function createExpoUIMenuAdapter({ MenuView }) {
66
+ const NativeMenuView = MenuView;
67
+ function createModule(isContextMenu) {
68
+ const Trigger = marker("Trigger");
69
+ const Content = marker("Content");
70
+ const Item = marker("Item");
71
+ const ItemTitle = marker("ItemTitle");
72
+ const ItemSubtitle = marker("ItemSubtitle");
73
+ const ItemIcon = marker("ItemIcon");
74
+ const ItemImage = marker("ItemImage");
75
+ const ItemIndicator = marker("ItemIndicator");
76
+ const Group = marker("Group");
77
+ const Label = marker("Label");
78
+ const Separator = marker("Separator");
79
+ const Sub = marker("Sub");
80
+ const SubTrigger = marker("SubTrigger");
81
+ const SubContent = marker("SubContent");
82
+ const CheckboxItem = marker("CheckboxItem");
83
+ const Preview = marker("Preview");
84
+ const Auxiliary = marker("Auxiliary");
85
+ function Root({ children, onOpenChange, onOpenWillChange }) {
86
+ const trigger = elementOfType(children, Trigger);
87
+ const content = elementOfType(children, Content);
88
+ const preview = elementOfType(children, Preview);
89
+ const auxiliary = elementOfType(children, Auxiliary);
90
+ if (preview || auxiliary) {
91
+ warnUnsupported("context-menu previews or auxiliary views");
92
+ }
93
+ if (!trigger || !content) {
94
+ throw new Error("Tamagui native menus require one Trigger and one Content");
95
+ }
96
+ let nextId = 0;
97
+ const handlers = /* @__PURE__ */ new Map();
98
+ function actionId(element) {
99
+ return element.key == null ? `tamagui-menu-${nextId++}` : String(element.key).replace(/^\.\$/, "");
100
+ }
101
+ function itemTitle(element) {
102
+ if (typeof element.props.textValue === "string") return element.props.textValue;
103
+ const title = elementOfType(element.props.children, ItemTitle);
104
+ return title ? textFromNode(title.props.children) : "";
105
+ }
106
+ function actionImage(element) {
107
+ const image = elementOfType(element.props.children, ItemImage);
108
+ if (image?.props.source) return image.props.source;
109
+ const icon = elementOfType(element.props.children, ItemIcon);
110
+ if (!icon) return void 0;
111
+ const ios = icon.props.ios;
112
+ if (typeof ios === "object" && ios && "name" in ios && typeof ios.name === "string") {
113
+ return ios.name;
114
+ }
115
+ return typeof icon.props.iosIconName === "string" ? icon.props.iosIconName : void 0;
116
+ }
117
+ function attributes(element) {
118
+ const destructive = element.props.destructive === true;
119
+ const disabled = element.props.disabled === true;
120
+ const hidden = element.props.hidden === true;
121
+ return destructive || disabled || hidden ? {
122
+ destructive,
123
+ disabled,
124
+ hidden
125
+ } : void 0;
126
+ }
127
+ function actionsFrom(childrenToParse) {
128
+ const actions = [];
129
+ let section = null;
130
+ function append(action) {
131
+ if (section) {
132
+ section.push(action);
133
+ } else {
134
+ actions.push(action);
135
+ }
136
+ }
137
+ function flushSection() {
138
+ if (!section?.length) {
139
+ section = [];
140
+ return;
141
+ }
142
+ actions.push({
143
+ id: `tamagui-menu-section-${nextId++}`,
144
+ title: "",
145
+ subactions: section,
146
+ displayInline: true
147
+ });
148
+ section = [];
149
+ }
150
+ for (const child of import_react.default.Children.toArray(childrenToParse)) {
151
+ if (!import_react.default.isValidElement(child)) continue;
152
+ if (isMarkerType(child.type, Separator)) {
153
+ if (!section) section = actions.splice(0);
154
+ flushSection();
155
+ continue;
156
+ }
157
+ if (isMarkerType(child.type, Group)) {
158
+ const label2 = elementOfType(child.props.children, Label);
159
+ append({
160
+ id: actionId(child),
161
+ title: label2 ? textFromNode(label2.props.children) : "",
162
+ subactions: actionsFrom(child.props.children),
163
+ displayInline: true
164
+ });
165
+ continue;
166
+ }
167
+ if (isMarkerType(child.type, Sub)) {
168
+ const subTrigger = elementOfType(child.props.children, SubTrigger);
169
+ const subContent = elementOfType(child.props.children, SubContent);
170
+ if (!subTrigger || !subContent) {
171
+ throw new Error("Tamagui native submenus require one SubTrigger and SubContent");
172
+ }
173
+ append({
174
+ id: actionId(child),
175
+ title: itemTitle(subTrigger),
176
+ image: actionImage(subTrigger),
177
+ attributes: attributes(subTrigger),
178
+ subactions: actionsFrom(subContent.props.children)
179
+ });
180
+ continue;
181
+ }
182
+ if (!isMarkerType(child.type, Item) && !isMarkerType(child.type, CheckboxItem)) continue;
183
+ if (elementOfType(child.props.children, ItemSubtitle)) {
184
+ warnUnsupported("menu item subtitles");
185
+ }
186
+ const id = actionId(child);
187
+ if (isMarkerType(child.type, CheckboxItem)) {
188
+ const current = child.props.value === true || child.props.value === "on" || child.props.checked === true;
189
+ const onValueChange = child.props.onValueChange;
190
+ const onCheckedChange = child.props.onCheckedChange;
191
+ handlers.set(id, () => {
192
+ if (typeof onValueChange === "function") {
193
+ onValueChange(current ? "off" : "on", current ? "on" : "off");
194
+ } else if (typeof onCheckedChange === "function") {
195
+ onCheckedChange(!current);
196
+ }
197
+ });
198
+ append({
199
+ id,
200
+ title: itemTitle(child),
201
+ image: actionImage(child),
202
+ state: current ? "on" : "off",
203
+ attributes: attributes(child)
204
+ });
205
+ continue;
206
+ }
207
+ const onSelect = child.props.onSelect;
208
+ if (typeof onSelect === "function") {
209
+ handlers.set(id, () => onSelect());
210
+ }
211
+ append({
212
+ id,
213
+ title: itemTitle(child),
214
+ image: actionImage(child),
215
+ attributes: attributes(child)
216
+ });
217
+ }
218
+ if (section) flushSection();
219
+ return actions;
220
+ }
221
+ const label = elementOfType(content.props.children, Label);
222
+ const triggerAction = trigger.props.action;
223
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NativeMenuView, {
224
+ actions: actionsFrom(content.props.children),
225
+ title: label ? textFromNode(label.props.children) : void 0,
226
+ shouldOpenOnLongPress: triggerAction === "longPress" || triggerAction !== "press" && isContextMenu,
227
+ onPressAction: (event) => handlers.get(event.nativeEvent.event)?.(),
228
+ onOpenMenu: () => {
229
+ onOpenWillChange?.(true);
230
+ onOpenChange?.(true);
231
+ },
232
+ onCloseMenu: () => {
233
+ onOpenWillChange?.(false);
234
+ onOpenChange?.(false);
235
+ },
236
+ children: trigger.props.children
237
+ });
238
+ }
239
+ return {
240
+ Root,
241
+ Trigger,
242
+ Content,
243
+ Item,
244
+ ItemTitle,
245
+ ItemSubtitle,
246
+ ItemIcon,
247
+ ItemImage,
248
+ ItemIndicator,
249
+ Group,
250
+ Label,
251
+ Separator,
252
+ Sub,
253
+ SubTrigger,
254
+ SubContent,
255
+ CheckboxItem,
256
+ Preview,
257
+ Auxiliary
258
+ };
259
+ }
260
+ return {
261
+ name: "expo-ui",
262
+ Menu: createModule(false),
263
+ ContextMenu: createModule(true)
264
+ };
72
265
  }
73
- function createExpoUIMenuAdapter({
74
- MenuView
75
- }) {
76
- const NativeMenuView = MenuView;
77
- function createModule(isContextMenu) {
78
- const Trigger = marker("Trigger");
79
- const Content = marker("Content");
80
- const Item = marker("Item");
81
- const ItemTitle = marker("ItemTitle");
82
- const ItemSubtitle = marker("ItemSubtitle");
83
- const ItemIcon = marker("ItemIcon");
84
- const ItemImage = marker("ItemImage");
85
- const ItemIndicator = marker("ItemIndicator");
86
- const Group = marker("Group");
87
- const Label = marker("Label");
88
- const Separator = marker("Separator");
89
- const Sub = marker("Sub");
90
- const SubTrigger = marker("SubTrigger");
91
- const SubContent = marker("SubContent");
92
- const CheckboxItem = marker("CheckboxItem");
93
- const Preview = marker("Preview");
94
- const Auxiliary = marker("Auxiliary");
95
- function Root({
96
- children,
97
- onOpenChange,
98
- onOpenWillChange
99
- }) {
100
- const trigger = elementOfType(children, Trigger);
101
- const content = elementOfType(children, Content);
102
- const preview = elementOfType(children, Preview);
103
- const auxiliary = elementOfType(children, Auxiliary);
104
- if (preview || auxiliary) {
105
- warnUnsupported("context-menu previews or auxiliary views");
106
- }
107
- if (!trigger || !content) {
108
- throw new Error("Tamagui native menus require one Trigger and one Content");
109
- }
110
- let nextId = 0;
111
- const handlers = /* @__PURE__ */new Map();
112
- function actionId(element) {
113
- return element.key == null ? `tamagui-menu-${nextId++}` : String(element.key).replace(/^\.\$/, "");
114
- }
115
- function itemTitle(element) {
116
- if (typeof element.props.textValue === "string") return element.props.textValue;
117
- const title = elementOfType(element.props.children, ItemTitle);
118
- return title ? textFromNode(title.props.children) : "";
119
- }
120
- function actionImage(element) {
121
- const image = elementOfType(element.props.children, ItemImage);
122
- if (image?.props.source) return image.props.source;
123
- const icon = elementOfType(element.props.children, ItemIcon);
124
- if (!icon) return void 0;
125
- const ios = icon.props.ios;
126
- if (typeof ios === "object" && ios && "name" in ios && typeof ios.name === "string") {
127
- return ios.name;
128
- }
129
- return typeof icon.props.iosIconName === "string" ? icon.props.iosIconName : void 0;
130
- }
131
- function attributes(element) {
132
- const destructive = element.props.destructive === true;
133
- const disabled = element.props.disabled === true;
134
- const hidden = element.props.hidden === true;
135
- return destructive || disabled || hidden ? {
136
- destructive,
137
- disabled,
138
- hidden
139
- } : void 0;
140
- }
141
- function actionsFrom(childrenToParse) {
142
- const actions = [];
143
- let section = null;
144
- function append(action) {
145
- if (section) {
146
- section.push(action);
147
- } else {
148
- actions.push(action);
149
- }
150
- }
151
- function flushSection() {
152
- if (!section?.length) {
153
- section = [];
154
- return;
155
- }
156
- actions.push({
157
- id: `tamagui-menu-section-${nextId++}`,
158
- title: "",
159
- subactions: section,
160
- displayInline: true
161
- });
162
- section = [];
163
- }
164
- for (const child of import_react.default.Children.toArray(childrenToParse)) {
165
- if (!import_react.default.isValidElement(child)) continue;
166
- if (isMarkerType(child.type, Separator)) {
167
- if (!section) section = actions.splice(0);
168
- flushSection();
169
- continue;
170
- }
171
- if (isMarkerType(child.type, Group)) {
172
- const label2 = elementOfType(child.props.children, Label);
173
- append({
174
- id: actionId(child),
175
- title: label2 ? textFromNode(label2.props.children) : "",
176
- subactions: actionsFrom(child.props.children),
177
- displayInline: true
178
- });
179
- continue;
180
- }
181
- if (isMarkerType(child.type, Sub)) {
182
- const subTrigger = elementOfType(child.props.children, SubTrigger);
183
- const subContent = elementOfType(child.props.children, SubContent);
184
- if (!subTrigger || !subContent) {
185
- throw new Error("Tamagui native submenus require one SubTrigger and SubContent");
186
- }
187
- append({
188
- id: actionId(child),
189
- title: itemTitle(subTrigger),
190
- image: actionImage(subTrigger),
191
- attributes: attributes(subTrigger),
192
- subactions: actionsFrom(subContent.props.children)
193
- });
194
- continue;
195
- }
196
- if (!isMarkerType(child.type, Item) && !isMarkerType(child.type, CheckboxItem)) continue;
197
- if (elementOfType(child.props.children, ItemSubtitle)) {
198
- warnUnsupported("menu item subtitles");
199
- }
200
- const id = actionId(child);
201
- if (isMarkerType(child.type, CheckboxItem)) {
202
- const current = child.props.value === true || child.props.value === "on" || child.props.checked === true;
203
- const onValueChange = child.props.onValueChange;
204
- const onCheckedChange = child.props.onCheckedChange;
205
- handlers.set(id, () => {
206
- if (typeof onValueChange === "function") {
207
- onValueChange(current ? "off" : "on", current ? "on" : "off");
208
- } else if (typeof onCheckedChange === "function") {
209
- onCheckedChange(!current);
210
- }
211
- });
212
- append({
213
- id,
214
- title: itemTitle(child),
215
- image: actionImage(child),
216
- state: current ? "on" : "off",
217
- attributes: attributes(child)
218
- });
219
- continue;
220
- }
221
- const onSelect = child.props.onSelect;
222
- if (typeof onSelect === "function") {
223
- handlers.set(id, () => onSelect());
224
- }
225
- append({
226
- id,
227
- title: itemTitle(child),
228
- image: actionImage(child),
229
- attributes: attributes(child)
230
- });
231
- }
232
- if (section) flushSection();
233
- return actions;
234
- }
235
- const label = elementOfType(content.props.children, Label);
236
- const triggerAction = trigger.props.action;
237
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(NativeMenuView, {
238
- actions: actionsFrom(content.props.children),
239
- title: label ? textFromNode(label.props.children) : void 0,
240
- shouldOpenOnLongPress: triggerAction === "longPress" || triggerAction !== "press" && isContextMenu,
241
- onPressAction: event => handlers.get(event.nativeEvent.event)?.(),
242
- onOpenMenu: () => {
243
- onOpenWillChange?.(true);
244
- onOpenChange?.(true);
245
- },
246
- onCloseMenu: () => {
247
- onOpenWillChange?.(false);
248
- onOpenChange?.(false);
249
- },
250
- children: trigger.props.children
251
- });
252
- }
253
- return {
254
- Root,
255
- Trigger,
256
- Content,
257
- Item,
258
- ItemTitle,
259
- ItemSubtitle,
260
- ItemIcon,
261
- ItemImage,
262
- ItemIndicator,
263
- Group,
264
- Label,
265
- Separator,
266
- Sub,
267
- SubTrigger,
268
- SubContent,
269
- CheckboxItem,
270
- Preview,
271
- Auxiliary
272
- };
273
- }
274
- return {
275
- name: "expo-ui",
276
- Menu: createModule(false),
277
- ContextMenu: createModule(true)
278
- };
279
- }