@tamagui/core 1.0.0-beta.149 → 1.0.0-beta.15

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 (294) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/Tamagui.js +13 -1
  3. package/dist/cjs/Tamagui.js.map +2 -2
  4. package/dist/cjs/ThemeContext.js +4 -0
  5. package/dist/cjs/ThemeManager.js +30 -14
  6. package/dist/cjs/ThemeManager.js.map +2 -2
  7. package/dist/cjs/conf.js +10 -1
  8. package/dist/cjs/conf.js.map +2 -2
  9. package/dist/cjs/constants/constants.js +6 -0
  10. package/dist/cjs/constants/platform.js +15 -0
  11. package/dist/cjs/constants/platform.js.map +2 -2
  12. package/dist/cjs/constants/rnw.js +4 -0
  13. package/dist/cjs/contexts/ButtonInsideButtonContext.js +4 -0
  14. package/dist/cjs/createComponent.js +175 -96
  15. package/dist/cjs/createComponent.js.map +2 -2
  16. package/dist/cjs/createFont.js +4 -0
  17. package/dist/cjs/createShorthands.js +4 -0
  18. package/dist/cjs/createTamagui.js +48 -27
  19. package/dist/cjs/createTamagui.js.map +2 -2
  20. package/dist/cjs/createTheme.js +4 -0
  21. package/dist/cjs/createTokens.js +7 -6
  22. package/dist/cjs/createTokens.js.map +2 -2
  23. package/dist/cjs/createVariable.js +18 -2
  24. package/dist/cjs/createVariable.js.map +2 -2
  25. package/dist/cjs/helpers/RNComponents.js +4 -0
  26. package/dist/cjs/helpers/addStylesUsingClassname.js +8 -0
  27. package/dist/cjs/helpers/addStylesUsingClassname.js.map +2 -2
  28. package/dist/cjs/helpers/areEqualSets.js +4 -0
  29. package/dist/cjs/helpers/createMediaStyle.js +5 -2
  30. package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
  31. package/dist/cjs/helpers/createPropMapper.js +53 -22
  32. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  33. package/dist/cjs/helpers/createShallowUpdate.js +4 -0
  34. package/dist/cjs/helpers/createTamaguiProvider.js +4 -0
  35. package/dist/cjs/helpers/extendStaticConfig.js +9 -6
  36. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  37. package/dist/cjs/helpers/fixNativeShadow.js +4 -0
  38. package/dist/cjs/helpers/fixNativeShadow.native.js +10 -9
  39. package/dist/cjs/helpers/fixNativeShadow.native.js.map +2 -2
  40. package/dist/cjs/helpers/getButtonSize.js +45 -0
  41. package/dist/cjs/helpers/getButtonSize.js.map +7 -0
  42. package/dist/cjs/helpers/getExpandedShorthands.js +4 -0
  43. package/dist/cjs/{constants/pseudos.js → helpers/getSize.js} +17 -19
  44. package/dist/cjs/helpers/getSize.js.map +7 -0
  45. package/dist/cjs/helpers/getSplitStyles.js +137 -55
  46. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  47. package/dist/cjs/helpers/getStylesAtomic.js +20 -3
  48. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  49. package/dist/cjs/helpers/getStylesAtomic.native.js +4 -0
  50. package/dist/cjs/helpers/getTextSize.js +56 -0
  51. package/dist/cjs/helpers/getTextSize.js.map +7 -0
  52. package/dist/cjs/helpers/insertStyleRule.js +42 -27
  53. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  54. package/dist/cjs/helpers/isObj.js +4 -0
  55. package/dist/cjs/helpers/isTamaguiElement.js +4 -0
  56. package/dist/cjs/helpers/matchMedia.js +4 -0
  57. package/dist/cjs/helpers/matchMedia.native.js +4 -0
  58. package/dist/cjs/helpers/proxyThemeVariables.js +40 -0
  59. package/dist/cjs/helpers/proxyThemeVariables.js.map +7 -0
  60. package/dist/cjs/helpers/themeable.js +7 -2
  61. package/dist/cjs/helpers/themeable.js.map +2 -2
  62. package/dist/cjs/helpers/validate.js +53 -11
  63. package/dist/cjs/helpers/validate.js.map +2 -2
  64. package/dist/cjs/helpers/withStaticProperties.js +4 -0
  65. package/dist/cjs/helpers/wrapThemeManagerContext.js +4 -0
  66. package/dist/cjs/hooks/useConstant.js +4 -0
  67. package/dist/cjs/hooks/useFeatures.js +4 -0
  68. package/dist/cjs/hooks/useId.js +59 -0
  69. package/dist/cjs/hooks/useId.js.map +7 -0
  70. package/dist/cjs/hooks/useIsMounted.js +4 -0
  71. package/dist/cjs/hooks/useIsTouchDevice.js +8 -4
  72. package/dist/cjs/hooks/useIsTouchDevice.js.map +2 -2
  73. package/dist/cjs/hooks/useMedia.js +14 -0
  74. package/dist/cjs/hooks/useMedia.js.map +2 -2
  75. package/dist/cjs/hooks/usePressable.js +4 -0
  76. package/dist/cjs/hooks/usePrevious.js +1 -0
  77. package/dist/cjs/{createShallowUpdate.js.map → hooks/usePrevious.js.map} +0 -0
  78. package/dist/cjs/hooks/useTheme.js +30 -16
  79. package/dist/cjs/hooks/useTheme.js.map +2 -2
  80. package/dist/cjs/hooks/useUnmountEffect.js +4 -0
  81. package/dist/cjs/index.js +24 -6
  82. package/dist/cjs/index.js.map +2 -2
  83. package/dist/cjs/static.js +3 -0
  84. package/dist/cjs/static.js.map +2 -2
  85. package/dist/cjs/styled.js +11 -5
  86. package/dist/cjs/styled.js.map +2 -2
  87. package/dist/cjs/types.js.map +1 -1
  88. package/dist/cjs/views/Slot.js +134 -0
  89. package/dist/cjs/views/Slot.js.map +7 -0
  90. package/dist/cjs/views/Stack.js +4 -0
  91. package/dist/cjs/views/Text.js +13 -14
  92. package/dist/cjs/views/Text.js.map +2 -2
  93. package/dist/cjs/views/TextAncestorContext.js +6 -0
  94. package/dist/cjs/views/Theme.js +7 -3
  95. package/dist/cjs/views/Theme.js.map +2 -2
  96. package/dist/cjs/views/ThemeInverse.js +10 -1
  97. package/dist/cjs/views/ThemeInverse.js.map +2 -2
  98. package/dist/cjs/views/ThemeProvider.js +6 -1
  99. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  100. package/dist/cjs/views/ThemeReset.js +4 -0
  101. package/dist/esm/Tamagui.js +8 -2
  102. package/dist/esm/Tamagui.js.map +2 -2
  103. package/dist/esm/ThemeManager.js +21 -11
  104. package/dist/esm/ThemeManager.js.map +2 -2
  105. package/dist/esm/conf.js +0 -1
  106. package/dist/esm/conf.js.map +2 -2
  107. package/dist/esm/constants/platform.js +2 -0
  108. package/dist/esm/constants/platform.js.map +2 -2
  109. package/dist/esm/createComponent.js +170 -104
  110. package/dist/esm/createComponent.js.map +2 -2
  111. package/dist/esm/createTamagui.js +45 -28
  112. package/dist/esm/createTamagui.js.map +2 -2
  113. package/dist/esm/createTokens.js +2 -6
  114. package/dist/esm/createTokens.js.map +2 -2
  115. package/dist/esm/createVariable.js +8 -2
  116. package/dist/esm/createVariable.js.map +2 -2
  117. package/dist/esm/helpers/addStylesUsingClassname.js +4 -1
  118. package/dist/esm/helpers/addStylesUsingClassname.js.map +2 -2
  119. package/dist/esm/helpers/createMediaStyle.js +0 -2
  120. package/dist/esm/helpers/createMediaStyle.js.map +2 -2
  121. package/dist/esm/helpers/createPropMapper.js +50 -22
  122. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  123. package/dist/esm/helpers/extendStaticConfig.js +9 -6
  124. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  125. package/dist/esm/helpers/fixNativeShadow.native.js +7 -9
  126. package/dist/esm/helpers/fixNativeShadow.native.js.map +2 -2
  127. package/dist/esm/helpers/getButtonSize.js +24 -0
  128. package/dist/esm/helpers/getButtonSize.js.map +7 -0
  129. package/dist/esm/helpers/getSize.js +13 -0
  130. package/dist/esm/helpers/getSize.js.map +7 -0
  131. package/dist/esm/helpers/getSplitStyles.js +136 -57
  132. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  133. package/dist/esm/helpers/getStylesAtomic.js +15 -3
  134. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  135. package/dist/esm/helpers/getTextSize.js +34 -0
  136. package/dist/esm/helpers/getTextSize.js.map +7 -0
  137. package/dist/esm/helpers/insertStyleRule.js +32 -27
  138. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  139. package/dist/esm/helpers/proxyThemeVariables.js +18 -0
  140. package/dist/esm/helpers/proxyThemeVariables.js.map +7 -0
  141. package/dist/esm/helpers/themeable.js +3 -2
  142. package/dist/esm/helpers/themeable.js.map +2 -2
  143. package/dist/esm/helpers/validate.js +24 -11
  144. package/dist/esm/helpers/validate.js.map +2 -2
  145. package/dist/esm/hooks/useId.js +35 -0
  146. package/dist/esm/hooks/useId.js.map +7 -0
  147. package/dist/esm/hooks/useIsTouchDevice.js +6 -6
  148. package/dist/esm/hooks/useIsTouchDevice.js.map +2 -2
  149. package/dist/esm/hooks/useMedia.js +3 -0
  150. package/dist/esm/hooks/useMedia.js.map +2 -2
  151. package/dist/esm/hooks/usePrevious.js +1 -0
  152. package/dist/esm/{createShallowUpdate.js.map → hooks/usePrevious.js.map} +0 -0
  153. package/dist/esm/hooks/useTheme.js +22 -16
  154. package/dist/esm/hooks/useTheme.js.map +2 -2
  155. package/dist/esm/index.js +13 -6
  156. package/dist/esm/index.js.map +2 -2
  157. package/dist/esm/static.js +3 -0
  158. package/dist/esm/static.js.map +2 -2
  159. package/dist/esm/styled.js +7 -5
  160. package/dist/esm/styled.js.map +2 -2
  161. package/dist/esm/views/Slot.js +82 -0
  162. package/dist/esm/views/Slot.js.map +7 -0
  163. package/dist/esm/views/Text.js +9 -14
  164. package/dist/esm/views/Text.js.map +2 -2
  165. package/dist/esm/views/Theme.js +3 -3
  166. package/dist/esm/views/Theme.js.map +2 -2
  167. package/dist/esm/views/ThemeInverse.js +6 -2
  168. package/dist/esm/views/ThemeInverse.js.map +2 -2
  169. package/dist/esm/views/ThemeProvider.js +2 -1
  170. package/dist/esm/views/ThemeProvider.js.map +2 -2
  171. package/dist/jsx/Tamagui.js +8 -2
  172. package/dist/jsx/ThemeManager.js +21 -11
  173. package/dist/jsx/conf.js +0 -1
  174. package/dist/jsx/constants/platform.js +2 -0
  175. package/dist/jsx/createComponent.js +161 -100
  176. package/dist/jsx/createTamagui.js +45 -28
  177. package/dist/jsx/createTokens.js +2 -6
  178. package/dist/jsx/createVariable.js +8 -2
  179. package/dist/jsx/helpers/addStylesUsingClassname.js +4 -1
  180. package/dist/jsx/helpers/createMediaStyle.js +0 -2
  181. package/dist/jsx/helpers/createPropMapper.js +50 -22
  182. package/dist/jsx/helpers/extendStaticConfig.js +9 -6
  183. package/dist/jsx/helpers/fixNativeShadow.native.js +7 -9
  184. package/dist/jsx/helpers/getButtonSize.js +23 -0
  185. package/dist/jsx/helpers/getSize.js +12 -0
  186. package/dist/jsx/helpers/getSplitStyles.js +136 -57
  187. package/dist/jsx/helpers/getStylesAtomic.js +15 -3
  188. package/dist/jsx/helpers/getTextSize.js +33 -0
  189. package/dist/jsx/helpers/insertStyleRule.js +32 -27
  190. package/dist/jsx/helpers/proxyThemeVariables.js +17 -0
  191. package/dist/jsx/helpers/themeable.js +3 -3
  192. package/dist/jsx/helpers/validate.js +24 -11
  193. package/dist/jsx/hooks/useId.js +34 -0
  194. package/dist/jsx/hooks/useIsTouchDevice.js +6 -6
  195. package/dist/jsx/hooks/useMedia.js +3 -0
  196. package/dist/jsx/{createShallowUpdate.js → hooks/usePrevious.js} +0 -0
  197. package/dist/jsx/hooks/useTheme.js +22 -16
  198. package/dist/jsx/index.js +13 -6
  199. package/dist/jsx/static.js +3 -0
  200. package/dist/jsx/styled.js +7 -5
  201. package/dist/jsx/views/Slot.js +75 -0
  202. package/dist/jsx/views/Text.js +9 -14
  203. package/dist/jsx/views/Theme.js +4 -4
  204. package/dist/jsx/views/ThemeInverse.js +6 -1
  205. package/dist/jsx/views/ThemeProvider.js +2 -2
  206. package/package.json +8 -6
  207. package/types/Tamagui.d.ts +16 -1
  208. package/types/Tamagui.d.ts.map +1 -1
  209. package/types/ThemeManager.d.ts +3 -3
  210. package/types/ThemeManager.d.ts.map +1 -1
  211. package/types/conf.d.ts +2 -0
  212. package/types/conf.d.ts.map +1 -1
  213. package/types/constants/platform.d.ts +1 -0
  214. package/types/constants/platform.d.ts.map +1 -1
  215. package/types/createComponent.d.ts +3 -4
  216. package/types/createComponent.d.ts.map +1 -1
  217. package/types/createTamagui.d.ts +3 -1
  218. package/types/createTamagui.d.ts.map +1 -1
  219. package/types/createTokens.d.ts +0 -26
  220. package/types/createTokens.d.ts.map +1 -1
  221. package/types/createVariable.d.ts +1 -0
  222. package/types/createVariable.d.ts.map +1 -1
  223. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -1
  224. package/types/helpers/createMediaStyle.d.ts.map +1 -1
  225. package/types/helpers/createPropMapper.d.ts +1 -1
  226. package/types/helpers/createPropMapper.d.ts.map +1 -1
  227. package/types/helpers/extendStaticConfig.d.ts +2 -2
  228. package/types/helpers/extendStaticConfig.d.ts.map +1 -1
  229. package/types/helpers/fixNativeShadow.native.d.ts +2 -1
  230. package/types/helpers/fixNativeShadow.native.d.ts.map +1 -1
  231. package/types/helpers/getButtonSize.d.ts +8 -0
  232. package/types/helpers/getButtonSize.d.ts.map +1 -0
  233. package/types/helpers/getSize.d.ts +3 -0
  234. package/types/helpers/getSize.d.ts.map +1 -0
  235. package/types/helpers/getSplitStyles.d.ts +14 -6
  236. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  237. package/types/helpers/getStylesAtomic.d.ts.map +1 -1
  238. package/types/helpers/getTextSize.d.ts +3 -0
  239. package/types/helpers/getTextSize.d.ts.map +1 -0
  240. package/types/helpers/insertStyleRule.d.ts +2 -1
  241. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  242. package/types/helpers/proxyThemeVariables.d.ts +2 -0
  243. package/types/helpers/proxyThemeVariables.d.ts.map +1 -0
  244. package/types/helpers/themeable.d.ts +3 -1
  245. package/types/helpers/themeable.d.ts.map +1 -1
  246. package/types/helpers/validate.d.ts.map +1 -1
  247. package/types/hooks/useId.d.ts +9 -0
  248. package/types/hooks/useId.d.ts.map +1 -0
  249. package/types/hooks/useMedia.d.ts +2 -6
  250. package/types/hooks/useMedia.d.ts.map +1 -1
  251. package/types/hooks/usePrevious.d.ts +1 -0
  252. package/types/hooks/usePrevious.d.ts.map +1 -0
  253. package/types/hooks/useTheme.d.ts +1 -1
  254. package/types/hooks/useTheme.d.ts.map +1 -1
  255. package/types/index.d.ts +11 -6
  256. package/types/index.d.ts.map +1 -1
  257. package/types/static.d.ts +3 -0
  258. package/types/static.d.ts.map +1 -1
  259. package/types/styled.d.ts +12 -3
  260. package/types/styled.d.ts.map +1 -1
  261. package/types/types.d.ts +86 -46
  262. package/types/types.d.ts.map +1 -1
  263. package/types/views/Slot.d.ts +9 -0
  264. package/types/views/Slot.d.ts.map +1 -0
  265. package/types/views/Text.d.ts.map +1 -1
  266. package/types/views/Theme.d.ts +1 -0
  267. package/types/views/Theme.d.ts.map +1 -1
  268. package/types/views/ThemeInverse.d.ts.map +1 -1
  269. package/types/views/ThemeProvider.d.ts +1 -0
  270. package/types/views/ThemeProvider.d.ts.map +1 -1
  271. package/LICENSE +0 -21
  272. package/dist/cjs/constants/pseudos.js.map +0 -7
  273. package/dist/cjs/createShallowUpdate.js +0 -1
  274. package/dist/cjs/devtools.js +0 -32
  275. package/dist/cjs/devtools.js.map +0 -7
  276. package/dist/cjs/spacedChildren.js +0 -86
  277. package/dist/cjs/spacedChildren.js.map +0 -7
  278. package/dist/cjs/tamagui-base.css +0 -8
  279. package/dist/cjs/tamagui-base.css.map +0 -7
  280. package/dist/esm/constants/pseudos.js +0 -18
  281. package/dist/esm/constants/pseudos.js.map +0 -7
  282. package/dist/esm/createShallowUpdate.js +0 -1
  283. package/dist/esm/devtools.js +0 -14
  284. package/dist/esm/devtools.js.map +0 -7
  285. package/dist/esm/spacedChildren.js +0 -52
  286. package/dist/esm/spacedChildren.js.map +0 -7
  287. package/dist/esm/tamagui-base.css +0 -8
  288. package/dist/esm/tamagui-base.css.map +0 -7
  289. package/dist/jsx/constants/pseudos.js +0 -17
  290. package/dist/jsx/devtools.js +0 -13
  291. package/dist/jsx/spacedChildren.js +0 -44
  292. package/dist/jsx/tamagui-base.css +0 -7
  293. package/types/spacedChildren.d.ts +0 -9
  294. package/types/spacedChildren.d.ts.map +0 -1
@@ -13,20 +13,23 @@ import React, {
13
13
  useRef,
14
14
  useState
15
15
  } from "react";
16
- import { StyleSheet, Text, View } from "react-native";
16
+ import { Pressable, StyleSheet, Text, View } from "react-native";
17
+ import { BaseButton } from "react-native-gesture-handler";
17
18
  import { onConfiguredOnce } from "./conf";
18
19
  import { stackDefaultStyles } from "./constants/constants";
19
- import { isAndroid, isTouchDevice, isWeb, useIsomorphicLayoutEffect } from "./constants/platform";
20
+ import { isAndroid, isWeb, useIsomorphicLayoutEffect } from "./constants/platform";
20
21
  import { rnw } from "./constants/rnw";
21
- import { isVariable } from "./createVariable";
22
22
  import { createShallowUpdate } from "./helpers/createShallowUpdate";
23
23
  import { extendStaticConfig, parseStaticConfig } from "./helpers/extendStaticConfig";
24
- import { getSplitStyles } from "./helpers/getSplitStyles";
24
+ import { insertSplitStyles, useSplitStyles } from "./helpers/getSplitStyles";
25
25
  import { getAllSelectors } from "./helpers/insertStyleRule";
26
+ import { proxyThemeVariables } from "./helpers/proxyThemeVariables";
26
27
  import { wrapThemeManagerContext } from "./helpers/wrapThemeManagerContext";
27
28
  import { useFeatures } from "./hooks/useFeatures";
29
+ import { useIsTouchDevice } from "./hooks/useIsTouchDevice";
28
30
  import { usePressable } from "./hooks/usePressable";
29
31
  import { getThemeManagerIfChanged, useTheme } from "./hooks/useTheme";
32
+ import { Slot } from "./views/Slot";
30
33
  import { TextAncestorContext } from "./views/TextAncestorContext";
31
34
  React["keep"];
32
35
  const defaultComponentState = {
@@ -43,55 +46,70 @@ if (typeof document !== "undefined") {
43
46
  mouseUps.forEach((x) => x());
44
47
  mouseUps.clear();
45
48
  });
49
+ document.addEventListener("touchend", () => {
50
+ mouseUps.forEach((x) => x());
51
+ mouseUps.clear();
52
+ });
53
+ document.addEventListener("touchcancel", () => {
54
+ mouseUps.forEach((x) => x());
55
+ mouseUps.clear();
56
+ });
46
57
  }
47
- function createComponent(configIn) {
48
- let staticConfig;
49
- if ("parsed" in configIn) {
50
- staticConfig = configIn;
51
- } else {
52
- staticConfig = parseStaticConfig(configIn);
58
+ function mergeShorthands({ defaultProps }, { shorthands }) {
59
+ for (const key in defaultProps) {
60
+ defaultProps[shorthands[key] || key] = defaultProps[key];
53
61
  }
54
- const { Component, validStyles, isText, isZStack, componentName } = staticConfig;
55
- const componentClassName = `is_${componentName}`;
56
- const validStyleProps = validStyles || stylePropsView;
62
+ }
63
+ __name(mergeShorthands, "mergeShorthands");
64
+ let initialTheme;
65
+ function createComponent(configIn, ParentComponent) {
66
+ const staticConfig = (() => {
67
+ const config = extendStaticConfig(configIn, ParentComponent);
68
+ if ("parsed" in config) {
69
+ return config;
70
+ } else {
71
+ return parseStaticConfig(config);
72
+ }
73
+ })();
74
+ const componentClassName = `is_${staticConfig.componentName}`;
57
75
  let tamaguiConfig;
58
76
  let AnimatedText;
59
77
  let AnimatedView;
60
78
  let avoidClasses = true;
61
- let defaultPseudos = {};
62
79
  let defaultNativeStyle;
63
- let defaultNativeStyleSheet = null;
64
- let defaultsClassName = null;
65
- let initialTheme;
66
- let defaultSplitStyleResult = null;
80
+ let defaultNativeStyleSheet;
81
+ let tamaguiDefaultProps;
82
+ let initialSplitStyles;
67
83
  function addPseudoToStyles(styles, name, pseudos) {
68
84
  const pseudoStyle = pseudos[name];
69
85
  const shouldNestObject = isWeb && name !== "enterStyle" && name !== "exitStyle";
70
- if (pseudoStyle) {
71
- styles.push(shouldNestObject ? { [name]: pseudoStyle } : pseudoStyle);
72
- }
73
- const defaultPseudoStyle = defaultPseudos[name];
86
+ const defaultPseudoStyle = initialSplitStyles.pseudos[name];
74
87
  if (defaultPseudoStyle) {
75
88
  styles.push(shouldNestObject ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
76
89
  }
90
+ if (pseudoStyle) {
91
+ styles.push(shouldNestObject ? { [name]: pseudoStyle } : pseudoStyle);
92
+ }
77
93
  }
78
94
  __name(addPseudoToStyles, "addPseudoToStyles");
79
95
  const component = forwardRef((props, forwardedRef) => {
80
96
  var _a, _b, _c, _d;
97
+ props = tamaguiDefaultProps && !props.asChild ? { ...tamaguiDefaultProps, ...props } : props;
98
+ const { Component, componentName, isText, isZStack } = staticConfig;
81
99
  if (process.env.NODE_ENV === "development") {
82
100
  if (props["debug"]) {
83
- console.warn(componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
84
- console.log("props in:", props);
101
+ console.log("\u26A0\uFE0F", staticConfig.componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
102
+ console.log("props in:", props, Object.keys(props));
85
103
  if (props["debug"] === "break")
86
104
  debugger;
87
105
  }
88
106
  }
89
107
  const forceUpdate = useForceUpdate();
90
- const theme = useTheme(props.theme, componentName, props, forceUpdate);
108
+ const theme = useTheme(props.theme, staticConfig.componentName, props, forceUpdate);
91
109
  const [state, set_] = useState(defaultComponentState);
92
110
  const setStateShallow = createShallowUpdate(set_);
93
111
  const shouldAvoidClasses = !!(props.animation && avoidClasses);
94
- const splitStyles = getSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses ? null : defaultsClassName);
112
+ const splitStyles = useSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses || props.asChild ? null : initialSplitStyles.classNames);
95
113
  const { viewProps: viewPropsIn, pseudos, medias, style, classNames } = splitStyles;
96
114
  const useAnimations = (_a = tamaguiConfig.animations) == null ? void 0 : _a.useAnimations;
97
115
  const isAnimated = !!(useAnimations && props.animation);
@@ -110,6 +128,7 @@ function createComponent(configIn) {
110
128
  const {
111
129
  tag,
112
130
  hitSlop,
131
+ asChild,
113
132
  children,
114
133
  pointerEvents,
115
134
  onPress,
@@ -144,6 +163,7 @@ function createComponent(configIn) {
144
163
  accessibilityRole,
145
164
  collapsable,
146
165
  focusable,
166
+ onClick,
147
167
  theme: _themeProp,
148
168
  defaultVariants,
149
169
  onLayout,
@@ -166,7 +186,7 @@ function createComponent(configIn) {
166
186
  };
167
187
  }
168
188
  useIsomorphicLayoutEffect(() => {
169
- if (typeof window !== "undefined") {
189
+ if (typeof window !== "undefined" && (hasEnterStyle || props.animation)) {
170
190
  setStateShallow({
171
191
  mounted: true
172
192
  });
@@ -176,7 +196,7 @@ function createComponent(configIn) {
176
196
  mouseUps.delete(unPress);
177
197
  internal.current.isMounted = false;
178
198
  };
179
- }, [hasEnterStyle]);
199
+ }, [hasEnterStyle, props.animation]);
180
200
  if (nativeID) {
181
201
  viewProps.id = nativeID;
182
202
  }
@@ -192,7 +212,7 @@ function createComponent(configIn) {
192
212
  if (accessibilityRole)
193
213
  viewProps.accessibilityRole = accessibilityRole;
194
214
  }
195
- if (isWeb) {
215
+ if (isWeb && !asChild) {
196
216
  rnw.useResponderEvents(hostRef, {
197
217
  onMoveShouldSetResponder,
198
218
  onMoveShouldSetResponderCapture,
@@ -253,7 +273,7 @@ function createComponent(configIn) {
253
273
  const className = classList.join(" ");
254
274
  if (process.env.NODE_ENV === "development") {
255
275
  if (props["debug"]) {
256
- console.log(" \xBB className", { isStringElement, pseudos, state, defaultsClassName, classNames, propsClassName: props.className, style, classList, className: className.trim().split(" "), themeClassName: theme.className, values: Object.fromEntries(Object.entries(classNames).map(([k, v]) => [v, getAllSelectors()[v]])) });
276
+ console.log(" \xBB className", { isStringElement, pseudos, state, classNames, propsClassName: props.className, style, classList, className: className.trim().split(" "), themeClassName: theme.className, values: Object.fromEntries(Object.entries(classNames).map(([k, v]) => [v, getAllSelectors()[v]])) });
257
277
  }
258
278
  }
259
279
  viewProps.className = className;
@@ -294,11 +314,16 @@ function createComponent(configIn) {
294
314
  viewProps.ref = forwardedRef;
295
315
  }
296
316
  }
297
- const attachPress = !!(pseudos && pseudos.pressStyle || defaultPseudos && defaultPseudos.pressStyle || onPress || onPressOut || onPressIn);
298
- const isHoverable = isWeb && !isTouchDevice;
317
+ const initialPseudos = initialSplitStyles.pseudos;
318
+ const attachPress = !!(pseudos && pseudos.pressStyle || initialPseudos && initialPseudos.pressStyle || onPress || onPressOut || onPressIn || onClick);
319
+ const isTouch = useIsTouchDevice();
320
+ const isHoverable = isWeb && !isTouch;
299
321
  const attachHover = isHoverable && !!(pseudos && pseudos.hoverStyle || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave);
300
- const pressEventKey = isStringElement ? "onClick" : "onPress";
301
- const shouldAttach = attachPress || attachHover || "pressStyle" in props || "onPress" in props || "onPressIn" in props || "onPressOut" in props || isWeb && ("hoverStyle" in props || "onHoverIn" in props || "onHoverOut" in props || "onMouseEnter" in props || "onMouseLeave" in props);
322
+ const handlesPressEvents = !isStringElement && !asChild;
323
+ const pressKey = handlesPressEvents ? "onPress" : "onClick";
324
+ const pressInKey = handlesPressEvents ? "onPressIn" : "onMouseDown";
325
+ const pressOutKey = handlesPressEvents ? "onPressOut" : "onMouseUp";
326
+ const shouldAttach = !asChild && (attachPress || attachHover || "pressStyle" in props || "onPress" in props || "onPressIn" in props || "onPressOut" in props || isWeb && ("hoverStyle" in props || "onHoverIn" in props || "onHoverOut" in props || "onMouseEnter" in props || "onMouseLeave" in props));
302
327
  const unPress = useCallback(() => {
303
328
  if (!internal.current.isMounted)
304
329
  return;
@@ -308,12 +333,10 @@ function createComponent(configIn) {
308
333
  });
309
334
  }, []);
310
335
  const events = shouldAttach ? {
311
- ...!isWeb && {
312
- onPressOut: (e) => {
313
- unPress();
314
- onPressOut == null ? void 0 : onPressOut(e);
315
- }
316
- },
336
+ [pressOutKey]: attachPress ? (e) => {
337
+ unPress();
338
+ onPressOut == null ? void 0 : onPressOut(e);
339
+ } : void 0,
317
340
  ...isHoverable && {
318
341
  onMouseEnter: attachHover ? (e) => {
319
342
  let next = {};
@@ -346,37 +369,29 @@ function createComponent(configIn) {
346
369
  onMouseLeave == null ? void 0 : onMouseLeave(e);
347
370
  } : void 0
348
371
  },
349
- onMouseDown: attachPress ? (e) => {
372
+ [pressInKey]: attachPress ? (e) => {
350
373
  setStateShallow({
351
374
  press: true,
352
375
  pressIn: true
353
376
  });
354
377
  onPressIn == null ? void 0 : onPressIn(e);
355
378
  onMouseDown == null ? void 0 : onMouseDown(e);
379
+ if (isWeb) {
380
+ mouseUps.add(unPress);
381
+ }
356
382
  } : null,
357
- [pressEventKey]: attachPress ? (e) => {
358
- onPress == null ? void 0 : onPress(e);
383
+ [pressKey]: attachPress ? (e) => {
359
384
  unPress();
360
- onPressOut == null ? void 0 : onPressOut(e);
385
+ onClick == null ? void 0 : onClick(e);
386
+ onPress == null ? void 0 : onPress(e);
361
387
  } : null
362
388
  } : null;
363
- let childEls = !children ? children : wrapThemeManagerContext(spacedChildren({
389
+ const childEls = !children || asChild ? children : wrapThemeManagerContext(spacedChildren({
364
390
  children,
365
391
  space,
366
392
  flexDirection: props.flexDirection || ((_b = staticConfig.defaultProps) == null ? void 0 : _b.flexDirection),
367
393
  isZStack
368
394
  }), getThemeManagerIfChanged(theme));
369
- const [pressProps] = usePressable(events ? {
370
- disabled,
371
- ...hitSlop && {
372
- hitSlop
373
- },
374
- onPressIn: events.onMouseDown,
375
- onPressOut: events.onPressOut,
376
- onPress: events[pressEventKey]
377
- } : {
378
- disabled: true
379
- });
380
395
  let content;
381
396
  if (isWeb) {
382
397
  if (staticConfig.isReactNativeWeb) {
@@ -393,14 +408,46 @@ function createComponent(configIn) {
393
408
  }
394
409
  }
395
410
  }
396
- if (events) {
397
- if (!isStringElement) {
398
- Object.assign(viewProps, pressProps);
399
- } else {
400
- Object.assign(viewProps, events);
411
+ if (asChild) {
412
+ ViewComponent = Slot;
413
+ const onlyChild = React.Children.only(children);
414
+ Object.assign(viewProps, onlyChild.props);
415
+ }
416
+ if (isWeb) {
417
+ const [pressableProps] = usePressable(events ? {
418
+ disabled,
419
+ ...hitSlop && {
420
+ hitSlop
421
+ },
422
+ onPressOut: events[pressOutKey],
423
+ onPressIn: events[pressInKey],
424
+ onPress: events[pressKey]
425
+ } : {
426
+ disabled: true
427
+ });
428
+ if (events) {
429
+ if (handlesPressEvents) {
430
+ Object.assign(viewProps, pressableProps);
431
+ } else {
432
+ Object.assign(viewProps, events);
433
+ }
401
434
  }
402
435
  }
403
436
  content = createElement(ViewComponent, viewProps, childEls);
437
+ if (!isWeb) {
438
+ if (attachPress && events) {
439
+ content = /* @__PURE__ */ React.createElement(Pressable, {
440
+ onPressIn: events[pressInKey],
441
+ onPress: events[pressKey]
442
+ }, /* @__PURE__ */ React.createElement(BaseButton, {
443
+ onActiveStateChange: (isActive) => {
444
+ if (!isActive) {
445
+ unPress();
446
+ }
447
+ }
448
+ }, content));
449
+ }
450
+ }
404
451
  if (isWeb && events && attachHover) {
405
452
  content = /* @__PURE__ */ React.createElement("span", {
406
453
  className: "tui_Hoverable",
@@ -413,8 +460,7 @@ function createComponent(configIn) {
413
460
  }
414
461
  if (process.env.NODE_ENV === "development") {
415
462
  if (props["debug"]) {
416
- viewProps["debug"] = true;
417
- console.log(" \xBB ", { propsIn: { ...props }, propsOut: { ...viewProps }, state, splitStyles, defaultsClassName, animationStyles, isStringElement, classNamesIn: (_c = props.className) == null ? void 0 : _c.split(" "), classNamesOut: (_d = viewProps.className) == null ? void 0 : _d.split(" "), pressProps, events, shouldAttach, ViewComponent, viewProps, styles, pseudos, content, childEls, shouldAvoidClasses, avoidClasses, animation: props.animation, style, defaultNativeStyle, defaultSplitStyleResult, ...typeof window !== "undefined" ? { theme, themeState: theme.__state, themeClassName: theme.className, staticConfig, tamaguiConfig } : null });
463
+ console.log(" \xBB ", { propsIn: { ...props }, propsOut: { ...viewProps }, state, splitStyles, animationStyles, isStringElement, classNamesIn: (_c = props.className) == null ? void 0 : _c.split(" "), classNamesOut: (_d = viewProps.className) == null ? void 0 : _d.split(" "), events, shouldAttach, ViewComponent, viewProps, styles, pseudos, content, childEls, shouldAvoidClasses, avoidClasses, animation: props.animation, style, defaultNativeStyle, initialSplitStyles, ...typeof window !== "undefined" ? { theme, themeState: theme.__state, themeClassName: theme.className, staticConfig, tamaguiConfig } : null });
418
464
  }
419
465
  }
420
466
  if (features.length) {
@@ -422,66 +468,81 @@ function createComponent(configIn) {
422
468
  }
423
469
  return content;
424
470
  });
471
+ component.displayName = staticConfig.componentName;
425
472
  onConfiguredOnce((conf) => {
426
473
  var _a, _b, _c, _d;
427
474
  if (process.env.IS_STATIC === "is_static") {
428
475
  return;
429
476
  }
430
- const shouldDebug = (_a = staticConfig.defaultProps) == null ? void 0 : _a.debug;
431
477
  tamaguiConfig = conf;
432
- avoidClasses = !!((_b = tamaguiConfig.animations) == null ? void 0 : _b.avoidClasses);
433
- AnimatedText = (_c = tamaguiConfig.animations) == null ? void 0 : _c.Text;
434
- AnimatedView = (_d = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _d.View;
435
- initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]];
436
- defaultSplitStyleResult = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
478
+ mergeShorthands(staticConfig, tamaguiConfig);
479
+ avoidClasses = !!((_a = tamaguiConfig.animations) == null ? void 0 : _a.avoidClasses);
480
+ AnimatedText = (_b = tamaguiConfig.animations) == null ? void 0 : _b.Text;
481
+ AnimatedView = (_c = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _c.View;
482
+ initialTheme = initialTheme || proxyThemeVariables(conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]]);
483
+ initialSplitStyles = insertSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
437
484
  mounted: true,
438
485
  hover: false,
439
486
  press: false,
440
487
  pressIn: false,
441
488
  focus: false,
442
- resolveVariablesAs: "both"
489
+ resolveVariablesAs: "both",
490
+ keepVariantsAsProps: true
443
491
  });
444
- const { classNames, pseudos, style, viewProps } = defaultSplitStyleResult;
445
- if (isWeb) {
446
- defaultsClassName = classNames;
447
- }
448
- defaultPseudos = pseudos;
492
+ const defaults = {
493
+ ...component.defaultProps,
494
+ ...initialSplitStyles.viewProps
495
+ };
449
496
  defaultNativeStyle = {};
450
- for (const key in style) {
451
- const v = style[key];
452
- defaultNativeStyle[key] = isVariable(v) ? v.val : v;
497
+ const validStyles = staticConfig.validStyles || stylePropsView;
498
+ for (const key in staticConfig.defaultProps) {
499
+ const val = staticConfig.defaultProps[key];
500
+ if (typeof val === "string" && val[0] === "$" || !validStyles[key]) {
501
+ defaults[key] = val;
502
+ } else {
503
+ defaultNativeStyle[key] = val;
504
+ }
453
505
  }
454
506
  defaultNativeStyleSheet = StyleSheet.create({
455
507
  base: defaultNativeStyle
456
508
  });
457
- component.displayName = staticConfig.componentName;
458
- component.defaultProps = {
459
- ...viewProps,
460
- ...component.defaultProps
461
- };
462
- if (process.env.NODE_ENV === "development" && shouldDebug && process.env.IS_STATIC !== "is_static") {
463
- console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, { staticConfig, ...defaultSplitStyleResult });
509
+ if (Object.keys(defaults).length) {
510
+ tamaguiDefaultProps = defaults;
511
+ }
512
+ if (process.env.NODE_ENV === "development" && ((_d = staticConfig.defaultProps) == null ? void 0 : _d.debug)) {
513
+ if (process.env.IS_STATIC !== "is_static") {
514
+ console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, {
515
+ staticConfig,
516
+ initialSplitStyles,
517
+ tamaguiDefaultProps,
518
+ defaultNativeStyle,
519
+ defaults
520
+ });
521
+ }
464
522
  }
465
523
  });
466
524
  let res = component;
467
525
  if (configIn.memo) {
468
526
  res = memo(res);
469
527
  }
470
- res["whyDidYouRender"] = true;
471
528
  res["staticConfig"] = {
472
- validStyles: validStyleProps,
529
+ validStyles: staticConfig.validStyles || stylePropsView,
473
530
  ...staticConfig
474
531
  };
475
- res["extractable"] = (Component2, conf) => {
476
- Component2["staticConfig"] = extendStaticConfig(res, {
532
+ if (process.env.NODE_ENV === "development") {
533
+ res["whyDidYouRender"] = true;
534
+ }
535
+ res["extractable"] = (Component, conf) => {
536
+ Component["staticConfig"] = extendStaticConfig({
537
+ Component,
477
538
  ...conf,
478
539
  neverFlatten: true,
479
540
  defaultProps: {
480
- ...Component2.defaultProps,
541
+ ...Component.defaultProps,
481
542
  ...conf == null ? void 0 : conf.defaultProps
482
543
  }
483
- });
484
- return Component2;
544
+ }, res);
545
+ return Component;
485
546
  };
486
547
  return res;
487
548
  }
@@ -522,6 +583,9 @@ const Spacer = createComponent({
522
583
  minWidth: 0
523
584
  }
524
585
  }
586
+ },
587
+ defaultVariants: {
588
+ direction: "horizontal"
525
589
  }
526
590
  });
527
591
  function spacedChildren({
@@ -568,22 +632,24 @@ function spacedChildren({
568
632
  return next;
569
633
  }
570
634
  __name(spacedChildren, "spacedChildren");
571
- const AbsoluteFill = /* @__PURE__ */ __name((props) => isWeb ? /* @__PURE__ */ React.createElement("div", {
572
- style: {
573
- position: "absolute",
574
- top: 0,
575
- left: 0,
576
- right: 0,
577
- bottom: 0
578
- }
579
- }, props.children) : /* @__PURE__ */ React.createElement(View, {
580
- style: StyleSheet.absoluteFill
581
- }, props.child), "AbsoluteFill");
635
+ function AbsoluteFill(props) {
636
+ return isWeb ? /* @__PURE__ */ React.createElement("div", {
637
+ style: {
638
+ position: "absolute",
639
+ top: 0,
640
+ left: 0,
641
+ right: 0,
642
+ bottom: 0
643
+ }
644
+ }, props.children) : /* @__PURE__ */ React.createElement(View, {
645
+ style: StyleSheet.absoluteFill
646
+ }, props.child);
647
+ }
648
+ __name(AbsoluteFill, "AbsoluteFill");
582
649
  export {
583
650
  AbsoluteFill,
584
651
  Spacer,
585
652
  createComponent,
586
- defaultComponentState,
587
653
  mouseUps,
588
654
  spacedChildren
589
655
  };