@tamagui/core 1.0.0-beta.200 → 1.0.0-beta.204

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 (267) 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 +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 +117 -112
  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 +55 -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/defaultComponentState.js +0 -30
  25. package/dist/cjs/defaultComponentState.js.map +3 -3
  26. package/dist/cjs/helpers/RNComponents.js +4 -0
  27. package/dist/cjs/helpers/RNComponents.js.map +0 -0
  28. package/dist/cjs/helpers/addStylesUsingClassname.js +8 -0
  29. package/dist/cjs/helpers/addStylesUsingClassname.js.map +2 -2
  30. package/dist/cjs/helpers/areEqualSets.js +4 -0
  31. package/dist/cjs/helpers/createMediaStyle.js +5 -0
  32. package/dist/cjs/helpers/createPropMapper.js +63 -61
  33. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  34. package/dist/cjs/helpers/createShallowUpdate.js +4 -0
  35. package/dist/cjs/helpers/createShallowUpdate.js.map +0 -0
  36. package/dist/cjs/helpers/createTamaguiProvider.js +4 -0
  37. package/dist/cjs/helpers/extendStaticConfig.js +9 -6
  38. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  39. package/dist/cjs/helpers/fixNativeShadow.js +4 -0
  40. package/dist/cjs/helpers/fixNativeShadow.native.js +6 -2
  41. package/dist/cjs/helpers/fixNativeShadow.native.js.map +2 -2
  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 +114 -59
  46. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  47. package/dist/cjs/helpers/getStylesAtomic.js +20 -2
  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/insertStyleRule.js +46 -26
  51. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  52. package/dist/cjs/helpers/isObj.js +4 -0
  53. package/dist/cjs/helpers/isTamaguiElement.js +4 -0
  54. package/dist/cjs/helpers/matchMedia.js +4 -0
  55. package/dist/cjs/helpers/matchMedia.native.js +4 -0
  56. package/dist/cjs/helpers/proxyThemeVariables.js +40 -0
  57. package/dist/cjs/helpers/proxyThemeVariables.js.map +7 -0
  58. package/dist/cjs/helpers/themeable.js +7 -2
  59. package/dist/cjs/helpers/themeable.js.map +2 -2
  60. package/dist/cjs/helpers/validate.js +53 -11
  61. package/dist/cjs/helpers/validate.js.map +2 -2
  62. package/dist/cjs/helpers/withStaticProperties.js +4 -0
  63. package/dist/cjs/helpers/wrapThemeManagerContext.js +4 -0
  64. package/dist/cjs/hooks/useConstant.js +4 -0
  65. package/dist/cjs/hooks/useFeatures.js +101 -13
  66. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  67. package/dist/cjs/hooks/useIsMounted.js +4 -0
  68. package/dist/cjs/hooks/useIsTouchDevice.js +4 -0
  69. package/dist/cjs/hooks/useMedia.js +31 -12
  70. package/dist/cjs/hooks/useMedia.js.map +2 -2
  71. package/dist/cjs/hooks/usePressable.js +4 -0
  72. package/dist/cjs/hooks/useTheme.js +36 -23
  73. package/dist/cjs/hooks/useTheme.js.map +2 -2
  74. package/dist/cjs/hooks/useUnmountEffect.js +4 -0
  75. package/dist/cjs/index.js +15 -0
  76. package/dist/cjs/index.js.map +2 -2
  77. package/dist/cjs/static.js +3 -0
  78. package/dist/cjs/static.js.map +2 -2
  79. package/dist/cjs/styled.js +7 -4
  80. package/dist/cjs/styled.js.map +2 -2
  81. package/dist/cjs/types.js.map +1 -1
  82. package/dist/cjs/views/Stack.js +5 -0
  83. package/dist/cjs/views/Stack.js.map +2 -2
  84. package/dist/cjs/views/Text.js +5 -0
  85. package/dist/cjs/views/Text.js.map +2 -2
  86. package/dist/cjs/views/TextAncestorContext.js +6 -0
  87. package/dist/cjs/views/Theme.js +11 -4
  88. package/dist/cjs/views/Theme.js.map +2 -2
  89. package/dist/cjs/views/ThemeInverse.js +5 -0
  90. package/dist/cjs/views/ThemeProvider.js +6 -1
  91. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  92. package/dist/cjs/views/ThemeReset.js +4 -0
  93. package/dist/esm/Tamagui.js +10 -2
  94. package/dist/esm/Tamagui.js.map +2 -2
  95. package/dist/esm/ThemeManager.js +21 -11
  96. package/dist/esm/ThemeManager.js.map +2 -2
  97. package/dist/esm/conf.js +0 -1
  98. package/dist/esm/conf.js.map +2 -2
  99. package/dist/esm/constants/platform.js +2 -0
  100. package/dist/esm/constants/platform.js.map +2 -2
  101. package/dist/esm/createComponent.js +107 -115
  102. package/dist/esm/createComponent.js.map +2 -2
  103. package/dist/esm/createTamagui.js +51 -27
  104. package/dist/esm/createTamagui.js.map +2 -2
  105. package/dist/esm/createTokens.js +2 -6
  106. package/dist/esm/createTokens.js.map +2 -2
  107. package/dist/esm/createVariable.js +8 -2
  108. package/dist/esm/createVariable.js.map +2 -2
  109. package/dist/esm/defaultComponentState.js +0 -11
  110. package/dist/esm/defaultComponentState.js.map +3 -3
  111. package/dist/esm/helpers/RNComponents.js +0 -0
  112. package/dist/esm/helpers/RNComponents.js.map +0 -0
  113. package/dist/esm/helpers/addStylesUsingClassname.js +4 -1
  114. package/dist/esm/helpers/addStylesUsingClassname.js.map +2 -2
  115. package/dist/esm/helpers/createPropMapper.js +59 -61
  116. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  117. package/dist/esm/helpers/createShallowUpdate.js +0 -0
  118. package/dist/esm/helpers/createShallowUpdate.js.map +0 -0
  119. package/dist/esm/helpers/extendStaticConfig.js +9 -6
  120. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  121. package/dist/esm/helpers/fixNativeShadow.native.js +2 -2
  122. package/dist/esm/helpers/fixNativeShadow.native.js.map +2 -2
  123. package/dist/esm/helpers/getSize.js +13 -0
  124. package/dist/esm/helpers/getSize.js.map +7 -0
  125. package/dist/esm/helpers/getSplitStyles.js +110 -61
  126. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  127. package/dist/esm/helpers/getStylesAtomic.js +15 -2
  128. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  129. package/dist/esm/helpers/insertStyleRule.js +36 -26
  130. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  131. package/dist/esm/helpers/proxyThemeVariables.js +18 -0
  132. package/dist/esm/helpers/proxyThemeVariables.js.map +7 -0
  133. package/dist/esm/helpers/themeable.js +3 -2
  134. package/dist/esm/helpers/themeable.js.map +2 -2
  135. package/dist/esm/helpers/validate.js +24 -11
  136. package/dist/esm/helpers/validate.js.map +2 -2
  137. package/dist/esm/hooks/useFeatures.js +96 -18
  138. package/dist/esm/hooks/useFeatures.js.map +2 -2
  139. package/dist/esm/hooks/useMedia.js +20 -12
  140. package/dist/esm/hooks/useMedia.js.map +2 -2
  141. package/dist/esm/hooks/useTheme.js +28 -23
  142. package/dist/esm/hooks/useTheme.js.map +2 -2
  143. package/dist/esm/index.js +4 -0
  144. package/dist/esm/index.js.map +2 -2
  145. package/dist/esm/static.js +3 -0
  146. package/dist/esm/static.js.map +2 -2
  147. package/dist/esm/styled.js +3 -4
  148. package/dist/esm/styled.js.map +2 -2
  149. package/dist/esm/views/Stack.js +1 -0
  150. package/dist/esm/views/Stack.js.map +2 -2
  151. package/dist/esm/views/Text.js +1 -0
  152. package/dist/esm/views/Text.js.map +2 -2
  153. package/dist/esm/views/Theme.js +7 -4
  154. package/dist/esm/views/Theme.js.map +2 -2
  155. package/dist/esm/views/ThemeProvider.js +2 -1
  156. package/dist/esm/views/ThemeProvider.js.map +2 -2
  157. package/dist/jsx/Tamagui.js +10 -2
  158. package/dist/jsx/ThemeManager.js +21 -11
  159. package/dist/jsx/conf.js +0 -1
  160. package/dist/jsx/constants/platform.js +2 -0
  161. package/dist/jsx/createComponent.js +105 -114
  162. package/dist/jsx/createTamagui.js +51 -27
  163. package/dist/jsx/createTokens.js +2 -6
  164. package/dist/jsx/createVariable.js +8 -2
  165. package/dist/jsx/defaultComponentState.js +0 -11
  166. package/dist/jsx/helpers/RNComponents.js +0 -0
  167. package/dist/jsx/helpers/addStylesUsingClassname.js +4 -1
  168. package/dist/jsx/helpers/createPropMapper.js +59 -61
  169. package/dist/jsx/helpers/createShallowUpdate.js +0 -0
  170. package/dist/jsx/helpers/extendStaticConfig.js +9 -6
  171. package/dist/jsx/helpers/fixNativeShadow.native.js +2 -2
  172. package/dist/jsx/helpers/getSize.js +12 -0
  173. package/dist/jsx/helpers/getSplitStyles.js +110 -61
  174. package/dist/jsx/helpers/getStylesAtomic.js +15 -2
  175. package/dist/jsx/helpers/insertStyleRule.js +36 -26
  176. package/dist/jsx/helpers/proxyThemeVariables.js +17 -0
  177. package/dist/jsx/helpers/themeable.js +3 -3
  178. package/dist/jsx/helpers/validate.js +24 -11
  179. package/dist/jsx/hooks/useFeatures.js +96 -18
  180. package/dist/jsx/hooks/useMedia.js +20 -12
  181. package/dist/jsx/hooks/useTheme.js +28 -23
  182. package/dist/jsx/index.js +4 -0
  183. package/dist/jsx/static.js +3 -0
  184. package/dist/jsx/styled.js +3 -4
  185. package/dist/jsx/views/Stack.js +1 -0
  186. package/dist/jsx/views/Text.js +1 -0
  187. package/dist/jsx/views/Theme.js +7 -4
  188. package/dist/jsx/views/ThemeProvider.js +2 -2
  189. package/package.json +6 -6
  190. package/types/Tamagui.d.ts +18 -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 +2 -0
  195. package/types/conf.d.ts.map +1 -1
  196. package/types/constants/platform.d.ts +1 -0
  197. package/types/constants/platform.d.ts.map +1 -1
  198. package/types/createComponent.d.ts +3 -4
  199. package/types/createComponent.d.ts.map +1 -1
  200. package/types/createFont.d.ts +1 -1
  201. package/types/createFont.d.ts.map +1 -1
  202. package/types/createTamagui.d.ts +2 -1
  203. package/types/createTamagui.d.ts.map +1 -1
  204. package/types/createTokens.d.ts +0 -26
  205. package/types/createTokens.d.ts.map +1 -1
  206. package/types/createVariable.d.ts +1 -0
  207. package/types/createVariable.d.ts.map +1 -1
  208. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -1
  209. package/types/helpers/createMediaStyle.d.ts.map +1 -1
  210. package/types/helpers/createPropMapper.d.ts +1 -1
  211. package/types/helpers/createPropMapper.d.ts.map +1 -1
  212. package/types/helpers/extendStaticConfig.d.ts +2 -2
  213. package/types/helpers/extendStaticConfig.d.ts.map +1 -1
  214. package/types/helpers/getSize.d.ts +3 -0
  215. package/types/helpers/getSize.d.ts.map +1 -0
  216. package/types/helpers/getSplitStyles.d.ts +4 -1
  217. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  218. package/types/helpers/getStylesAtomic.d.ts.map +1 -1
  219. package/types/helpers/insertStyleRule.d.ts +2 -1
  220. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  221. package/types/helpers/proxyThemeVariables.d.ts +2 -0
  222. package/types/helpers/proxyThemeVariables.d.ts.map +1 -0
  223. package/types/helpers/themeable.d.ts +3 -1
  224. package/types/helpers/themeable.d.ts.map +1 -1
  225. package/types/helpers/validate.d.ts.map +1 -1
  226. package/types/hooks/useMedia.d.ts +3 -3
  227. package/types/hooks/useMedia.d.ts.map +1 -1
  228. package/types/hooks/useTheme.d.ts +1 -1
  229. package/types/hooks/useTheme.d.ts.map +1 -1
  230. package/types/index.d.ts +2 -0
  231. package/types/index.d.ts.map +1 -1
  232. package/types/static.d.ts +3 -0
  233. package/types/static.d.ts.map +1 -1
  234. package/types/styled.d.ts +12 -3
  235. package/types/styled.d.ts.map +1 -1
  236. package/types/types.d.ts +73 -45
  237. package/types/types.d.ts.map +1 -1
  238. package/types/views/Theme.d.ts +1 -0
  239. package/types/views/Theme.d.ts.map +1 -1
  240. package/types/views/ThemeProvider.d.ts +1 -0
  241. package/types/views/ThemeProvider.d.ts.map +1 -1
  242. package/dist/cjs/constants/pseudos.js.map +0 -7
  243. package/dist/cjs/createShallowUpdate.js +0 -1
  244. package/dist/cjs/createShallowUpdate.js.map +0 -7
  245. package/dist/cjs/devtools.js +0 -32
  246. package/dist/cjs/devtools.js.map +0 -7
  247. package/dist/cjs/spacedChildren.js +0 -86
  248. package/dist/cjs/spacedChildren.js.map +0 -7
  249. package/dist/cjs/tamagui-base.css +0 -8
  250. package/dist/cjs/tamagui-base.css.map +0 -7
  251. package/dist/esm/constants/pseudos.js +0 -18
  252. package/dist/esm/constants/pseudos.js.map +0 -7
  253. package/dist/esm/createShallowUpdate.js +0 -1
  254. package/dist/esm/createShallowUpdate.js.map +0 -7
  255. package/dist/esm/devtools.js +0 -14
  256. package/dist/esm/devtools.js.map +0 -7
  257. package/dist/esm/spacedChildren.js +0 -52
  258. package/dist/esm/spacedChildren.js.map +0 -7
  259. package/dist/esm/tamagui-base.css +0 -8
  260. package/dist/esm/tamagui-base.css.map +0 -7
  261. package/dist/jsx/constants/pseudos.js +0 -17
  262. package/dist/jsx/createShallowUpdate.js +0 -0
  263. package/dist/jsx/devtools.js +0 -13
  264. package/dist/jsx/spacedChildren.js +0 -44
  265. package/dist/jsx/tamagui-base.css +0 -7
  266. package/types/spacedChildren.d.ts +0 -9
  267. package/types/spacedChildren.d.ts.map +0 -1
@@ -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,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/ThemeManager.tsx"],
4
- "sourcesContent": ["import { createContext } from 'react'\n\nimport { getThemes } from './conf'\nimport { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from './static'\nimport { ThemeObject, Themes } from './types'\n\ntype ThemeListener = (name: string | null, themeManager: ThemeManager) => void\n\nexport type SetActiveThemeProps = {\n className?: string\n parentManager?: ThemeManager | null\n name?: string | null\n theme?: any\n}\n\nexport class ThemeManager {\n keys = new Map<any, Set<string>>()\n listeners = new Map<any, Function>()\n themeListeners = new Set<ThemeListener>()\n className: string | null = null\n\n constructor(\n public name: string | null = null,\n public theme: ThemeObject | null = null,\n public parentManager: ThemeManager | null = null\n ) {\n // find the nearest different parentManager\n let parent = parentManager\n let tries = 0\n while (true) {\n tries++\n if (tries > 10) {\n throw new Error(`Nested 10 of the same theme in a row, likely error`)\n }\n if (!parent) break\n if (parent.name === name) {\n // go up if same\n parent = parent.parentManager\n } else {\n this.parentManager = parent\n break\n }\n }\n }\n\n get parentName() {\n return this.parentManager?.name || null\n }\n\n get fullName(): string {\n return this.getNextTheme().name || this.name || ''\n // const parentName = this.parentManager?.fullName || ''\n // const name = this.name || ''\n // const parts = [...new Set([...`${parentName}_${name}`.split('_')])].filter(Boolean)\n // return parts.join('_')\n }\n\n // gets value going up to parents\n getValue(key: string) {\n let theme = this.theme\n let manager = this as ThemeManager | null\n while (true) {\n if (!theme) return\n if (key in theme) {\n return theme[key]\n }\n manager = this.parentManager\n if (!manager) {\n return\n }\n if (manager.theme === theme) {\n return\n }\n theme = manager.theme\n }\n }\n\n update({ name, theme, className }: SetActiveThemeProps = {}) {\n // className compare on web, avoids light/dark re-renders\n const sameNameOrClassName = this.className\n ? // == instead of === (sometimes its undefined/null)\n className == this.className\n : name === this.name\n if (sameNameOrClassName) {\n return false\n }\n this.className = className || null\n this.name = name || null\n this.theme = theme\n this.notifyListeners()\n return true\n }\n\n getNextTheme(\n opts: { themes?: Themes; name?: string | null; componentName?: string | null } = {},\n props?: any\n ) {\n const { themes = getThemes(), name, componentName } = opts\n\n if (!name) {\n if (componentName) {\n const name = `${this.name}_${componentName}`\n const theme = themes[name]\n if (theme) {\n return { name, theme, className: this.#getClassName(name) }\n }\n }\n return {\n name: this.name,\n theme: this.theme,\n }\n }\n\n let nextName = name || this.name || ''\n let parentName = this.fullName\n\n while (true) {\n if (nextName in themes) {\n break\n }\n nextName = `${parentName}_${name}`\n if (nextName in themes) {\n break\n }\n if (!parentName.includes(THEME_NAME_SEPARATOR)) {\n // not found!\n console.warn('theme not found', name)\n break\n }\n // go up one\n parentName = parentName.slice(0, parentName.lastIndexOf(THEME_NAME_SEPARATOR))\n }\n\n if (componentName) {\n const componentThemeName = `${nextName}_${componentName}`\n if (componentThemeName in themes) {\n nextName = componentThemeName\n }\n }\n\n let theme = themes[nextName]\n if (!theme) {\n theme = themes[`light_${nextName}`]\n }\n\n if (process.env.NODE_ENV === 'development' && props && props['debug']) {\n console.log('getNextTheme', { opts, nextName, parentName }, this)\n }\n\n return {\n name: nextName,\n theme,\n className: this.#getClassName(nextName),\n }\n }\n\n #getClassName(name: string) {\n return `${THEME_CLASSNAME_PREFIX}${name} tui_theme`.replace('light_', '').replace('dark_', '')\n }\n\n track(uuid: any, keys: Set<string>) {\n if (!this.name) return\n this.keys.set(uuid, keys)\n }\n\n notifyListeners() {\n if (!this.name) {\n this.keys.clear()\n }\n for (const [uuid, keys] of this.keys.entries()) {\n if (keys.size) {\n this.listeners.get(uuid)?.()\n }\n }\n this.themeListeners.forEach((cb) => cb(this.name, this))\n }\n\n onChangeTheme(cb: ThemeListener) {\n this.themeListeners.add(cb)\n return () => {\n this.themeListeners.delete(cb)\n }\n }\n\n onUpdate(uuid: any, cb: Function) {\n this.listeners.set(uuid, cb)\n return () => {\n this.listeners.delete(uuid)\n this.keys.delete(uuid)\n }\n }\n}\n\nexport const ThemeManagerContext = createContext<ThemeManager | null>(null)\nexport const emptyManager = new ThemeManager()\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { createContext } from 'react'\n\nimport { getThemes } from './conf'\nimport { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from './constants/constants'\nimport { ThemeObject, Themes } from './types'\n\ntype ThemeListener = (name: string | null, themeManager: ThemeManager) => void\n\nexport type SetActiveThemeProps = {\n className?: string\n parentManager?: ThemeManager | null\n name?: string | null\n theme?: any\n}\n\nexport class ThemeManager {\n keys = new Map<any, Set<string>>()\n listeners = new Map<any, Function>()\n themeListeners = new Set<ThemeListener>()\n className: string | null = null\n\n constructor(\n public name: string = '',\n public theme: ThemeObject | null = null,\n public parentManager: ThemeManager | null = null\n ) {\n // find the nearest different parentManager\n let parent = parentManager\n let tries = 0\n while (true) {\n tries++\n if (tries > 10) {\n throw new Error(`Nested 10 of the same theme in a row, likely error`)\n }\n if (!parent) break\n if (parent.name === name) {\n // go up if same\n parent = parent.parentManager\n } else {\n this.parentManager = parent\n break\n }\n }\n }\n\n get parentName() {\n return this.parentManager?.name || null\n }\n\n get fullName(): string {\n return this.getNextTheme().name || this.name || ''\n // const parentName = this.parentManager?.fullName || ''\n // const name = this.name || ''\n // const parts = [...new Set([...`${parentName}_${name}`.split('_')])].filter(Boolean)\n // return parts.join('_')\n }\n\n // gets value going up to parents\n getValue(key: string) {\n let theme = this.theme\n let manager = this as ThemeManager | null\n while (true) {\n if (!theme) return\n if (key in theme) {\n return theme[key]\n }\n manager = this.parentManager\n if (!manager) {\n return\n }\n if (manager.theme === theme) {\n return\n }\n theme = manager.theme\n }\n }\n\n update({ name, theme, className }: SetActiveThemeProps = {}) {\n // className compare on web, avoids light/dark re-renders\n const sameNameOrClassName = this.className\n ? // == instead of === (sometimes its undefined/null)\n className == this.className\n : name === this.name\n if (sameNameOrClassName) {\n return false\n }\n this.className = className || null\n this.name = name || ''\n this.theme = theme\n this.notifyListeners()\n return true\n }\n\n getNextTheme(\n opts: { themes?: Themes; name?: string | null; componentName?: string | null } = {},\n props?: any\n ) {\n const { themes = getThemes(), name, componentName } = opts\n\n if (!name) {\n if (componentName) {\n // allow for _Card_Button or just _Button\n const names = [\n `${this.name}_${componentName}`,\n `${withoutComponentName(this.name)}_${componentName}`,\n ]\n for (const name of names) {\n if (name in themes) {\n return { name, theme: themes[name], className: this.#getClassName(name) }\n }\n }\n }\n return {\n name: this.name,\n theme: this.theme,\n }\n }\n\n let nextName = name || this.name || ''\n let parentName = this.fullName\n\n while (true) {\n if (nextName in themes) {\n break\n }\n nextName = `${parentName}_${name}`\n if (nextName in themes) {\n break\n }\n if (!parentName.includes(THEME_NAME_SEPARATOR)) {\n // not found!\n console.warn('theme not found', name)\n break\n }\n // go up one\n parentName = parentName.slice(0, parentName.lastIndexOf(THEME_NAME_SEPARATOR))\n }\n\n if (componentName) {\n // allow for _Card_Button or just _Button\n const names = [\n `${nextName}_${componentName}`,\n `${withoutComponentName(nextName)}_${componentName}`,\n ]\n for (const name of names) {\n if (name in themes) {\n nextName = name\n }\n }\n }\n\n let theme = themes[nextName]\n if (!theme) {\n theme = themes[`light_${nextName}`]\n }\n\n if (process.env.NODE_ENV === 'development' && props && props['debug']) {\n console.log('getNextTheme', { name: opts.name, nextName, parentName })\n }\n\n return {\n name: nextName,\n theme,\n className: this.#getClassName(nextName),\n }\n }\n\n #getClassName(name: string) {\n return `${THEME_CLASSNAME_PREFIX}${name} tui_theme`.replace('light_', '').replace('dark_', '')\n }\n\n track(uuid: any, keys: Set<string>) {\n if (!this.name) return\n this.keys.set(uuid, keys)\n }\n\n notifyListeners() {\n if (!this.name) {\n this.keys.clear()\n }\n for (const [uuid, keys] of this.keys.entries()) {\n if (keys.size) {\n this.listeners.get(uuid)?.()\n }\n }\n this.themeListeners.forEach((cb) => cb(this.name, this))\n }\n\n onChangeTheme(cb: ThemeListener) {\n this.themeListeners.add(cb)\n return () => {\n this.themeListeners.delete(cb)\n }\n }\n\n onUpdate(uuid: any, cb: Function) {\n this.listeners.set(uuid, cb)\n return () => {\n this.listeners.delete(uuid)\n this.keys.delete(uuid)\n }\n }\n}\n\nexport const ThemeManagerContext = createContext<ThemeManager | null>(null)\nexport const emptyManager = new ThemeManager()\n\nconst withoutComponentName = (name: string) => name.replace(/\\_[A-Z][a-z]+$/, '')\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/esm/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");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/conf.ts"],
4
- "sourcesContent": ["import { Tamagui } from './Tamagui'\nimport { ConfigListener, TamaguiInternalConfig } from './types'\n\nlet conf: TamaguiInternalConfig | null\n\nexport const setConfig = (next: TamaguiInternalConfig) => {\n conf = next\n if (configListeners.size) {\n configListeners.forEach((cb) => cb(conf!))\n configListeners.clear()\n }\n}\n\nexport const getHasConfigured = () => !!conf\nexport const getConfig = () => conf!\nexport const getTokens = () => conf!.tokensParsed\nexport const getThemes = () => conf!.themes\n\nexport const configListeners = new Set<ConfigListener>()\n\nexport const onConfiguredOnce = (cb: ConfigListener) => {\n if (conf) {\n cb(conf)\n } else {\n configListeners.add(cb)\n }\n\n if (!globalThis['Tamagui']) {\n Tamagui.config = conf\n globalThis['Tamagui'] = Tamagui\n }\n}\n"],
5
- "mappings": ";;AAAA;AAGA,IAAI;AAEG,MAAM,YAAY,wBAAC,SAAgC;AACxD,SAAO;AACP,MAAI,gBAAgB,MAAM;AACxB,oBAAgB,QAAQ,CAAC,OAAO,GAAG,IAAK,CAAC;AACzC,oBAAgB,MAAM;AAAA,EACxB;AACF,GANyB;AAQlB,MAAM,mBAAmB,6BAAM,CAAC,CAAC,MAAR;AACzB,MAAM,YAAY,6BAAM,MAAN;AAClB,MAAM,YAAY,6BAAM,KAAM,cAAZ;AAClB,MAAM,YAAY,6BAAM,KAAM,QAAZ;AAElB,MAAM,kBAAkB,oBAAI,IAAoB;AAEhD,MAAM,mBAAmB,wBAAC,OAAuB;AACtD,MAAI,MAAM;AACR,OAAG,IAAI;AAAA,EACT,OAAO;AACL,oBAAgB,IAAI,EAAE;AAAA,EACxB;AAEA,MAAI,CAAC,WAAW,YAAY;AAC1B,YAAQ,SAAS;AACjB,eAAW,aAAa;AAAA,EAC1B;AACF,GAXgC;",
4
+ "sourcesContent": ["import { Tamagui } from './Tamagui'\nimport { ConfigListener, TamaguiInternalConfig } from './types'\n\nlet conf: TamaguiInternalConfig | null\n\nexport const setConfig = (next: TamaguiInternalConfig) => {\n conf = next\n if (configListeners.size) {\n configListeners.forEach((cb) => cb(conf!))\n configListeners.clear()\n }\n}\n\nexport const getHasConfigured = () => !!conf\nexport const getConfig = () => conf!\nexport const getTokens = () => conf!.tokensParsed\nexport const getThemes = () => conf!.themes\n\nexport const configListeners = new Set<ConfigListener>()\n\nexport const onConfiguredOnce = (cb: ConfigListener) => {\n if (conf) {\n cb(conf!)\n } else {\n configListeners.add(cb)\n }\n\n if (!globalThis['Tamagui']) {\n globalThis['Tamagui'] = Tamagui\n }\n}\n"],
5
+ "mappings": ";;AAAA;AAGA,IAAI;AAEG,MAAM,YAAY,wBAAC,SAAgC;AACxD,SAAO;AACP,MAAI,gBAAgB,MAAM;AACxB,oBAAgB,QAAQ,CAAC,OAAO,GAAG,IAAK,CAAC;AACzC,oBAAgB,MAAM;AAAA,EACxB;AACF,GANyB;AAQlB,MAAM,mBAAmB,6BAAM,CAAC,CAAC,MAAR;AACzB,MAAM,YAAY,6BAAM,MAAN;AAClB,MAAM,YAAY,6BAAM,KAAM,cAAZ;AAClB,MAAM,YAAY,6BAAM,KAAM,QAAZ;AAElB,MAAM,kBAAkB,oBAAI,IAAoB;AAEhD,MAAM,mBAAmB,wBAAC,OAAuB;AACtD,MAAI,MAAM;AACR,OAAG,IAAK;AAAA,EACV,OAAO;AACL,oBAAgB,IAAI,EAAE;AAAA,EACxB;AAEA,MAAI,CAAC,WAAW,YAAY;AAC1B,eAAW,aAAa;AAAA,EAC1B;AACF,GAVgC;",
6
6
  "names": []
7
7
  }
@@ -5,6 +5,7 @@ const isAndroid = ((_a = Platform) == null ? void 0 : _a.OS) === "android";
5
5
  const isIOS = ((_b = Platform) == null ? void 0 : _b.OS) === "ios";
6
6
  const isWeb = process.env.TAMAGUI_TARGET !== "native" && (process.env.TAMAGUI_TARGET === "web" || ((_c = Platform) == null ? void 0 : _c.OS) === "web");
7
7
  const isSSR = isWeb && typeof window === "undefined";
8
+ const isClient = isWeb && typeof window !== "undefined";
8
9
  const useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect;
9
10
  const isChrome = typeof navigator !== "undefined" && /Chrome/.test(navigator.userAgent || "");
10
11
  const supportsTouchWeb = typeof window !== "undefined" && "ontouchstart" in window;
@@ -13,6 +14,7 @@ const isWebIOS = isWeb && typeof navigator !== "undefined" && (/iPad|iPhone|iPod
13
14
  export {
14
15
  isAndroid,
15
16
  isChrome,
17
+ isClient,
16
18
  isIOS,
17
19
  isSSR,
18
20
  isTouchDevice,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/constants/platform.ts"],
4
- "sourcesContent": ["import { useEffect, useLayoutEffect } from 'react'\nimport { Platform } from 'react-native'\n\nexport const isAndroid = Platform?.OS === 'android'\nexport const isIOS = Platform?.OS === 'ios'\n\nexport const isWeb =\n process.env.TAMAGUI_TARGET !== 'native' &&\n (process.env.TAMAGUI_TARGET === 'web' || Platform?.OS === 'web')\n\nexport const isSSR = isWeb && typeof window === 'undefined'\nexport const useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect\nexport const isChrome = typeof navigator !== 'undefined' && /Chrome/.test(navigator.userAgent || '')\nexport const supportsTouchWeb = typeof window !== 'undefined' && 'ontouchstart' in window\nexport const isTouchDevice = !isWeb || supportsTouchWeb\nexport const isWebIOS =\n isWeb &&\n typeof navigator !== 'undefined' &&\n (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !window['MSStream']\n"],
5
- "mappings": "AAAA;AAAA;AACA;AAEO,MAAM,YAAY,uCAAU,QAAO;AACnC,MAAM,QAAQ,uCAAU,QAAO;AAE/B,MAAM,QACX,QAAQ,IAAI,mBAAmB,YAC9B,SAAQ,IAAI,mBAAmB,SAAS,uCAAU,QAAO;AAErD,MAAM,QAAQ,SAAS,OAAO,WAAW;AACzC,MAAM,4BAA4B,QAAQ,YAAY;AACtD,MAAM,WAAW,OAAO,cAAc,eAAe,SAAS,KAAK,UAAU,aAAa,EAAE;AAC5F,MAAM,mBAAmB,OAAO,WAAW,eAAe,kBAAkB;AAC5E,MAAM,gBAAgB,CAAC,SAAS;AAChC,MAAM,WACX,SACA,OAAO,cAAc,eACpB,oBAAmB,KAAK,UAAU,QAAQ,KACxC,UAAU,aAAa,cAAc,UAAU,iBAAiB,MACnE,CAAC,OAAO;",
4
+ "sourcesContent": ["import { useEffect, useLayoutEffect } from 'react'\nimport { Platform } from 'react-native'\n\nexport const isAndroid = Platform?.OS === 'android'\nexport const isIOS = Platform?.OS === 'ios'\n\nexport const isWeb =\n process.env.TAMAGUI_TARGET !== 'native' &&\n (process.env.TAMAGUI_TARGET === 'web' || Platform?.OS === 'web')\n\nexport const isSSR = isWeb && typeof window === 'undefined'\nexport const isClient = isWeb && typeof window !== 'undefined'\nexport const useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect\nexport const isChrome = typeof navigator !== 'undefined' && /Chrome/.test(navigator.userAgent || '')\nexport const supportsTouchWeb = typeof window !== 'undefined' && 'ontouchstart' in window\nexport const isTouchDevice = !isWeb || supportsTouchWeb\nexport const isWebIOS =\n isWeb &&\n typeof navigator !== 'undefined' &&\n (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !window['MSStream']\n"],
5
+ "mappings": "AAAA;AAAA;AACA;AAEO,MAAM,YAAY,uCAAU,QAAO;AACnC,MAAM,QAAQ,uCAAU,QAAO;AAE/B,MAAM,QACX,QAAQ,IAAI,mBAAmB,YAC9B,SAAQ,IAAI,mBAAmB,SAAS,uCAAU,QAAO;AAErD,MAAM,QAAQ,SAAS,OAAO,WAAW;AACzC,MAAM,WAAW,SAAS,OAAO,WAAW;AAC5C,MAAM,4BAA4B,QAAQ,YAAY;AACtD,MAAM,WAAW,OAAO,cAAc,eAAe,SAAS,KAAK,UAAU,aAAa,EAAE;AAC5F,MAAM,mBAAmB,OAAO,WAAW,eAAe,kBAAkB;AAC5E,MAAM,gBAAgB,CAAC,SAAS;AAChC,MAAM,WACX,SACA,OAAO,cAAc,eACpB,oBAAmB,KAAK,UAAU,QAAQ,KACxC,UAAU,aAAa,cAAc,UAAU,iBAAiB,MACnE,CAAC,OAAO;",
6
6
  "names": []
7
7
  }
@@ -10,26 +10,34 @@ import React, {
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";
26
+ import { proxyThemeVariables } from "./helpers/proxyThemeVariables";
28
27
  import { wrapThemeManagerContext } from "./helpers/wrapThemeManagerContext";
29
28
  import { useFeatures } from "./hooks/useFeatures";
30
29
  import { usePressable } from "./hooks/usePressable";
31
30
  import { getThemeManagerIfChanged, useTheme } from "./hooks/useTheme";
32
31
  import { TextAncestorContext } from "./views/TextAncestorContext";
32
+ React["keep"];
33
+ const defaultComponentState = {
34
+ hover: false,
35
+ press: false,
36
+ pressIn: false,
37
+ focus: false,
38
+ mounted: false,
39
+ animation: null
40
+ };
33
41
  const mouseUps = /* @__PURE__ */ new Set();
34
42
  if (typeof document !== "undefined") {
35
43
  document.addEventListener("mouseup", () => {
@@ -37,77 +45,73 @@ if (typeof document !== "undefined") {
37
45
  mouseUps.clear();
38
46
  });
39
47
  }
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);
48
+ function mergeShorthands({ defaultProps }, { shorthands }) {
49
+ for (const key in defaultProps) {
50
+ defaultProps[shorthands[key] || key] = defaultProps[key];
59
51
  }
60
- const { Component, validStyles, isText, isZStack, componentName } = staticConfig;
61
- const componentClassName = `is_${componentName}`;
62
- const validStyleProps = validStyles || stylePropsView;
52
+ }
53
+ __name(mergeShorthands, "mergeShorthands");
54
+ let initialTheme;
55
+ function createComponent(configIn, ParentComponent) {
56
+ const staticConfig = (() => {
57
+ const config = extendStaticConfig(configIn, ParentComponent);
58
+ if ("parsed" in config) {
59
+ return config;
60
+ } else {
61
+ return parseStaticConfig(config);
62
+ }
63
+ })();
64
+ const componentClassName = `is_${staticConfig.componentName}`;
63
65
  let tamaguiConfig;
64
66
  let AnimatedText;
65
67
  let AnimatedView;
66
68
  let avoidClasses = true;
67
- let defaultPseudos = {};
68
69
  let defaultNativeStyle;
69
- let defaultNativeStyleSheet = null;
70
- let defaultsClassName = null;
71
- let initialTheme;
72
- let splitStyleResult = null;
70
+ let defaultNativeStyleSheet;
71
+ let initialSplitStyles;
73
72
  function addPseudoToStyles(styles, name, pseudos) {
74
73
  const pseudoStyle = pseudos[name];
74
+ const shouldNestObject = isWeb && name !== "enterStyle" && name !== "exitStyle";
75
75
  if (pseudoStyle) {
76
- styles.push(isWeb ? { [name]: pseudoStyle } : pseudoStyle);
76
+ styles.push(shouldNestObject ? { [name]: pseudoStyle } : pseudoStyle);
77
77
  }
78
- const defaultPseudoStyle = defaultPseudos[name];
78
+ const defaultPseudoStyle = initialSplitStyles.pseudos[name];
79
79
  if (defaultPseudoStyle) {
80
- styles.push(isWeb ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
80
+ styles.push(shouldNestObject ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
81
81
  }
82
82
  }
83
83
  __name(addPseudoToStyles, "addPseudoToStyles");
84
84
  const component = forwardRef((props, forwardedRef) => {
85
85
  var _a, _b, _c, _d;
86
+ const { Component, componentName, isText, isZStack } = staticConfig;
86
87
  if (process.env.NODE_ENV === "development") {
87
88
  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) });
89
+ console.warn(staticConfig.componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
90
+ console.log("props in:", props);
89
91
  if (props["debug"] === "break")
90
92
  debugger;
91
93
  }
92
94
  }
93
95
  const forceUpdate = useForceUpdate();
94
- const theme = useTheme(props.theme, componentName, props, forceUpdate);
96
+ const theme = useTheme(props.theme, staticConfig.componentName, props, forceUpdate);
95
97
  const [state, set_] = useState(defaultComponentState);
96
98
  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;
99
+ const shouldAvoidClasses = !!(props.animation && avoidClasses);
100
+ const splitStyles = getSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses ? null : initialSplitStyles.classNames);
101
+ const { viewProps: viewPropsIn, pseudos, medias, style, classNames } = splitStyles;
100
102
  const useAnimations = (_a = tamaguiConfig.animations) == null ? void 0 : _a.useAnimations;
101
103
  const isAnimated = !!(useAnimations && props.animation);
102
104
  const hasEnterStyle = !!props.enterStyle;
103
- const styleWithPseudos = props.animation ? merge({ ...defaultNativeStyle, ...style }, state.hover && pseudos.hoverStyle, state.press && pseudos.pressStyle, state.focus && pseudos.focusStyle, hasEnterStyle && !state.mounted && pseudos.enterStyle, ...Object.values(medias)) : null;
104
105
  const features = useFeatures(props, {
105
106
  forceUpdate,
106
107
  setStateShallow,
107
108
  useAnimations,
108
109
  state,
109
- style: styleWithPseudos,
110
- pseudos
110
+ style: props.animation ? { ...defaultNativeStyle, ...style } : null,
111
+ pseudos,
112
+ staticConfig,
113
+ theme,
114
+ onDidAnimate: props.onDidAnimate
111
115
  });
112
116
  const {
113
117
  tag,
@@ -146,6 +150,7 @@ function createComponent(configIn) {
146
150
  accessibilityRole,
147
151
  collapsable,
148
152
  focusable,
153
+ onClick,
149
154
  theme: _themeProp,
150
155
  defaultVariants,
151
156
  onLayout,
@@ -167,8 +172,8 @@ function createComponent(configIn) {
167
172
  isMounted: true
168
173
  };
169
174
  }
170
- useEffect(() => {
171
- if (hasEnterStyle) {
175
+ useIsomorphicLayoutEffect(() => {
176
+ if (typeof window !== "undefined" && (hasEnterStyle || props.animation)) {
172
177
  setStateShallow({
173
178
  mounted: true
174
179
  });
@@ -178,7 +183,7 @@ function createComponent(configIn) {
178
183
  mouseUps.delete(unPress);
179
184
  internal.current.isMounted = false;
180
185
  };
181
- }, []);
186
+ }, [hasEnterStyle, props.animation]);
182
187
  if (nativeID) {
183
188
  viewProps.id = nativeID;
184
189
  }
@@ -236,6 +241,7 @@ function createComponent(configIn) {
236
241
  medias
237
242
  ];
238
243
  if (!animationStyles) {
244
+ !state.mounted && addPseudoToStyles(styles, "enterStyle", pseudos);
239
245
  state.hover && addPseudoToStyles(styles, "hoverStyle", pseudos);
240
246
  state.focus && addPseudoToStyles(styles, "focusStyle", pseudos);
241
247
  state.press && addPseudoToStyles(styles, "pressStyle", pseudos);
@@ -254,7 +260,7 @@ function createComponent(configIn) {
254
260
  const className = classList.join(" ");
255
261
  if (process.env.NODE_ENV === "development") {
256
262
  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 });
263
+ 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
264
  }
259
265
  }
260
266
  viewProps.className = className;
@@ -295,7 +301,8 @@ function createComponent(configIn) {
295
301
  viewProps.ref = forwardedRef;
296
302
  }
297
303
  }
298
- const attachPress = !!(pseudos && pseudos.pressStyle || onPress || onPressOut || onPressIn);
304
+ const initialPseudos = initialSplitStyles.pseudos;
305
+ const attachPress = !!(pseudos && pseudos.pressStyle || initialPseudos && initialPseudos.pressStyle || onPress || onPressOut || onPressIn || onClick);
299
306
  const isHoverable = isWeb && !isTouchDevice;
300
307
  const attachHover = isHoverable && !!(pseudos && pseudos.hoverStyle || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave);
301
308
  const pressEventKey = isStringElement ? "onClick" : "onPress";
@@ -308,7 +315,6 @@ function createComponent(configIn) {
308
315
  pressIn: false
309
316
  });
310
317
  }, []);
311
- console.log("attachHover, attachHover", attachHover, pseudos && pseudos.hoverStyle);
312
318
  const events = shouldAttach ? {
313
319
  ...!isWeb && {
314
320
  onPressOut: (e) => {
@@ -360,6 +366,7 @@ function createComponent(configIn) {
360
366
  onPress == null ? void 0 : onPress(e);
361
367
  unPress();
362
368
  onPressOut == null ? void 0 : onPressOut(e);
369
+ onClick == null ? void 0 : onClick(e);
363
370
  } : null
364
371
  } : null;
365
372
  let childEls = !children ? children : wrapThemeManagerContext(spacedChildren({
@@ -403,9 +410,9 @@ function createComponent(configIn) {
403
410
  }
404
411
  }
405
412
  content = createElement(ViewComponent, viewProps, childEls);
406
- console.log("should", attachHover);
407
413
  if (isWeb && events && attachHover) {
408
414
  content = /* @__PURE__ */ React.createElement("span", {
415
+ className: "tui_Hoverable",
409
416
  style: {
410
417
  display: "contents"
411
418
  },
@@ -416,7 +423,7 @@ function createComponent(configIn) {
416
423
  if (process.env.NODE_ENV === "development") {
417
424
  if (props["debug"]) {
418
425
  viewProps["debug"] = true;
419
- 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 });
426
+ 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 });
420
427
  }
421
428
  }
422
429
  if (features.length) {
@@ -424,23 +431,28 @@ function createComponent(configIn) {
424
431
  }
425
432
  return content;
426
433
  });
434
+ component.displayName = staticConfig.componentName;
427
435
  onConfiguredOnce((conf) => {
428
436
  var _a, _b, _c, _d;
429
- const shouldDebug = (_a = staticConfig.defaultProps) == null ? void 0 : _a.debug;
437
+ if (process.env.IS_STATIC === "is_static") {
438
+ return;
439
+ }
430
440
  tamaguiConfig = conf;
431
- avoidClasses = !!((_b = tamaguiConfig.animations) == null ? void 0 : _b.avoidClasses);
432
- AnimatedText = (_c = tamaguiConfig.animations) == null ? void 0 : _c.Text;
433
- AnimatedView = (_d = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _d.View;
434
- initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]];
435
- splitStyleResult = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
441
+ mergeShorthands(staticConfig, tamaguiConfig);
442
+ avoidClasses = !!((_a = tamaguiConfig.animations) == null ? void 0 : _a.avoidClasses);
443
+ AnimatedText = (_b = tamaguiConfig.animations) == null ? void 0 : _b.Text;
444
+ AnimatedView = (_c = tamaguiConfig == null ? void 0 : tamaguiConfig.animations) == null ? void 0 : _c.View;
445
+ initialTheme = initialTheme || proxyThemeVariables(conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]]);
446
+ initialSplitStyles = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
436
447
  mounted: true,
437
- resolveVariablesAs: "variable"
448
+ hover: false,
449
+ press: false,
450
+ pressIn: false,
451
+ focus: false,
452
+ resolveVariablesAs: "both",
453
+ keepVariantsAsProps: true
438
454
  });
439
- const { classNames, pseudos, style, viewProps } = splitStyleResult;
440
- if (isWeb) {
441
- defaultsClassName = classNames;
442
- }
443
- defaultPseudos = pseudos;
455
+ const { style, viewProps } = initialSplitStyles;
444
456
  defaultNativeStyle = {};
445
457
  for (const key in style) {
446
458
  const v = style[key];
@@ -449,13 +461,17 @@ function createComponent(configIn) {
449
461
  defaultNativeStyleSheet = StyleSheet.create({
450
462
  base: defaultNativeStyle
451
463
  });
452
- component.displayName = staticConfig.componentName;
453
464
  component.defaultProps = {
454
465
  ...viewProps,
455
466
  ...component.defaultProps
456
467
  };
457
- if (process.env.NODE_ENV === "development" && shouldDebug && process.env.IS_STATIC !== "is_static") {
458
- console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, { staticConfig, ...splitStyleResult });
468
+ if (process.env.NODE_ENV === "development" && ((_d = staticConfig.defaultProps) == null ? void 0 : _d.debug)) {
469
+ if (process.env.IS_STATIC !== "is_static") {
470
+ console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, {
471
+ staticConfig,
472
+ initialSplitStyles
473
+ });
474
+ }
459
475
  }
460
476
  });
461
477
  let res = component;
@@ -463,25 +479,30 @@ function createComponent(configIn) {
463
479
  res = memo(res);
464
480
  }
465
481
  res["staticConfig"] = {
466
- validStyles: validStyleProps,
482
+ validStyles: staticConfig.validStyles || stylePropsView,
467
483
  ...staticConfig
468
484
  };
469
- res["extractable"] = (Component2, conf) => {
470
- Component2["staticConfig"] = extendStaticConfig(res, {
485
+ if (process.env.NODE_ENV === "development") {
486
+ res["whyDidYouRender"] = true;
487
+ }
488
+ res["extractable"] = (Component, conf) => {
489
+ Component["staticConfig"] = extendStaticConfig({
490
+ Component,
471
491
  ...conf,
472
492
  neverFlatten: true,
473
493
  defaultProps: {
474
- ...Component2.defaultProps,
494
+ ...Component.defaultProps,
475
495
  ...conf == null ? void 0 : conf.defaultProps
476
496
  }
477
- });
478
- return Component2;
497
+ }, res);
498
+ return Component;
479
499
  };
480
500
  return res;
481
501
  }
482
502
  __name(createComponent, "createComponent");
483
503
  const Spacer = createComponent({
484
504
  memo: true,
505
+ componentName: "Spacer",
485
506
  defaultProps: {
486
507
  ...stackDefaultStyles,
487
508
  size: true
@@ -561,49 +582,20 @@ function spacedChildren({
561
582
  return next;
562
583
  }
563
584
  __name(spacedChildren, "spacedChildren");
564
- const merge = /* @__PURE__ */ __name((...styles) => {
565
- if (!styles[0])
566
- return;
567
- const res = {};
568
- const len = styles.length;
569
- for (let i = len - 1; i >= 0; i--) {
570
- const cur = styles[i];
571
- if (!cur)
572
- continue;
573
- for (const key in cur) {
574
- const val = cur[key];
575
- if (key !== "transform") {
576
- if (!(key in res)) {
577
- res[key] = val;
578
- }
579
- continue;
580
- }
581
- if (!res.transform) {
582
- res.transform = val;
583
- continue;
584
- }
585
- for (const t of val) {
586
- const tkey = Object.keys(t)[0];
587
- if (res.transform.find((existing) => tkey in existing)) {
588
- continue;
589
- }
590
- res.transform.push(t);
591
- }
585
+ function AbsoluteFill(props) {
586
+ return isWeb ? /* @__PURE__ */ React.createElement("div", {
587
+ style: {
588
+ position: "absolute",
589
+ top: 0,
590
+ left: 0,
591
+ right: 0,
592
+ bottom: 0
592
593
  }
593
- }
594
- return res;
595
- }, "merge");
596
- const AbsoluteFill = /* @__PURE__ */ __name((props) => isWeb ? /* @__PURE__ */ React.createElement("div", {
597
- style: {
598
- position: "absolute",
599
- top: 0,
600
- left: 0,
601
- right: 0,
602
- bottom: 0
603
- }
604
- }, props.children) : /* @__PURE__ */ React.createElement(View, {
605
- style: StyleSheet.absoluteFill
606
- }, props.child), "AbsoluteFill");
594
+ }, props.children) : /* @__PURE__ */ React.createElement(View, {
595
+ style: StyleSheet.absoluteFill
596
+ }, props.child);
597
+ }
598
+ __name(AbsoluteFill, "AbsoluteFill");
607
599
  export {
608
600
  AbsoluteFill,
609
601
  Spacer,