@tamagui/core 1.0.0-beta.153 → 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 (173) hide show
  1. package/dist/cjs/Tamagui.js +13 -1
  2. package/dist/cjs/Tamagui.js.map +2 -2
  3. package/dist/cjs/ThemeContext.js +4 -0
  4. package/dist/cjs/ThemeManager.js +30 -14
  5. package/dist/cjs/ThemeManager.js.map +2 -2
  6. package/dist/cjs/conf.js +10 -1
  7. package/dist/cjs/conf.js.map +2 -2
  8. package/dist/cjs/constants/constants.js +6 -0
  9. package/dist/cjs/constants/platform.js +12 -0
  10. package/dist/cjs/constants/rnw.js +4 -0
  11. package/dist/cjs/contexts/ButtonInsideButtonContext.js +4 -0
  12. package/dist/cjs/createComponent.js +78 -54
  13. package/dist/cjs/createComponent.js.map +2 -2
  14. package/dist/cjs/createFont.js +4 -0
  15. package/dist/cjs/createShorthands.js +4 -0
  16. package/dist/cjs/createTamagui.js +4 -0
  17. package/dist/cjs/createTamagui.js.map +2 -2
  18. package/dist/cjs/createTheme.js +4 -0
  19. package/dist/cjs/createTokens.js +5 -0
  20. package/dist/cjs/createTokens.js.map +1 -1
  21. package/dist/cjs/createVariable.js +9 -0
  22. package/dist/cjs/helpers/RNComponents.js +4 -0
  23. package/dist/cjs/helpers/addStylesUsingClassname.js +8 -0
  24. package/dist/cjs/helpers/addStylesUsingClassname.js.map +2 -2
  25. package/dist/cjs/helpers/areEqualSets.js +4 -0
  26. package/dist/cjs/helpers/createMediaStyle.js +5 -2
  27. package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
  28. package/dist/cjs/helpers/createPropMapper.js +11 -12
  29. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  30. package/dist/cjs/helpers/createShallowUpdate.js +4 -0
  31. package/dist/cjs/helpers/createTamaguiProvider.js +4 -0
  32. package/dist/cjs/helpers/extendStaticConfig.js +8 -6
  33. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  34. package/dist/cjs/helpers/fixNativeShadow.js +4 -0
  35. package/dist/cjs/helpers/fixNativeShadow.native.js +6 -2
  36. package/dist/cjs/helpers/fixNativeShadow.native.js.map +2 -2
  37. package/dist/cjs/helpers/getExpandedShorthands.js +4 -0
  38. package/dist/cjs/helpers/getSplitStyles.js +70 -34
  39. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  40. package/dist/cjs/helpers/getStylesAtomic.js +20 -3
  41. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  42. package/dist/cjs/helpers/getStylesAtomic.native.js +4 -0
  43. package/dist/cjs/helpers/insertStyleRule.js +41 -27
  44. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  45. package/dist/cjs/helpers/isObj.js +4 -0
  46. package/dist/cjs/helpers/isTamaguiElement.js +4 -0
  47. package/dist/cjs/helpers/matchMedia.js +4 -0
  48. package/dist/cjs/helpers/matchMedia.native.js +4 -0
  49. package/dist/cjs/helpers/themeable.js +8 -2
  50. package/dist/cjs/helpers/themeable.js.map +2 -2
  51. package/dist/cjs/helpers/validate.js +46 -5
  52. package/dist/cjs/helpers/validate.js.map +2 -2
  53. package/dist/cjs/helpers/withStaticProperties.js +4 -0
  54. package/dist/cjs/helpers/wrapThemeManagerContext.js +4 -0
  55. package/dist/cjs/hooks/useConstant.js +4 -0
  56. package/dist/cjs/hooks/useFeatures.js +4 -0
  57. package/dist/cjs/hooks/useIsMounted.js +4 -0
  58. package/dist/cjs/hooks/useIsTouchDevice.js +4 -0
  59. package/dist/cjs/hooks/useMedia.js +15 -0
  60. package/dist/cjs/hooks/useMedia.js.map +2 -2
  61. package/dist/cjs/hooks/usePressable.js +4 -0
  62. package/dist/cjs/hooks/useTheme.js +16 -0
  63. package/dist/cjs/hooks/useTheme.js.map +2 -2
  64. package/dist/cjs/hooks/useUnmountEffect.js +4 -0
  65. package/dist/cjs/index.js +14 -0
  66. package/dist/cjs/index.js.map +2 -2
  67. package/dist/cjs/styled.js +7 -4
  68. package/dist/cjs/styled.js.map +2 -2
  69. package/dist/cjs/types.js.map +1 -1
  70. package/dist/cjs/views/Stack.js +4 -0
  71. package/dist/cjs/views/Text.js +4 -0
  72. package/dist/cjs/views/TextAncestorContext.js +6 -0
  73. package/dist/cjs/views/Theme.js +10 -3
  74. package/dist/cjs/views/Theme.js.map +2 -2
  75. package/dist/cjs/views/ThemeInverse.js +5 -0
  76. package/dist/cjs/views/ThemeProvider.js +4 -0
  77. package/dist/cjs/views/ThemeReset.js +4 -0
  78. package/dist/esm/Tamagui.js +8 -2
  79. package/dist/esm/Tamagui.js.map +2 -2
  80. package/dist/esm/ThemeManager.js +21 -11
  81. package/dist/esm/ThemeManager.js.map +2 -2
  82. package/dist/esm/conf.js +0 -1
  83. package/dist/esm/conf.js.map +2 -2
  84. package/dist/esm/createComponent.js +68 -54
  85. package/dist/esm/createComponent.js.map +2 -2
  86. package/dist/esm/createTamagui.js.map +2 -2
  87. package/dist/esm/createTokens.js.map +1 -1
  88. package/dist/esm/helpers/addStylesUsingClassname.js +4 -1
  89. package/dist/esm/helpers/addStylesUsingClassname.js.map +2 -2
  90. package/dist/esm/helpers/createMediaStyle.js +0 -2
  91. package/dist/esm/helpers/createMediaStyle.js.map +2 -2
  92. package/dist/esm/helpers/createPropMapper.js +7 -12
  93. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  94. package/dist/esm/helpers/extendStaticConfig.js +5 -6
  95. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  96. package/dist/esm/helpers/fixNativeShadow.native.js +2 -2
  97. package/dist/esm/helpers/fixNativeShadow.native.js.map +2 -2
  98. package/dist/esm/helpers/getSplitStyles.js +65 -35
  99. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  100. package/dist/esm/helpers/getStylesAtomic.js +15 -3
  101. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  102. package/dist/esm/helpers/insertStyleRule.js +31 -27
  103. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  104. package/dist/esm/helpers/themeable.js +4 -2
  105. package/dist/esm/helpers/themeable.js.map +2 -2
  106. package/dist/esm/helpers/validate.js +17 -5
  107. package/dist/esm/helpers/validate.js.map +2 -2
  108. package/dist/esm/hooks/useMedia.js +4 -0
  109. package/dist/esm/hooks/useMedia.js.map +2 -2
  110. package/dist/esm/hooks/useTheme.js +8 -0
  111. package/dist/esm/hooks/useTheme.js.map +2 -2
  112. package/dist/esm/index.js +3 -0
  113. package/dist/esm/index.js.map +2 -2
  114. package/dist/esm/styled.js +3 -4
  115. package/dist/esm/styled.js.map +2 -2
  116. package/dist/esm/views/Theme.js +6 -3
  117. package/dist/esm/views/Theme.js.map +2 -2
  118. package/dist/jsx/Tamagui.js +8 -2
  119. package/dist/jsx/ThemeManager.js +21 -11
  120. package/dist/jsx/conf.js +0 -1
  121. package/dist/jsx/createComponent.js +64 -50
  122. package/dist/jsx/helpers/addStylesUsingClassname.js +4 -1
  123. package/dist/jsx/helpers/createMediaStyle.js +0 -2
  124. package/dist/jsx/helpers/createPropMapper.js +7 -12
  125. package/dist/jsx/helpers/extendStaticConfig.js +5 -6
  126. package/dist/jsx/helpers/fixNativeShadow.native.js +2 -2
  127. package/dist/jsx/helpers/getSplitStyles.js +65 -35
  128. package/dist/jsx/helpers/getStylesAtomic.js +15 -3
  129. package/dist/jsx/helpers/insertStyleRule.js +31 -27
  130. package/dist/jsx/helpers/themeable.js +4 -3
  131. package/dist/jsx/helpers/validate.js +17 -5
  132. package/dist/jsx/hooks/useMedia.js +4 -0
  133. package/dist/jsx/hooks/useTheme.js +8 -0
  134. package/dist/jsx/index.js +3 -0
  135. package/dist/jsx/styled.js +3 -4
  136. package/dist/jsx/views/Theme.js +7 -4
  137. package/package.json +6 -6
  138. package/types/Tamagui.d.ts +14 -1
  139. package/types/Tamagui.d.ts.map +1 -1
  140. package/types/ThemeManager.d.ts +3 -3
  141. package/types/ThemeManager.d.ts.map +1 -1
  142. package/types/conf.d.ts.map +1 -1
  143. package/types/createComponent.d.ts +3 -4
  144. package/types/createComponent.d.ts.map +1 -1
  145. package/types/createTamagui.d.ts.map +1 -1
  146. package/types/createTokens.d.ts +8 -0
  147. package/types/createTokens.d.ts.map +1 -1
  148. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -1
  149. package/types/helpers/createMediaStyle.d.ts.map +1 -1
  150. package/types/helpers/createPropMapper.d.ts +1 -1
  151. package/types/helpers/createPropMapper.d.ts.map +1 -1
  152. package/types/helpers/extendStaticConfig.d.ts +2 -2
  153. package/types/helpers/extendStaticConfig.d.ts.map +1 -1
  154. package/types/helpers/getSplitStyles.d.ts +2 -1
  155. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  156. package/types/helpers/getStylesAtomic.d.ts.map +1 -1
  157. package/types/helpers/insertStyleRule.d.ts +2 -1
  158. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  159. package/types/helpers/themeable.d.ts +3 -1
  160. package/types/helpers/themeable.d.ts.map +1 -1
  161. package/types/helpers/validate.d.ts.map +1 -1
  162. package/types/hooks/useMedia.d.ts +3 -3
  163. package/types/hooks/useMedia.d.ts.map +1 -1
  164. package/types/hooks/useTheme.d.ts +1 -1
  165. package/types/hooks/useTheme.d.ts.map +1 -1
  166. package/types/index.d.ts +1 -0
  167. package/types/index.d.ts.map +1 -1
  168. package/types/styled.d.ts +12 -3
  169. package/types/styled.d.ts.map +1 -1
  170. package/types/types.d.ts +43 -25
  171. package/types/types.d.ts.map +1 -1
  172. package/types/views/Theme.d.ts +1 -0
  173. package/types/views/Theme.d.ts.map +1 -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,
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");
@@ -44,33 +44,37 @@ if (typeof document !== "undefined") {
44
44
  mouseUps.clear();
45
45
  });
46
46
  }
47
- function createComponent(configIn) {
48
- let staticConfig;
49
- if ("parsed" in configIn) {
50
- staticConfig = configIn;
51
- } else {
52
- staticConfig = parseStaticConfig(configIn);
47
+ function mergeShorthands({ defaultProps }, { shorthands }) {
48
+ for (const key in defaultProps) {
49
+ defaultProps[shorthands[key] || key] = defaultProps[key];
53
50
  }
54
- const { Component, validStyles, isText, isZStack, componentName } = staticConfig;
55
- const componentClassName = `is_${componentName}`;
56
- 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}`;
57
63
  let tamaguiConfig;
58
64
  let AnimatedText;
59
65
  let AnimatedView;
60
66
  let avoidClasses = true;
61
- let defaultPseudos = {};
62
67
  let defaultNativeStyle;
63
- let defaultNativeStyleSheet = null;
64
- let defaultsClassName = null;
68
+ let defaultNativeStyleSheet;
65
69
  let initialTheme;
66
- let defaultSplitStyleResult = null;
70
+ let initialSplitStyles;
67
71
  function addPseudoToStyles(styles, name, pseudos) {
68
72
  const pseudoStyle = pseudos[name];
69
73
  const shouldNestObject = isWeb && name !== "enterStyle" && name !== "exitStyle";
70
74
  if (pseudoStyle) {
71
75
  styles.push(shouldNestObject ? { [name]: pseudoStyle } : pseudoStyle);
72
76
  }
73
- const defaultPseudoStyle = defaultPseudos[name];
77
+ const defaultPseudoStyle = initialSplitStyles.pseudos[name];
74
78
  if (defaultPseudoStyle) {
75
79
  styles.push(shouldNestObject ? { [name]: defaultPseudoStyle } : defaultPseudoStyle);
76
80
  }
@@ -78,20 +82,21 @@ function createComponent(configIn) {
78
82
  __name(addPseudoToStyles, "addPseudoToStyles");
79
83
  const component = forwardRef((props, forwardedRef) => {
80
84
  var _a, _b, _c, _d;
85
+ const { Component, componentName, isText, isZStack } = staticConfig;
81
86
  if (process.env.NODE_ENV === "development") {
82
87
  if (props["debug"]) {
83
- console.warn(componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
88
+ console.warn(staticConfig.componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]", "debug on");
84
89
  console.log("props in:", props);
85
90
  if (props["debug"] === "break")
86
91
  debugger;
87
92
  }
88
93
  }
89
94
  const forceUpdate = useForceUpdate();
90
- const theme = useTheme(props.theme, componentName, props, forceUpdate);
95
+ const theme = useTheme(props.theme, staticConfig.componentName, props, forceUpdate);
91
96
  const [state, set_] = useState(defaultComponentState);
92
97
  const setStateShallow = createShallowUpdate(set_);
93
98
  const shouldAvoidClasses = !!(props.animation && avoidClasses);
94
- const splitStyles = getSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses ? null : defaultsClassName);
99
+ const splitStyles = getSplitStyles(props, staticConfig, theme, shouldAvoidClasses ? { ...state, noClassNames: true, resolveVariablesAs: "value" } : state, shouldAvoidClasses ? null : initialSplitStyles.classNames);
95
100
  const { viewProps: viewPropsIn, pseudos, medias, style, classNames } = splitStyles;
96
101
  const useAnimations = (_a = tamaguiConfig.animations) == null ? void 0 : _a.useAnimations;
97
102
  const isAnimated = !!(useAnimations && props.animation);
@@ -144,6 +149,7 @@ function createComponent(configIn) {
144
149
  accessibilityRole,
145
150
  collapsable,
146
151
  focusable,
152
+ onClick,
147
153
  theme: _themeProp,
148
154
  defaultVariants,
149
155
  onLayout,
@@ -166,7 +172,7 @@ function createComponent(configIn) {
166
172
  };
167
173
  }
168
174
  useIsomorphicLayoutEffect(() => {
169
- if (typeof window !== "undefined") {
175
+ if (typeof window !== "undefined" && (hasEnterStyle || props.animation)) {
170
176
  setStateShallow({
171
177
  mounted: true
172
178
  });
@@ -176,7 +182,7 @@ function createComponent(configIn) {
176
182
  mouseUps.delete(unPress);
177
183
  internal.current.isMounted = false;
178
184
  };
179
- }, [hasEnterStyle]);
185
+ }, [hasEnterStyle, props.animation]);
180
186
  if (nativeID) {
181
187
  viewProps.id = nativeID;
182
188
  }
@@ -253,7 +259,7 @@ function createComponent(configIn) {
253
259
  const className = classList.join(" ");
254
260
  if (process.env.NODE_ENV === "development") {
255
261
  if (props["debug"]) {
256
- console.log(" \xBB className", { isStringElement, pseudos, state, defaultsClassName, classNames, propsClassName: props.className, style, classList, className: className.trim().split(" "), themeClassName: theme.className, values: Object.fromEntries(Object.entries(classNames).map(([k, v]) => [v, getAllSelectors()[v]])) });
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]])) });
257
263
  }
258
264
  }
259
265
  viewProps.className = className;
@@ -294,7 +300,8 @@ function createComponent(configIn) {
294
300
  viewProps.ref = forwardedRef;
295
301
  }
296
302
  }
297
- const attachPress = !!(pseudos && pseudos.pressStyle || defaultPseudos && defaultPseudos.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({
@@ -409,7 +417,7 @@ function createComponent(configIn) {
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 }, state, splitStyles, defaultsClassName, animationStyles, isStringElement, classNamesIn: (_c = props.className) == null ? void 0 : _c.split(" "), classNamesOut: (_d = viewProps.className) == null ? void 0 : _d.split(" "), pressProps, events, shouldAttach, ViewComponent, viewProps, styles, pseudos, content, childEls, shouldAvoidClasses, avoidClasses, animation: props.animation, style, defaultNativeStyle, defaultSplitStyleResult, ...typeof window !== "undefined" ? { theme, themeState: theme.__state, themeClassName: theme.className, staticConfig, tamaguiConfig } : null });
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,18 +428,19 @@ 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
434
  if (process.env.IS_STATIC === "is_static") {
426
435
  return;
427
436
  }
428
- const shouldDebug = (_a = staticConfig.defaultProps) == null ? void 0 : _a.debug;
429
437
  tamaguiConfig = conf;
430
- avoidClasses = !!((_b = tamaguiConfig.animations) == null ? void 0 : _b.avoidClasses);
431
- AnimatedText = (_c = tamaguiConfig.animations) == null ? void 0 : _c.Text;
432
- 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;
433
442
  initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]];
434
- defaultSplitStyleResult = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
443
+ initialSplitStyles = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, {
435
444
  mounted: true,
436
445
  hover: false,
437
446
  press: false,
@@ -439,11 +448,7 @@ function createComponent(configIn) {
439
448
  focus: false,
440
449
  resolveVariablesAs: "both"
441
450
  });
442
- const { classNames, pseudos, style, viewProps } = defaultSplitStyleResult;
443
- if (isWeb) {
444
- defaultsClassName = classNames;
445
- }
446
- defaultPseudos = pseudos;
451
+ const { style, viewProps } = initialSplitStyles;
447
452
  defaultNativeStyle = {};
448
453
  for (const key in style) {
449
454
  const v = style[key];
@@ -452,34 +457,41 @@ function createComponent(configIn) {
452
457
  defaultNativeStyleSheet = StyleSheet.create({
453
458
  base: defaultNativeStyle
454
459
  });
455
- component.displayName = staticConfig.componentName;
456
460
  component.defaultProps = {
457
461
  ...viewProps,
458
462
  ...component.defaultProps
459
463
  };
460
- if (process.env.NODE_ENV === "development" && shouldDebug && process.env.IS_STATIC !== "is_static") {
461
- console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, { staticConfig, ...defaultSplitStyleResult });
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
+ }
462
471
  }
463
472
  });
464
473
  let res = component;
465
474
  if (configIn.memo) {
466
475
  res = memo(res);
467
476
  }
468
- res["whyDidYouRender"] = true;
469
477
  res["staticConfig"] = {
470
- validStyles: validStyleProps,
478
+ validStyles: staticConfig.validStyles || stylePropsView,
471
479
  ...staticConfig
472
480
  };
473
- res["extractable"] = (Component2, conf) => {
474
- 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,
475
487
  ...conf,
476
488
  neverFlatten: true,
477
489
  defaultProps: {
478
- ...Component2.defaultProps,
490
+ ...Component.defaultProps,
479
491
  ...conf == null ? void 0 : conf.defaultProps
480
492
  }
481
- });
482
- return Component2;
493
+ }, res);
494
+ return Component;
483
495
  };
484
496
  return res;
485
497
  }
@@ -559,18 +571,20 @@ function spacedChildren({
559
571
  return next;
560
572
  }
561
573
  __name(spacedChildren, "spacedChildren");
562
- const AbsoluteFill = /* @__PURE__ */ __name((props) => isWeb ? <div style={{
563
- position: "absolute",
564
- top: 0,
565
- left: 0,
566
- right: 0,
567
- bottom: 0
568
- }}>{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");
569
584
  export {
570
585
  AbsoluteFill,
571
586
  Spacer,
572
587
  createComponent,
573
- defaultComponentState,
574
588
  mouseUps,
575
589
  spacedChildren
576
590
  };
@@ -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);
@@ -13,8 +13,6 @@ const createMediaStyle = /* @__PURE__ */ __name(({ identifier, rules }, mediaKey
13
13
  const mediaSelector = mediaObjectToString(mediaQueries[mediaKey]);
14
14
  const mediaQuery = `${screenStr} and ${mediaSelector}`;
15
15
  const styleInner = rules[0].replace(identifier, nextIdentifier);
16
- if (styleInner.includes("2:r;"))
17
- debugger;
18
16
  let styleRule = "";
19
17
  if (styleInner.includes("@media")) {
20
18
  styleRule = styleInner.replace("{", ` and ${mediaQuery} {`);
@@ -37,7 +37,7 @@ const createPropMapper = /* @__PURE__ */ __name((staticConfig) => {
37
37
  console.trace("no conf! err");
38
38
  return;
39
39
  }
40
- let fontFamily = props.fontFamily || defaultProps.fontFamily || "$body";
40
+ const fontFamily = props.fontFamily || defaultProps.fontFamily || "$body";
41
41
  const variant = variants && variants[key];
42
42
  if (variant && value !== void 0) {
43
43
  let variantValue = getVariantFunction(variant, key, value);
@@ -110,8 +110,12 @@ const resolveTokens = /* @__PURE__ */ __name((input, conf, theme, fontFamily, re
110
110
  }
111
111
  return res;
112
112
  }, "resolveTokens");
113
+ const fontShorthand = {
114
+ fontSize: "size",
115
+ fontWeight: "weight"
116
+ };
113
117
  const getToken = /* @__PURE__ */ __name((key, value, { tokensParsed }, theme, fontFamily = "$body", resolveAs) => {
114
- var _a, _b, _c, _d, _e;
118
+ var _a, _b, _c;
115
119
  let valOrVar;
116
120
  let hasSet = false;
117
121
  const valueName = value[0] === "$" ? value.slice(1) : value;
@@ -125,19 +129,10 @@ const getToken = /* @__PURE__ */ __name((key, value, { tokensParsed }, theme, fo
125
129
  hasSet = true;
126
130
  break;
127
131
  case "fontSize":
128
- valOrVar = ((_b = tokensParsed.font[fontFamily]) == null ? void 0 : _b.size[value]) || value;
129
- hasSet = true;
130
- break;
131
132
  case "lineHeight":
132
- valOrVar = ((_c = tokensParsed.font[fontFamily]) == null ? void 0 : _c.lineHeight[value]) || value;
133
- hasSet = true;
134
- break;
135
133
  case "letterSpacing":
136
- valOrVar = ((_d = tokensParsed.font[fontFamily]) == null ? void 0 : _d.letterSpacing[value]) || value;
137
- hasSet = true;
138
- break;
139
134
  case "fontWeight":
140
- valOrVar = ((_e = tokensParsed.font[fontFamily]) == null ? void 0 : _e.weight[value]) || value;
135
+ valOrVar = ((_c = (_b = tokensParsed.font[fontFamily]) == null ? void 0 : _b[fontShorthand[key] || key]) == null ? void 0 : _c[value]) || value;
141
136
  hasSet = true;
142
137
  break;
143
138
  }
@@ -2,12 +2,9 @@ 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 { createPropMapper } from "./createPropMapper";
5
- function extendStaticConfig(parent, config = {}) {
5
+ function extendStaticConfig(config, parent) {
6
6
  var _a;
7
- if (!parent) {
8
- throw new Error("no parent");
9
- }
10
- if (!("staticConfig" in parent)) {
7
+ if (!parent || !("staticConfig" in parent)) {
11
8
  return parseStaticConfig(config);
12
9
  }
13
10
  const variants = {
@@ -40,7 +37,9 @@ function extendStaticConfig(parent, config = {}) {
40
37
  } : parent.staticConfig.validStyles || stylePropsView,
41
38
  defaultProps: {
42
39
  ...parent.staticConfig.defaultProps,
43
- ...config.defaultProps
40
+ ...parent.staticConfig.defaultVariants,
41
+ ...config.defaultProps,
42
+ ...config.defaultVariants
44
43
  }
45
44
  });
46
45
  }
@@ -18,8 +18,8 @@ function fixNativeShadow(props) {
18
18
  if ((c[0] === "r" || c[0] === "h") && c[3] === "a") {
19
19
  const [_, type, _1, _2, _3, a] = c.match(matchRgbaHsla) || [];
20
20
  if (typeof a !== "string") {
21
- console.warn("invalid", c, type);
22
- return;
21
+ console.trace("invalid", c, type);
22
+ throw new Error(`invalid style`);
23
23
  }
24
24
  props.shadowColor = `${type.replace("a", "")}(${_1},${_2},${_3})`;
25
25
  props.shadowOpacity = +a;
@@ -7,33 +7,25 @@ import {
7
7
  validPseudoKeys,
8
8
  validStyles
9
9
  } from "@tamagui/helpers";
10
+ import { getConfig } from "../conf";
10
11
  import { isWeb } from "../constants/platform";
11
12
  import { mediaQueryConfig, mediaState } from "../hooks/useMedia";
12
13
  import { createMediaStyle } from "./createMediaStyle";
13
14
  import { fixNativeShadow } from "./fixNativeShadow";
14
15
  import { getStylesAtomic } from "./getStylesAtomic";
15
16
  import { insertStyleRule, insertedTransforms, updateInserted } from "./insertStyleRule";
16
- const skipKeys = {
17
+ const skipProps = {
17
18
  animation: true,
18
- animated: true,
19
- children: true,
20
- key: true,
21
- ref: true
19
+ animateOnly: true,
20
+ debug: true
22
21
  };
23
- function normalizeStyleObject(style) {
24
- var _a, _b;
25
- if (typeof style.flex === "number") {
26
- const val = style.flex;
27
- delete style.flex;
28
- style.flexGrow = (_a = style.flexGrow) != null ? _a : val;
29
- style.flexShrink = (_b = style.flexShrink) != null ? _b : 1;
30
- }
31
- if (!isWeb) {
32
- fixNativeShadow(style);
33
- }
34
- }
35
- __name(normalizeStyleObject, "normalizeStyleObject");
22
+ let conf;
36
23
  const getSplitStyles = /* @__PURE__ */ __name((props, staticConfig, theme, state, defaultClassNames) => {
24
+ var _a;
25
+ if (process.env.NODE_ENV === "development" && props["debug"] === "verbose") {
26
+ console.log(" \xBB getSplitStyles", { props, state, defaultClassNames });
27
+ }
28
+ conf = conf || getConfig();
37
29
  const validStyleProps = staticConfig.isText ? stylePropsText : validStyles;
38
30
  const viewProps = {};
39
31
  const style = {};
@@ -50,19 +42,32 @@ const getSplitStyles = /* @__PURE__ */ __name((props, staticConfig, theme, state
50
42
  if (val.startsWith("_transform-")) {
51
43
  const isMediaOrPseudo = key !== "transform";
52
44
  const isMedia = isMediaOrPseudo && key[11] === "_";
53
- const isPsuedo = isMediaOrPseudo && key[11] === "0";
45
+ const isPsuedo = isMediaOrPseudo && key[11] === "0" || key.endsWith("Style");
54
46
  const namespace = isMedia ? key.split("_")[2] : isPsuedo ? key.split("-")[1] : "transform";
55
47
  let transform = insertedTransforms[val];
56
48
  if (!transform) {
57
49
  updateInserted();
50
+ transform = insertedTransforms[val];
51
+ }
52
+ if (!transform) {
53
+ if (isWeb && val[0] !== "_") {
54
+ transform = val;
55
+ } else {
56
+ console.log("?", key, val);
57
+ }
58
+ }
59
+ if (process.env.NODE_ENV === "development" && props["debug"] === "verbose") {
60
+ console.log(" \xBB getSplitStyles mergeClassName transform", { key, val, namespace, transform, insertedTransforms });
58
61
  }
59
- transform = insertedTransforms[val];
60
- if (!transform || transform === "undefined") {
61
- console.log("NO TRANSFORM", { key, val, transform });
62
- return;
62
+ if (process.env.NODE_ENV === "development") {
63
+ if (!transform) {
64
+ console.log("NO TRANSFORM?", { key, val, transform });
65
+ }
63
66
  }
64
67
  transforms[namespace] = transforms[namespace] || ["", ""];
65
- transforms[namespace][0] += val.replace("_transform", "");
68
+ const identifier = val.replace("_transform", "");
69
+ console.warn("?bug2", key, val, transform, insertedTransforms[val]);
70
+ transforms[namespace][0] += identifier;
66
71
  transforms[namespace][1] += transform;
67
72
  } else {
68
73
  classNames[key] = val;
@@ -73,6 +78,9 @@ const getSplitStyles = /* @__PURE__ */ __name((props, staticConfig, theme, state
73
78
  if (!cur)
74
79
  return;
75
80
  normalizeStyleObject(cur);
81
+ if (process.env.NODE_ENV === "development" && props["debug"] === "verbose") {
82
+ console.log(" \xBB getSplitStyles push", cur, state);
83
+ }
76
84
  if (isWeb && !state.noClassNames) {
77
85
  const atomic = getStylesAtomic(cur);
78
86
  for (const atomicStyle of atomic) {
@@ -97,11 +105,12 @@ const getSplitStyles = /* @__PURE__ */ __name((props, staticConfig, theme, state
97
105
  }
98
106
  __name(push, "push");
99
107
  for (const keyInit in props) {
100
- const valInit = props[keyInit];
101
- if (skipKeys[keyInit]) {
102
- viewProps[keyInit] = valInit;
108
+ if (skipProps[keyInit]) {
103
109
  continue;
104
110
  }
111
+ const valInit = props[keyInit];
112
+ let isMedia = keyInit[0] === "$";
113
+ let isPseudo = validPseudoKeys[keyInit];
105
114
  if (keyInit === "className" || validStyleProps[keyInit] && valInit && valInit[0] === "_") {
106
115
  push();
107
116
  mergeClassName(keyInit, valInit);
@@ -112,12 +121,14 @@ const getSplitStyles = /* @__PURE__ */ __name((props, staticConfig, theme, state
112
121
  }
113
122
  continue;
114
123
  }
115
- let isMedia = keyInit[0] === "$";
116
- let isPseudo = validPseudoKeys[keyInit];
124
+ if (!isMedia && !isPseudo && !((_a = staticConfig.variants) == null ? void 0 : _a[keyInit]) && !validStyleProps[keyInit] && !conf.shorthands[keyInit]) {
125
+ viewProps[keyInit] = valInit;
126
+ continue;
127
+ }
117
128
  const out = isMedia || isPseudo ? true : staticConfig.propMapper(keyInit, valInit, theme, state.fallbackProps || props, state.resolveVariablesAs);
118
129
  const expanded = out === true || !out ? [[keyInit, valInit]] : Object.entries(out);
119
130
  if (process.env.NODE_ENV === "development" && props["debug"] === "verbose") {
120
- console.log("split style", keyInit, expanded);
131
+ console.log(" \xBB getSplitStyles", keyInit, expanded);
121
132
  }
122
133
  for (const [key, val] of expanded) {
123
134
  if (val === void 0) {
@@ -151,16 +162,20 @@ const getSplitStyles = /* @__PURE__ */ __name((props, staticConfig, theme, state
151
162
  }
152
163
  if (isMedia) {
153
164
  const mediaKey = key;
154
- if (!mediaQueryConfig[mediaKey.slice(1)]) {
165
+ const mediaKeyShort = mediaKey.slice(1);
166
+ if (!mediaQueryConfig[mediaKeyShort]) {
155
167
  viewProps[key] = val;
156
168
  continue;
157
169
  }
158
- const mediaStyle = getSubStyle(val, staticConfig, theme, props, state, true);
170
+ const mediaStyle = getSubStyle(val, staticConfig, theme, props, state);
171
+ if (process.env.NODE_ENV === "development" && props["debug"] === "verbose") {
172
+ console.log(" \xBB getSplitStyles mediaStyle", mediaKey, mediaStyle, props);
173
+ }
159
174
  const shouldDoClasses = isWeb && !state.noClassNames;
160
175
  if (shouldDoClasses) {
161
176
  const mediaStyles = getStylesAtomic(mediaStyle);
162
177
  for (const style2 of mediaStyles) {
163
- const out2 = createMediaStyle(style2, mediaKey.slice(1), mediaQueryConfig);
178
+ const out2 = createMediaStyle(style2, mediaKeyShort, mediaQueryConfig);
164
179
  mergeClassName(`${out2.identifier}-${mediaKey}`, out2.identifier);
165
180
  insertStyleRule(out2.identifier, out2.styleRule);
166
181
  }
@@ -204,13 +219,14 @@ const getSplitStyles = /* @__PURE__ */ __name((props, staticConfig, theme, state
204
219
  const identifier = `_transform${hash}`;
205
220
  if (!insertedTransforms[identifier]) {
206
221
  const rule = `.${identifier} { transform: ${val}; }`;
222
+ console.log("insert", rule);
207
223
  insertStyleRule(identifier, rule);
208
224
  }
209
225
  classNames[namespace] = identifier;
210
226
  }
211
227
  }
212
228
  if (process.env.NODE_ENV === "development" && props["debug"] === "verbose") {
213
- console.log("out", { style, pseudos, medias, classNames, viewProps });
229
+ console.log(" \xBB getSplitStyles out", { style, pseudos, medias, classNames, viewProps, state });
214
230
  }
215
231
  return {
216
232
  viewProps,
@@ -237,7 +253,21 @@ const getSubStyle = /* @__PURE__ */ __name((styleIn, staticConfig, theme, props,
237
253
  normalizeStyleObject(styleOut);
238
254
  return styleOut;
239
255
  }, "getSubStyle");
256
+ function normalizeStyleObject(style) {
257
+ var _a, _b;
258
+ if (typeof style.flex === "number") {
259
+ const val = style.flex;
260
+ delete style.flex;
261
+ style.flexGrow = (_a = style.flexGrow) != null ? _a : val;
262
+ style.flexShrink = (_b = style.flexShrink) != null ? _b : 1;
263
+ }
264
+ if (!isWeb) {
265
+ fixNativeShadow(style);
266
+ }
267
+ }
268
+ __name(normalizeStyleObject, "normalizeStyleObject");
240
269
  export {
241
270
  getSplitStyles,
242
- getSubStyle
271
+ getSubStyle,
272
+ normalizeStyleObject
243
273
  };