@tamagui/web 1.74.3 → 1.74.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/dist/cjs/helpers/getAnimationDriver.js +28 -0
  2. package/dist/cjs/helpers/getAnimationDriver.js.map +6 -0
  3. package/dist/cjs/helpers/getAnimationDriver.native.js +29 -0
  4. package/dist/cjs/helpers/getAnimationDriver.native.js.map +6 -0
  5. package/dist/cjs/helpers/propMapper.js +24 -19
  6. package/dist/cjs/helpers/propMapper.js.map +1 -1
  7. package/dist/cjs/helpers/propMapper.native.js +24 -19
  8. package/dist/cjs/helpers/propMapper.native.js.map +1 -1
  9. package/dist/cjs/hooks/useAnimationDriver.js +26 -0
  10. package/dist/cjs/hooks/useAnimationDriver.js.map +6 -0
  11. package/dist/cjs/hooks/useAnimationDriver.native.js +27 -0
  12. package/dist/cjs/hooks/useAnimationDriver.native.js.map +6 -0
  13. package/dist/cjs/hooks/useStyle.js +47 -0
  14. package/dist/cjs/hooks/useStyle.js.map +6 -0
  15. package/dist/cjs/hooks/useStyle.native.js +48 -0
  16. package/dist/cjs/hooks/useStyle.native.js.map +6 -0
  17. package/dist/cjs/hooks/useTheme.js +1 -1
  18. package/dist/cjs/hooks/useTheme.js.map +1 -1
  19. package/dist/cjs/hooks/useTheme.native.js +2 -2
  20. package/dist/cjs/hooks/useTheme.native.js.map +1 -1
  21. package/dist/cjs/views/AnimationDriverProvider.js +26 -0
  22. package/dist/cjs/views/AnimationDriverProvider.js.map +6 -0
  23. package/dist/cjs/views/AnimationDriverProvider.native.js +27 -0
  24. package/dist/cjs/views/AnimationDriverProvider.native.js.map +6 -0
  25. package/dist/esm/Tamagui.native.js +36 -0
  26. package/dist/esm/Tamagui.native.js.map +6 -0
  27. package/dist/esm/config.native.js +62 -0
  28. package/dist/esm/config.native.js.map +6 -0
  29. package/dist/esm/constants/accessibilityDirectMap.native.js +59 -0
  30. package/dist/esm/constants/accessibilityDirectMap.native.js.map +6 -0
  31. package/dist/esm/constants/constants.native.js +9 -0
  32. package/dist/esm/constants/constants.native.js.map +6 -0
  33. package/dist/esm/constants/isDevTools.native.js +12 -0
  34. package/dist/esm/constants/isDevTools.native.js.map +6 -0
  35. package/dist/esm/contexts/ComponentContext.native.js +22 -0
  36. package/dist/esm/contexts/ComponentContext.native.js.map +6 -0
  37. package/dist/esm/createComponent.native.js +683 -0
  38. package/dist/esm/createComponent.native.js.map +6 -0
  39. package/dist/esm/createFont.native.js +38 -0
  40. package/dist/esm/createFont.native.js.map +6 -0
  41. package/dist/esm/createShorthands.native.js +7 -0
  42. package/dist/esm/createShorthands.native.js.map +6 -0
  43. package/dist/esm/createTamagui.native.js +181 -0
  44. package/dist/esm/createTamagui.native.js.map +6 -0
  45. package/dist/esm/createTheme.native.js +5 -0
  46. package/dist/esm/createTheme.native.js.map +6 -0
  47. package/dist/esm/createTokens.native.js +8 -0
  48. package/dist/esm/createTokens.native.js.map +6 -0
  49. package/dist/esm/createVariable.native.js +57 -0
  50. package/dist/esm/createVariable.native.js.map +6 -0
  51. package/dist/esm/createVariables.native.js +34 -0
  52. package/dist/esm/createVariables.native.js.map +6 -0
  53. package/dist/esm/defaultComponentState.native.js +19 -0
  54. package/dist/esm/defaultComponentState.native.js.map +6 -0
  55. package/dist/esm/helpers/ThemeManager.native.js +157 -0
  56. package/dist/esm/helpers/ThemeManager.native.js.map +6 -0
  57. package/dist/esm/helpers/ThemeManagerContext.native.js +6 -0
  58. package/dist/esm/helpers/ThemeManagerContext.native.js.map +6 -0
  59. package/dist/esm/helpers/createChainedWeakCache.native.js +33 -0
  60. package/dist/esm/helpers/createChainedWeakCache.native.js.map +6 -0
  61. package/dist/esm/helpers/createMediaStyle.native.js +52 -0
  62. package/dist/esm/helpers/createMediaStyle.native.js.map +6 -0
  63. package/dist/esm/helpers/createProxy.native.js +14 -0
  64. package/dist/esm/helpers/createProxy.native.js.map +6 -0
  65. package/dist/esm/helpers/createShallowSetState.native.js +14 -0
  66. package/dist/esm/helpers/createShallowSetState.native.js.map +6 -0
  67. package/dist/esm/helpers/createStyledContext.native.js +30 -0
  68. package/dist/esm/helpers/createStyledContext.native.js.map +6 -0
  69. package/dist/esm/helpers/defaultOffset.native.js +5 -0
  70. package/dist/esm/helpers/defaultOffset.native.js.map +6 -0
  71. package/dist/esm/helpers/expandStyle.native.js +43 -0
  72. package/dist/esm/helpers/expandStyle.native.js.map +6 -0
  73. package/dist/esm/helpers/expandStyles.native.js +37 -0
  74. package/dist/esm/helpers/expandStyles.native.js.map +6 -0
  75. package/dist/esm/helpers/getAnimationDriver.js +8 -0
  76. package/dist/esm/helpers/getAnimationDriver.js.map +6 -0
  77. package/dist/esm/helpers/getExpandedShorthands.native.js +14 -0
  78. package/dist/esm/helpers/getExpandedShorthands.native.js.map +6 -0
  79. package/dist/esm/helpers/getFontLanguage.native.js +5 -0
  80. package/dist/esm/helpers/getFontLanguage.native.js.map +6 -0
  81. package/dist/esm/helpers/getGroupPropParts.native.js +11 -0
  82. package/dist/esm/helpers/getGroupPropParts.native.js.map +6 -0
  83. package/dist/esm/helpers/getSplitStyles.native.js +539 -0
  84. package/dist/esm/helpers/getSplitStyles.native.js.map +6 -0
  85. package/dist/esm/helpers/getStylesAtomic.native.js +10 -0
  86. package/dist/esm/helpers/getStylesAtomic.native.js.map +6 -0
  87. package/dist/esm/helpers/getThemeCSSRules.native.js +7 -0
  88. package/dist/esm/helpers/getThemeCSSRules.native.js.map +6 -0
  89. package/dist/esm/helpers/getVariantExtras.native.js +51 -0
  90. package/dist/esm/helpers/getVariantExtras.native.js.map +6 -0
  91. package/dist/esm/helpers/insertStyleRule.native.js +195 -0
  92. package/dist/esm/helpers/insertStyleRule.native.js.map +6 -0
  93. package/dist/esm/helpers/isObj.native.js +5 -0
  94. package/dist/esm/helpers/isObj.native.js.map +6 -0
  95. package/dist/esm/helpers/isTamaguiComponent.native.js +8 -0
  96. package/dist/esm/helpers/isTamaguiComponent.native.js.map +6 -0
  97. package/dist/esm/helpers/isTamaguiElement.native.js +7 -0
  98. package/dist/esm/helpers/isTamaguiElement.native.js.map +6 -0
  99. package/dist/esm/helpers/matchMedia.native.js +20 -0
  100. package/dist/esm/helpers/matchMedia.native.js.map +6 -0
  101. package/dist/esm/helpers/mergeProps.native.js +28 -0
  102. package/dist/esm/helpers/mergeProps.native.js.map +6 -0
  103. package/dist/esm/helpers/mergeVariants.native.js +35 -0
  104. package/dist/esm/helpers/mergeVariants.native.js.map +6 -0
  105. package/dist/esm/helpers/normalizeColor.native.js +20 -0
  106. package/dist/esm/helpers/normalizeColor.native.js.map +6 -0
  107. package/dist/esm/helpers/normalizeShadow.native.js +28 -0
  108. package/dist/esm/helpers/normalizeShadow.native.js.map +6 -0
  109. package/dist/esm/helpers/normalizeStylePropKeys.native.js +16 -0
  110. package/dist/esm/helpers/normalizeStylePropKeys.native.js.map +6 -0
  111. package/dist/esm/helpers/normalizeValueWithProperty.native.js +40 -0
  112. package/dist/esm/helpers/normalizeValueWithProperty.native.js.map +6 -0
  113. package/dist/esm/helpers/objectIdentityKey.native.js +22 -0
  114. package/dist/esm/helpers/objectIdentityKey.native.js.map +6 -0
  115. package/dist/esm/helpers/propMapper.js +24 -19
  116. package/dist/esm/helpers/propMapper.js.map +1 -1
  117. package/dist/esm/helpers/propMapper.native.js +213 -0
  118. package/dist/esm/helpers/propMapper.native.js.map +6 -0
  119. package/dist/esm/helpers/proxyThemeToParents.native.js +40 -0
  120. package/dist/esm/helpers/proxyThemeToParents.native.js.map +6 -0
  121. package/dist/esm/helpers/proxyThemeVariables.native.js +16 -0
  122. package/dist/esm/helpers/proxyThemeVariables.native.js.map +6 -0
  123. package/dist/esm/helpers/pseudoDescriptors.native.js +37 -0
  124. package/dist/esm/helpers/pseudoDescriptors.native.js.map +6 -0
  125. package/dist/esm/helpers/registerCSSVariable.native.js +10 -0
  126. package/dist/esm/helpers/registerCSSVariable.native.js.map +6 -0
  127. package/dist/esm/helpers/themeable.native.js +29 -0
  128. package/dist/esm/helpers/themeable.native.js.map +6 -0
  129. package/dist/esm/helpers/themes.native.js +17 -0
  130. package/dist/esm/helpers/themes.native.js.map +6 -0
  131. package/dist/esm/helpers/timer.native.js +11 -0
  132. package/dist/esm/helpers/timer.native.js.map +6 -0
  133. package/dist/esm/helpers/withStaticProperties.native.js +20 -0
  134. package/dist/esm/helpers/withStaticProperties.native.js.map +6 -0
  135. package/dist/esm/hooks/getThemeUnwrapped.native.js +6 -0
  136. package/dist/esm/hooks/getThemeUnwrapped.native.js.map +6 -0
  137. package/dist/esm/hooks/useAnimationDriver.js +8 -0
  138. package/dist/esm/hooks/useAnimationDriver.js.map +6 -0
  139. package/dist/esm/hooks/useConfiguration.native.js +15 -0
  140. package/dist/esm/hooks/useConfiguration.native.js.map +6 -0
  141. package/dist/esm/hooks/useDisableSSR.native.js +15 -0
  142. package/dist/esm/hooks/useDisableSSR.native.js.map +6 -0
  143. package/dist/esm/hooks/useId.native.js +5 -0
  144. package/dist/esm/hooks/useId.native.js.map +6 -0
  145. package/dist/esm/hooks/useIsTouchDevice.native.js +7 -0
  146. package/dist/esm/hooks/useIsTouchDevice.native.js.map +6 -0
  147. package/dist/esm/hooks/useMedia.native.js +155 -0
  148. package/dist/esm/hooks/useMedia.native.js.map +6 -0
  149. package/dist/esm/hooks/useMemoDebug.native.js +10 -0
  150. package/dist/esm/hooks/useMemoDebug.native.js.map +6 -0
  151. package/dist/esm/hooks/useProps.native.js +49 -0
  152. package/dist/esm/hooks/useProps.native.js.map +6 -0
  153. package/dist/esm/hooks/useStyle.js +32 -0
  154. package/dist/esm/hooks/useStyle.js.map +6 -0
  155. package/dist/esm/hooks/useTheme.js +1 -1
  156. package/dist/esm/hooks/useTheme.js.map +1 -1
  157. package/dist/esm/hooks/useTheme.native.js +224 -0
  158. package/dist/esm/hooks/useTheme.native.js.map +6 -0
  159. package/dist/esm/hooks/useThemeName.native.js +17 -0
  160. package/dist/esm/hooks/useThemeName.native.js.map +6 -0
  161. package/dist/esm/index.native.js +90 -0
  162. package/dist/esm/index.native.js.map +6 -0
  163. package/dist/esm/inject-styles.native.js +12 -0
  164. package/dist/esm/inject-styles.native.js.map +6 -0
  165. package/dist/esm/insertFont.native.js +48 -0
  166. package/dist/esm/insertFont.native.js.map +6 -0
  167. package/dist/esm/interfaces/CSSColorNames.native.js +1 -0
  168. package/dist/esm/interfaces/CSSColorNames.native.js.map +6 -0
  169. package/dist/esm/interfaces/GetRef.native.js +1 -0
  170. package/dist/esm/interfaces/GetRef.native.js.map +6 -0
  171. package/dist/esm/interfaces/Role.native.js +1 -0
  172. package/dist/esm/interfaces/Role.native.js.map +6 -0
  173. package/dist/esm/setupHooks.native.js +9 -0
  174. package/dist/esm/setupHooks.native.js.map +6 -0
  175. package/dist/esm/setupReactNative.native.js +30 -0
  176. package/dist/esm/setupReactNative.native.js.map +6 -0
  177. package/dist/esm/styled.native.js +56 -0
  178. package/dist/esm/styled.native.js.map +6 -0
  179. package/dist/esm/types.native.js +1 -0
  180. package/dist/esm/types.native.js.map +6 -0
  181. package/dist/esm/views/AnimationDriverProvider.js +7 -0
  182. package/dist/esm/views/AnimationDriverProvider.js.map +6 -0
  183. package/dist/esm/views/Configuration.native.js +7 -0
  184. package/dist/esm/views/Configuration.native.js.map +6 -0
  185. package/dist/esm/views/FontLanguage.native.js +11 -0
  186. package/dist/esm/views/FontLanguage.native.js.map +6 -0
  187. package/dist/esm/views/FontLanguage.types.native.js +1 -0
  188. package/dist/esm/views/FontLanguage.types.native.js.map +6 -0
  189. package/dist/esm/views/Slot.native.js +40 -0
  190. package/dist/esm/views/Slot.native.js.map +6 -0
  191. package/dist/esm/views/Stack.native.js +12 -0
  192. package/dist/esm/views/Stack.native.js.map +6 -0
  193. package/dist/esm/views/TamaguiProvider.native.js +34 -0
  194. package/dist/esm/views/TamaguiProvider.native.js.map +6 -0
  195. package/dist/esm/views/Text.native.js +32 -0
  196. package/dist/esm/views/Text.native.js.map +6 -0
  197. package/dist/esm/views/Theme.native.js +85 -0
  198. package/dist/esm/views/Theme.native.js.map +6 -0
  199. package/dist/esm/views/ThemeDebug.native.js +11 -0
  200. package/dist/esm/views/ThemeDebug.native.js.map +6 -0
  201. package/dist/esm/views/ThemeProvider.native.js +26 -0
  202. package/dist/esm/views/ThemeProvider.native.js.map +6 -0
  203. package/dist/esm/views/View.native.js +13 -0
  204. package/dist/esm/views/View.native.js.map +6 -0
  205. package/package.json +9 -9
  206. package/src/helpers/propMapper.ts +36 -25
  207. package/src/hooks/useTheme.tsx +20 -3
  208. package/src/types.tsx +1 -1
  209. package/types/helpers/propMapper.d.ts.map +1 -1
  210. package/types/hooks/useTheme.d.ts +11 -1
  211. package/types/hooks/useTheme.d.ts.map +1 -1
  212. package/types/types.d.ts +1 -1
  213. package/types/types.d.ts.map +1 -1
@@ -0,0 +1,85 @@
1
+ import { isWeb } from "@tamagui/constants";
2
+ import React, {
3
+ Children,
4
+ cloneElement,
5
+ forwardRef,
6
+ isValidElement,
7
+ useMemo,
8
+ useRef
9
+ } from "react";
10
+ import { variableToString } from "../createVariable";
11
+ import { ThemeManagerContext } from "../helpers/ThemeManagerContext";
12
+ import { useChangeThemeEffect } from "../hooks/useTheme";
13
+ import { ThemeDebug } from "./ThemeDebug";
14
+ import { jsx } from "react/jsx-runtime";
15
+ const Theme = forwardRef(function(props, ref) {
16
+ if (props.disable)
17
+ return props.children;
18
+ const isRoot = !!props._isRoot, disableDirectChildTheme = props["disable-child-theme"], themeState = useChangeThemeEffect(props, isRoot), children = useMemo(() => {
19
+ let children2 = disableDirectChildTheme ? Children.map(
20
+ props.children,
21
+ (child) => cloneElement(child, { "data-disable-theme": !0 })
22
+ ) : props.children;
23
+ if (ref)
24
+ try {
25
+ React.Children.only(children2), children2 = cloneElement(children2, { ref });
26
+ } catch {
27
+ }
28
+ return process.env.NODE_ENV === "development" && props.debug === "visualize" && (children2 = /* @__PURE__ */ jsx(ThemeDebug, { themeState, themeProps: props, children: children2 })), children2;
29
+ }, [props.children, disableDirectChildTheme]);
30
+ return useThemedChildren(themeState, children, props, isRoot);
31
+ });
32
+ Theme.avoidForwardRef = !0;
33
+ function useThemedChildren(themeState, children, props, isRoot = !1) {
34
+ const { themeManager, isNewTheme } = themeState, { shallow, forceClassName } = props, hasEverThemed = useRef(!1);
35
+ if (isNewTheme && (hasEverThemed.current = !0), !(isNewTheme || props.inverse || hasEverThemed.current || forceClassName || isRoot))
36
+ return children;
37
+ let next = children;
38
+ shallow && themeManager && (next = Children.toArray(children).map((child) => isValidElement(child) ? cloneElement(
39
+ child,
40
+ void 0,
41
+ /* @__PURE__ */ jsx(Theme, { name: themeManager.state.parentName, children: child.props.children })
42
+ ) : child));
43
+ const elementsWithContext = themeManager ? /* @__PURE__ */ jsx(ThemeManagerContext.Provider, { value: themeManager, children: next }) : next;
44
+ return forceClassName === !1 ? elementsWithContext : isWeb ? wrapThemeElements({
45
+ children: elementsWithContext,
46
+ themeState,
47
+ forceClassName,
48
+ isRoot
49
+ }) : elementsWithContext;
50
+ }
51
+ function wrapThemeElements({
52
+ children,
53
+ themeState,
54
+ forceClassName,
55
+ isRoot
56
+ }) {
57
+ if (isRoot && forceClassName === !1)
58
+ return children;
59
+ const inverse = themeState.state?.inverse;
60
+ if (!themeState.isNewTheme && !inverse && !forceClassName)
61
+ return /* @__PURE__ */ jsx("span", { className: "_dsp_contents is_Theme", children });
62
+ const themeColor = themeState.state?.theme && themeState.isNewTheme ? variableToString(themeState.state.theme.color) : "", colorStyle = themeColor ? {
63
+ color: themeColor
64
+ } : void 0;
65
+ let className = themeState.state?.className || "";
66
+ isRoot && (className = className.replace("t_sub_theme", ""));
67
+ let themedChildren = /* @__PURE__ */ jsx("span", { className: `${className} _dsp_contents is_Theme`, style: colorStyle, children });
68
+ if (inverse != null || forceClassName) {
69
+ const name = themeState.state?.name || "";
70
+ themedChildren = /* @__PURE__ */ jsx(
71
+ "span",
72
+ {
73
+ className: `${name.startsWith("light") ? "t_light" : name.startsWith("dark") ? "t_dark" : ""} _dsp_contents ${inverse ? "is_inversed" : ""}`,
74
+ children: themedChildren
75
+ }
76
+ );
77
+ }
78
+ return themedChildren;
79
+ }
80
+ export {
81
+ Theme,
82
+ useThemedChildren,
83
+ wrapThemeElements
84
+ };
85
+ //# sourceMappingURL=Theme.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/Theme.tsx"],
4
+ "mappings": "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",
5
+ "names": ["children"]
6
+ }
@@ -0,0 +1,11 @@
1
+ function ThemeDebug({
2
+ themeState,
3
+ themeProps,
4
+ children
5
+ }) {
6
+ return children;
7
+ }
8
+ export {
9
+ ThemeDebug
10
+ };
11
+ //# sourceMappingURL=ThemeDebug.native.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/ThemeDebug.native.tsx"],
4
+ "mappings": "AAGO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AAGD,SAAO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,26 @@
1
+ import { isClient } from "@tamagui/constants";
2
+ import { useLayoutEffect } from "react";
3
+ import { THEME_CLASSNAME_PREFIX } from "../constants/constants";
4
+ import { Theme } from "./Theme";
5
+ import { jsx } from "react/jsx-runtime";
6
+ const ThemeProvider = (props) => (isClient && useLayoutEffect(() => {
7
+ if (props.disableRootThemeClass)
8
+ return;
9
+ const cn = `${THEME_CLASSNAME_PREFIX}${props.defaultTheme}`, target = props.themeClassNameOnRoot ? document.documentElement : document.body;
10
+ return target.classList.add(cn), () => {
11
+ target.classList.remove(cn);
12
+ };
13
+ }, [props.defaultTheme, props.disableRootThemeClass, props.themeClassNameOnRoot]), /* @__PURE__ */ jsx(
14
+ Theme,
15
+ {
16
+ className: props.className,
17
+ name: props.defaultTheme,
18
+ forceClassName: !props.disableRootThemeClass,
19
+ _isRoot: !0,
20
+ children: props.children
21
+ }
22
+ ));
23
+ export {
24
+ ThemeProvider
25
+ };
26
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/ThemeProvider.tsx"],
4
+ "mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAEhC,SAAS,8BAA8B;AACvC,SAAS,aAAa;AA0BlB;AAfG,MAAM,gBAAgB,CAAC,WAExB,YACF,gBAAgB,MAAM;AACpB,MAAI,MAAM;AAAuB;AACjC,QAAM,KAAK,GAAG,sBAAsB,GAAG,MAAM,YAAY,IACnD,SAAS,MAAM,uBAAuB,SAAS,kBAAkB,SAAS;AAChF,gBAAO,UAAU,IAAI,EAAE,GAChB,MAAM;AACX,WAAO,UAAU,OAAO,EAAE;AAAA,EAC5B;AACF,GAAG,CAAC,MAAM,cAAc,MAAM,uBAAuB,MAAM,oBAAoB,CAAC,GAIhF;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,MAAM;AAAA,IACjB,MAAM,MAAM;AAAA,IAEZ,gBAAgB,CAAC,MAAM;AAAA,IAEvB,SAAO;AAAA,IAEN,gBAAM;AAAA;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,13 @@
1
+ import { validStyles } from "@tamagui/helpers";
2
+ import { createComponent } from "../createComponent";
3
+ const View = createComponent({
4
+ acceptsClassName: !0,
5
+ defaultProps: {
6
+ display: "flex"
7
+ },
8
+ validStyles
9
+ });
10
+ export {
11
+ View
12
+ };
13
+ //# sourceMappingURL=View.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/View.tsx"],
4
+ "mappings": "AAAA,SAAS,mBAAmB;AAE5B,SAAS,uBAAuB;AAKzB,MAAM,OAAO,gBAAkD;AAAA,EACpE,kBAAkB;AAAA,EAClB,cAAc;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA;AACF,CAAC;",
5
+ "names": []
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/web",
3
- "version": "1.74.3",
3
+ "version": "1.74.4",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -27,19 +27,19 @@
27
27
  "reset.css"
28
28
  ],
29
29
  "dependencies": {
30
- "@tamagui/compose-refs": "1.74.3",
31
- "@tamagui/constants": "1.74.3",
32
- "@tamagui/helpers": "1.74.3",
33
- "@tamagui/normalize-css-color": "1.74.3",
34
- "@tamagui/timer": "1.74.3",
35
- "@tamagui/use-did-finish-ssr": "1.74.3",
36
- "@tamagui/use-force-update": "1.74.3"
30
+ "@tamagui/compose-refs": "1.74.4",
31
+ "@tamagui/constants": "1.74.4",
32
+ "@tamagui/helpers": "1.74.4",
33
+ "@tamagui/normalize-css-color": "1.74.4",
34
+ "@tamagui/timer": "1.74.4",
35
+ "@tamagui/use-did-finish-ssr": "1.74.4",
36
+ "@tamagui/use-force-update": "1.74.4"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "react": "*"
40
40
  },
41
41
  "devDependencies": {
42
- "@tamagui/build": "1.74.3",
42
+ "@tamagui/build": "1.74.4",
43
43
  "@testing-library/react": "^14.0.0",
44
44
  "csstype": "^3.0.10",
45
45
  "react": "^18.2.0",
@@ -1,4 +1,4 @@
1
- import { isAndroid, isWeb } from '@tamagui/constants'
1
+ import { isAndroid } from '@tamagui/constants'
2
2
  import { tokenCategories } from '@tamagui/helpers'
3
3
 
4
4
  import { getConfig } from '../config'
@@ -8,7 +8,6 @@ import type {
8
8
  GetStyleState,
9
9
  PropMapper,
10
10
  ResolveVariableAs,
11
- SplitStyleProps,
12
11
  StyleResolver,
13
12
  TamaguiInternalConfig,
14
13
  VariantSpreadFunction,
@@ -81,7 +80,7 @@ export const propMapper: PropMapper = (key, value, styleStateIn, subPropsIn) =>
81
80
  if (value[0] === '$') {
82
81
  value = getTokenForKey(key, value, styleProps.resolveValues, styleState)
83
82
  } else if (isVariable(value)) {
84
- value = resolveVariableValue(value, styleProps.resolveValues)
83
+ value = resolveVariableValue(key, value, styleProps.resolveValues)
85
84
  }
86
85
  }
87
86
 
@@ -228,27 +227,27 @@ const resolveTokensAndVariants: StyleResolver<Object> = (
228
227
  console.log(` - resolveTokensAndVariants`, key, value)
229
228
  }
230
229
 
231
- for (const rKey in value) {
232
- const fKey = conf.shorthands[rKey] || rKey
233
- const val = value[rKey]
230
+ for (const _key in value) {
231
+ const subKey = conf.shorthands[_key] || _key
232
+ const val = value[_key]
234
233
 
235
234
  if (styleProps.noExpand) {
236
- res[fKey] = val
235
+ res[subKey] = val
237
236
  } else {
238
- if (variants && fKey in variants) {
237
+ if (variants && subKey in variants) {
239
238
  // if its a variant expanded, attach to curProps
240
- styleState.curProps[fKey] = val
239
+ styleState.curProps[subKey] = val
241
240
 
242
241
  // avoids infinite loop if variant is matching a style prop
243
242
  // eg: { variants: { flex: { true: { flex: 2 } } } }
244
243
  if (parentVariantKey && parentVariantKey === key) {
245
- res[fKey] =
244
+ res[subKey] =
246
245
  // SYNC WITH *1
247
246
  val[0] === '$'
248
- ? getTokenForKey(fKey, val, styleProps.resolveValues, styleState)
247
+ ? getTokenForKey(subKey, val, styleProps.resolveValues, styleState)
249
248
  : val
250
249
  } else {
251
- const variantOut = resolveVariants(fKey, val, styleProps, styleState, key)
250
+ const variantOut = resolveVariants(subKey, val, styleProps, styleState, key)
252
251
 
253
252
  // apply, merging sub-styles
254
253
  if (variantOut) {
@@ -268,7 +267,7 @@ const resolveTokensAndVariants: StyleResolver<Object> = (
268
267
  }
269
268
 
270
269
  if (isVariable(val)) {
271
- res[fKey] = resolveVariableValue(val, styleProps.resolveValues)
270
+ res[subKey] = resolveVariableValue(subKey, val, styleProps.resolveValues)
272
271
  continue
273
272
  }
274
273
 
@@ -276,32 +275,38 @@ const resolveTokensAndVariants: StyleResolver<Object> = (
276
275
  const fVal =
277
276
  // SYNC WITH *1
278
277
  val[0] === '$'
279
- ? getTokenForKey(fKey, val, styleProps.resolveValues, styleState)
278
+ ? getTokenForKey(subKey, val, styleProps.resolveValues, styleState)
280
279
  : val
281
- res[fKey] = fVal
280
+
281
+ res[subKey] = fVal
282
282
  continue
283
283
  }
284
284
 
285
285
  if (isObj(val)) {
286
- const subObject = resolveTokensAndVariants(fKey, val, styleProps, styleState, key)
286
+ const subObject = resolveTokensAndVariants(subKey, val, styleProps, styleState, key)
287
287
 
288
288
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
289
289
  // biome-ignore lint/suspicious/noConsoleLog: <explanation>
290
- console.log(`object`, fKey, subObject)
290
+ console.log(`object`, subKey, subObject)
291
291
  }
292
292
 
293
293
  // sub-objects: media queries, pseudos, shadowOffset
294
- res[fKey] ??= {}
295
- Object.assign(res[fKey], subObject)
294
+ res[subKey] ??= {}
295
+ Object.assign(res[subKey], subObject)
296
296
  } else {
297
297
  // nullish values cant be tokens, need no extra parsing
298
- res[fKey] = val
298
+ res[subKey] = val
299
299
  }
300
300
 
301
301
  if (process.env.NODE_ENV === 'development') {
302
302
  if (debug) {
303
- if (res[fKey]?.[0] === '$') {
304
- console.warn(`⚠️ Missing token in theme ${theme.name}:`, fKey, res[fKey], theme)
303
+ if (res[subKey]?.[0] === '$') {
304
+ console.warn(
305
+ `⚠️ Missing token in theme ${theme.name}:`,
306
+ subKey,
307
+ res[subKey],
308
+ theme
309
+ )
305
310
  }
306
311
  }
307
312
  }
@@ -418,7 +423,7 @@ export const getTokenForKey = (
418
423
  }
419
424
 
420
425
  if (hasSet) {
421
- const out = resolveVariableValue(valOrVar, resolveAs)
426
+ const out = resolveVariableValue(key, valOrVar, resolveAs)
422
427
  if (process.env.NODE_ENV === 'development' && styleState.debug === 'verbose') {
423
428
  // biome-ignore lint/suspicious/noConsoleLog: <explanation>
424
429
  console.log(`resolved`, resolveAs, valOrVar.get, out)
@@ -441,6 +446,7 @@ export const getTokenForKey = (
441
446
  }
442
447
 
443
448
  function resolveVariableValue(
449
+ key: string,
444
450
  valOrVar: Variable | any,
445
451
  resolveValues?: ResolveVariableAs
446
452
  ) {
@@ -451,9 +457,14 @@ function resolveVariableValue(
451
457
  }
452
458
  // @ts-expect-error this is fine until we can type better
453
459
  const get = valOrVar.get
454
- if (typeof get === 'function') {
455
- return get()
460
+
461
+ // shadowColor doesn't support dynamic style
462
+ if (process.env.TAMAGUI_TARGET !== 'native' || key !== 'shadowColor') {
463
+ if (typeof get === 'function') {
464
+ return get(resolveValues === 'web' ? 'web' : undefined)
465
+ }
456
466
  }
467
+
457
468
  return process.env.TAMAGUI_TARGET === 'native' ? valOrVar.val : valOrVar.variable
458
469
  }
459
470
  return valOrVar
@@ -40,7 +40,19 @@ function getDefaultThemeProxied() {
40
40
  }
41
41
 
42
42
  export type ThemeGettable<Val> = Val & {
43
- get: () =>
43
+ /**
44
+ * Tries to return an optimized value that avoids the need for re-rendering:
45
+ * On web a CSS variable, on iOS a dynamic color, on Android it doesn't
46
+ * optimize and returns the underyling value.
47
+ *
48
+ * See: https://reactnative.dev/docs/dynamiccolorios
49
+ *
50
+ * @param platform when "web" it will only return the dynamic value for web, avoiding the iOS dynamic value.
51
+ * For things like SVG, gradients, or other external components that don't support it, use this option.
52
+ */
53
+ get: (
54
+ platform?: 'web'
55
+ ) =>
44
56
  | string
45
57
  | (Val extends Variable<infer X>
46
58
  ? X extends VariableValGeneric
@@ -179,13 +191,18 @@ export function getThemeProxied(
179
191
  // always track .val
180
192
  track(keyString)
181
193
  } else if (subkey === 'get') {
182
- return () => {
194
+ return (platform?: 'web') => {
183
195
  const outVal = getVariable(val)
184
196
 
185
197
  if (process.env.TAMAGUI_TARGET === 'native') {
186
198
  // ios can avoid re-rendering in some cases when we are using a root light/dark
187
199
  // disabled in cases where we have animations
188
- if (isIos && !deopt && config.settings.fastSchemeChange) {
200
+ if (
201
+ platform !== 'web' &&
202
+ isIos &&
203
+ !deopt &&
204
+ config.settings.fastSchemeChange
205
+ ) {
189
206
  const isDark = name.startsWith('dark')
190
207
  const isLight = !isDark && name.startsWith('light')
191
208
  if (isDark || isLight) {
package/src/types.tsx CHANGED
@@ -1841,7 +1841,7 @@ export type TamaguiComponentState = {
1841
1841
  group?: Record<string, GroupState>
1842
1842
  }
1843
1843
 
1844
- export type ResolveVariableAs = 'auto' | 'value' | 'variable' | 'none'
1844
+ export type ResolveVariableAs = 'auto' | 'value' | 'variable' | 'none' | 'web'
1845
1845
 
1846
1846
  export type SplitStyleProps = {
1847
1847
  mediaState?: Record<string, boolean>
@@ -1 +1 @@
1
- {"version":3,"file":"propMapper.d.ts","sourceRoot":"","sources":["../../src/helpers/propMapper.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,iBAAiB,EAGjB,qBAAqB,EAEtB,MAAM,UAAU,CAAA;AAOjB,eAAO,MAAM,UAAU,EAAE,UAqExB,CAAA;AAgGD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,sBAkBtF;AAMD,eAAO,MAAM,uBAAuB,cAAe,GAAG,QAErD,CAAA;AAuID,eAAO,MAAM,cAAc,QACpB,MAAM,SACJ,MAAM,wDAED,QAAQ,aAAa,CAAC,QAyFnC,CAAA"}
1
+ {"version":3,"file":"propMapper.d.ts","sourceRoot":"","sources":["../../src/helpers/propMapper.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,iBAAiB,EAEjB,qBAAqB,EAEtB,MAAM,UAAU,CAAA;AAOjB,eAAO,MAAM,UAAU,EAAE,UAqExB,CAAA;AAgGD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,sBAkBtF;AAMD,eAAO,MAAM,uBAAuB,cAAe,GAAG,QAErD,CAAA;AA6ID,eAAO,MAAM,cAAc,QACpB,MAAM,SACJ,MAAM,wDAED,QAAQ,aAAa,CAAC,QAyFnC,CAAA"}
@@ -8,7 +8,17 @@ export type ChangedThemeResponse = {
8
8
  mounted?: boolean;
9
9
  };
10
10
  export type ThemeGettable<Val> = Val & {
11
- get: () => string | (Val extends Variable<infer X> ? X extends VariableValGeneric ? any : Exclude<X, Variable> : Val extends VariableVal ? string | number : unknown);
11
+ /**
12
+ * Tries to return an optimized value that avoids the need for re-rendering:
13
+ * On web a CSS variable, on iOS a dynamic color, on Android it doesn't
14
+ * optimize and returns the underyling value.
15
+ *
16
+ * See: https://reactnative.dev/docs/dynamiccolorios
17
+ *
18
+ * @param platform when "web" it will only return the dynamic value for web, avoiding the iOS dynamic value.
19
+ * For things like SVG, gradients, or other external components that don't support it, use this option.
20
+ */
21
+ get: (platform?: 'web') => string | (Val extends Variable<infer X> ? X extends VariableValGeneric ? any : Exclude<X, Variable> : Val extends VariableVal ? string | number : unknown);
12
22
  };
13
23
  export type UseThemeResult = {
14
24
  [Key in keyof ThemeParsed]: ThemeGettable<ThemeParsed[Key]>;
@@ -1 +1 @@
1
- {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAe,MAAM,mBAAmB,CAAA;AAEzD,OAAO,EACL,YAAY,EACZ,iBAAiB,EAElB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAGjB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAcD,MAAM,MAAM,aAAa,CAAC,GAAG,IAAI,GAAG,GAAG;IACrC,GAAG,EAAE,MACD,MAAM,GACN,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAC1B,CAAC,SAAS,kBAAkB,GAC1B,GAAG,GACH,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,GACtB,GAAG,SAAS,WAAW,GACvB,MAAM,GAAG,MAAM,GACf,OAAO,CAAC,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;KAC1B,GAAG,IAAI,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;CAC5D,CAAA;AAED,eAAO,MAAM,QAAQ,WAAW,UAAU,mBAIzC,CAAA;AAED,eAAO,MAAM,iBAAiB,UACrB,sBAAsB,KAC5B,CAAC,oBAAoB,EAAE,WAAW,CAyDpC,CAAA;AAED,wBAAgB,eAAe,CAC7B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAClC,KAAK,UAAQ,EACb,YAAY,CAAC,EAAE,YAAY,EAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,KAAK,CAAC,EAAE,SAAS,GAChB,cAAc,CAgGhB;AAED,eAAO,MAAM,mBAAmB,mBAA0B,CAAA;AAE1D,eAAO,MAAM,oBAAoB,UACxB,sBAAsB,2BAEtB,MAAM,EAAE,iBACA,MAAM,OAAO,GAAG,SAAS,KACvC,oBAwPF,CAAA"}
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAe,MAAM,mBAAmB,CAAA;AAEzD,OAAO,EACL,YAAY,EACZ,iBAAiB,EAElB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAGjB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAcD,MAAM,MAAM,aAAa,CAAC,GAAG,IAAI,GAAG,GAAG;IACrC;;;;;;;;;OASG;IACH,GAAG,EAAE,CACH,QAAQ,CAAC,EAAE,KAAK,KAEd,MAAM,GACN,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAC1B,CAAC,SAAS,kBAAkB,GAC1B,GAAG,GACH,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,GACtB,GAAG,SAAS,WAAW,GACvB,MAAM,GAAG,MAAM,GACf,OAAO,CAAC,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;KAC1B,GAAG,IAAI,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;CAC5D,CAAA;AAED,eAAO,MAAM,QAAQ,WAAW,UAAU,mBAIzC,CAAA;AAED,eAAO,MAAM,iBAAiB,UACrB,sBAAsB,KAC5B,CAAC,oBAAoB,EAAE,WAAW,CAyDpC,CAAA;AAED,wBAAgB,eAAe,CAC7B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAClC,KAAK,UAAQ,EACb,YAAY,CAAC,EAAE,YAAY,EAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,KAAK,CAAC,EAAE,SAAS,GAChB,cAAc,CAqGhB;AAED,eAAO,MAAM,mBAAmB,mBAA0B,CAAA;AAE1D,eAAO,MAAM,oBAAoB,UACxB,sBAAsB,2BAEtB,MAAM,EAAE,iBACA,MAAM,OAAO,GAAG,SAAS,KACvC,oBAwPF,CAAA"}
package/types/types.d.ts CHANGED
@@ -960,7 +960,7 @@ export type TamaguiComponentState = {
960
960
  };
961
961
  group?: Record<string, GroupState>;
962
962
  };
963
- export type ResolveVariableAs = 'auto' | 'value' | 'variable' | 'none';
963
+ export type ResolveVariableAs = 'auto' | 'value' | 'variable' | 'none' | 'web';
964
964
  export type SplitStyleProps = {
965
965
  mediaState?: Record<string, boolean>;
966
966
  noClassNames?: boolean;