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