@tamagui/core 1.0.0-beta.179 → 1.0.0-beta.181

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 (244) hide show
  1. package/dist/cjs/Tamagui.js +18 -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 +12 -0
  10. package/dist/cjs/constants/pseudos.js +37 -0
  11. package/dist/cjs/constants/pseudos.js.map +7 -0
  12. package/dist/cjs/constants/rnw.js +4 -0
  13. package/dist/cjs/contexts/ButtonInsideButtonContext.js +4 -0
  14. package/dist/cjs/createComponent.js +132 -126
  15. package/dist/cjs/createComponent.js.map +2 -2
  16. package/dist/cjs/createFont.js +4 -0
  17. package/dist/cjs/createShallowUpdate.js +1 -0
  18. package/dist/cjs/createShallowUpdate.js.map +7 -0
  19. package/dist/cjs/createShorthands.js +4 -0
  20. package/dist/cjs/createTamagui.js +12 -0
  21. package/dist/cjs/createTamagui.js.map +2 -2
  22. package/dist/cjs/createTheme.js +4 -0
  23. package/dist/cjs/createTokens.js +5 -0
  24. package/dist/cjs/createTokens.js.map +1 -1
  25. package/dist/cjs/createVariable.js +9 -0
  26. package/dist/cjs/defaultComponentState.js +0 -30
  27. package/dist/cjs/defaultComponentState.js.map +3 -3
  28. package/dist/cjs/devtools.js +32 -0
  29. package/dist/cjs/devtools.js.map +7 -0
  30. package/dist/cjs/helpers/RNComponents.js +38 -0
  31. package/dist/cjs/helpers/RNComponents.js.map +7 -0
  32. package/dist/cjs/helpers/addStylesUsingClassname.js +8 -0
  33. package/dist/cjs/helpers/addStylesUsingClassname.js.map +2 -2
  34. package/dist/cjs/helpers/areEqualSets.js +4 -0
  35. package/dist/cjs/helpers/createMediaStyle.js +8 -6
  36. package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
  37. package/dist/cjs/helpers/createPropMapper.js +57 -56
  38. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  39. package/dist/cjs/helpers/createShallowUpdate.js +55 -0
  40. package/dist/cjs/helpers/createShallowUpdate.js.map +7 -0
  41. package/dist/cjs/helpers/createTamaguiProvider.js +5 -5
  42. package/dist/cjs/helpers/createTamaguiProvider.js.map +2 -2
  43. package/dist/cjs/helpers/extendStaticConfig.js +8 -6
  44. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  45. package/dist/cjs/helpers/fixNativeShadow.js +4 -0
  46. package/dist/cjs/helpers/fixNativeShadow.native.js +6 -2
  47. package/dist/cjs/helpers/fixNativeShadow.native.js.map +2 -2
  48. package/dist/cjs/helpers/getExpandedShorthands.js +4 -0
  49. package/dist/cjs/helpers/getSplitStyles.js +94 -47
  50. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  51. package/dist/cjs/helpers/getStylesAtomic.js +20 -2
  52. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  53. package/dist/cjs/helpers/getStylesAtomic.native.js +4 -0
  54. package/dist/cjs/helpers/insertStyleRule.js +46 -26
  55. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  56. package/dist/cjs/helpers/isObj.js +4 -0
  57. package/dist/cjs/helpers/isTamaguiElement.js +4 -0
  58. package/dist/cjs/helpers/matchMedia.js +4 -0
  59. package/dist/cjs/helpers/matchMedia.native.js +4 -0
  60. package/dist/cjs/helpers/themeable.js +8 -2
  61. package/dist/cjs/helpers/themeable.js.map +2 -2
  62. package/dist/cjs/helpers/validate.js +46 -5
  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 +101 -12
  68. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  69. package/dist/cjs/hooks/useIsMounted.js +4 -0
  70. package/dist/cjs/hooks/useIsTouchDevice.js +4 -0
  71. package/dist/cjs/hooks/useMedia.js +36 -43
  72. package/dist/cjs/hooks/useMedia.js.map +2 -2
  73. package/dist/cjs/hooks/usePressable.js +4 -0
  74. package/dist/cjs/hooks/useTheme.js +28 -13
  75. package/dist/cjs/hooks/useTheme.js.map +2 -2
  76. package/dist/cjs/hooks/useUnmountEffect.js +4 -0
  77. package/dist/cjs/index.js +14 -0
  78. package/dist/cjs/index.js.map +2 -2
  79. package/dist/cjs/styled.js +8 -15
  80. package/dist/cjs/styled.js.map +2 -2
  81. package/dist/cjs/tamagui-base.css +8 -0
  82. package/dist/cjs/tamagui-base.css.map +7 -0
  83. package/dist/cjs/types-rnw.js.map +1 -1
  84. package/dist/cjs/types.js.map +1 -1
  85. package/dist/cjs/views/Stack.js +5 -0
  86. package/dist/cjs/views/Stack.js.map +2 -2
  87. package/dist/cjs/views/Text.js +5 -0
  88. package/dist/cjs/views/Text.js.map +2 -2
  89. package/dist/cjs/views/TextAncestorContext.js +6 -0
  90. package/dist/cjs/views/Theme.js +17 -19
  91. package/dist/cjs/views/Theme.js.map +2 -2
  92. package/dist/cjs/views/ThemeInverse.js +5 -0
  93. package/dist/cjs/views/ThemeProvider.js +4 -0
  94. package/dist/cjs/views/ThemeReset.js +4 -0
  95. package/dist/esm/Tamagui.js +10 -2
  96. package/dist/esm/Tamagui.js.map +2 -2
  97. package/dist/esm/ThemeManager.js +21 -11
  98. package/dist/esm/ThemeManager.js.map +2 -2
  99. package/dist/esm/conf.js +0 -1
  100. package/dist/esm/conf.js.map +2 -2
  101. package/dist/esm/constants/pseudos.js +18 -0
  102. package/dist/esm/constants/pseudos.js.map +7 -0
  103. package/dist/esm/createComponent.js +122 -129
  104. package/dist/esm/createComponent.js.map +2 -2
  105. package/dist/esm/createShallowUpdate.js +1 -0
  106. package/dist/esm/createShallowUpdate.js.map +7 -0
  107. package/dist/esm/createTamagui.js +8 -0
  108. package/dist/esm/createTamagui.js.map +2 -2
  109. package/dist/esm/createTokens.js.map +1 -1
  110. package/dist/esm/defaultComponentState.js +0 -11
  111. package/dist/esm/defaultComponentState.js.map +3 -3
  112. package/dist/esm/devtools.js +14 -0
  113. package/dist/esm/devtools.js.map +7 -0
  114. package/dist/esm/helpers/RNComponents.js +12 -0
  115. package/dist/esm/helpers/RNComponents.js.map +7 -0
  116. package/dist/esm/helpers/addStylesUsingClassname.js +4 -1
  117. package/dist/esm/helpers/addStylesUsingClassname.js.map +2 -2
  118. package/dist/esm/helpers/createMediaStyle.js +3 -6
  119. package/dist/esm/helpers/createMediaStyle.js.map +2 -2
  120. package/dist/esm/helpers/createPropMapper.js +53 -56
  121. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  122. package/dist/esm/helpers/createShallowUpdate.js +19 -0
  123. package/dist/esm/helpers/createShallowUpdate.js.map +7 -0
  124. package/dist/esm/helpers/createTamaguiProvider.js +1 -4
  125. package/dist/esm/helpers/createTamaguiProvider.js.map +2 -2
  126. package/dist/esm/helpers/extendStaticConfig.js +5 -6
  127. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  128. package/dist/esm/helpers/fixNativeShadow.native.js +2 -2
  129. package/dist/esm/helpers/fixNativeShadow.native.js.map +2 -2
  130. package/dist/esm/helpers/getSplitStyles.js +89 -48
  131. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  132. package/dist/esm/helpers/getStylesAtomic.js +15 -2
  133. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  134. package/dist/esm/helpers/insertStyleRule.js +36 -26
  135. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  136. package/dist/esm/helpers/themeable.js +4 -2
  137. package/dist/esm/helpers/themeable.js.map +2 -2
  138. package/dist/esm/helpers/validate.js +17 -5
  139. package/dist/esm/helpers/validate.js.map +2 -2
  140. package/dist/esm/hooks/useFeatures.js +96 -17
  141. package/dist/esm/hooks/useFeatures.js.map +2 -2
  142. package/dist/esm/hooks/useMedia.js +25 -43
  143. package/dist/esm/hooks/useMedia.js.map +2 -2
  144. package/dist/esm/hooks/useTheme.js +20 -13
  145. package/dist/esm/hooks/useTheme.js.map +2 -2
  146. package/dist/esm/index.js +3 -0
  147. package/dist/esm/index.js.map +2 -2
  148. package/dist/esm/styled.js +4 -12
  149. package/dist/esm/styled.js.map +2 -2
  150. package/dist/esm/tamagui-base.css +8 -0
  151. package/dist/esm/tamagui-base.css.map +7 -0
  152. package/dist/esm/views/Stack.js +1 -0
  153. package/dist/esm/views/Stack.js.map +2 -2
  154. package/dist/esm/views/Text.js +1 -0
  155. package/dist/esm/views/Text.js.map +2 -2
  156. package/dist/esm/views/Theme.js +13 -19
  157. package/dist/esm/views/Theme.js.map +2 -2
  158. package/dist/jsx/Tamagui.js +10 -2
  159. package/dist/jsx/ThemeManager.js +21 -11
  160. package/dist/jsx/conf.js +0 -1
  161. package/dist/jsx/constants/pseudos.js +17 -0
  162. package/dist/jsx/createComponent.js +115 -123
  163. package/dist/jsx/createShallowUpdate.js +0 -0
  164. package/dist/jsx/createTamagui.js +8 -0
  165. package/dist/jsx/defaultComponentState.js +0 -11
  166. package/dist/jsx/devtools.js +13 -0
  167. package/dist/jsx/helpers/RNComponents.js +11 -0
  168. package/dist/jsx/helpers/addStylesUsingClassname.js +4 -1
  169. package/dist/jsx/helpers/createMediaStyle.js +3 -6
  170. package/dist/jsx/helpers/createPropMapper.js +53 -56
  171. package/dist/jsx/helpers/createShallowUpdate.js +18 -0
  172. package/dist/jsx/helpers/createTamaguiProvider.js +1 -2
  173. package/dist/jsx/helpers/extendStaticConfig.js +5 -6
  174. package/dist/jsx/helpers/fixNativeShadow.native.js +2 -2
  175. package/dist/jsx/helpers/getSplitStyles.js +89 -48
  176. package/dist/jsx/helpers/getStylesAtomic.js +15 -2
  177. package/dist/jsx/helpers/insertStyleRule.js +36 -26
  178. package/dist/jsx/helpers/themeable.js +4 -3
  179. package/dist/jsx/helpers/validate.js +17 -5
  180. package/dist/jsx/hooks/useFeatures.js +96 -17
  181. package/dist/jsx/hooks/useMedia.js +25 -43
  182. package/dist/jsx/hooks/useTheme.js +20 -13
  183. package/dist/jsx/index.js +3 -0
  184. package/dist/jsx/styled.js +4 -12
  185. package/dist/jsx/tamagui-base.css +7 -0
  186. package/dist/jsx/views/Stack.js +1 -0
  187. package/dist/jsx/views/Text.js +1 -0
  188. package/dist/jsx/views/Theme.js +13 -19
  189. package/package.json +6 -6
  190. package/types/Tamagui.d.ts +16 -1
  191. package/types/Tamagui.d.ts.map +1 -1
  192. package/types/ThemeManager.d.ts +3 -3
  193. package/types/ThemeManager.d.ts.map +1 -1
  194. package/types/conf.d.ts.map +1 -1
  195. package/types/createComponent.d.ts +5 -7
  196. package/types/createComponent.d.ts.map +1 -1
  197. package/types/createFont.d.ts +1 -1
  198. package/types/createFont.d.ts.map +1 -1
  199. package/types/createTamagui.d.ts.map +1 -1
  200. package/types/createTokens.d.ts +8 -0
  201. package/types/createTokens.d.ts.map +1 -1
  202. package/types/defaultComponentState.d.ts +0 -12
  203. package/types/defaultComponentState.d.ts.map +1 -1
  204. package/types/helpers/RNComponents.d.ts +2 -0
  205. package/types/helpers/RNComponents.d.ts.map +1 -0
  206. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -1
  207. package/types/helpers/createMediaStyle.d.ts +1 -1
  208. package/types/helpers/createMediaStyle.d.ts.map +1 -1
  209. package/types/helpers/createPropMapper.d.ts +2 -2
  210. package/types/helpers/createPropMapper.d.ts.map +1 -1
  211. package/types/helpers/createShallowUpdate.d.ts +4 -0
  212. package/types/helpers/createShallowUpdate.d.ts.map +1 -0
  213. package/types/helpers/createTamaguiProvider.d.ts +1 -1
  214. package/types/helpers/createTamaguiProvider.d.ts.map +1 -1
  215. package/types/helpers/extendStaticConfig.d.ts +2 -2
  216. package/types/helpers/extendStaticConfig.d.ts.map +1 -1
  217. package/types/helpers/getSplitStyles.d.ts +4 -14
  218. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  219. package/types/helpers/getStylesAtomic.d.ts.map +1 -1
  220. package/types/helpers/insertStyleRule.d.ts +2 -1
  221. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  222. package/types/helpers/themeable.d.ts +3 -1
  223. package/types/helpers/themeable.d.ts.map +1 -1
  224. package/types/helpers/validate.d.ts.map +1 -1
  225. package/types/hooks/useFeatures.d.ts +7 -5
  226. package/types/hooks/useFeatures.d.ts.map +1 -1
  227. package/types/hooks/useMedia.d.ts +3 -3
  228. package/types/hooks/useMedia.d.ts.map +1 -1
  229. package/types/hooks/useTheme.d.ts +1 -1
  230. package/types/hooks/useTheme.d.ts.map +1 -1
  231. package/types/index.d.ts +1 -0
  232. package/types/index.d.ts.map +1 -1
  233. package/types/styled.d.ts +13 -8
  234. package/types/styled.d.ts.map +1 -1
  235. package/types/types-rnw.d.ts +0 -5
  236. package/types/types-rnw.d.ts.map +1 -1
  237. package/types/types.d.ts +124 -90
  238. package/types/types.d.ts.map +1 -1
  239. package/types/views/Stack.d.ts +2 -2
  240. package/types/views/Stack.d.ts.map +1 -1
  241. package/types/views/Text.d.ts +2 -2
  242. package/types/views/Text.d.ts.map +1 -1
  243. package/types/views/Theme.d.ts +1 -0
  244. package/types/views/Theme.d.ts.map +1 -1
@@ -1,11 +1,19 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import * as Helpers from "@tamagui/helpers";
4
+ import { getConfig } from "./conf";
3
5
  import { rnw } from "./constants/rnw";
4
- import { getAllSelectors, getAllTransforms } from "./helpers/insertStyleRule";
6
+ import { getAllSelectors, getAllTransforms, getInsertedRules } from "./helpers/insertStyleRule";
5
7
  class TamaguiManager {
6
8
  constructor() {
7
- this.config = null;
8
9
  this.rnw = rnw;
10
+ this.Helpers = Helpers;
11
+ }
12
+ get config() {
13
+ return getConfig();
14
+ }
15
+ get insertedRules() {
16
+ return getInsertedRules();
9
17
  }
10
18
  get allSelectors() {
11
19
  return getAllSelectors();
@@ -16,9 +16,9 @@ var __privateMethod = (obj, member, method) => {
16
16
  var _getClassName, getClassName_fn;
17
17
  import { createContext } from "react";
18
18
  import { getThemes } from "./conf";
19
- import { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from "./static";
19
+ import { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from "./constants/constants";
20
20
  class ThemeManager {
21
- constructor(name = null, theme = null, parentManager = null) {
21
+ constructor(name = "", theme = null, parentManager = null) {
22
22
  this.name = name;
23
23
  this.theme = theme;
24
24
  this.parentManager = parentManager;
@@ -76,7 +76,7 @@ class ThemeManager {
76
76
  return false;
77
77
  }
78
78
  this.className = className || null;
79
- this.name = name || null;
79
+ this.name = name || "";
80
80
  this.theme = theme;
81
81
  this.notifyListeners();
82
82
  return true;
@@ -85,10 +85,14 @@ class ThemeManager {
85
85
  const { themes = getThemes(), name, componentName } = opts;
86
86
  if (!name) {
87
87
  if (componentName) {
88
- const name2 = `${this.name}_${componentName}`;
89
- const theme2 = themes[name2];
90
- if (theme2) {
91
- return { name: name2, theme: theme2, className: __privateMethod(this, _getClassName, getClassName_fn).call(this, name2) };
88
+ const names = [
89
+ `${this.name}_${componentName}`,
90
+ `${withoutComponentName(this.name)}_${componentName}`
91
+ ];
92
+ for (const name2 of names) {
93
+ if (name2 in themes) {
94
+ return { name: name2, theme: themes[name2], className: __privateMethod(this, _getClassName, getClassName_fn).call(this, name2) };
95
+ }
92
96
  }
93
97
  }
94
98
  return {
@@ -113,9 +117,14 @@ class ThemeManager {
113
117
  parentName = parentName.slice(0, parentName.lastIndexOf(THEME_NAME_SEPARATOR));
114
118
  }
115
119
  if (componentName) {
116
- const componentThemeName = `${nextName}_${componentName}`;
117
- if (componentThemeName in themes) {
118
- nextName = componentThemeName;
120
+ const names = [
121
+ `${nextName}_${componentName}`,
122
+ `${withoutComponentName(nextName)}_${componentName}`
123
+ ];
124
+ for (const name2 of names) {
125
+ if (name2 in themes) {
126
+ nextName = name2;
127
+ }
119
128
  }
120
129
  }
121
130
  let theme = themes[nextName];
@@ -123,7 +132,7 @@ class ThemeManager {
123
132
  theme = themes[`light_${nextName}`];
124
133
  }
125
134
  if (process.env.NODE_ENV === "development" && props && props["debug"]) {
126
- console.log("getNextTheme", { opts, nextName, parentName }, this);
135
+ console.log("getNextTheme", { name: opts.name, nextName, parentName });
127
136
  }
128
137
  return {
129
138
  name: nextName,
@@ -169,6 +178,7 @@ getClassName_fn = /* @__PURE__ */ __name(function(name) {
169
178
  }, "#getClassName");
170
179
  const ThemeManagerContext = createContext(null);
171
180
  const emptyManager = new ThemeManager();
181
+ const withoutComponentName = /* @__PURE__ */ __name((name) => name.replace(/\_[A-Z][a-z]+$/, ""), "withoutComponentName");
172
182
  export {
173
183
  ThemeManager,
174
184
  ThemeManagerContext,
package/dist/jsx/conf.js CHANGED
@@ -21,7 +21,6 @@ const onConfiguredOnce = /* @__PURE__ */ __name((cb) => {
21
21
  configListeners.add(cb);
22
22
  }
23
23
  if (!globalThis["Tamagui"]) {
24
- Tamagui.config = conf;
25
24
  globalThis["Tamagui"] = Tamagui;
26
25
  }
27
26
  }, "onConfiguredOnce");
@@ -0,0 +1,17 @@
1
+ const pseudos = {
2
+ focusStyle: {
3
+ name: "focus",
4
+ priority: 3
5
+ },
6
+ pressStyle: {
7
+ name: "active",
8
+ priority: 2
9
+ },
10
+ hoverStyle: {
11
+ name: "hover",
12
+ priority: 1
13
+ }
14
+ };
15
+ export {
16
+ pseudos
17
+ };
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { stylePropsView } from "@tamagui/helpers";
4
4
  import { useForceUpdate } from "@tamagui/use-force-update";
5
- import {
5
+ import React, {
6
6
  Children,
7
7
  Fragment,
8
8
  createElement,
@@ -10,26 +10,33 @@ import {
10
10
  memo,
11
11
  useCallback,
12
12
  useContext,
13
- useEffect,
14
13
  useRef,
15
14
  useState
16
15
  } from "react";
17
16
  import { StyleSheet, Text, View } from "react-native";
18
17
  import { onConfiguredOnce } from "./conf";
19
18
  import { stackDefaultStyles } from "./constants/constants";
20
- import { isAndroid, isTouchDevice, isWeb } from "./constants/platform";
19
+ import { isAndroid, isTouchDevice, isWeb, useIsomorphicLayoutEffect } from "./constants/platform";
21
20
  import { rnw } from "./constants/rnw";
22
21
  import { isVariable } from "./createVariable";
23
- import { defaultComponentState } from "./defaultComponentState";
22
+ import { createShallowUpdate } from "./helpers/createShallowUpdate";
24
23
  import { extendStaticConfig, parseStaticConfig } from "./helpers/extendStaticConfig";
25
- import {
26
- getSplitStyles
27
- } from "./helpers/getSplitStyles";
24
+ import { getSplitStyles } from "./helpers/getSplitStyles";
25
+ import { getAllSelectors } from "./helpers/insertStyleRule";
28
26
  import { wrapThemeManagerContext } from "./helpers/wrapThemeManagerContext";
29
27
  import { useFeatures } from "./hooks/useFeatures";
30
28
  import { usePressable } from "./hooks/usePressable";
31
29
  import { getThemeManagerIfChanged, useTheme } from "./hooks/useTheme";
32
30
  import { TextAncestorContext } from "./views/TextAncestorContext";
31
+ React["keep"];
32
+ const defaultComponentState = {
33
+ hover: false,
34
+ press: false,
35
+ pressIn: false,
36
+ focus: false,
37
+ mounted: false,
38
+ animation: null
39
+ };
33
40
  const mouseUps = /* @__PURE__ */ new Set();
34
41
  if (typeof document !== "undefined") {
35
42
  document.addEventListener("mouseup", () => {
@@ -37,76 +44,73 @@ if (typeof document !== "undefined") {
37
44
  mouseUps.clear();
38
45
  });
39
46
  }
40
- function createShallowUpdate(setter) {
41
- return (next) => {
42
- setter((prev) => {
43
- for (const key in next) {
44
- if (prev[key] !== next[key]) {
45
- return { ...prev, ...next };
46
- }
47
- }
48
- return prev;
49
- });
50
- };
51
- }
52
- __name(createShallowUpdate, "createShallowUpdate");
53
- function createComponent(configIn) {
54
- let staticConfig;
55
- if ("parsed" in configIn) {
56
- staticConfig = configIn;
57
- } else {
58
- staticConfig = parseStaticConfig(configIn);
47
+ function mergeShorthands({ defaultProps }, { shorthands }) {
48
+ for (const key in defaultProps) {
49
+ defaultProps[shorthands[key] || key] = defaultProps[key];
59
50
  }
60
- const { Component, validStyles, isText, isZStack, componentName } = staticConfig;
61
- const componentClassName = `is_${componentName}`;
62
- const validStyleProps = validStyles || stylePropsView;
51
+ }
52
+ __name(mergeShorthands, "mergeShorthands");
53
+ function createComponent(configIn, ParentComponent) {
54
+ const staticConfig = (() => {
55
+ const config = extendStaticConfig(configIn, ParentComponent);
56
+ if ("parsed" in config) {
57
+ return config;
58
+ } else {
59
+ return parseStaticConfig(config);
60
+ }
61
+ })();
62
+ const componentClassName = `is_${staticConfig.componentName}`;
63
63
  let tamaguiConfig;
64
64
  let AnimatedText;
65
65
  let AnimatedView;
66
- let avoidClasses = false;
67
- let defaultPseudos = {};
66
+ let avoidClasses = true;
68
67
  let defaultNativeStyle;
69
- let defaultNativeStyleSheet = null;
70
- let defaultsClassName = null;
68
+ let defaultNativeStyleSheet;
71
69
  let initialTheme;
72
- let splitStyleResult = null;
70
+ let initialSplitStyles;
73
71
  function addPseudoToStyles(styles, name, pseudos) {
74
72
  const pseudoStyle = pseudos[name];
73
+ const shouldNestObject = isWeb && name !== "enterStyle" && name !== "exitStyle";
75
74
  if (pseudoStyle) {
76
- styles.push(isWeb ? { [name]: pseudoStyle } : pseudoStyle);
75
+ styles.push(shouldNestObject ? { [name]: pseudoStyle } : pseudoStyle);
77
76
  }
78
- const defaultPseudoStyle = defaultPseudos[name];
77
+ const defaultPseudoStyle = initialSplitStyles.pseudos[name];
79
78
  if (defaultPseudoStyle) {
80
- styles.push(isWeb ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
79
+ styles.push(shouldNestObject ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
81
80
  }
82
81
  }
83
82
  __name(addPseudoToStyles, "addPseudoToStyles");
84
83
  const component = forwardRef((props, forwardedRef) => {
85
84
  var _a, _b, _c, _d;
85
+ const { Component, componentName, isText, isZStack } = staticConfig;
86
86
  if (process.env.NODE_ENV === "development") {
87
87
  if (props["debug"]) {
88
- console.warn(componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", " debug prop on:", { props: Object.entries(props) });
88
+ console.warn(staticConfig.componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
89
+ console.log("props in:", props);
89
90
  if (props["debug"] === "break")
90
91
  debugger;
91
92
  }
92
93
  }
93
94
  const forceUpdate = useForceUpdate();
94
- const theme = useTheme(props.theme, componentName, props, forceUpdate);
95
+ const theme = useTheme(props.theme, staticConfig.componentName, props, forceUpdate);
95
96
  const [state, set_] = useState(defaultComponentState);
96
97
  const setStateShallow = createShallowUpdate(set_);
97
- const shouldAvoidClasses = !!(state.animation && avoidClasses);
98
- const splitInfo = getSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, defaultsClassName);
99
- const { viewProps: viewPropsIn, pseudos, medias, style, classNames } = splitInfo;
98
+ const shouldAvoidClasses = !!(props.animation && avoidClasses);
99
+ const splitStyles = getSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses ? null : initialSplitStyles.classNames);
100
+ const { viewProps: viewPropsIn, pseudos, medias, style, classNames } = splitStyles;
100
101
  const useAnimations = (_a = tamaguiConfig.animations) == null ? void 0 : _a.useAnimations;
101
102
  const isAnimated = !!(useAnimations && props.animation);
102
- const styleWithPseudos = props.animation ? merge({ ...defaultNativeStyle, ...style }, state.hover && pseudos.hoverStyle, state.press && pseudos.pressStyle, state.focus && pseudos.focusStyle, ...Object.values(medias)) : null;
103
+ const hasEnterStyle = !!props.enterStyle;
103
104
  const features = useFeatures(props, {
104
105
  forceUpdate,
105
106
  setStateShallow,
106
107
  useAnimations,
107
108
  state,
108
- style: styleWithPseudos,
109
- pseudos
109
+ style: props.animation ? { ...defaultNativeStyle, ...style } : null,
110
+ pseudos,
111
+ staticConfig,
112
+ theme,
113
+ onDidAnimate: props.onDidAnimate
110
114
  });
111
115
  const {
112
116
  tag,
@@ -145,6 +149,7 @@ function createComponent(configIn) {
145
149
  accessibilityRole,
146
150
  collapsable,
147
151
  focusable,
152
+ onClick,
148
153
  theme: _themeProp,
149
154
  defaultVariants,
150
155
  onLayout,
@@ -160,15 +165,14 @@ function createComponent(configIn) {
160
165
  }
161
166
  const hasTextAncestor = isWeb ? useContext(TextAncestorContext) : false;
162
167
  const hostRef = useRef(null);
163
- const hasEnterStyle = !!props.enterStyle;
164
168
  const internal = useRef();
165
169
  if (!internal.current) {
166
170
  internal.current = {
167
171
  isMounted: true
168
172
  };
169
173
  }
170
- useEffect(() => {
171
- if (hasEnterStyle) {
174
+ useIsomorphicLayoutEffect(() => {
175
+ if (typeof window !== "undefined" && (hasEnterStyle || props.animation)) {
172
176
  setStateShallow({
173
177
  mounted: true
174
178
  });
@@ -178,7 +182,7 @@ function createComponent(configIn) {
178
182
  mouseUps.delete(unPress);
179
183
  internal.current.isMounted = false;
180
184
  };
181
- }, []);
185
+ }, [hasEnterStyle, props.animation]);
182
186
  if (nativeID) {
183
187
  viewProps.id = nativeID;
184
188
  }
@@ -236,6 +240,7 @@ function createComponent(configIn) {
236
240
  medias
237
241
  ];
238
242
  if (!animationStyles) {
243
+ !state.mounted && addPseudoToStyles(styles, "enterStyle", pseudos);
239
244
  state.hover && addPseudoToStyles(styles, "hoverStyle", pseudos);
240
245
  state.focus && addPseudoToStyles(styles, "focusStyle", pseudos);
241
246
  state.press && addPseudoToStyles(styles, "pressStyle", pseudos);
@@ -254,10 +259,11 @@ function createComponent(configIn) {
254
259
  const className = classList.join(" ");
255
260
  if (process.env.NODE_ENV === "development") {
256
261
  if (props["debug"]) {
257
- console.log(" \xBB className", { isStringElement, pseudos, state, defaultsClassName, classNames, propsClassName: props.className, style, classList, className: className.trim().split(" "), themeClassName: theme.className });
262
+ 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]])) });
258
263
  }
259
264
  }
260
265
  viewProps.className = className;
266
+ viewProps.style = animationStyles;
261
267
  } else {
262
268
  viewProps.style = styles;
263
269
  }
@@ -294,7 +300,8 @@ function createComponent(configIn) {
294
300
  viewProps.ref = forwardedRef;
295
301
  }
296
302
  }
297
- const attachPress = !!(pseudos && pseudos.pressStyle || onPress || onPressOut || onPressIn);
303
+ const initialPseudos = initialSplitStyles.pseudos;
304
+ const attachPress = !!(pseudos && pseudos.pressStyle || initialPseudos && initialPseudos.pressStyle || onPress || onPressOut || onPressIn || onClick);
298
305
  const isHoverable = isWeb && !isTouchDevice;
299
306
  const attachHover = isHoverable && !!(pseudos && pseudos.hoverStyle || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave);
300
307
  const pressEventKey = isStringElement ? "onClick" : "onPress";
@@ -358,6 +365,7 @@ function createComponent(configIn) {
358
365
  onPress == null ? void 0 : onPress(e);
359
366
  unPress();
360
367
  onPressOut == null ? void 0 : onPressOut(e);
368
+ onClick == null ? void 0 : onClick(e);
361
369
  } : null
362
370
  } : null;
363
371
  let childEls = !children ? children : wrapThemeManagerContext(spacedChildren({
@@ -377,18 +385,6 @@ function createComponent(configIn) {
377
385
  } : {
378
386
  disabled: true
379
387
  });
380
- if (events) {
381
- if (!isStringElement) {
382
- Object.assign(viewProps, pressProps);
383
- } else {
384
- Object.assign(viewProps, events);
385
- }
386
- if (isWeb && isHoverable) {
387
- childEls = <span style={{
388
- display: "contents"
389
- }} onMouseEnter={events.onMouseEnter} onMouseLeave={events.onMouseLeave}>{children}</span>;
390
- }
391
- }
392
388
  let content;
393
389
  if (isWeb) {
394
390
  if (staticConfig.isReactNativeWeb) {
@@ -405,11 +401,23 @@ function createComponent(configIn) {
405
401
  }
406
402
  }
407
403
  }
404
+ if (events) {
405
+ if (!isStringElement) {
406
+ Object.assign(viewProps, pressProps);
407
+ } else {
408
+ Object.assign(viewProps, events);
409
+ }
410
+ }
408
411
  content = createElement(ViewComponent, viewProps, childEls);
412
+ if (isWeb && events && attachHover) {
413
+ content = <span className="tui_Hoverable" style={{
414
+ display: "contents"
415
+ }} onMouseEnter={events.onMouseEnter} onMouseLeave={events.onMouseLeave}>{content}</span>;
416
+ }
409
417
  if (process.env.NODE_ENV === "development") {
410
418
  if (props["debug"]) {
411
419
  viewProps["debug"] = true;
412
- console.log(" \xBB ", { propsIn: { ...props }, propsOut: { ...viewProps }, 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, state, styles, pseudos, content, childEls, shouldAvoidClasses, animation: props.animation, style, defaultNativeStyle, splitStyleResult, ...typeof window !== "undefined" ? { theme, themeState: theme.__state, themeClassName: theme.className, staticConfig, tamaguiConfig } : null });
420
+ 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 });
413
421
  }
414
422
  }
415
423
  if (features.length) {
@@ -420,23 +428,27 @@ function createComponent(configIn) {
420
428
  }
421
429
  return content;
422
430
  });
431
+ component.displayName = staticConfig.componentName;
423
432
  onConfiguredOnce((conf) => {
424
433
  var _a, _b, _c, _d;
425
- const shouldDebug = (_a = staticConfig.defaultProps) == null ? void 0 : _a.debug;
434
+ if (process.env.IS_STATIC === "is_static") {
435
+ return;
436
+ }
426
437
  tamaguiConfig = conf;
427
- avoidClasses = !!((_b = tamaguiConfig.animations) == null ? void 0 : _b.avoidClasses);
428
- AnimatedText = (_c = tamaguiConfig.animations) == null ? void 0 : _c.Text;
429
- AnimatedView = (_d = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _d.View;
438
+ mergeShorthands(staticConfig, tamaguiConfig);
439
+ avoidClasses = !!((_a = tamaguiConfig.animations) == null ? void 0 : _a.avoidClasses);
440
+ AnimatedText = (_b = tamaguiConfig.animations) == null ? void 0 : _b.Text;
441
+ AnimatedView = (_c = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _c.View;
430
442
  initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]];
431
- splitStyleResult = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
443
+ initialSplitStyles = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
432
444
  mounted: true,
433
- resolveVariablesAs: "variable"
445
+ hover: false,
446
+ press: false,
447
+ pressIn: false,
448
+ focus: false,
449
+ resolveVariablesAs: "both"
434
450
  });
435
- const { classNames, pseudos, style, viewProps } = splitStyleResult;
436
- if (isWeb) {
437
- defaultsClassName = classNames;
438
- }
439
- defaultPseudos = pseudos;
451
+ const { style, viewProps } = initialSplitStyles;
440
452
  defaultNativeStyle = {};
441
453
  for (const key in style) {
442
454
  const v = style[key];
@@ -445,13 +457,17 @@ function createComponent(configIn) {
445
457
  defaultNativeStyleSheet = StyleSheet.create({
446
458
  base: defaultNativeStyle
447
459
  });
448
- component.displayName = staticConfig.componentName;
449
460
  component.defaultProps = {
450
461
  ...viewProps,
451
462
  ...component.defaultProps
452
463
  };
453
- if (process.env.NODE_ENV === "development" && shouldDebug && process.env.IS_STATIC !== "is_static") {
454
- console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, { staticConfig, ...splitStyleResult });
464
+ if (process.env.NODE_ENV === "development" && ((_d = staticConfig.defaultProps) == null ? void 0 : _d.debug)) {
465
+ if (process.env.IS_STATIC !== "is_static") {
466
+ console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, {
467
+ staticConfig,
468
+ initialSplitStyles
469
+ });
470
+ }
455
471
  }
456
472
  });
457
473
  let res = component;
@@ -459,25 +475,30 @@ function createComponent(configIn) {
459
475
  res = memo(res);
460
476
  }
461
477
  res["staticConfig"] = {
462
- validStyles: validStyleProps,
478
+ validStyles: staticConfig.validStyles || stylePropsView,
463
479
  ...staticConfig
464
480
  };
465
- res["extractable"] = (Component2, conf) => {
466
- Component2["staticConfig"] = extendStaticConfig(res, {
481
+ if (process.env.NODE_ENV === "development") {
482
+ res["whyDidYouRender"] = true;
483
+ }
484
+ res["extractable"] = (Component, conf) => {
485
+ Component["staticConfig"] = extendStaticConfig({
486
+ Component,
467
487
  ...conf,
468
488
  neverFlatten: true,
469
489
  defaultProps: {
470
- ...Component2.defaultProps,
490
+ ...Component.defaultProps,
471
491
  ...conf == null ? void 0 : conf.defaultProps
472
492
  }
473
- });
474
- return Component2;
493
+ }, res);
494
+ return Component;
475
495
  };
476
496
  return res;
477
497
  }
478
498
  __name(createComponent, "createComponent");
479
499
  const Spacer = createComponent({
480
500
  memo: true,
501
+ componentName: "Spacer",
481
502
  defaultProps: {
482
503
  ...stackDefaultStyles,
483
504
  size: true
@@ -550,45 +571,16 @@ function spacedChildren({
550
571
  return next;
551
572
  }
552
573
  __name(spacedChildren, "spacedChildren");
553
- const merge = /* @__PURE__ */ __name((...styles) => {
554
- if (!styles[0])
555
- return;
556
- const res = {};
557
- const len = styles.length;
558
- for (let i = len - 1; i >= 0; i--) {
559
- const cur = styles[i];
560
- if (!cur)
561
- continue;
562
- for (const key in cur) {
563
- const val = cur[key];
564
- if (key !== "transform") {
565
- if (!(key in res)) {
566
- res[key] = val;
567
- }
568
- continue;
569
- }
570
- if (!res.transform) {
571
- res.transform = val;
572
- continue;
573
- }
574
- for (const t of val) {
575
- const tkey = Object.keys(t)[0];
576
- if (res.transform.find((existing) => tkey in existing)) {
577
- continue;
578
- }
579
- res.transform.push(t);
580
- }
581
- }
582
- }
583
- return res;
584
- }, "merge");
585
- const AbsoluteFill = /* @__PURE__ */ __name((props) => isWeb ? <div style={{
586
- position: "absolute",
587
- top: 0,
588
- left: 0,
589
- right: 0,
590
- bottom: 0
591
- }}>{props.children}</div> : <View style={StyleSheet.absoluteFill}>{props.child}</View>, "AbsoluteFill");
574
+ function AbsoluteFill(props) {
575
+ return isWeb ? <div style={{
576
+ position: "absolute",
577
+ top: 0,
578
+ left: 0,
579
+ right: 0,
580
+ bottom: 0
581
+ }}>{props.children}</div> : <View style={StyleSheet.absoluteFill}>{props.child}</View>;
582
+ }
583
+ __name(AbsoluteFill, "AbsoluteFill");
592
584
  export {
593
585
  AbsoluteFill,
594
586
  Spacer,
File without changes
@@ -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
  }
@@ -1,11 +0,0 @@
1
- const defaultComponentState = {
2
- hover: false,
3
- press: false,
4
- pressIn: false,
5
- focus: false,
6
- mounted: false,
7
- animation: null
8
- };
9
- export {
10
- defaultComponentState
11
- };
@@ -0,0 +1,13 @@
1
+ import { onConfiguredOnce } from "./conf";
2
+ import { insertedSelectors } from "./helpers/insertStyleRule";
3
+ onConfiguredOnce((conf) => {
4
+ if (globalThis["Tamagui"]) {
5
+ return;
6
+ }
7
+ globalThis["Tamagui"] = {
8
+ ...conf,
9
+ get insertedCSS() {
10
+ return insertedSelectors;
11
+ }
12
+ };
13
+ });
@@ -0,0 +1,11 @@
1
+ import * as ReactNative from "react-native";
2
+ const RNComponents = /* @__PURE__ */ new WeakMap();
3
+ for (const key of ["Image", "TextInput", "Text", "View"]) {
4
+ const val = ReactNative[key];
5
+ if (val && typeof val === "object") {
6
+ RNComponents.set(val, true);
7
+ }
8
+ }
9
+ export {
10
+ RNComponents
11
+ };
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { useInsertionEffect } 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
7
  function useStylesAsClassname(styles, disable = false, debug = false) {
8
8
  if (!useInsertionEffect) {
@@ -14,6 +14,9 @@ function useStylesAsClassname(styles, disable = false, debug = false) {
14
14
  insertions.push({ identifier, rule });
15
15
  }
16
16
  });
17
+ for (const { identifier, rule } of insertions) {
18
+ updateInsertedCache(identifier, rule);
19
+ }
17
20
  useInsertionEffect(() => {
18
21
  for (const { identifier, rule } of insertions) {
19
22
  insertStyleRule(identifier, rule);
@@ -2,19 +2,16 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { mediaObjectToString } from "../hooks/useMedia";
4
4
  const MEDIA_SEP = "_";
5
- const createMediaStyle = /* @__PURE__ */ __name(({ identifier, rules }, mediaKey, mediaQueries, negate, importance = 0) => {
5
+ const createMediaStyle = /* @__PURE__ */ __name(({ identifier, rules }, mediaKey, mediaQueries, negate, importance) => {
6
6
  const mediaKeys = Object.keys(mediaQueries);
7
- const mediaKeyPrecendence = mediaKeys.reduce((acc, cur, i) => {
8
- acc[cur] = new Array(importance + 1).fill(":root").join("");
9
- return acc;
10
- }, {});
7
+ const importance_ = Math.max(0, importance == void 0 ? mediaKeys.indexOf(mediaKey) : importance || 0);
8
+ const precendencePrefix = new Array(importance_ + 1).fill(":root").join("");
11
9
  const negKey = negate ? "0" : "";
12
10
  const ogPrefix = identifier.slice(0, identifier.indexOf("-") + 1);
13
11
  const nextIdentifier = `${identifier.replace(ogPrefix, `${ogPrefix}${MEDIA_SEP}${mediaKey}${negKey}${MEDIA_SEP}`)}`;
14
12
  const screenStr = negate ? "not all" : "screen";
15
13
  const mediaSelector = mediaObjectToString(mediaQueries[mediaKey]);
16
14
  const mediaQuery = `${screenStr} and ${mediaSelector}`;
17
- const precendencePrefix = mediaKeyPrecendence[mediaKey];
18
15
  const styleInner = rules[0].replace(identifier, nextIdentifier);
19
16
  let styleRule = "";
20
17
  if (styleInner.includes("@media")) {