@tamagui/web 1.72.3 → 1.73.1

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 (161) hide show
  1. package/dist/cjs/contexts/ComponentContext.js +1 -0
  2. package/dist/cjs/contexts/ComponentContext.js.map +1 -1
  3. package/dist/cjs/contexts/ComponentContext.native.js +1 -0
  4. package/dist/cjs/contexts/ComponentContext.native.js.map +1 -1
  5. package/dist/cjs/createComponent.js +47 -46
  6. package/dist/cjs/createComponent.js.map +1 -1
  7. package/dist/cjs/createComponent.native.js +27 -26
  8. package/dist/cjs/createComponent.native.js.map +1 -1
  9. package/dist/cjs/createTamagui.js +35 -32
  10. package/dist/cjs/createTamagui.js.map +1 -1
  11. package/dist/cjs/createTamagui.native.js +35 -32
  12. package/dist/cjs/createTamagui.native.js.map +1 -1
  13. package/dist/cjs/helpers/getSplitStyles.js +8 -7
  14. package/dist/cjs/helpers/getSplitStyles.js.map +1 -1
  15. package/dist/cjs/helpers/getSplitStyles.native.js +6 -5
  16. package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -1
  17. package/dist/cjs/helpers/getStylesAtomic.js +16 -11
  18. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  19. package/dist/cjs/helpers/getThemeCSSRules.js +1 -1
  20. package/dist/cjs/helpers/getThemeCSSRules.js.map +1 -1
  21. package/dist/cjs/helpers/propMapper.js +15 -10
  22. package/dist/cjs/helpers/propMapper.js.map +1 -1
  23. package/dist/cjs/helpers/propMapper.native.js +15 -10
  24. package/dist/cjs/helpers/propMapper.native.js.map +1 -1
  25. package/dist/cjs/hooks/{useAnimationDriver.js → useConfiguration.js} +15 -8
  26. package/dist/cjs/hooks/useConfiguration.js.map +6 -0
  27. package/dist/cjs/hooks/{useAnimationDriver.native.js → useConfiguration.native.js} +15 -8
  28. package/dist/cjs/hooks/useConfiguration.native.js.map +6 -0
  29. package/dist/cjs/{helpers/getAnimationDriver.js → hooks/useDisableSSR.js} +15 -9
  30. package/dist/cjs/hooks/useDisableSSR.js.map +6 -0
  31. package/dist/cjs/{helpers/getAnimationDriver.native.js → hooks/useDisableSSR.native.js} +15 -9
  32. package/dist/cjs/hooks/useDisableSSR.native.js.map +6 -0
  33. package/dist/cjs/hooks/useMedia.js +7 -9
  34. package/dist/cjs/hooks/useMedia.js.map +1 -1
  35. package/dist/cjs/hooks/useMedia.native.js +7 -9
  36. package/dist/cjs/hooks/useMedia.native.js.map +1 -1
  37. package/dist/cjs/hooks/useProps.js +2 -2
  38. package/dist/cjs/hooks/useProps.js.map +1 -1
  39. package/dist/cjs/hooks/useProps.native.js +2 -2
  40. package/dist/cjs/hooks/useProps.native.js.map +1 -1
  41. package/dist/cjs/hooks/useTheme.js +23 -24
  42. package/dist/cjs/hooks/useTheme.js.map +1 -1
  43. package/dist/cjs/hooks/useTheme.native.js +23 -24
  44. package/dist/cjs/hooks/useTheme.native.js.map +1 -1
  45. package/dist/cjs/index.js +6 -6
  46. package/dist/cjs/index.js.map +1 -1
  47. package/dist/cjs/index.native.js +6 -6
  48. package/dist/cjs/index.native.js.map +1 -1
  49. package/dist/cjs/views/{AnimationDriverProvider.js → Configuration.js} +7 -7
  50. package/dist/cjs/views/Configuration.js.map +6 -0
  51. package/dist/cjs/views/{AnimationDriverProvider.native.js → Configuration.native.js} +7 -7
  52. package/dist/cjs/views/Configuration.native.js.map +6 -0
  53. package/dist/cjs/views/Text.js +0 -1
  54. package/dist/cjs/views/Text.js.map +1 -1
  55. package/dist/cjs/views/Text.native.js +0 -1
  56. package/dist/cjs/views/Text.native.js.map +1 -1
  57. package/dist/cjs/views/Theme.js +16 -11
  58. package/dist/cjs/views/Theme.js.map +1 -1
  59. package/dist/cjs/views/Theme.native.js +16 -11
  60. package/dist/cjs/views/Theme.native.js.map +1 -1
  61. package/dist/cjs/views/ThemeDebug.js +8 -8
  62. package/dist/cjs/views/ThemeDebug.js.map +1 -1
  63. package/dist/esm/contexts/ComponentContext.js +1 -0
  64. package/dist/esm/contexts/ComponentContext.js.map +1 -1
  65. package/dist/esm/createComponent.js +40 -39
  66. package/dist/esm/createComponent.js.map +1 -1
  67. package/dist/esm/createTamagui.js +35 -32
  68. package/dist/esm/createTamagui.js.map +1 -1
  69. package/dist/esm/helpers/getSplitStyles.js +14 -8
  70. package/dist/esm/helpers/getSplitStyles.js.map +1 -1
  71. package/dist/esm/helpers/getStylesAtomic.js +14 -10
  72. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  73. package/dist/esm/helpers/getThemeCSSRules.js +1 -1
  74. package/dist/esm/helpers/getThemeCSSRules.js.map +1 -1
  75. package/dist/esm/helpers/propMapper.js +15 -10
  76. package/dist/esm/helpers/propMapper.js.map +1 -1
  77. package/dist/esm/hooks/useConfiguration.js +15 -0
  78. package/dist/esm/hooks/useConfiguration.js.map +6 -0
  79. package/dist/esm/hooks/useDisableSSR.js +15 -0
  80. package/dist/esm/hooks/useDisableSSR.js.map +6 -0
  81. package/dist/esm/hooks/useMedia.js +7 -7
  82. package/dist/esm/hooks/useMedia.js.map +1 -1
  83. package/dist/esm/hooks/useProps.js +1 -1
  84. package/dist/esm/hooks/useProps.js.map +1 -1
  85. package/dist/esm/hooks/useTheme.js +22 -24
  86. package/dist/esm/hooks/useTheme.js.map +1 -1
  87. package/dist/esm/index.js +3 -3
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/views/Configuration.js +7 -0
  90. package/dist/esm/views/Configuration.js.map +6 -0
  91. package/dist/esm/views/Text.js +0 -1
  92. package/dist/esm/views/Text.js.map +1 -1
  93. package/dist/esm/views/Theme.js +15 -11
  94. package/dist/esm/views/Theme.js.map +1 -1
  95. package/dist/esm/views/ThemeDebug.js +2 -2
  96. package/dist/esm/views/ThemeDebug.js.map +1 -1
  97. package/package.json +9 -9
  98. package/src/contexts/ComponentContext.tsx +1 -0
  99. package/src/createComponent.tsx +55 -44
  100. package/src/createTamagui.ts +54 -51
  101. package/src/helpers/getSplitStyles.tsx +26 -7
  102. package/src/helpers/getStylesAtomic.ts +19 -15
  103. package/src/helpers/getThemeCSSRules.ts +2 -1
  104. package/src/helpers/propMapper.ts +16 -18
  105. package/src/hooks/useConfiguration.tsx +14 -0
  106. package/src/hooks/useDisableSSR.tsx +14 -0
  107. package/src/hooks/useMedia.tsx +12 -8
  108. package/src/hooks/useProps.tsx +1 -1
  109. package/src/hooks/useTheme.tsx +27 -26
  110. package/src/index.ts +3 -3
  111. package/src/types.tsx +15 -11
  112. package/src/views/Configuration.tsx +11 -0
  113. package/src/views/Text.tsx +0 -2
  114. package/src/views/Theme.tsx +8 -9
  115. package/src/views/ThemeDebug.tsx +3 -3
  116. package/types/contexts/ComponentContext.d.ts.map +1 -1
  117. package/types/createComponent.d.ts.map +1 -1
  118. package/types/createTamagui.d.ts.map +1 -1
  119. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  120. package/types/helpers/getStylesAtomic.d.ts +1 -0
  121. package/types/helpers/getStylesAtomic.d.ts.map +1 -1
  122. package/types/helpers/getThemeCSSRules.d.ts.map +1 -1
  123. package/types/helpers/propMapper.d.ts.map +1 -1
  124. package/types/hooks/useConfiguration.d.ts +151 -0
  125. package/types/hooks/useConfiguration.d.ts.map +1 -0
  126. package/types/hooks/useDisableSSR.d.ts +4 -0
  127. package/types/hooks/useDisableSSR.d.ts.map +1 -0
  128. package/types/hooks/useMedia.d.ts +2 -3
  129. package/types/hooks/useMedia.d.ts.map +1 -1
  130. package/types/hooks/useTheme.d.ts +3 -3
  131. package/types/hooks/useTheme.d.ts.map +1 -1
  132. package/types/index.d.ts +3 -3
  133. package/types/index.d.ts.map +1 -1
  134. package/types/types.d.ts +12 -9
  135. package/types/types.d.ts.map +1 -1
  136. package/types/views/Configuration.d.ts +9 -0
  137. package/types/views/Configuration.d.ts.map +1 -0
  138. package/types/views/Text.d.ts.map +1 -1
  139. package/types/views/Theme.d.ts.map +1 -1
  140. package/dist/cjs/helpers/getAnimationDriver.js.map +0 -6
  141. package/dist/cjs/helpers/getAnimationDriver.native.js.map +0 -6
  142. package/dist/cjs/hooks/useAnimationDriver.js.map +0 -6
  143. package/dist/cjs/hooks/useAnimationDriver.native.js.map +0 -6
  144. package/dist/cjs/views/AnimationDriverProvider.js.map +0 -6
  145. package/dist/cjs/views/AnimationDriverProvider.native.js.map +0 -6
  146. package/dist/esm/helpers/getAnimationDriver.js +0 -8
  147. package/dist/esm/helpers/getAnimationDriver.js.map +0 -6
  148. package/dist/esm/hooks/useAnimationDriver.js +0 -8
  149. package/dist/esm/hooks/useAnimationDriver.js.map +0 -6
  150. package/dist/esm/views/AnimationDriverProvider.js +0 -7
  151. package/dist/esm/views/AnimationDriverProvider.js.map +0 -6
  152. package/src/helpers/getAnimationDriver.tsx +0 -8
  153. package/src/hooks/useAnimationDriver.tsx +0 -8
  154. package/src/views/AnimationDriverProvider.tsx +0 -16
  155. package/types/helpers/getAnimationDriver.d.ts +0 -9
  156. package/types/helpers/getAnimationDriver.d.ts.map +0 -1
  157. package/types/hooks/useAnimationDriver.d.ts +0 -4
  158. package/types/hooks/useAnimationDriver.d.ts.map +0 -1
  159. package/types/hooks/useStyle.d.ts +0 -8
  160. package/types/views/AnimationDriverProvider.d.ts +0 -9
  161. package/types/views/AnimationDriverProvider.d.ts.map +0 -1
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/Configuration.tsx"],
4
+ "mappings": "AAAA,SAAS,wBAAwB;AASxB;AADF,MAAM,gBAAgB,CAAC,UACrB,oBAAC,iBAAiB,UAAjB,EAA2B,GAAG,OAAO;",
5
+ "names": []
6
+ }
@@ -9,7 +9,6 @@ const ellipseStyle = {
9
9
  acceptsClassName: !0,
10
10
  isText: !0,
11
11
  defaultProps: {
12
- color: "$color",
13
12
  display: "inline",
14
13
  boxSizing: "border-box",
15
14
  wordWrap: "break-word",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/views/Text.tsx"],
4
- "mappings": "AAAA,SAAS,oBAAoB,mBAAmB;AAEhD,SAAS,uBAAuB;AAGhC,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd,GAIa,OAAO,gBAAgD;AAAA,EAClE,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EAER,cAEM;AAAA,IACE,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EAON,uBAAuB,oBAAI,IAAI,CAAC,YAAY,CAAC;AAAA,EAE7C,UAAU;AAAA,IAEN,eAAe;AAAA,MACb,GAAG;AAAA,MAEH,WAAW,CAAC,kBACV,iBAAiB,IACb;AAAA,QACE,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,IACA;AAAA,IACR;AAAA;AAAA,IAIF,eAAe;AAAA,MACb,OAAO,MAAM;AAAA,IACf;AAAA,IAGE,YAAY;AAAA,MACV,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IAGF,SAAS;AAAA,MACP,MAEM;AAAA,IAKR;AAAA,EACF;AAAA,EAEA,YAAY,oBAAI,IAA2C,CAAC,CAAe;AAAA,EAE3E,aAAa;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF,CAAC;",
4
+ "mappings": "AAAA,SAAS,oBAAoB,mBAAmB;AAEhD,SAAS,uBAAuB;AAGhC,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd,GAIa,OAAO,gBAAgD;AAAA,EAClE,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EAER,cAEM;AAAA,IACE,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EAMN,uBAAuB,oBAAI,IAAI,CAAC,YAAY,CAAC;AAAA,EAE7C,UAAU;AAAA,IAEN,eAAe;AAAA,MACb,GAAG;AAAA,MAEH,WAAW,CAAC,kBACV,iBAAiB,IACb;AAAA,QACE,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,IACA;AAAA,IACR;AAAA;AAAA,IAIF,eAAe;AAAA,MACb,OAAO,MAAM;AAAA,IACf;AAAA,IAGE,YAAY;AAAA,MACV,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IAGF,SAAS;AAAA,MACP,MAEM;AAAA,IAKR;AAAA,EACF;AAAA,EAEA,YAAY,oBAAI,IAA2C,CAAC,CAAe;AAAA,EAE3E,aAAa;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF,CAAC;",
5
5
  "names": []
6
6
  }
@@ -40,7 +40,7 @@ function useThemedChildren(themeState, children, props, isRoot = !1) {
40
40
  void 0,
41
41
  /* @__PURE__ */ jsx(Theme, { name: themeManager.state.parentName, children: child.props.children })
42
42
  ) : child));
43
- const elementsWithContext = /* @__PURE__ */ jsx(ThemeManagerContext.Provider, { value: themeManager, children: next });
43
+ const elementsWithContext = themeManager ? /* @__PURE__ */ jsx(ThemeManagerContext.Provider, { value: themeManager, children: next }) : next;
44
44
  return forceClassName === !1 ? elementsWithContext : isWeb ? wrapThemeElements({
45
45
  children: elementsWithContext,
46
46
  themeState,
@@ -56,22 +56,26 @@ function wrapThemeElements({
56
56
  }) {
57
57
  if (isRoot && forceClassName === !1)
58
58
  return children;
59
- const inverse = themeState.state.inverse;
59
+ const inverse = themeState.state?.inverse;
60
60
  if (!themeState.isNewTheme && !inverse && !forceClassName)
61
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 ? {
62
+ const themeColor = themeState.state?.theme && themeState.isNewTheme ? variableToString(themeState.state.theme.color) : "", colorStyle = themeColor ? {
63
63
  color: themeColor
64
64
  } : void 0;
65
- let className = themeState.state.className || "";
65
+ let className = themeState.state?.className || "";
66
66
  isRoot && (className = className.replace("t_sub_theme", ""));
67
67
  let themedChildren = /* @__PURE__ */ jsx("span", { className: `${className} _dsp_contents is_Theme`, style: colorStyle, children });
68
- return (inverse != null || forceClassName) && (themedChildren = /* @__PURE__ */ jsx(
69
- "span",
70
- {
71
- className: `${themeState.state.name.startsWith("light") ? "t_light" : themeState.state.name.startsWith("dark") ? "t_dark" : ""} _dsp_contents ${inverse ? "is_inversed" : ""}`,
72
- children: themedChildren
73
- }
74
- )), themedChildren;
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;
75
79
  }
76
80
  export {
77
81
  Theme,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/views/Theme.tsx"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["children"]
6
6
  }
@@ -36,8 +36,8 @@ function ThemeDebug({
36
36
  " />\xA0",
37
37
  JSON.stringify(
38
38
  {
39
- name: themeState.state.name,
40
- className: themeState.state.className,
39
+ name: themeState?.state?.name,
40
+ className: themeState?.state?.className,
41
41
  inverse: themeProps.inverse,
42
42
  forceClassName: themeProps.forceClassName,
43
43
  parent: themeState.themeManager?.state.parentName,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/views/ThemeDebug.tsx"],
4
- "mappings": "AAAA,SAAS,sBAAsB;AAC/B,SAAS,WAAW,OAAO,gBAAgB;AAC3C,SAAS,oBAAoB;AA6DvB,mBA+BE,KA7BE,YAFJ;AAxDN,IAAI;AAEG,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AAED,MAAI,WAAW,qBAAqB;AAClC,WAAO;AAGT,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,UAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,CAAC,GAC9C,WAAW,eAAe,GAC1B,KAAK,MAAM;AAEjB,WAAI,QAAQ,IAAI,aAAa,iBAAiB,OAAO,WAAa,QAC3D,SACH,OAAO,SAAS,cAAc,KAAK,GACnC,KAAK,MAAM,SAAS,SACpB,KAAK,MAAM,YAAY,UACvB,KAAK,MAAM,WAAW,SACtB,KAAK,MAAM,SAAS,KACpB,KAAK,MAAM,SAAS,QACpB,KAAK,MAAM,OAAO,QAClB,KAAK,MAAM,QAAQ,QACnB,KAAK,MAAM,UAAU,QACrB,KAAK,MAAM,SAAS,kBACpB,KAAK,MAAM,gBAAgB,OAC3B,KAAK,MAAM,aAAa,qBACxB,SAAS,KAAK,YAAY,IAAI,KAIlC,UAAU,MAAM;AACd,iBAAW,cAAc,eAAe,cAAc,CAAC,MAAM,YAAY;AACvE,yBAAiB,CAAC,MAAM,EAAE,CAAC,GAC3B,QAAQ;AAAA,UACN,qBAAqB,WAAW,cAAc,EAAE,gBAAgB,WAAW,cAAc,eAAe,EAAE;AAAA,UAC1G;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,WAAW,YAAY,CAAC,GAE5B,UAAU,MAAM;AAEd,YAAM,KAAK,YAAY,UAAU,GAAI;AACrC,aAAO,MAAM,aAAa,EAAE;AAAA,IAC9B,GAAG,CAAC,CAAC,GAGH,iCACG;AAAA;AAAA,QACC;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,YAAY;AAAA,YACd;AAAA,YACD;AAAA;AAAA,cACY;AAAA,cAAG;AAAA,cACb,KAAK;AAAA,gBACJ;AAAA,kBACE,MAAM,WAAW,MAAM;AAAA,kBACvB,WAAW,WAAW,MAAM;AAAA,kBAC5B,SAAS,WAAW;AAAA,kBACpB,gBAAgB,WAAW;AAAA,kBAC3B,QAAQ,WAAW,cAAc,MAAM;AAAA,kBACvC,IAAI,WAAW,cAAc;AAAA,kBAC7B,UAAU,WAAW,cAAc,eAAe;AAAA,kBAClD,OAAO,WAAW;AAAA,kBAClB;AAAA,kBACA,WAAW,CAAC,GAAI,WAAW,cAAe,iBAAoB,CAAC,CAAE,EAAE;AAAA,oBACjE;AAAA,kBACF;AAAA,kBACA,sBAAsB,WAAW,cAAe;AAAA,gBAClD;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,MAEA,oBAAC,SAAI,OAAO,EAAE,OAAO,MAAM,GAAI,cAAG;AAAA,MAEjC;AAAA,OACH;AAAA,EAEJ;AACA,SAAO;AACT;",
4
+ "mappings": "AAAA,SAAS,sBAAsB;AAC/B,SAAS,WAAW,OAAO,gBAAgB;AAC3C,SAAS,oBAAoB;AA6DvB,mBA+BE,KA7BE,YAFJ;AAxDN,IAAI;AAEG,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AAED,MAAI,WAAW,qBAAqB;AAClC,WAAO;AAGT,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,UAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,CAAC,GAC9C,WAAW,eAAe,GAC1B,KAAK,MAAM;AAEjB,WAAI,QAAQ,IAAI,aAAa,iBAAiB,OAAO,WAAa,QAC3D,SACH,OAAO,SAAS,cAAc,KAAK,GACnC,KAAK,MAAM,SAAS,SACpB,KAAK,MAAM,YAAY,UACvB,KAAK,MAAM,WAAW,SACtB,KAAK,MAAM,SAAS,KACpB,KAAK,MAAM,SAAS,QACpB,KAAK,MAAM,OAAO,QAClB,KAAK,MAAM,QAAQ,QACnB,KAAK,MAAM,UAAU,QACrB,KAAK,MAAM,SAAS,kBACpB,KAAK,MAAM,gBAAgB,OAC3B,KAAK,MAAM,aAAa,qBACxB,SAAS,KAAK,YAAY,IAAI,KAIlC,UAAU,MAAM;AACd,iBAAW,cAAc,eAAe,cAAc,CAAC,MAAM,YAAY;AACvE,yBAAiB,CAAC,MAAM,EAAE,CAAC,GAC3B,QAAQ;AAAA,UACN,qBAAqB,WAAW,cAAc,EAAE,gBAAgB,WAAW,cAAc,eAAe,EAAE;AAAA,UAC1G;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,WAAW,YAAY,CAAC,GAE5B,UAAU,MAAM;AAEd,YAAM,KAAK,YAAY,UAAU,GAAI;AACrC,aAAO,MAAM,aAAa,EAAS;AAAA,IACrC,GAAG,CAAC,CAAC,GAGH,iCACG;AAAA;AAAA,QACC;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,YAAY;AAAA,YACd;AAAA,YACD;AAAA;AAAA,cACY;AAAA,cAAG;AAAA,cACb,KAAK;AAAA,gBACJ;AAAA,kBACE,MAAM,YAAY,OAAO;AAAA,kBACzB,WAAW,YAAY,OAAO;AAAA,kBAC9B,SAAS,WAAW;AAAA,kBACpB,gBAAgB,WAAW;AAAA,kBAC3B,QAAQ,WAAW,cAAc,MAAM;AAAA,kBACvC,IAAI,WAAW,cAAc;AAAA,kBAC7B,UAAU,WAAW,cAAc,eAAe;AAAA,kBAClD,OAAO,WAAW;AAAA,kBAClB;AAAA,kBACA,WAAW,CAAC,GAAI,WAAW,cAAe,iBAAoB,CAAC,CAAE,EAAE;AAAA,oBACjE;AAAA,kBACF;AAAA,kBACA,sBAAsB,WAAW,cAAe;AAAA,gBAClD;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,MAEA,oBAAC,SAAI,OAAO,EAAE,OAAO,MAAM,GAAI,cAAG;AAAA,MAEjC;AAAA,OACH;AAAA,EAEJ;AACA,SAAO;AACT;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/web",
3
- "version": "1.72.3",
3
+ "version": "1.73.1",
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.72.3",
31
- "@tamagui/constants": "1.72.3",
32
- "@tamagui/helpers": "1.72.3",
33
- "@tamagui/normalize-css-color": "1.72.3",
34
- "@tamagui/timer": "1.72.3",
35
- "@tamagui/use-did-finish-ssr": "1.72.3",
36
- "@tamagui/use-force-update": "1.72.3"
30
+ "@tamagui/compose-refs": "1.73.1",
31
+ "@tamagui/constants": "1.73.1",
32
+ "@tamagui/helpers": "1.73.1",
33
+ "@tamagui/normalize-css-color": "1.73.1",
34
+ "@tamagui/timer": "1.73.1",
35
+ "@tamagui/use-did-finish-ssr": "1.73.1",
36
+ "@tamagui/use-force-update": "1.73.1"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "react": "*"
40
40
  },
41
41
  "devDependencies": {
42
- "@tamagui/build": "1.72.3",
42
+ "@tamagui/build": "1.73.1",
43
43
  "@testing-library/react": "^14.0.0",
44
44
  "csstype": "^3.0.10",
45
45
  "react": "^18.2.0",
@@ -4,6 +4,7 @@ import { ComponentContextI, GroupStateListener } from '../types'
4
4
  const listeners = new Set<GroupStateListener>()
5
5
 
6
6
  export const ComponentContext = createStyledContext<ComponentContextI>({
7
+ disableSSR: undefined,
7
8
  inText: false,
8
9
  language: null,
9
10
  animationDriver: null,
@@ -43,6 +43,7 @@ import {
43
43
  DisposeFn,
44
44
  GroupState,
45
45
  LayoutEvent,
46
+ SizeTokens,
46
47
  SpaceDirection,
47
48
  SpaceValue,
48
49
  SpacerProps,
@@ -56,6 +57,7 @@ import {
56
57
  TextProps,
57
58
  UseAnimationHook,
58
59
  UseAnimationProps,
60
+ WebOnlyPressEvents,
59
61
  } from './types'
60
62
  import { Slot } from './views/Slot'
61
63
  import { useThemedChildren } from './views/Theme'
@@ -223,6 +225,7 @@ export function createComponent<
223
225
  let overriddenContextProps: Object | undefined
224
226
  let contextValue: Object | null | undefined
225
227
  const { context } = staticConfig
228
+
226
229
  if (context) {
227
230
  contextValue = useContext(context)
228
231
  const { inverseShorthands } = getConfig()
@@ -570,11 +573,7 @@ export function createComponent<
570
573
 
571
574
  if (process.env.NODE_ENV === 'development' && time) time`theme`
572
575
 
573
- const mediaState = useMedia(
574
- // @ts-ignore, we just pass a stable object so we can get it later with
575
- // should match to the one used in `setMediaShouldUpdate` below
576
- stateRef
577
- )
576
+ const mediaState = useMedia(stateRef, componentContext)
578
577
 
579
578
  if (process.env.NODE_ENV === 'development' && time) time`media`
580
579
 
@@ -603,7 +602,7 @@ export function createComponent<
603
602
  props,
604
603
  staticConfig,
605
604
  theme,
606
- themeState.state.name,
605
+ themeState?.state?.name || '',
607
606
  state,
608
607
  styleProps,
609
608
  null,
@@ -697,7 +696,7 @@ export function createComponent<
697
696
  presence,
698
697
  componentState: state,
699
698
  styleProps,
700
- theme: themeState.state.theme!,
699
+ theme: themeState.state?.theme!,
701
700
  pseudos: pseudos || null,
702
701
  hostRef,
703
702
  staticConfig,
@@ -959,10 +958,7 @@ export function createComponent<
959
958
  // check presence rather than value to prevent reparenting bugs
960
959
  // allows for onPress={x ? function : undefined} without re-ordering dom
961
960
  const shouldAttach = Boolean(
962
- attachPress ||
963
- isHoverable ||
964
- (noClassNames && 'pressStyle' in props) ||
965
- (isWeb && noClassNames && 'hoverStyle' in props)
961
+ attachPress || isHoverable || runtimePressStyle || runtimeHoverStyle
966
962
  )
967
963
 
968
964
  if (process.env.NODE_ENV === 'development' && time) time`events-setup`
@@ -1091,24 +1087,23 @@ export function createComponent<
1091
1087
  elementType = Slot
1092
1088
  // on native this is already merged into viewProps in hooks.useEvents
1093
1089
  if (process.env.TAMAGUI_TARGET === 'web') {
1094
- const passEvents = {
1095
- onPress,
1096
- onLongPress,
1097
- onPressIn,
1098
- onPressOut,
1099
- onHoverIn,
1100
- onHoverOut,
1101
- onMouseUp,
1102
- onMouseDown,
1103
- onMouseEnter,
1104
- onMouseLeave,
1105
- }
1106
- Object.assign(
1107
- viewProps,
1108
- asChild === 'web' || asChild === 'except-style-web'
1109
- ? getWebEvents(passEvents as any)
1110
- : passEvents
1090
+ const webStyleEvents = asChild === 'web' || asChild === 'except-style-web'
1091
+ const passEvents = getWebEvents(
1092
+ {
1093
+ onPress,
1094
+ onLongPress,
1095
+ onPressIn,
1096
+ onPressOut,
1097
+ onHoverIn,
1098
+ onHoverOut,
1099
+ onMouseUp,
1100
+ onMouseDown,
1101
+ onMouseEnter,
1102
+ onMouseLeave,
1103
+ },
1104
+ webStyleEvents
1111
1105
  )
1106
+ Object.assign(viewProps, passEvents)
1112
1107
  }
1113
1108
  }
1114
1109
 
@@ -1200,6 +1195,17 @@ export function createComponent<
1200
1195
  }
1201
1196
  }
1202
1197
 
1198
+ // ensure we override new context with syle resolved values
1199
+ if (staticConfig.context) {
1200
+ const contextProps = staticConfig.context.props
1201
+ for (const key in contextProps) {
1202
+ if (key in style || key in viewProps) {
1203
+ overriddenContextProps ||= {}
1204
+ overriddenContextProps[key] = style[key] ?? viewProps[key]
1205
+ }
1206
+ }
1207
+ }
1208
+
1203
1209
  if (overriddenContextProps) {
1204
1210
  const Provider = staticConfig.context!.Provider!
1205
1211
  content = (
@@ -1331,11 +1337,16 @@ export function createComponent<
1331
1337
  return res
1332
1338
  }
1333
1339
 
1334
- function getWebEvents<E extends TamaguiComponentEvents>(events: E) {
1340
+ type EventKeys = keyof (TamaguiComponentEvents & WebOnlyPressEvents)
1341
+ type EventLikeObject = {
1342
+ [key in EventKeys]?: any
1343
+ }
1344
+
1345
+ function getWebEvents<E extends EventLikeObject>(events: E, webStyle = true) {
1335
1346
  return {
1336
- onMouseEnter: events.onMouseEnter,
1337
- onMouseLeave: events.onMouseLeave,
1338
- onClick: events.onPress,
1347
+ onMouseEnter: events.onHoverIn ?? events.onMouseEnter,
1348
+ onMouseLeave: events.onHoverOut ?? events.onMouseLeave,
1349
+ [webStyle ? 'onClick' : 'onPress']: events.onPress,
1339
1350
  onMouseDown: events.onPressIn,
1340
1351
  onMouseUp: events.onPressOut,
1341
1352
  onTouchStart: events.onPressIn,
@@ -1349,6 +1360,17 @@ export function Unspaced(props: { children?: any }) {
1349
1360
  }
1350
1361
  Unspaced['isUnspaced'] = true
1351
1362
 
1363
+ const getSpacerSize = (size: SizeTokens | number | boolean, { tokens }) => {
1364
+ size = size === true ? '$true' : size
1365
+ const sizePx = tokens.space[size as any] ?? size
1366
+ return {
1367
+ width: sizePx,
1368
+ height: sizePx,
1369
+ minWidth: sizePx,
1370
+ minHeight: sizePx,
1371
+ }
1372
+ }
1373
+
1352
1374
  // dont used styled() here to avoid circular deps
1353
1375
  // keep inline to avoid circular deps
1354
1376
  // @ts-expect-error we override
@@ -1368,16 +1390,7 @@ export const Spacer = createComponent<SpacerProps>({
1368
1390
 
1369
1391
  variants: {
1370
1392
  size: {
1371
- '...size': (size, { tokens }) => {
1372
- size = size === true ? '$true' : size
1373
- const sizePx = tokens.space[size] ?? size
1374
- return {
1375
- width: sizePx,
1376
- height: sizePx,
1377
- minWidth: sizePx,
1378
- minHeight: sizePx,
1379
- }
1380
- },
1393
+ '...': getSpacerSize,
1381
1394
  },
1382
1395
 
1383
1396
  flex: {
@@ -1530,8 +1543,6 @@ function isUnspaced(child: React.ReactNode) {
1530
1543
  return t?.['isVisuallyHidden'] || t?.['isUnspaced']
1531
1544
  }
1532
1545
 
1533
- const DefaultProps = new Map()
1534
-
1535
1546
  const AbsoluteFill: any = createComponent({
1536
1547
  defaultProps: {
1537
1548
  ...stackDefaultStyles,
@@ -2,7 +2,7 @@ import { isWeb } from '@tamagui/constants'
2
2
 
3
3
  import { configListeners, setConfig, setTokens } from './config'
4
4
  import { Variable } from './createVariable'
5
- import { createVariables } from './createVariables'
5
+ import { DeepVariableObject, createVariables } from './createVariables'
6
6
  import { getThemeCSSRules } from './helpers/getThemeCSSRules'
7
7
  import {
8
8
  getAllRules,
@@ -19,6 +19,7 @@ import {
19
19
  CreateTamaguiProps,
20
20
  DedupedTheme,
21
21
  DedupedThemes,
22
+ GenericFont,
22
23
  GetCSS,
23
24
  InferTamaguiConfig,
24
25
  TamaguiInternalConfig,
@@ -38,62 +39,63 @@ export function createTamagui<Conf extends CreateTamaguiProps>(
38
39
  return configIn as any
39
40
  }
40
41
 
41
- if (process.env.NODE_ENV === 'development') {
42
- if (!configIn.tokens) {
43
- throw new Error('Must define tokens')
44
- }
45
- if (!configIn.themes) {
46
- throw new Error('Must define themes')
47
- }
48
- if (!configIn.fonts) {
49
- throw new Error('Must define fonts')
50
- }
51
- }
52
-
53
42
  // ensure variables
54
- const tokens = createVariables(configIn.tokens)
55
-
56
- // faster lookups
57
43
  const tokensParsed: TokensParsed = {} as any
58
- const tokensMerged: TokensMerged = {} as any
59
- for (const cat in tokens) {
60
- tokensParsed[cat] = {}
61
- tokensMerged[cat] = {}
62
- const tokenCat = tokens[cat]
63
- for (const key in tokenCat) {
64
- const val = tokenCat[key]
65
- const prefixedKey = `$${key}`
66
- tokensParsed[cat][prefixedKey] = val as any
67
- tokensMerged[cat][prefixedKey] = val as any
68
- tokensMerged[cat][key] = val as any
44
+ const tokens = createVariables(configIn.tokens || {})
45
+
46
+ if (configIn.tokens) {
47
+ // faster lookups
48
+ const tokensMerged: TokensMerged = {} as any
49
+ for (const cat in tokens) {
50
+ tokensParsed[cat] = {}
51
+ tokensMerged[cat] = {}
52
+ const tokenCat = tokens[cat]
53
+ for (const key in tokenCat) {
54
+ const val = tokenCat[key]
55
+ const prefixedKey = `$${key}`
56
+ tokensParsed[cat][prefixedKey] = val as any
57
+ tokensMerged[cat][prefixedKey] = val as any
58
+ tokensMerged[cat][key] = val as any
59
+ }
69
60
  }
61
+ setTokens(tokensMerged)
70
62
  }
71
- setTokens(tokensMerged)
72
63
 
73
- const noThemes = Object.keys(configIn.themes).length === 0
74
- const foundThemes = scanAllSheets(noThemes, tokensParsed)
75
- listenForSheetChanges()
64
+ let foundThemes: DedupedThemes | undefined
65
+ if (configIn.themes) {
66
+ const noThemes = Object.keys(configIn.themes).length === 0
67
+ foundThemes = scanAllSheets(noThemes, tokensParsed)
68
+ }
76
69
 
77
- const fontTokens = Object.fromEntries(
78
- Object.entries(configIn.fonts!).map(([k, v]) => {
79
- return [k, createVariables(v, 'f', true)]
80
- })
81
- )
70
+ listenForSheetChanges()
82
71
 
83
72
  let fontSizeTokens: Set<string> | null = null
84
-
85
- const fontsParsed = (() => {
86
- const res = {} as typeof fontTokens
87
- for (const familyName in fontTokens) {
88
- const font = fontTokens[familyName]
89
- const fontParsed = parseFont(font)
90
- res[`$${familyName}`] = fontParsed
91
- if (!fontSizeTokens && fontParsed.size) {
92
- fontSizeTokens = new Set(Object.keys(fontParsed.size))
73
+ let fontsParsed:
74
+ | {
75
+ [k: string]: DeepVariableObject<GenericFont<string>>
93
76
  }
94
- }
95
- return res!
96
- })()
77
+ | undefined
78
+
79
+ if (configIn.fonts) {
80
+ const fontTokens = Object.fromEntries(
81
+ Object.entries(configIn.fonts).map(([k, v]) => {
82
+ return [k, createVariables(v, 'f', true)]
83
+ })
84
+ )
85
+
86
+ fontsParsed = (() => {
87
+ const res = {} as typeof fontTokens
88
+ for (const familyName in fontTokens) {
89
+ const font = fontTokens[familyName]
90
+ const fontParsed = parseFont(font)
91
+ res[`$${familyName}`] = fontParsed
92
+ if (!fontSizeTokens && fontParsed.size) {
93
+ fontSizeTokens = new Set(Object.keys(fontParsed.size))
94
+ }
95
+ }
96
+ return res!
97
+ })()
98
+ }
97
99
 
98
100
  const specificTokens = {}
99
101
 
@@ -238,14 +240,14 @@ ${runtimeStyles}`
238
240
  let defaultFontName =
239
241
  configIn.defaultFont ||
240
242
  // uses font named "body" if present for compat
241
- ('body' in configIn.fonts ? 'body' : '')
243
+ (configIn.fonts && ('body' in configIn.fonts ? 'body' : ''))
242
244
 
243
245
  if (!defaultFontName && configIn.fonts) {
244
246
  // defaults to the first font to make life easier
245
247
  defaultFontName = Object.keys(configIn.fonts)[0]
246
248
  }
247
249
 
248
- if (defaultFontName[0] === '$') {
250
+ if (defaultFontName?.[0] === '$') {
249
251
  defaultFontName = defaultFontName.slice(1)
250
252
  }
251
253
 
@@ -253,6 +255,7 @@ ${runtimeStyles}`
253
255
  const defaultFont = `$${defaultFontName}`
254
256
 
255
257
  const config: TamaguiInternalConfig = {
258
+ fonts: {},
256
259
  groupNames: [],
257
260
  settings: {},
258
261
  onlyAllowShorthands: false,
@@ -267,7 +270,7 @@ ${runtimeStyles}`
267
270
  ? Object.fromEntries(Object.entries(shorthands).map(([k, v]) => [v, k]))
268
271
  : {},
269
272
  themes: themeConfig.themes as any,
270
- fontsParsed,
273
+ fontsParsed: fontsParsed || {},
271
274
  themeConfig,
272
275
  tokensParsed: tokensParsed as any,
273
276
  parsed: true,
@@ -55,7 +55,12 @@ import type {
55
55
  import { createMediaStyle } from './createMediaStyle'
56
56
  import { fixStyles } from './expandStyles'
57
57
  import { getGroupPropParts } from './getGroupPropParts'
58
- import { generateAtomicStyles, getStylesAtomic, styleToCSS } from './getStylesAtomic'
58
+ import {
59
+ generateAtomicStyles,
60
+ getStylesAtomic,
61
+ styleToCSS,
62
+ transformsToString,
63
+ } from './getStylesAtomic'
59
64
  import {
60
65
  insertStyleRules,
61
66
  insertedTransforms,
@@ -680,10 +685,11 @@ export const getSplitStyles: StyleSplitter = (
680
685
 
681
686
  // have to run this logic again here because expansions may need to be passed down
682
687
  // see StyledButtonVariantPseudoMerge test
683
- const isHOCShouldPassThrough =
684
- isHOC && (isMediaOrPseudo || parentStaticConfig?.variants?.[keyInit])
688
+ const shouldPassThrough =
689
+ (styleProps.noExpand && isPseudo) ||
690
+ (isHOC && (isMediaOrPseudo || parentStaticConfig?.variants?.[keyInit]))
685
691
 
686
- if (isHOCShouldPassThrough) {
692
+ if (shouldPassThrough) {
687
693
  passDownProp(viewProps, key, val, isMediaOrPseudo)
688
694
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
689
695
  console.groupCollapsed(` - passing down prop ${key}`)
@@ -694,7 +700,6 @@ export const getSplitStyles: StyleSplitter = (
694
700
  continue
695
701
  }
696
702
 
697
- // pseudo
698
703
  if (isPseudo) {
699
704
  if (!val) continue
700
705
 
@@ -811,7 +816,7 @@ export const getSplitStyles: StyleSplitter = (
811
816
  mergeStyle(styleState, pkey, defaultVal)
812
817
  }
813
818
  } else {
814
- const curImportance = usedKeys[importance] || 0
819
+ const curImportance = usedKeys[pkey] || 0
815
820
  const shouldMerge = importance >= curImportance
816
821
 
817
822
  if (shouldMerge) {
@@ -819,7 +824,7 @@ export const getSplitStyles: StyleSplitter = (
819
824
  pseudos[key] ||= {}
820
825
  pseudos[key][pkey] = val
821
826
  mergeStyle(styleState, pkey, val)
822
- usedKeys[pkey] ||= 1
827
+ usedKeys[pkey] = Math.max(usedKeys[pkey], importance)
823
828
  }
824
829
 
825
830
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
@@ -829,6 +834,7 @@ export const getSplitStyles: StyleSplitter = (
829
834
  curImportance,
830
835
  pkey,
831
836
  val,
837
+ transforms: { ...styleState.transforms },
832
838
  })
833
839
  }
834
840
  }
@@ -1058,6 +1064,8 @@ export const getSplitStyles: StyleSplitter = (
1058
1064
  // biome-ignore lint/suspicious/noConsoleLog: <explanation>
1059
1065
  console.log('style', { ...style })
1060
1066
  // biome-ignore lint/suspicious/noConsoleLog: <explanation>
1067
+ console.log('transforms', { ...transforms })
1068
+ // biome-ignore lint/suspicious/noConsoleLog: <explanation>
1061
1069
  console.log('viewProps', { ...viewProps })
1062
1070
  } catch {
1063
1071
  // RN can run into PayloadTooLargeError: request entity too large
@@ -1102,6 +1110,17 @@ export const getSplitStyles: StyleSplitter = (
1102
1110
  .forEach(([key, val]) => {
1103
1111
  mergeTransform(style, key, val, true)
1104
1112
  })
1113
+
1114
+ // Button for example uses disableClassName: true but renders to a 'button' element, so needs this
1115
+ if (process.env.TAMAGUI_TARGET === 'web') {
1116
+ if (
1117
+ !staticConfig.isReactNative &&
1118
+ !styleProps.isAnimated &&
1119
+ Array.isArray(style.transform)
1120
+ ) {
1121
+ style.transform = transformsToString(style.transform) as any
1122
+ }
1123
+ }
1105
1124
  }
1106
1125
 
1107
1126
  // add in defaults if not set:
@@ -41,6 +41,24 @@ let conf: TamaguiInternalConfig
41
41
 
42
42
  // mutates...
43
43
 
44
+ export function transformsToString(transforms: any[]) {
45
+ return transforms
46
+ .map(
47
+ // { scale: 2 } => 'scale(2)'
48
+ // { translateX: 20 } => 'translateX(20px)'
49
+ // { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'
50
+ (transform) => {
51
+ const type = Object.keys(transform)[0]
52
+ const value = transform[type]
53
+ if (type === 'matrix' || type === 'matrix3d') {
54
+ return `${type}(${value.join(',')})`
55
+ }
56
+ return `${type}(${normalizeValueWithProperty(value, type)})`
57
+ }
58
+ )
59
+ .join(' ')
60
+ }
61
+
44
62
  export const generateAtomicStyles = (
45
63
  style: ViewStyleWithPseudos,
46
64
  pseudo?: PseudoDescriptor
@@ -59,21 +77,7 @@ export const generateAtomicStyles = (
59
77
 
60
78
  // transform
61
79
  if (key === 'transform' && Array.isArray(style.transform)) {
62
- val = (val as any[])
63
- .map(
64
- // { scale: 2 } => 'scale(2)'
65
- // { translateX: 20 } => 'translateX(20px)'
66
- // { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'
67
- (transform) => {
68
- const type = Object.keys(transform)[0]
69
- const value = transform[type]
70
- if (type === 'matrix' || type === 'matrix3d') {
71
- return `${type}(${value.join(',')})`
72
- }
73
- return `${type}(${normalizeValueWithProperty(value, type)})`
74
- }
75
- )
76
- .join(' ')
80
+ val = transformsToString(val)
77
81
  }
78
82
 
79
83
  const value = normalizeValueWithProperty(val, key)
@@ -23,7 +23,8 @@ export function getThemeCSSRules(props: {
23
23
  const { config, themeName, theme, names } = props
24
24
 
25
25
  // special case for SSR
26
- const hasDarkLight = 'light' in config.themes || 'dark' in config.themes
26
+ const hasDarkLight =
27
+ config.themes && ('light' in config.themes || 'dark' in config.themes)
27
28
  const CNP = `.${THEME_CLASSNAME_PREFIX}`
28
29
  let vars = ''
29
30