@tamagui/core 1.0.0-beta.225 → 1.0.0-beta.4

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 (253) hide show
  1. package/dist/cjs/Tamagui.js +13 -1
  2. package/dist/cjs/Tamagui.js.map +2 -2
  3. package/dist/cjs/ThemeContext.js +4 -0
  4. package/dist/cjs/ThemeManager.js +30 -14
  5. package/dist/cjs/ThemeManager.js.map +2 -2
  6. package/dist/cjs/conf.js +10 -1
  7. package/dist/cjs/conf.js.map +2 -2
  8. package/dist/cjs/constants/constants.js +6 -0
  9. package/dist/cjs/constants/platform.js +15 -0
  10. package/dist/cjs/constants/platform.js.map +2 -2
  11. package/dist/cjs/constants/rnw.js +4 -0
  12. package/dist/cjs/contexts/ButtonInsideButtonContext.js +4 -0
  13. package/dist/cjs/createComponent.js +112 -64
  14. package/dist/cjs/createComponent.js.map +2 -2
  15. package/dist/cjs/createFont.js +4 -0
  16. package/dist/cjs/createShorthands.js +4 -0
  17. package/dist/cjs/createTamagui.js +56 -27
  18. package/dist/cjs/createTamagui.js.map +2 -2
  19. package/dist/cjs/createTheme.js +4 -0
  20. package/dist/cjs/createTokens.js +7 -6
  21. package/dist/cjs/createTokens.js.map +2 -2
  22. package/dist/cjs/createVariable.js +18 -2
  23. package/dist/cjs/createVariable.js.map +2 -2
  24. package/dist/cjs/helpers/RNComponents.js +4 -0
  25. package/dist/cjs/helpers/addStylesUsingClassname.js +19 -16
  26. package/dist/cjs/helpers/addStylesUsingClassname.js.map +2 -2
  27. package/dist/cjs/helpers/areEqualSets.js +4 -0
  28. package/dist/cjs/helpers/createMediaStyle.js +5 -2
  29. package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
  30. package/dist/cjs/helpers/createPropMapper.js +44 -41
  31. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  32. package/dist/cjs/helpers/createShallowUpdate.js +4 -0
  33. package/dist/cjs/helpers/createTamaguiProvider.js +4 -0
  34. package/dist/cjs/helpers/extendStaticConfig.js +9 -6
  35. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  36. package/dist/cjs/helpers/fixNativeShadow.js +4 -0
  37. package/dist/cjs/helpers/fixNativeShadow.native.js +6 -2
  38. package/dist/cjs/helpers/fixNativeShadow.native.js.map +2 -2
  39. package/dist/cjs/helpers/getExpandedShorthands.js +4 -0
  40. package/dist/cjs/{constants/pseudos.js → helpers/getSize.js} +17 -19
  41. package/dist/cjs/helpers/getSize.js.map +7 -0
  42. package/dist/cjs/helpers/getSplitStyles.js +165 -62
  43. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  44. package/dist/cjs/helpers/getStylesAtomic.js +20 -3
  45. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  46. package/dist/cjs/helpers/getStylesAtomic.native.js +4 -0
  47. package/dist/cjs/helpers/insertStyleRule.js +41 -26
  48. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  49. package/dist/cjs/helpers/isObj.js +4 -0
  50. package/dist/cjs/helpers/isTamaguiElement.js +4 -0
  51. package/dist/cjs/helpers/matchMedia.js +4 -0
  52. package/dist/cjs/helpers/matchMedia.native.js +4 -0
  53. package/dist/cjs/helpers/proxyThemeVariables.js +40 -0
  54. package/dist/cjs/helpers/proxyThemeVariables.js.map +7 -0
  55. package/dist/cjs/helpers/themeable.js +7 -2
  56. package/dist/cjs/helpers/themeable.js.map +2 -2
  57. package/dist/cjs/helpers/validate.js +53 -11
  58. package/dist/cjs/helpers/validate.js.map +2 -2
  59. package/dist/cjs/helpers/withStaticProperties.js +4 -0
  60. package/dist/cjs/helpers/wrapThemeManagerContext.js +4 -0
  61. package/dist/cjs/hooks/useConstant.js +4 -0
  62. package/dist/cjs/hooks/useFeatures.js +8 -5
  63. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  64. package/dist/cjs/hooks/useIsMounted.js +4 -0
  65. package/dist/cjs/hooks/useIsTouchDevice.js +8 -4
  66. package/dist/cjs/hooks/useIsTouchDevice.js.map +2 -2
  67. package/dist/cjs/hooks/useMedia.js +30 -12
  68. package/dist/cjs/hooks/useMedia.js.map +2 -2
  69. package/dist/cjs/hooks/usePressable.js +4 -0
  70. package/dist/cjs/hooks/useTheme.js +30 -16
  71. package/dist/cjs/hooks/useTheme.js.map +2 -2
  72. package/dist/cjs/hooks/useUnmountEffect.js +4 -0
  73. package/dist/cjs/index.js +15 -0
  74. package/dist/cjs/index.js.map +2 -2
  75. package/dist/cjs/static.js +3 -0
  76. package/dist/cjs/static.js.map +2 -2
  77. package/dist/cjs/styled.js +7 -4
  78. package/dist/cjs/styled.js.map +2 -2
  79. package/dist/cjs/types.js.map +1 -1
  80. package/dist/cjs/views/Stack.js +4 -0
  81. package/dist/cjs/views/Text.js +4 -0
  82. package/dist/cjs/views/TextAncestorContext.js +6 -0
  83. package/dist/cjs/views/Theme.js +7 -3
  84. package/dist/cjs/views/Theme.js.map +2 -2
  85. package/dist/cjs/views/ThemeInverse.js +5 -0
  86. package/dist/cjs/views/ThemeProvider.js +6 -1
  87. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  88. package/dist/cjs/views/ThemeReset.js +4 -0
  89. package/dist/esm/Tamagui.js +8 -2
  90. package/dist/esm/Tamagui.js.map +2 -2
  91. package/dist/esm/ThemeManager.js +21 -11
  92. package/dist/esm/ThemeManager.js.map +2 -2
  93. package/dist/esm/conf.js +0 -1
  94. package/dist/esm/conf.js.map +2 -2
  95. package/dist/esm/constants/platform.js +2 -0
  96. package/dist/esm/constants/platform.js.map +2 -2
  97. package/dist/esm/createComponent.js +104 -66
  98. package/dist/esm/createComponent.js.map +2 -2
  99. package/dist/esm/createTamagui.js +53 -28
  100. package/dist/esm/createTamagui.js.map +2 -2
  101. package/dist/esm/createTokens.js +2 -6
  102. package/dist/esm/createTokens.js.map +2 -2
  103. package/dist/esm/createVariable.js +8 -2
  104. package/dist/esm/createVariable.js.map +2 -2
  105. package/dist/esm/helpers/addStylesUsingClassname.js +16 -18
  106. package/dist/esm/helpers/addStylesUsingClassname.js.map +2 -2
  107. package/dist/esm/helpers/createMediaStyle.js +0 -2
  108. package/dist/esm/helpers/createMediaStyle.js.map +2 -2
  109. package/dist/esm/helpers/createPropMapper.js +40 -41
  110. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  111. package/dist/esm/helpers/extendStaticConfig.js +9 -6
  112. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  113. package/dist/esm/helpers/fixNativeShadow.native.js +2 -2
  114. package/dist/esm/helpers/fixNativeShadow.native.js.map +2 -2
  115. package/dist/esm/helpers/getSize.js +13 -0
  116. package/dist/esm/helpers/getSize.js.map +7 -0
  117. package/dist/esm/helpers/getSplitStyles.js +165 -65
  118. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  119. package/dist/esm/helpers/getStylesAtomic.js +15 -3
  120. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  121. package/dist/esm/helpers/insertStyleRule.js +31 -26
  122. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  123. package/dist/esm/helpers/proxyThemeVariables.js +18 -0
  124. package/dist/esm/helpers/proxyThemeVariables.js.map +7 -0
  125. package/dist/esm/helpers/themeable.js +3 -2
  126. package/dist/esm/helpers/themeable.js.map +2 -2
  127. package/dist/esm/helpers/validate.js +24 -11
  128. package/dist/esm/helpers/validate.js.map +2 -2
  129. package/dist/esm/hooks/useFeatures.js +3 -5
  130. package/dist/esm/hooks/useFeatures.js.map +2 -2
  131. package/dist/esm/hooks/useIsTouchDevice.js +6 -6
  132. package/dist/esm/hooks/useIsTouchDevice.js.map +2 -2
  133. package/dist/esm/hooks/useMedia.js +19 -12
  134. package/dist/esm/hooks/useMedia.js.map +2 -2
  135. package/dist/esm/hooks/useTheme.js +22 -16
  136. package/dist/esm/hooks/useTheme.js.map +2 -2
  137. package/dist/esm/index.js +4 -0
  138. package/dist/esm/index.js.map +2 -2
  139. package/dist/esm/static.js +3 -0
  140. package/dist/esm/static.js.map +2 -2
  141. package/dist/esm/styled.js +3 -4
  142. package/dist/esm/styled.js.map +2 -2
  143. package/dist/esm/views/Theme.js +3 -3
  144. package/dist/esm/views/Theme.js.map +2 -2
  145. package/dist/esm/views/ThemeProvider.js +2 -1
  146. package/dist/esm/views/ThemeProvider.js.map +2 -2
  147. package/dist/jsx/Tamagui.js +8 -2
  148. package/dist/jsx/ThemeManager.js +21 -11
  149. package/dist/jsx/conf.js +0 -1
  150. package/dist/jsx/constants/platform.js +2 -0
  151. package/dist/jsx/createComponent.js +100 -62
  152. package/dist/jsx/createTamagui.js +53 -28
  153. package/dist/jsx/createTokens.js +2 -6
  154. package/dist/jsx/createVariable.js +8 -2
  155. package/dist/jsx/helpers/addStylesUsingClassname.js +16 -18
  156. package/dist/jsx/helpers/createMediaStyle.js +0 -2
  157. package/dist/jsx/helpers/createPropMapper.js +40 -41
  158. package/dist/jsx/helpers/extendStaticConfig.js +9 -6
  159. package/dist/jsx/helpers/fixNativeShadow.native.js +2 -2
  160. package/dist/jsx/helpers/getSize.js +12 -0
  161. package/dist/jsx/helpers/getSplitStyles.js +165 -65
  162. package/dist/jsx/helpers/getStylesAtomic.js +15 -3
  163. package/dist/jsx/helpers/insertStyleRule.js +31 -26
  164. package/dist/jsx/helpers/proxyThemeVariables.js +17 -0
  165. package/dist/jsx/helpers/themeable.js +3 -3
  166. package/dist/jsx/helpers/validate.js +24 -11
  167. package/dist/jsx/hooks/useFeatures.js +3 -5
  168. package/dist/jsx/hooks/useIsTouchDevice.js +6 -6
  169. package/dist/jsx/hooks/useMedia.js +19 -12
  170. package/dist/jsx/hooks/useTheme.js +22 -16
  171. package/dist/jsx/index.js +4 -0
  172. package/dist/jsx/static.js +3 -0
  173. package/dist/jsx/styled.js +3 -4
  174. package/dist/jsx/views/Theme.js +4 -4
  175. package/dist/jsx/views/ThemeProvider.js +2 -2
  176. package/package.json +6 -6
  177. package/types/Tamagui.d.ts +16 -1
  178. package/types/Tamagui.d.ts.map +1 -1
  179. package/types/ThemeManager.d.ts +3 -3
  180. package/types/ThemeManager.d.ts.map +1 -1
  181. package/types/conf.d.ts +2 -0
  182. package/types/conf.d.ts.map +1 -1
  183. package/types/constants/platform.d.ts +1 -0
  184. package/types/constants/platform.d.ts.map +1 -1
  185. package/types/createComponent.d.ts +3 -4
  186. package/types/createComponent.d.ts.map +1 -1
  187. package/types/createTamagui.d.ts +3 -1
  188. package/types/createTamagui.d.ts.map +1 -1
  189. package/types/createTokens.d.ts +0 -26
  190. package/types/createTokens.d.ts.map +1 -1
  191. package/types/createVariable.d.ts +1 -0
  192. package/types/createVariable.d.ts.map +1 -1
  193. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -1
  194. package/types/helpers/createMediaStyle.d.ts.map +1 -1
  195. package/types/helpers/createPropMapper.d.ts +1 -1
  196. package/types/helpers/createPropMapper.d.ts.map +1 -1
  197. package/types/helpers/extendStaticConfig.d.ts +2 -2
  198. package/types/helpers/extendStaticConfig.d.ts.map +1 -1
  199. package/types/helpers/getSize.d.ts +3 -0
  200. package/types/helpers/getSize.d.ts.map +1 -0
  201. package/types/helpers/getSplitStyles.d.ts +14 -6
  202. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  203. package/types/helpers/getStylesAtomic.d.ts.map +1 -1
  204. package/types/helpers/insertStyleRule.d.ts +2 -1
  205. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  206. package/types/helpers/proxyThemeVariables.d.ts +2 -0
  207. package/types/helpers/proxyThemeVariables.d.ts.map +1 -0
  208. package/types/helpers/themeable.d.ts +3 -1
  209. package/types/helpers/themeable.d.ts.map +1 -1
  210. package/types/helpers/validate.d.ts.map +1 -1
  211. package/types/hooks/useMedia.d.ts +2 -6
  212. package/types/hooks/useMedia.d.ts.map +1 -1
  213. package/types/hooks/useTheme.d.ts +1 -1
  214. package/types/hooks/useTheme.d.ts.map +1 -1
  215. package/types/index.d.ts +2 -0
  216. package/types/index.d.ts.map +1 -1
  217. package/types/static.d.ts +3 -0
  218. package/types/static.d.ts.map +1 -1
  219. package/types/styled.d.ts +12 -3
  220. package/types/styled.d.ts.map +1 -1
  221. package/types/types.d.ts +67 -42
  222. package/types/types.d.ts.map +1 -1
  223. package/types/views/Theme.d.ts +1 -0
  224. package/types/views/Theme.d.ts.map +1 -1
  225. package/types/views/ThemeProvider.d.ts +1 -0
  226. package/types/views/ThemeProvider.d.ts.map +1 -1
  227. package/LICENSE +0 -21
  228. package/dist/cjs/constants/pseudos.js.map +0 -7
  229. package/dist/cjs/createShallowUpdate.js +0 -1
  230. package/dist/cjs/createShallowUpdate.js.map +0 -7
  231. package/dist/cjs/devtools.js +0 -32
  232. package/dist/cjs/devtools.js.map +0 -7
  233. package/dist/cjs/spacedChildren.js +0 -86
  234. package/dist/cjs/spacedChildren.js.map +0 -7
  235. package/dist/cjs/tamagui-base.css +0 -8
  236. package/dist/cjs/tamagui-base.css.map +0 -7
  237. package/dist/esm/constants/pseudos.js +0 -18
  238. package/dist/esm/constants/pseudos.js.map +0 -7
  239. package/dist/esm/createShallowUpdate.js +0 -1
  240. package/dist/esm/createShallowUpdate.js.map +0 -7
  241. package/dist/esm/devtools.js +0 -14
  242. package/dist/esm/devtools.js.map +0 -7
  243. package/dist/esm/spacedChildren.js +0 -52
  244. package/dist/esm/spacedChildren.js.map +0 -7
  245. package/dist/esm/tamagui-base.css +0 -8
  246. package/dist/esm/tamagui-base.css.map +0 -7
  247. package/dist/jsx/constants/pseudos.js +0 -17
  248. package/dist/jsx/createShallowUpdate.js +0 -0
  249. package/dist/jsx/devtools.js +0 -13
  250. package/dist/jsx/spacedChildren.js +0 -44
  251. package/dist/jsx/tamagui-base.css +0 -7
  252. package/types/spacedChildren.d.ts +0 -9
  253. package/types/spacedChildren.d.ts.map +0 -1
@@ -16,15 +16,17 @@ import React, {
16
16
  import { StyleSheet, Text, View } from "react-native";
17
17
  import { onConfiguredOnce } from "./conf";
18
18
  import { stackDefaultStyles } from "./constants/constants";
19
- import { isAndroid, isTouchDevice, isWeb, useIsomorphicLayoutEffect } from "./constants/platform";
19
+ import { isAndroid, isWeb, useIsomorphicLayoutEffect } from "./constants/platform";
20
20
  import { rnw } from "./constants/rnw";
21
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";
30
32
  import { TextAncestorContext } from "./views/TextAncestorContext";
@@ -43,54 +45,70 @@ if (typeof document !== "undefined") {
43
45
  mouseUps.forEach((x) => x());
44
46
  mouseUps.clear();
45
47
  });
48
+ document.addEventListener("touchend", () => {
49
+ mouseUps.forEach((x) => x());
50
+ mouseUps.clear();
51
+ });
52
+ document.addEventListener("touchcancel", () => {
53
+ mouseUps.forEach((x) => x());
54
+ mouseUps.clear();
55
+ });
46
56
  }
47
- function createComponent(configIn) {
48
- let staticConfig;
49
- if ("parsed" in configIn) {
50
- staticConfig = configIn;
51
- } else {
52
- staticConfig = parseStaticConfig(configIn);
57
+ function mergeShorthands({ defaultProps }, { shorthands }) {
58
+ for (const key in defaultProps) {
59
+ defaultProps[shorthands[key] || key] = defaultProps[key];
53
60
  }
54
- const { Component, validStyles, isText, isZStack, componentName } = staticConfig;
55
- const componentClassName = `is_${componentName}`;
56
- const validStyleProps = validStyles || stylePropsView;
61
+ }
62
+ __name(mergeShorthands, "mergeShorthands");
63
+ let initialTheme;
64
+ function createComponent(configIn, ParentComponent) {
65
+ const staticConfig = (() => {
66
+ const config = extendStaticConfig(configIn, ParentComponent);
67
+ if ("parsed" in config) {
68
+ return config;
69
+ } else {
70
+ return parseStaticConfig(config);
71
+ }
72
+ })();
73
+ const componentClassName = `is_${staticConfig.componentName}`;
57
74
  let tamaguiConfig;
58
75
  let AnimatedText;
59
76
  let AnimatedView;
60
77
  let avoidClasses = true;
61
- let defaultPseudos = {};
62
78
  let defaultNativeStyle;
63
- let defaultNativeStyleSheet = null;
64
- let defaultsClassName = null;
65
- let initialTheme;
66
- let defaultSplitStyleResult = null;
79
+ let defaultNativeStyleSheet;
80
+ let tamaguiDefaultProps;
81
+ let initialSplitStyles;
67
82
  function addPseudoToStyles(styles, name, pseudos) {
68
83
  const pseudoStyle = pseudos[name];
84
+ const shouldNestObject = isWeb && name !== "enterStyle" && name !== "exitStyle";
69
85
  if (pseudoStyle) {
70
- styles.push(isWeb ? { [name]: pseudoStyle } : pseudoStyle);
86
+ styles.push(shouldNestObject ? { [name]: pseudoStyle } : pseudoStyle);
71
87
  }
72
- const defaultPseudoStyle = defaultPseudos[name];
88
+ const defaultPseudoStyle = initialSplitStyles.pseudos[name];
73
89
  if (defaultPseudoStyle) {
74
- styles.push(isWeb ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
90
+ styles.push(shouldNestObject ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
75
91
  }
76
92
  }
77
93
  __name(addPseudoToStyles, "addPseudoToStyles");
78
94
  const component = forwardRef((props, forwardedRef) => {
79
95
  var _a, _b, _c, _d;
96
+ props = tamaguiDefaultProps ? { ...tamaguiDefaultProps, ...props } : props;
97
+ const { Component, componentName, isText, isZStack } = staticConfig;
80
98
  if (process.env.NODE_ENV === "development") {
81
99
  if (props["debug"]) {
82
- console.warn(componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
83
- console.log("props in:", props);
100
+ console.warn(staticConfig.componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
101
+ console.log("props in:", props, Object.keys(props));
84
102
  if (props["debug"] === "break")
85
103
  debugger;
86
104
  }
87
105
  }
88
106
  const forceUpdate = useForceUpdate();
89
- const theme = useTheme(props.theme, componentName, props, forceUpdate);
107
+ const theme = useTheme(props.theme, staticConfig.componentName, props, forceUpdate);
90
108
  const [state, set_] = useState(defaultComponentState);
91
109
  const setStateShallow = createShallowUpdate(set_);
92
110
  const shouldAvoidClasses = !!(props.animation && avoidClasses);
93
- const splitStyles = getSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses ? null : defaultsClassName);
111
+ const splitStyles = useSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses ? null : initialSplitStyles.classNames);
94
112
  const { viewProps: viewPropsIn, pseudos, medias, style, classNames } = splitStyles;
95
113
  const useAnimations = (_a = tamaguiConfig.animations) == null ? void 0 : _a.useAnimations;
96
114
  const isAnimated = !!(useAnimations && props.animation);
@@ -143,6 +161,7 @@ function createComponent(configIn) {
143
161
  accessibilityRole,
144
162
  collapsable,
145
163
  focusable,
164
+ onClick,
146
165
  theme: _themeProp,
147
166
  defaultVariants,
148
167
  onLayout,
@@ -165,15 +184,17 @@ function createComponent(configIn) {
165
184
  };
166
185
  }
167
186
  useIsomorphicLayoutEffect(() => {
168
- setStateShallow({
169
- mounted: true
170
- });
187
+ if (typeof window !== "undefined" && (hasEnterStyle || props.animation)) {
188
+ setStateShallow({
189
+ mounted: true
190
+ });
191
+ }
171
192
  internal.current.isMounted = true;
172
193
  return () => {
173
194
  mouseUps.delete(unPress);
174
195
  internal.current.isMounted = false;
175
196
  };
176
- }, [hasEnterStyle]);
197
+ }, [hasEnterStyle, props.animation]);
177
198
  if (nativeID) {
178
199
  viewProps.id = nativeID;
179
200
  }
@@ -231,6 +252,7 @@ function createComponent(configIn) {
231
252
  medias
232
253
  ];
233
254
  if (!animationStyles) {
255
+ !state.mounted && addPseudoToStyles(styles, "enterStyle", pseudos);
234
256
  state.hover && addPseudoToStyles(styles, "hoverStyle", pseudos);
235
257
  state.focus && addPseudoToStyles(styles, "focusStyle", pseudos);
236
258
  state.press && addPseudoToStyles(styles, "pressStyle", pseudos);
@@ -249,7 +271,7 @@ function createComponent(configIn) {
249
271
  const className = classList.join(" ");
250
272
  if (process.env.NODE_ENV === "development") {
251
273
  if (props["debug"]) {
252
- 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]])) });
274
+ 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]])) });
253
275
  }
254
276
  }
255
277
  viewProps.className = className;
@@ -290,8 +312,10 @@ function createComponent(configIn) {
290
312
  viewProps.ref = forwardedRef;
291
313
  }
292
314
  }
293
- const attachPress = !!(pseudos && pseudos.pressStyle || defaultPseudos && defaultPseudos.pressStyle || onPress || onPressOut || onPressIn);
294
- const isHoverable = isWeb && !isTouchDevice;
315
+ const initialPseudos = initialSplitStyles.pseudos;
316
+ const attachPress = !!(pseudos && pseudos.pressStyle || initialPseudos && initialPseudos.pressStyle || onPress || onPressOut || onPressIn || onClick);
317
+ const isTouch = useIsTouchDevice();
318
+ const isHoverable = isWeb && !isTouch;
295
319
  const attachHover = isHoverable && !!(pseudos && pseudos.hoverStyle || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave);
296
320
  const pressEventKey = isStringElement ? "onClick" : "onPress";
297
321
  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);
@@ -349,8 +373,12 @@ function createComponent(configIn) {
349
373
  });
350
374
  onPressIn == null ? void 0 : onPressIn(e);
351
375
  onMouseDown == null ? void 0 : onMouseDown(e);
376
+ if (isWeb) {
377
+ mouseUps.add(unPress);
378
+ }
352
379
  } : null,
353
380
  [pressEventKey]: attachPress ? (e) => {
381
+ onClick == null ? void 0 : onClick(e);
354
382
  onPress == null ? void 0 : onPress(e);
355
383
  unPress();
356
384
  onPressOut == null ? void 0 : onPressOut(e);
@@ -405,7 +433,7 @@ function createComponent(configIn) {
405
433
  if (process.env.NODE_ENV === "development") {
406
434
  if (props["debug"]) {
407
435
  viewProps["debug"] = true;
408
- 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 });
436
+ 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(" "), pressProps, 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 });
409
437
  }
410
438
  }
411
439
  if (features.length) {
@@ -416,30 +444,28 @@ function createComponent(configIn) {
416
444
  }
417
445
  return content;
418
446
  });
447
+ component.displayName = staticConfig.componentName;
419
448
  onConfiguredOnce((conf) => {
420
449
  var _a, _b, _c, _d;
421
450
  if (process.env.IS_STATIC === "is_static") {
422
451
  return;
423
452
  }
424
- const shouldDebug = (_a = staticConfig.defaultProps) == null ? void 0 : _a.debug;
425
453
  tamaguiConfig = conf;
426
- avoidClasses = !!((_b = tamaguiConfig.animations) == null ? void 0 : _b.avoidClasses);
427
- AnimatedText = (_c = tamaguiConfig.animations) == null ? void 0 : _c.Text;
428
- AnimatedView = (_d = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _d.View;
429
- initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]];
430
- defaultSplitStyleResult = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
454
+ mergeShorthands(staticConfig, tamaguiConfig);
455
+ avoidClasses = !!((_a = tamaguiConfig.animations) == null ? void 0 : _a.avoidClasses);
456
+ AnimatedText = (_b = tamaguiConfig.animations) == null ? void 0 : _b.Text;
457
+ AnimatedView = (_c = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _c.View;
458
+ initialTheme = initialTheme || proxyThemeVariables(conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]]);
459
+ initialSplitStyles = insertSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
431
460
  mounted: true,
432
461
  hover: false,
433
462
  press: false,
434
463
  pressIn: false,
435
464
  focus: false,
436
- resolveVariablesAs: "both"
465
+ resolveVariablesAs: "both",
466
+ keepVariantsAsProps: true
437
467
  });
438
- const { classNames, pseudos, style, viewProps } = defaultSplitStyleResult;
439
- if (isWeb) {
440
- defaultsClassName = classNames;
441
- }
442
- defaultPseudos = pseudos;
468
+ const { style, viewProps } = initialSplitStyles;
443
469
  defaultNativeStyle = {};
444
470
  for (const key in style) {
445
471
  const v = style[key];
@@ -448,34 +474,44 @@ function createComponent(configIn) {
448
474
  defaultNativeStyleSheet = StyleSheet.create({
449
475
  base: defaultNativeStyle
450
476
  });
451
- component.displayName = staticConfig.componentName;
452
- component.defaultProps = {
477
+ const defaults = {
453
478
  ...viewProps,
454
479
  ...component.defaultProps
455
480
  };
456
- if (process.env.NODE_ENV === "development" && shouldDebug && process.env.IS_STATIC !== "is_static") {
457
- console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, { staticConfig, ...defaultSplitStyleResult });
481
+ if (Object.keys(defaults).length) {
482
+ tamaguiDefaultProps = defaults;
483
+ }
484
+ if (process.env.NODE_ENV === "development" && ((_d = staticConfig.defaultProps) == null ? void 0 : _d.debug)) {
485
+ if (process.env.IS_STATIC !== "is_static") {
486
+ console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, {
487
+ staticConfig,
488
+ initialSplitStyles
489
+ });
490
+ }
458
491
  }
459
492
  });
460
493
  let res = component;
461
494
  if (configIn.memo) {
462
495
  res = memo(res);
463
496
  }
464
- res["whyDidYouRender"] = true;
465
497
  res["staticConfig"] = {
466
- validStyles: validStyleProps,
498
+ validStyles: staticConfig.validStyles || stylePropsView,
467
499
  ...staticConfig
468
500
  };
469
- res["extractable"] = (Component2, conf) => {
470
- Component2["staticConfig"] = extendStaticConfig(res, {
501
+ if (process.env.NODE_ENV === "development") {
502
+ res["whyDidYouRender"] = true;
503
+ }
504
+ res["extractable"] = (Component, conf) => {
505
+ Component["staticConfig"] = extendStaticConfig({
506
+ Component,
471
507
  ...conf,
472
508
  neverFlatten: true,
473
509
  defaultProps: {
474
- ...Component2.defaultProps,
510
+ ...Component.defaultProps,
475
511
  ...conf == null ? void 0 : conf.defaultProps
476
512
  }
477
- });
478
- return Component2;
513
+ }, res);
514
+ return Component;
479
515
  };
480
516
  return res;
481
517
  }
@@ -555,18 +591,20 @@ function spacedChildren({
555
591
  return next;
556
592
  }
557
593
  __name(spacedChildren, "spacedChildren");
558
- const AbsoluteFill = /* @__PURE__ */ __name((props) => isWeb ? <div style={{
559
- position: "absolute",
560
- top: 0,
561
- left: 0,
562
- right: 0,
563
- bottom: 0
564
- }}>{props.children}</div> : <View style={StyleSheet.absoluteFill}>{props.child}</View>, "AbsoluteFill");
594
+ function AbsoluteFill(props) {
595
+ return isWeb ? <div style={{
596
+ position: "absolute",
597
+ top: 0,
598
+ left: 0,
599
+ right: 0,
600
+ bottom: 0
601
+ }}>{props.children}</div> : <View style={StyleSheet.absoluteFill}>{props.child}</View>;
602
+ }
603
+ __name(AbsoluteFill, "AbsoluteFill");
565
604
  export {
566
605
  AbsoluteFill,
567
606
  Spacer,
568
607
  createComponent,
569
- defaultComponentState,
570
608
  mouseUps,
571
609
  spacedChildren
572
610
  };
@@ -12,6 +12,14 @@ function createTamagui(config) {
12
12
  if (createdConfigs.has(config)) {
13
13
  return config;
14
14
  }
15
+ if (process.env.NODE_ENV === "development") {
16
+ if (!config.tokens) {
17
+ throw new Error(`No tokens provided to Tamagui config`);
18
+ }
19
+ if (!config.themes) {
20
+ throw new Error(`No themes provided to Tamagui config`);
21
+ }
22
+ }
15
23
  if (getHasConfigured()) {
16
24
  console.warn("Called createTamagui twice! Should never do so");
17
25
  }
@@ -20,7 +28,7 @@ function createTamagui(config) {
20
28
  defaultActive: config.mediaQueryDefaultActive
21
29
  });
22
30
  const themeConfig = (() => {
23
- var _a, _b;
31
+ var _a, _b, _c;
24
32
  let cssRules = [];
25
33
  const varsByValue = /* @__PURE__ */ new Map();
26
34
  if (isWeb) {
@@ -67,13 +75,16 @@ function createTamagui(config) {
67
75
  }
68
76
  if (isWeb) {
69
77
  const isDarkOrLightBase = themeName === "dark" || themeName === "light";
70
- const isDark = themeName.includes("dark_");
78
+ const isDark = themeName.startsWith("dark");
71
79
  const selector = `${CNP}${themeName}`;
72
- const addDarkLightSels = hasDarkLight && !isDarkOrLightBase;
73
80
  const selectors = [selector];
74
- if (addDarkLightSels) {
81
+ if (hasDarkLight) {
75
82
  const childSelector = `${CNP}${themeName.replace("dark_", "").replace("light_", "")}`;
76
- const [stronger, weaker] = isDark ? ["dark", "light"] : ["light", "dark"];
83
+ const order = isDark ? ["dark", "light"] : ["light", "dark"];
84
+ if (isDarkOrLightBase) {
85
+ order.reverse();
86
+ }
87
+ const [stronger, weaker] = order;
77
88
  const max = (_b = config.maxDarkLightNesting) != null ? _b : 3;
78
89
  new Array(max * 2).fill(void 0).forEach((_, pi) => {
79
90
  if (pi % 2 === 1)
@@ -84,25 +95,56 @@ function createTamagui(config) {
84
95
  selectors.push(`${(parents.length > 1 ? parents.slice(1) : parents).join(" ")} ${childSelector}`);
85
96
  });
86
97
  }
87
- const cssRule = `${selectors.join(", ")} {
88
- ${vars}
89
- }`;
90
- cssRules.push(cssRule);
98
+ const rootSep = config.themeClassNameOnRoot ? "" : " ";
99
+ cssRules.push(`${selectors.map((x) => `:root${rootSep}${x}`).join(", ")} {${vars}}`);
100
+ if ((_c = config.shouldAddPrefersColorThemes) != null ? _c : true) {
101
+ if (isDarkOrLightBase) {
102
+ cssRules.push(`@media(prefers-color-scheme: ${isDark ? "dark" : "light"}) {
103
+ body { background:${theme.background}; color: ${theme.color} }
104
+ :root {${vars} }
105
+ }`);
106
+ }
107
+ }
91
108
  }
92
109
  }
93
110
  varsByValue.clear();
94
111
  Object.freeze(cssRules);
112
+ const css = cssRules.join("\n");
95
113
  return {
96
114
  cssRules,
97
- css: cssRules.join("\n")
115
+ css
98
116
  };
99
117
  })();
100
118
  const tokensParsed = parseTokens(config.tokens);
119
+ const fontsParsed = (() => {
120
+ if (!config.fonts) {
121
+ throw new Error(`No fonts defined!`);
122
+ }
123
+ const res = {};
124
+ for (const familyName in config.fonts) {
125
+ const family = config.fonts[familyName];
126
+ const parsed = {};
127
+ for (const attrKey in family) {
128
+ const attr = family[attrKey];
129
+ if (attrKey === "family") {
130
+ parsed[attrKey] = attr;
131
+ continue;
132
+ }
133
+ parsed[attrKey] = Object.keys(attr).reduce((acc, cur) => {
134
+ acc[`$${cur}`] = attr[cur];
135
+ return acc;
136
+ }, {});
137
+ }
138
+ res[`$${familyName}`] = parsed;
139
+ }
140
+ return res;
141
+ })();
101
142
  const getCSS = /* @__PURE__ */ __name(() => {
102
143
  return `${themeConfig.css}
103
144
  ${getInsertedRules().join("\n")}`;
104
145
  }, "getCSS");
105
146
  const next = {
147
+ fonts: {},
106
148
  animations: {},
107
149
  shorthands: {},
108
150
  media: {},
@@ -112,6 +154,7 @@ ${getInsertedRules().join("\n")}`;
112
154
  defaultTheme: "light",
113
155
  ...config
114
156
  }),
157
+ fontsParsed,
115
158
  themeConfig,
116
159
  tokensParsed,
117
160
  parsed: true,
@@ -130,24 +173,6 @@ const parseTokens = /* @__PURE__ */ __name((tokens) => {
130
173
  const res = {};
131
174
  for (const key in tokens) {
132
175
  res[key] = {};
133
- if (key === "font") {
134
- for (const family in tokens.font) {
135
- const obj = {};
136
- res.font[`$${family}`] = obj;
137
- for (const attrKey in tokens.font[family]) {
138
- const attr = tokens.font[family][attrKey];
139
- if (attrKey === "family") {
140
- obj[attrKey] = attr;
141
- continue;
142
- }
143
- obj[attrKey] = Object.keys(attr).reduce((acc, cur) => {
144
- acc[`$${cur}`] = attr[cur];
145
- return acc;
146
- }, {});
147
- }
148
- }
149
- continue;
150
- }
151
176
  for (const skey in tokens[key]) {
152
177
  res[key][`$${skey}`] = tokens[key][skey];
153
178
  }
@@ -6,17 +6,13 @@ function createTokens(tokens) {
6
6
  if (process.env.NODE_ENV === "development") {
7
7
  validateTokens(tokens);
8
8
  }
9
- return setupTokens(tokens);
10
- }
11
- __name(createTokens, "createTokens");
12
- function setupTokens(tokens) {
13
9
  return mapTokensToVariables(tokens);
14
10
  }
15
- __name(setupTokens, "setupTokens");
11
+ __name(createTokens, "createTokens");
16
12
  const mapTokensToVariables = /* @__PURE__ */ __name((tokens, parentPath = "") => {
17
13
  const res = {};
18
14
  for (const key in tokens) {
19
- const val = tokens[key];
15
+ let val = tokens[key];
20
16
  const name = parentPath ? `${parentPath}-${key}` : key;
21
17
  if (val && typeof val === "object") {
22
18
  res[key] = mapTokensToVariables(tokens[key], name);
@@ -22,12 +22,17 @@ function isVariable(v) {
22
22
  }
23
23
  __name(isVariable, "isVariable");
24
24
  function getVariableValue(v) {
25
- if (isVariable(v)) {
25
+ if (isVariable(v))
26
26
  return v.val;
27
- }
28
27
  return v;
29
28
  }
30
29
  __name(getVariableValue, "getVariableValue");
30
+ function getVariableName(v) {
31
+ if (isVariable(v))
32
+ return v.name;
33
+ return v;
34
+ }
35
+ __name(getVariableName, "getVariableName");
31
36
  const createCSSVariable = /* @__PURE__ */ __name((val, includeVar = true) => {
32
37
  const name = val.replace(/[^a-z0-9\_\-]+/i, "_");
33
38
  return includeVar ? `var(--${name})` : name;
@@ -37,6 +42,7 @@ export {
37
42
  Variable,
38
43
  createCSSVariable,
39
44
  createVariable,
45
+ getVariableName,
40
46
  getVariableValue,
41
47
  isVariable
42
48
  };
@@ -1,26 +1,24 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { useInsertionEffect } from "react";
3
+ import { useInsertionEffect, useLayoutEffect } from "react";
4
4
  import { getStylesAtomic } from "./getStylesAtomic";
5
- import { insertStyleRule } from "./insertStyleRule";
5
+ import { insertStyleRule, updateInsertedCache } from "./insertStyleRule";
6
6
  let added = /* @__PURE__ */ new Set();
7
+ const effect = useInsertionEffect || useLayoutEffect;
7
8
  function useStylesAsClassname(styles, disable = false, debug = false) {
8
- if (!useInsertionEffect) {
9
- return addStylesUsingClassname(disable ? styles : [], debug);
10
- } else {
11
- const insertions = [];
12
- const className = addStylesUsingClassname(disable ? [] : styles, debug, (identifier, rules) => {
13
- for (const rule of rules) {
14
- insertions.push({ identifier, rule });
15
- }
16
- });
17
- useInsertionEffect(() => {
18
- for (const { identifier, rule } of insertions) {
19
- insertStyleRule(identifier, rule);
20
- }
21
- });
22
- return className;
23
- }
9
+ const insertions = [];
10
+ const className = addStylesUsingClassname(disable ? [] : styles, debug, (identifier, rules) => {
11
+ for (const rule of rules) {
12
+ insertions.push({ identifier, rule });
13
+ updateInsertedCache(identifier, rule);
14
+ }
15
+ });
16
+ effect(() => {
17
+ for (const { identifier, rule } of insertions) {
18
+ insertStyleRule(identifier, rule);
19
+ }
20
+ }, [className]);
21
+ return className;
24
22
  }
25
23
  __name(useStylesAsClassname, "useStylesAsClassname");
26
24
  function addStylesUsingClassname(styles, debug = false, onAdd) {
@@ -13,8 +13,6 @@ const createMediaStyle = /* @__PURE__ */ __name(({ identifier, rules }, mediaKey
13
13
  const mediaSelector = mediaObjectToString(mediaQueries[mediaKey]);
14
14
  const mediaQuery = `${screenStr} and ${mediaSelector}`;
15
15
  const styleInner = rules[0].replace(identifier, nextIdentifier);
16
- if (styleInner.includes("2:r;"))
17
- debugger;
18
16
  let styleRule = "";
19
17
  if (styleInner.includes("@media")) {
20
18
  styleRule = styleInner.replace("{", ` and ${mediaQuery} {`);