@tamagui/core 1.0.0-beta.187 → 1.0.0-beta.2

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 (273) hide show
  1. package/dist/cjs/Tamagui.js +18 -1
  2. package/dist/cjs/Tamagui.js.map +2 -2
  3. package/dist/cjs/ThemeContext.js +4 -0
  4. package/dist/cjs/ThemeManager.js +30 -14
  5. package/dist/cjs/ThemeManager.js.map +2 -2
  6. package/dist/cjs/conf.js +10 -1
  7. package/dist/cjs/conf.js.map +2 -2
  8. package/dist/cjs/constants/constants.js +6 -0
  9. package/dist/cjs/constants/platform.js +15 -0
  10. package/dist/cjs/constants/platform.js.map +2 -2
  11. package/dist/cjs/constants/rnw.js +4 -0
  12. package/dist/cjs/contexts/ButtonInsideButtonContext.js +4 -0
  13. package/dist/cjs/createComponent.js +156 -130
  14. package/dist/cjs/createComponent.js.map +2 -2
  15. package/dist/cjs/createFont.js +4 -0
  16. package/dist/cjs/createShorthands.js +4 -0
  17. package/dist/cjs/createTamagui.js +56 -27
  18. package/dist/cjs/createTamagui.js.map +2 -2
  19. package/dist/cjs/createTheme.js +4 -0
  20. package/dist/cjs/createTokens.js +7 -6
  21. package/dist/cjs/createTokens.js.map +2 -2
  22. package/dist/cjs/createVariable.js +18 -2
  23. package/dist/cjs/createVariable.js.map +2 -2
  24. package/dist/cjs/defaultComponentState.js +0 -30
  25. package/dist/cjs/defaultComponentState.js.map +3 -3
  26. package/dist/cjs/helpers/RNComponents.js +38 -0
  27. package/dist/cjs/helpers/RNComponents.js.map +7 -0
  28. package/dist/cjs/helpers/addStylesUsingClassname.js +19 -16
  29. package/dist/cjs/helpers/addStylesUsingClassname.js.map +2 -2
  30. package/dist/cjs/helpers/areEqualSets.js +4 -0
  31. package/dist/cjs/helpers/createMediaStyle.js +5 -0
  32. package/dist/cjs/helpers/createPropMapper.js +63 -61
  33. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  34. package/dist/cjs/helpers/createShallowUpdate.js +55 -0
  35. package/dist/cjs/helpers/createShallowUpdate.js.map +7 -0
  36. package/dist/cjs/helpers/createTamaguiProvider.js +5 -5
  37. package/dist/cjs/helpers/createTamaguiProvider.js.map +2 -2
  38. package/dist/cjs/helpers/extendStaticConfig.js +9 -6
  39. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  40. package/dist/cjs/helpers/fixNativeShadow.js +4 -0
  41. package/dist/cjs/helpers/fixNativeShadow.native.js +6 -2
  42. package/dist/cjs/helpers/fixNativeShadow.native.js.map +2 -2
  43. package/dist/cjs/helpers/getExpandedShorthands.js +4 -0
  44. package/dist/cjs/helpers/getSize.js +35 -0
  45. package/dist/cjs/helpers/getSize.js.map +7 -0
  46. package/dist/cjs/helpers/getSplitStyles.js +152 -64
  47. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  48. package/dist/cjs/helpers/getStylesAtomic.js +20 -2
  49. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  50. package/dist/cjs/helpers/getStylesAtomic.native.js +4 -0
  51. package/dist/cjs/helpers/insertStyleRule.js +46 -26
  52. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  53. package/dist/cjs/helpers/isObj.js +4 -0
  54. package/dist/cjs/helpers/isTamaguiElement.js +4 -0
  55. package/dist/cjs/helpers/matchMedia.js +4 -0
  56. package/dist/cjs/helpers/matchMedia.native.js +4 -0
  57. package/dist/cjs/helpers/proxyThemeVariables.js +40 -0
  58. package/dist/cjs/helpers/proxyThemeVariables.js.map +7 -0
  59. package/dist/cjs/helpers/themeable.js +7 -2
  60. package/dist/cjs/helpers/themeable.js.map +2 -2
  61. package/dist/cjs/helpers/validate.js +53 -11
  62. package/dist/cjs/helpers/validate.js.map +2 -2
  63. package/dist/cjs/helpers/withStaticProperties.js +4 -0
  64. package/dist/cjs/helpers/wrapThemeManagerContext.js +4 -0
  65. package/dist/cjs/hooks/useConstant.js +4 -0
  66. package/dist/cjs/hooks/useFeatures.js +101 -12
  67. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  68. package/dist/cjs/hooks/useIsMounted.js +4 -0
  69. package/dist/cjs/hooks/useIsTouchDevice.js +8 -4
  70. package/dist/cjs/hooks/useIsTouchDevice.js.map +2 -2
  71. package/dist/cjs/hooks/useMedia.js +30 -12
  72. package/dist/cjs/hooks/useMedia.js.map +2 -2
  73. package/dist/cjs/hooks/usePressable.js +4 -0
  74. package/dist/cjs/hooks/useTheme.js +36 -23
  75. package/dist/cjs/hooks/useTheme.js.map +2 -2
  76. package/dist/cjs/hooks/useUnmountEffect.js +4 -0
  77. package/dist/cjs/index.js +15 -0
  78. package/dist/cjs/index.js.map +2 -2
  79. package/dist/cjs/static.js +3 -0
  80. package/dist/cjs/static.js.map +2 -2
  81. package/dist/cjs/styled.js +8 -15
  82. package/dist/cjs/styled.js.map +2 -2
  83. package/dist/cjs/types-rnw.js.map +1 -1
  84. package/dist/cjs/types.js.map +1 -1
  85. package/dist/cjs/views/Stack.js +5 -0
  86. package/dist/cjs/views/Stack.js.map +2 -2
  87. package/dist/cjs/views/Text.js +5 -0
  88. package/dist/cjs/views/Text.js.map +2 -2
  89. package/dist/cjs/views/TextAncestorContext.js +6 -0
  90. package/dist/cjs/views/Theme.js +11 -4
  91. package/dist/cjs/views/Theme.js.map +2 -2
  92. package/dist/cjs/views/ThemeInverse.js +5 -0
  93. package/dist/cjs/views/ThemeProvider.js +6 -1
  94. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  95. package/dist/cjs/views/ThemeReset.js +4 -0
  96. package/dist/esm/Tamagui.js +10 -2
  97. package/dist/esm/Tamagui.js.map +2 -2
  98. package/dist/esm/ThemeManager.js +21 -11
  99. package/dist/esm/ThemeManager.js.map +2 -2
  100. package/dist/esm/conf.js +0 -1
  101. package/dist/esm/conf.js.map +2 -2
  102. package/dist/esm/constants/platform.js +2 -0
  103. package/dist/esm/constants/platform.js.map +2 -2
  104. package/dist/esm/createComponent.js +146 -133
  105. package/dist/esm/createComponent.js.map +2 -2
  106. package/dist/esm/createTamagui.js +53 -28
  107. package/dist/esm/createTamagui.js.map +2 -2
  108. package/dist/esm/createTokens.js +2 -6
  109. package/dist/esm/createTokens.js.map +2 -2
  110. package/dist/esm/createVariable.js +8 -2
  111. package/dist/esm/createVariable.js.map +2 -2
  112. package/dist/esm/defaultComponentState.js +0 -11
  113. package/dist/esm/defaultComponentState.js.map +3 -3
  114. package/dist/esm/helpers/RNComponents.js +12 -0
  115. package/dist/esm/helpers/RNComponents.js.map +7 -0
  116. package/dist/esm/helpers/addStylesUsingClassname.js +16 -18
  117. package/dist/esm/helpers/addStylesUsingClassname.js.map +2 -2
  118. package/dist/esm/helpers/createPropMapper.js +59 -61
  119. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  120. package/dist/esm/helpers/createShallowUpdate.js +19 -0
  121. package/dist/esm/helpers/createShallowUpdate.js.map +7 -0
  122. package/dist/esm/helpers/createTamaguiProvider.js +1 -4
  123. package/dist/esm/helpers/createTamaguiProvider.js.map +2 -2
  124. package/dist/esm/helpers/extendStaticConfig.js +9 -6
  125. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  126. package/dist/esm/helpers/fixNativeShadow.native.js +2 -2
  127. package/dist/esm/helpers/fixNativeShadow.native.js.map +2 -2
  128. package/dist/esm/helpers/getSize.js +13 -0
  129. package/dist/esm/helpers/getSize.js.map +7 -0
  130. package/dist/esm/helpers/getSplitStyles.js +152 -67
  131. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  132. package/dist/esm/helpers/getStylesAtomic.js +15 -2
  133. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  134. package/dist/esm/helpers/insertStyleRule.js +36 -26
  135. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  136. package/dist/esm/helpers/proxyThemeVariables.js +18 -0
  137. package/dist/esm/helpers/proxyThemeVariables.js.map +7 -0
  138. package/dist/esm/helpers/themeable.js +3 -2
  139. package/dist/esm/helpers/themeable.js.map +2 -2
  140. package/dist/esm/helpers/validate.js +24 -11
  141. package/dist/esm/helpers/validate.js.map +2 -2
  142. package/dist/esm/hooks/useFeatures.js +96 -17
  143. package/dist/esm/hooks/useFeatures.js.map +2 -2
  144. package/dist/esm/hooks/useIsTouchDevice.js +6 -6
  145. package/dist/esm/hooks/useIsTouchDevice.js.map +2 -2
  146. package/dist/esm/hooks/useMedia.js +19 -12
  147. package/dist/esm/hooks/useMedia.js.map +2 -2
  148. package/dist/esm/hooks/useTheme.js +28 -23
  149. package/dist/esm/hooks/useTheme.js.map +2 -2
  150. package/dist/esm/index.js +4 -0
  151. package/dist/esm/index.js.map +2 -2
  152. package/dist/esm/static.js +3 -0
  153. package/dist/esm/static.js.map +2 -2
  154. package/dist/esm/styled.js +4 -12
  155. package/dist/esm/styled.js.map +2 -2
  156. package/dist/esm/views/Stack.js +1 -0
  157. package/dist/esm/views/Stack.js.map +2 -2
  158. package/dist/esm/views/Text.js +1 -0
  159. package/dist/esm/views/Text.js.map +2 -2
  160. package/dist/esm/views/Theme.js +7 -4
  161. package/dist/esm/views/Theme.js.map +2 -2
  162. package/dist/esm/views/ThemeProvider.js +2 -1
  163. package/dist/esm/views/ThemeProvider.js.map +2 -2
  164. package/dist/jsx/Tamagui.js +10 -2
  165. package/dist/jsx/ThemeManager.js +21 -11
  166. package/dist/jsx/conf.js +0 -1
  167. package/dist/jsx/constants/platform.js +2 -0
  168. package/dist/jsx/createComponent.js +139 -127
  169. package/dist/jsx/createTamagui.js +53 -28
  170. package/dist/jsx/createTokens.js +2 -6
  171. package/dist/jsx/createVariable.js +8 -2
  172. package/dist/jsx/defaultComponentState.js +0 -11
  173. package/dist/jsx/helpers/RNComponents.js +11 -0
  174. package/dist/jsx/helpers/addStylesUsingClassname.js +16 -18
  175. package/dist/jsx/helpers/createPropMapper.js +59 -61
  176. package/dist/jsx/helpers/createShallowUpdate.js +18 -0
  177. package/dist/jsx/helpers/createTamaguiProvider.js +1 -2
  178. package/dist/jsx/helpers/extendStaticConfig.js +9 -6
  179. package/dist/jsx/helpers/fixNativeShadow.native.js +2 -2
  180. package/dist/jsx/helpers/getSize.js +12 -0
  181. package/dist/jsx/helpers/getSplitStyles.js +152 -67
  182. package/dist/jsx/helpers/getStylesAtomic.js +15 -2
  183. package/dist/jsx/helpers/insertStyleRule.js +36 -26
  184. package/dist/jsx/helpers/proxyThemeVariables.js +17 -0
  185. package/dist/jsx/helpers/themeable.js +3 -3
  186. package/dist/jsx/helpers/validate.js +24 -11
  187. package/dist/jsx/hooks/useFeatures.js +96 -17
  188. package/dist/jsx/hooks/useIsTouchDevice.js +6 -6
  189. package/dist/jsx/hooks/useMedia.js +19 -12
  190. package/dist/jsx/hooks/useTheme.js +28 -23
  191. package/dist/jsx/index.js +4 -0
  192. package/dist/jsx/static.js +3 -0
  193. package/dist/jsx/styled.js +4 -12
  194. package/dist/jsx/views/Stack.js +1 -0
  195. package/dist/jsx/views/Text.js +1 -0
  196. package/dist/jsx/views/Theme.js +7 -4
  197. package/dist/jsx/views/ThemeProvider.js +2 -2
  198. package/package.json +6 -6
  199. package/types/Tamagui.d.ts +18 -1
  200. package/types/Tamagui.d.ts.map +1 -1
  201. package/types/ThemeManager.d.ts +3 -3
  202. package/types/ThemeManager.d.ts.map +1 -1
  203. package/types/conf.d.ts +2 -0
  204. package/types/conf.d.ts.map +1 -1
  205. package/types/constants/platform.d.ts +1 -0
  206. package/types/constants/platform.d.ts.map +1 -1
  207. package/types/createComponent.d.ts +5 -7
  208. package/types/createComponent.d.ts.map +1 -1
  209. package/types/createFont.d.ts +1 -1
  210. package/types/createFont.d.ts.map +1 -1
  211. package/types/createTamagui.d.ts +3 -1
  212. package/types/createTamagui.d.ts.map +1 -1
  213. package/types/createTokens.d.ts +0 -26
  214. package/types/createTokens.d.ts.map +1 -1
  215. package/types/createVariable.d.ts +1 -0
  216. package/types/createVariable.d.ts.map +1 -1
  217. package/types/defaultComponentState.d.ts +0 -12
  218. package/types/defaultComponentState.d.ts.map +1 -1
  219. package/types/helpers/RNComponents.d.ts +2 -0
  220. package/types/helpers/RNComponents.d.ts.map +1 -0
  221. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -1
  222. package/types/helpers/createPropMapper.d.ts +2 -2
  223. package/types/helpers/createPropMapper.d.ts.map +1 -1
  224. package/types/helpers/createShallowUpdate.d.ts +4 -0
  225. package/types/helpers/createShallowUpdate.d.ts.map +1 -0
  226. package/types/helpers/createTamaguiProvider.d.ts +1 -1
  227. package/types/helpers/createTamaguiProvider.d.ts.map +1 -1
  228. package/types/helpers/extendStaticConfig.d.ts +2 -2
  229. package/types/helpers/extendStaticConfig.d.ts.map +1 -1
  230. package/types/helpers/getSize.d.ts +3 -0
  231. package/types/helpers/getSize.d.ts.map +1 -0
  232. package/types/helpers/getSplitStyles.d.ts +15 -18
  233. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  234. package/types/helpers/getStylesAtomic.d.ts.map +1 -1
  235. package/types/helpers/insertStyleRule.d.ts +2 -1
  236. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  237. package/types/helpers/proxyThemeVariables.d.ts +2 -0
  238. package/types/helpers/proxyThemeVariables.d.ts.map +1 -0
  239. package/types/helpers/themeable.d.ts +3 -1
  240. package/types/helpers/themeable.d.ts.map +1 -1
  241. package/types/helpers/validate.d.ts.map +1 -1
  242. package/types/hooks/useFeatures.d.ts +7 -5
  243. package/types/hooks/useFeatures.d.ts.map +1 -1
  244. package/types/hooks/useMedia.d.ts +2 -6
  245. package/types/hooks/useMedia.d.ts.map +1 -1
  246. package/types/hooks/useTheme.d.ts +1 -1
  247. package/types/hooks/useTheme.d.ts.map +1 -1
  248. package/types/index.d.ts +2 -0
  249. package/types/index.d.ts.map +1 -1
  250. package/types/static.d.ts +3 -0
  251. package/types/static.d.ts.map +1 -1
  252. package/types/styled.d.ts +13 -8
  253. package/types/styled.d.ts.map +1 -1
  254. package/types/types-rnw.d.ts +0 -5
  255. package/types/types-rnw.d.ts.map +1 -1
  256. package/types/types.d.ts +147 -106
  257. package/types/types.d.ts.map +1 -1
  258. package/types/views/Stack.d.ts +2 -2
  259. package/types/views/Stack.d.ts.map +1 -1
  260. package/types/views/Text.d.ts +2 -2
  261. package/types/views/Text.d.ts.map +1 -1
  262. package/types/views/Theme.d.ts +1 -0
  263. package/types/views/Theme.d.ts.map +1 -1
  264. package/types/views/ThemeProvider.d.ts +1 -0
  265. package/types/views/ThemeProvider.d.ts.map +1 -1
  266. package/LICENSE +0 -21
  267. package/dist/cjs/spacedChildren.js +0 -86
  268. package/dist/cjs/spacedChildren.js.map +0 -7
  269. package/dist/esm/spacedChildren.js +0 -52
  270. package/dist/esm/spacedChildren.js.map +0 -7
  271. package/dist/jsx/spacedChildren.js +0 -44
  272. package/types/spacedChildren.d.ts +0 -9
  273. package/types/spacedChildren.d.ts.map +0 -1
@@ -5,6 +5,7 @@ import {
5
5
  mergeTransform,
6
6
  stylePropsTransform
7
7
  } from "@tamagui/helpers";
8
+ import { getConfig } from "../conf";
8
9
  import { rnw } from "../constants/rnw";
9
10
  import { isVariable } from "../createVariable";
10
11
  function getStylesAtomic(stylesIn, options = {}) {
@@ -33,6 +34,7 @@ __name(getStylesAtomic, "getStylesAtomic");
33
34
  const generateAtomicStyles = /* @__PURE__ */ __name((style) => {
34
35
  return rnw.atomic(rnw.createCompileableStyle(rnw.createReactDOMStyle(style)));
35
36
  }, "generateAtomicStyles");
37
+ let reversedShorthands = null;
36
38
  function getAtomicStyle(style, pseudo, options) {
37
39
  var _a;
38
40
  if (style == null || typeof style !== "object") {
@@ -60,11 +62,22 @@ function getAtomicStyle(style, pseudo, options) {
60
62
  } else {
61
63
  atomicStyles = generateAtomicStyles(style);
62
64
  }
65
+ if (!reversedShorthands) {
66
+ reversedShorthands = {};
67
+ const conf = getConfig();
68
+ if (conf.shorthands) {
69
+ for (const key in conf.shorthands) {
70
+ reversedShorthands[conf.shorthands[key]] = key;
71
+ }
72
+ }
73
+ }
63
74
  return Object.keys(atomicStyles).map((key) => {
64
75
  const val = atomicStyles[key];
65
- const [_, ogProperty, hash] = val.identifier.split("-");
76
+ const [_, a, b] = val.identifier.split("-");
77
+ const hash = b || a;
66
78
  const psuedoPrefix = pseudo ? `0${pseudo.name}-` : "";
67
- const identifier = `_${ogProperty}-${psuedoPrefix}${hash}`;
79
+ const shortProp = reversedShorthands[val.property] || val.property;
80
+ const identifier = `_${shortProp}-${psuedoPrefix}${hash}`;
68
81
  const className = `.${identifier}`;
69
82
  const rules = val.rules.map((rule) => {
70
83
  if (pseudo) {
@@ -6,23 +6,30 @@ const insertedTransforms = {};
6
6
  const getAllSelectors = /* @__PURE__ */ __name(() => allSelectors, "getAllSelectors");
7
7
  const getInsertedRules = /* @__PURE__ */ __name(() => Object.values(insertedSelectors), "getInsertedRules");
8
8
  const getAllTransforms = /* @__PURE__ */ __name(() => insertedTransforms, "getAllTransforms");
9
- function addTransform(identifier, rule) {
10
- const s = rule.indexOf("transform:");
9
+ function addTransform(identifier, css, rule) {
10
+ const s = css.indexOf("transform:");
11
11
  if (s === -1) {
12
- console.error(`not a transform ${identifier} ${rule}`);
12
+ if (process.env.NODE_ENV === "development") {
13
+ console.groupCollapsed(`\u274C Invalid transform, likely used deg/% improperly ${identifier}`);
14
+ console.log("rule:", rule);
15
+ console.trace();
16
+ console.groupEnd();
17
+ } else {
18
+ console.error(`Missing transform`, identifier, css, rule);
19
+ }
13
20
  return;
14
21
  }
15
22
  const startI = s + "transform:".length;
16
- const endI = rule.indexOf(";");
17
- const value = rule.slice(startI, endI);
23
+ const endI = css.indexOf(";");
24
+ const value = css.slice(startI, endI);
18
25
  insertedTransforms[identifier] = value;
19
26
  }
20
27
  __name(addTransform, "addTransform");
28
+ const isClient = typeof document !== "undefined";
21
29
  let hasInsertedSinceUpdate = true;
22
30
  function updateInserted() {
23
- if (typeof document === "undefined") {
31
+ if (!isClient)
24
32
  return;
25
- }
26
33
  if (!hasInsertedSinceUpdate) {
27
34
  console.warn("hasnt inserted since");
28
35
  return;
@@ -33,19 +40,22 @@ function updateInserted() {
33
40
  for (let i = 0; i < sheets.length; i++) {
34
41
  const rules = sheets[i].cssRules;
35
42
  const firstRule = rules[0];
36
- if (!firstRule)
43
+ if (!(firstRule instanceof CSSStyleRule))
37
44
  continue;
38
- const firstSelector = firstRule["selectorText"];
45
+ const firstSelector = firstRule.selectorText;
39
46
  if (!firstSelector)
40
47
  continue;
41
48
  if (firstSelector === ":root" || firstSelector.startsWith("._")) {
42
- for (const rule of rules) {
43
- if (!rule.selectorText)
49
+ for (let i2 = 0; i2 < rules.length; i2++) {
50
+ const rule = rules.item(i2);
51
+ if (!(rule instanceof CSSStyleRule))
44
52
  continue;
45
53
  const identifier = rule.selectorText.slice(1);
46
- allSelectors[identifier] = true;
47
- if (identifier.startsWith("_transform")) {
48
- addTransform(identifier, rule.cssText);
54
+ if (!allSelectors[identifier]) {
55
+ allSelectors[identifier] = process.env.NODE_ENV === "development" ? rule.cssText : true;
56
+ if (identifier.startsWith("_transform")) {
57
+ addTransform(identifier, rule.cssText, rule);
58
+ }
49
59
  }
50
60
  }
51
61
  }
@@ -54,23 +64,22 @@ function updateInserted() {
54
64
  }
55
65
  __name(updateInserted, "updateInserted");
56
66
  updateInserted();
57
- const newRulesStyleTag = typeof document !== "undefined" ? document.head.appendChild(document.createElement("style")) : null;
58
- function insertStyleRule(identifier, rule) {
59
- if (allSelectors[identifier]) {
67
+ const sheet = isClient ? document.head.appendChild(document.createElement("style")).sheet : null;
68
+ function updateInsertedCache(identifier, rule) {
69
+ if (insertedSelectors[identifier])
60
70
  return;
61
- }
62
- hasInsertedSinceUpdate = true;
63
71
  insertedSelectors[identifier] = rule;
64
- allSelectors[identifier] = process.env.NODE_ENV === "development" ? rule : true;
65
72
  if (identifier.startsWith("_transform")) {
66
73
  addTransform(identifier, rule);
67
74
  }
68
- if (!newRulesStyleTag) {
75
+ }
76
+ __name(updateInsertedCache, "updateInsertedCache");
77
+ function insertStyleRule(identifier, rule) {
78
+ if (allSelectors[identifier])
69
79
  return;
70
- }
71
- const sheet = newRulesStyleTag.sheet;
72
- sheet.insertRule(rule, sheet.cssRules.length);
73
- return identifier;
80
+ hasInsertedSinceUpdate = true;
81
+ updateInsertedCache(identifier, rule);
82
+ sheet == null ? void 0 : sheet.insertRule(rule, sheet.cssRules.length);
74
83
  }
75
84
  __name(insertStyleRule, "insertStyleRule");
76
85
  export {
@@ -79,5 +88,6 @@ export {
79
88
  getInsertedRules,
80
89
  insertStyleRule,
81
90
  insertedTransforms,
82
- updateInserted
91
+ updateInserted,
92
+ updateInsertedCache
83
93
  };
@@ -0,0 +1,17 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ function proxyThemeVariables(obj) {
4
+ return new Proxy(obj, {
5
+ has(target, key) {
6
+ return Reflect.has(target, removeStarting$(key));
7
+ },
8
+ get(target, key) {
9
+ return Reflect.get(target, removeStarting$(key));
10
+ }
11
+ });
12
+ }
13
+ __name(proxyThemeVariables, "proxyThemeVariables");
14
+ const removeStarting$ = /* @__PURE__ */ __name((str) => typeof str === "string" && str[0] === "$" ? str.slice(1) : str, "removeStarting$");
15
+ export {
16
+ proxyThemeVariables
17
+ };
@@ -3,14 +3,14 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
3
3
  import React, { forwardRef } from "react";
4
4
  import { Theme } from "../views/Theme";
5
5
  import { ThemeInverse } from "../views/ThemeInverse";
6
- function themeable(component) {
6
+ function themeable(component, opts) {
7
7
  const withThemeComponent = forwardRef(/* @__PURE__ */ __name(function WithTheme({ themeInverse, theme, ...rest }, ref) {
8
8
  const element = React.createElement(component, { ...rest, ref });
9
9
  if (themeInverse) {
10
10
  return <ThemeInverse>{element}</ThemeInverse>;
11
11
  }
12
- if (theme) {
13
- return <Theme name={theme || null}>{element}</Theme>;
12
+ if (theme || opts) {
13
+ return <Theme componentName={opts == null ? void 0 : opts.componentName} name={theme || null}>{element}</Theme>;
14
14
  }
15
15
  return element;
16
16
  }, "WithTheme"));
@@ -3,7 +3,8 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
3
3
  const { default: ow } = require("@tamagui/ow/dev-only");
4
4
  let Config;
5
5
  let Tokens;
6
- let Font;
6
+ let FontRequired;
7
+ let FontOptional;
7
8
  const validateConfig = /* @__PURE__ */ __name((conf) => {
8
9
  if (!conf) {
9
10
  console.warn("no conf?");
@@ -24,12 +25,26 @@ const validateTokens = /* @__PURE__ */ __name((tokens) => {
24
25
  }, "validateTokens");
25
26
  const validateFont = /* @__PURE__ */ __name((font) => {
26
27
  try {
27
- ow(font, Font);
28
+ const { style, transform, color, ...required } = font;
29
+ ow(required, FontRequired);
30
+ ow({ style, transform, color }, FontOptional);
28
31
  } catch (err) {
29
32
  console.warn("Given font:\n", JSON.stringify(font, null, 2), err);
30
33
  }
31
34
  }, "validateFont");
32
35
  if (process.env.NODE_ENV === "development") {
36
+ const fontReq = {
37
+ family: ow.string,
38
+ size: ow.object.nonEmpty.valuesOfType(ow.number),
39
+ lineHeight: ow.object.nonEmpty.valuesOfType(ow.number),
40
+ weight: ow.object.nonEmpty.valuesOfType(ow.string),
41
+ letterSpacing: ow.object.nonEmpty.valuesOfType(ow.number)
42
+ };
43
+ const fontOpt = {
44
+ style: ow.optional.object.valuesOfType(ow.string),
45
+ transform: ow.optional.object.valuesOfType(ow.string),
46
+ color: ow.optional.object.valuesOfType(ow.string)
47
+ };
33
48
  Config = ow.object.exactShape({
34
49
  defaultTheme: ow.optional.string,
35
50
  disableRootThemeClass: ow.optional.boolean,
@@ -37,17 +52,15 @@ if (process.env.NODE_ENV === "development") {
37
52
  themes: ow.object.valuesOfType(ow.object),
38
53
  tokens: ow.object.valuesOfType(ow.object),
39
54
  media: ow.object.valuesOfType(ow.object),
40
- animations: ow.object.valuesOfType(ow.object)
41
- });
42
- Font = ow.object.exactShape({
43
- family: ow.string,
44
- size: ow.object.nonEmpty.valuesOfType(ow.number),
45
- lineHeight: ow.object.nonEmpty.valuesOfType(ow.number),
46
- weight: ow.object.nonEmpty.valuesOfType(ow.string),
47
- letterSpacing: ow.object.nonEmpty.valuesOfType(ow.number)
55
+ animations: ow.object.valuesOfType(ow.object),
56
+ fonts: ow.object.valuesOfType(ow.object.partialShape({
57
+ ...fontReq,
58
+ ...fontOpt
59
+ }))
48
60
  });
61
+ FontRequired = ow.object.exactShape(fontReq);
62
+ FontOptional = ow.object.partialShape(fontOpt);
49
63
  Tokens = ow.object.exactShape({
50
- font: ow.object.valuesOfType(Font),
51
64
  size: ow.object.nonEmpty.valuesOfType(ow.number),
52
65
  space: ow.object.nonEmpty.valuesOfType(ow.number),
53
66
  zIndex: ow.object.nonEmpty.valuesOfType(ow.number),
@@ -1,6 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { isWeb, useIsomorphicLayoutEffect } from "../constants/platform";
3
+ import { useIsomorphicLayoutEffect } from "../constants/platform";
4
+ import { getSubStyle } from "../helpers/getSplitStyles";
4
5
  import { addMediaQueryListener, mediaState, removeMediaQueryListener } from "./useMedia";
5
6
  const createDefinition = /* @__PURE__ */ __name(({
6
7
  Component,
@@ -26,47 +27,125 @@ const useFeatures = /* @__PURE__ */ __name((props, utils) => {
26
27
  function loadFeatures() {
27
28
  return {
28
29
  animation: loadAnimationFeature(),
29
- ...!isWeb && {
30
- mediaQuery: loadMediaQueryFeature()
31
- }
30
+ mediaQuery: loadMediaQueryFeature()
32
31
  };
33
32
  }
34
33
  __name(loadFeatures, "loadFeatures");
35
34
  function loadAnimationFeature() {
36
35
  return createDefinition({
37
36
  Component: ({ _utils, ...props }) => {
38
- const { state, useAnimations, pseudos, style, setStateShallow } = _utils;
37
+ const {
38
+ state,
39
+ useAnimations,
40
+ pseudos,
41
+ style: inStyle,
42
+ setStateShallow,
43
+ staticConfig,
44
+ theme,
45
+ onDidAnimate
46
+ } = _utils;
39
47
  if (!useAnimations) {
40
48
  console.error("no useAnimations hook provided");
41
49
  return null;
42
50
  }
43
- const animatedStyleIn = {
44
- ...style,
45
- ...state.hover && pseudos.hoverStyle,
46
- ...state.focus && pseudos.focusStyle,
47
- ...state.press && pseudos.pressStyle
48
- };
49
- const res = useAnimations(props, {
50
- isMounted: state.mounted,
51
- style: animatedStyleIn,
52
- exitStyle: pseudos == null ? void 0 : pseudos.exitStyle
51
+ const propsWithAnimation = props;
52
+ const res = useAnimations(propsWithAnimation, {
53
+ state,
54
+ pseudos,
55
+ onDidAnimate,
56
+ staticConfig,
57
+ getStyle({ isEntering, exitVariant, enterVariant } = {}) {
58
+ var _a, _b, _c, _d;
59
+ const style = inStyle || {};
60
+ const enterStyle = isEntering === true || state.mounted === false ? enterVariant && ((_a = staticConfig.variants) == null ? void 0 : _a[enterVariant]["true"]) ? getSubStyle((_b = staticConfig.variants) == null ? void 0 : _b[enterVariant]["true"], staticConfig, theme, props, state) || pseudos.enterStyle : pseudos.enterStyle : null;
61
+ const exitStyle = isEntering === false ? exitVariant && ((_c = staticConfig.variants) == null ? void 0 : _c[exitVariant]["true"]) ? getSubStyle((_d = staticConfig.variants) == null ? void 0 : _d[exitVariant]["true"], staticConfig, theme, props, state) || pseudos.exitStyle : pseudos.exitStyle : null;
62
+ ensureBaseHasDefaults(style, enterStyle, pseudos.hoverStyle, pseudos.focusStyle, pseudos.pressStyle, pseudos.pressStyle);
63
+ enterStyle && merge(style, enterStyle);
64
+ state.hover && pseudos.hoverStyle && merge(style, pseudos.hoverStyle);
65
+ state.focus && pseudos.focusStyle && merge(style, pseudos.focusStyle);
66
+ state.press && pseudos.pressStyle && merge(style, pseudos.pressStyle);
67
+ exitStyle && merge(style, exitStyle);
68
+ return style;
69
+ }
53
70
  });
54
71
  useIsomorphicLayoutEffect(() => {
55
72
  setStateShallow({
56
73
  animation: res
57
74
  });
58
- }, [JSON.stringify(style)]);
75
+ }, [res]);
59
76
  return null;
60
77
  },
61
78
  propNames: ["animation"]
62
79
  });
63
80
  }
64
81
  __name(loadAnimationFeature, "loadAnimationFeature");
82
+ const defaults = {
83
+ left: 0,
84
+ right: 0,
85
+ top: 0,
86
+ bottom: 0,
87
+ opacity: 1,
88
+ translateX: 0,
89
+ translateY: 0,
90
+ skew: 0,
91
+ skewX: 0,
92
+ skewY: 0,
93
+ scale: 1,
94
+ rotate: "0deg",
95
+ rotateY: "0deg",
96
+ rotateX: "0deg"
97
+ };
98
+ function ensureBaseHasDefaults(base, ...pseudos) {
99
+ for (const pseudo of pseudos) {
100
+ if (!pseudo)
101
+ continue;
102
+ for (const key in pseudo) {
103
+ const val = pseudo[key];
104
+ if (key === "transform") {
105
+ for (const t of val) {
106
+ const tkey = Object.keys(t)[0];
107
+ const defaultVal = defaults[tkey];
108
+ const tDefaultVal = { [tkey]: defaultVal };
109
+ if (!base.transform) {
110
+ base.transform = [tDefaultVal];
111
+ } else {
112
+ if (!base.transform.find((x) => x[tkey])) {
113
+ base.transform.push(tDefaultVal);
114
+ }
115
+ }
116
+ }
117
+ } else {
118
+ if (!(key in base)) {
119
+ base[key] = defaults[key];
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ __name(ensureBaseHasDefaults, "ensureBaseHasDefaults");
126
+ function merge(base, next) {
127
+ if (!next.transform || !base.transform) {
128
+ Object.assign(base, next);
129
+ return;
130
+ }
131
+ const { transform, ...rest } = next;
132
+ Object.assign(base, rest);
133
+ for (const t of transform) {
134
+ const key = Object.keys(t)[0];
135
+ const existing = base.transform.find((x) => key in x);
136
+ if (existing) {
137
+ existing[key] = t[key];
138
+ } else {
139
+ base.transform.push(t);
140
+ }
141
+ }
142
+ }
143
+ __name(merge, "merge");
65
144
  function loadMediaQueryFeature() {
66
145
  const mediaPropNames = Object.keys(mediaState);
67
146
  return createDefinition({
68
147
  Component: (props) => {
69
- const keys = mediaPropNames.flatMap((x) => x in props ? x.slice(1) : []);
148
+ const keys = mediaPropNames.filter((x) => x in props);
70
149
  useIsomorphicLayoutEffect(() => {
71
150
  for (const key of keys) {
72
151
  addMediaQueryListener(key, props._utils.forceUpdate);
@@ -1,14 +1,14 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { useEffect, useState } from "react";
4
- import { isTouchDevice } from "../constants/platform";
3
+ import { useState } from "react";
4
+ import { isTouchDevice, useIsomorphicLayoutEffect } from "../constants/platform";
5
5
  const useIsTouchDevice = /* @__PURE__ */ __name(() => {
6
6
  const [touchOnly, setTouchOnly] = useState(false);
7
- if (isTouchDevice) {
8
- useEffect(() => {
7
+ useIsomorphicLayoutEffect(() => {
8
+ if (isTouchDevice) {
9
9
  setTouchOnly(true);
10
- }, []);
11
- }
10
+ }
11
+ }, []);
12
12
  return touchOnly;
13
13
  }, "useIsTouchDevice");
14
14
  export {
@@ -34,29 +34,33 @@ const configureMedia = /* @__PURE__ */ __name(({
34
34
  }
35
35
  for (const key in queries) {
36
36
  const str = mediaObjectToString(queries[key]);
37
+ const propKey = `$${key}`;
37
38
  try {
38
- const getMatch = /* @__PURE__ */ __name(() => matchMedia(str), "getMatch");
39
- const match = getMatch();
40
- if (!match || typeof match.addListener !== "function") {
41
- throw new Error("\u26A0\uFE0F No match (seeing this in RN sometimes)");
42
- }
43
- mediaState[key] = !!match.matches;
44
- match.addListener(() => {
39
+ let update = function() {
45
40
  const next = !!getMatch().matches;
46
- if (next === mediaState[key])
41
+ if (next === mediaState[propKey])
47
42
  return;
48
- mediaState[key] = next;
49
- const listeners = mediaQueryListeners[key];
43
+ mediaState[propKey] = next;
44
+ const listeners = mediaQueryListeners[propKey];
50
45
  if (listeners == null ? void 0 : listeners.size) {
51
46
  for (const cb of [...listeners]) {
52
47
  cb();
53
48
  }
54
49
  }
55
- });
50
+ };
51
+ __name(update, "update");
52
+ const getMatch = /* @__PURE__ */ __name(() => matchMedia(str), "getMatch");
53
+ const match = getMatch();
54
+ if (!match || typeof match.addListener !== "function") {
55
+ throw new Error("\u26A0\uFE0F No match (seeing this in RN sometimes)");
56
+ }
57
+ mediaState[propKey] = !!match.matches;
58
+ match.addListener(update);
59
+ update();
56
60
  } catch (err) {
57
61
  console.error("Error running media query", str, err.message, err.stack);
58
62
  const isDefaultActive = (_a = defaultActive == null ? void 0 : defaultActive.includes(key)) != null ? _a : true;
59
- mediaState[key] = isDefaultActive;
63
+ mediaState[propKey] = isDefaultActive;
60
64
  }
61
65
  }
62
66
  }, "configureMedia");
@@ -103,6 +107,9 @@ const useMedia = /* @__PURE__ */ __name(() => {
103
107
  const st = state.current;
104
108
  return new Proxy(mediaState, {
105
109
  get(target, key) {
110
+ if (key[0] !== "$") {
111
+ key = `$${key}`;
112
+ }
106
113
  if (!(key in mediaState)) {
107
114
  return Reflect.get(target, key);
108
115
  }
@@ -49,14 +49,22 @@ const useTheme = /* @__PURE__ */ __name((themeName, componentName, props, forceU
49
49
  return Reflect.has(theme, key);
50
50
  },
51
51
  get(_, key) {
52
- if (!name || key === "__proto__") {
52
+ if (!name || key === "__proto__" || typeof key === "symbol") {
53
+ if (key === GetThemeManager) {
54
+ if (process.env.NODE_ENV === "development") {
55
+ if (props["debug"]) {
56
+ console.log("did change", { themeName, didChangeTheme, name, componentName }, themeManager == null ? void 0 : themeManager.parentName);
57
+ }
58
+ }
59
+ if (!didChangeTheme) {
60
+ return null;
61
+ }
62
+ return themeManager;
63
+ }
53
64
  return Reflect.get(_, key);
54
65
  }
55
- if (key === GetThemeManager) {
56
- if (!didChangeTheme) {
57
- return null;
58
- }
59
- return themeManager;
66
+ if (typeof key !== "string" || key === "$typeof") {
67
+ return Reflect.get(_, key);
60
68
  }
61
69
  if (process.env.NODE_ENV === "development") {
62
70
  if (key === "__state") {
@@ -73,26 +81,23 @@ const useTheme = /* @__PURE__ */ __name((themeName, componentName, props, forceU
73
81
  console.error("No themeManager");
74
82
  return;
75
83
  }
76
- if (process.env.NODE_ENV === "development") {
77
- if ((props == null ? void 0 : props["debug"]) === "verbose") {
78
- console.log(" \xBB accessing theme val", key, { ...state.current });
79
- }
84
+ if (key[0] === "$") {
85
+ key = key.slice(1);
80
86
  }
81
- if (typeof key === "string") {
82
- if (key[0] === "$") {
83
- key = key.slice(1);
84
- }
85
- const val = themeManager.getValue(key);
86
- if (val) {
87
- if (state.current.isRendering) {
88
- state.current.keys.add(key);
87
+ const val = themeManager.getValue(key);
88
+ if (val) {
89
+ if (state.current.isRendering) {
90
+ state.current.keys.add(key);
91
+ if (process.env.NODE_ENV === "development") {
92
+ if ((props == null ? void 0 : props["debug"]) === "verbose") {
93
+ console.log(" \xBB tracking theme key", key);
94
+ }
89
95
  }
90
- return val;
91
- }
92
- if (process.env.NODE_ENV === "development") {
93
- console.warn(`No theme value "${String(key)}" in ${name}`);
94
- return null;
95
96
  }
97
+ return val;
98
+ }
99
+ if (process.env.NODE_ENV === "development") {
100
+ console.log(`No theme value "${String(key)}" in ${name}`);
96
101
  }
97
102
  return Reflect.get(_, key);
98
103
  }
package/dist/jsx/index.js CHANGED
@@ -8,11 +8,13 @@ import { createTokens } from "./createTokens";
8
8
  export * from "./createVariable";
9
9
  export * from "./styled";
10
10
  export * from "./types";
11
+ import { RNWTextProps, RNWViewProps } from "./types-rnw";
11
12
  import { getHasConfigured, getConfig, getThemes, getTokens, onConfiguredOnce } from "./conf";
12
13
  export * from "./constants/constants";
13
14
  export * from "./constants/platform";
14
15
  export * from "./constants/rnw";
15
16
  export * from "./helpers/getExpandedShorthands";
17
+ export * from "./helpers/getSize";
16
18
  export * from "./helpers/getSplitStyles";
17
19
  export * from "./helpers/getStylesAtomic";
18
20
  export * from "./helpers/isObj";
@@ -38,6 +40,8 @@ export * from "./views/ThemeProvider";
38
40
  export * from "./views/TextAncestorContext";
39
41
  export * from "@tamagui/helpers";
40
42
  export {
43
+ RNWTextProps,
44
+ RNWViewProps,
41
45
  createTokens,
42
46
  getConfig,
43
47
  getHasConfigured,
@@ -3,11 +3,14 @@ export * from "./createComponent";
3
3
  export * from "./createFont";
4
4
  export * from "./createTokens";
5
5
  export * from "./createTamagui";
6
+ export * from "./createVariable";
6
7
  export * from "./constants/constants";
7
8
  export * from "./hooks/useMedia";
8
9
  export * from "./hooks/useTheme";
9
10
  export * from "./helpers/isObj";
10
11
  export * from "./helpers/getStylesAtomic";
12
+ export * from "./helpers/proxyThemeVariables";
11
13
  export * from "./helpers/getSplitStyles";
12
14
  export * from "@tamagui/helpers";
13
15
  export * from "./constants/rnw";
16
+ export * from "./types";
@@ -1,16 +1,8 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import * as ReactNative from "react-native";
4
3
  import { Image, Text, TextInput } from "react-native";
5
4
  import { createComponent } from "./createComponent";
6
- import { extendStaticConfig } from "./helpers/extendStaticConfig";
7
- const RNComponents = /* @__PURE__ */ new WeakMap();
8
- for (const key of ["Image", "TextInput", "Text", "View"]) {
9
- const val = ReactNative[key];
10
- if (val && typeof val === "object") {
11
- RNComponents.set(val, true);
12
- }
13
- }
5
+ import { RNComponents } from "./helpers/RNComponents";
14
6
  function styled(Component, options, staticExtractionOptions) {
15
7
  const staticConfigProps = (() => {
16
8
  if (options) {
@@ -18,7 +10,7 @@ function styled(Component, options, staticExtractionOptions) {
18
10
  if (defaultVariants) {
19
11
  Object.assign(defaultProps, defaultVariants);
20
12
  }
21
- const isReactNativeWeb = RNComponents.has(Component);
13
+ const isReactNativeWeb = "staticConfig" in Component ? Component.staticConfig.isReactNativeWeb : RNComponents.has(Component);
22
14
  const isTamagui = !isReactNativeWeb && "staticConfig" in Component;
23
15
  const Comp = Component;
24
16
  const isImage = !!(defaultProps.isImage || (!isTamagui ? Comp === Image : false));
@@ -32,6 +24,7 @@ function styled(Component, options, staticExtractionOptions) {
32
24
  isTamagui,
33
25
  variants,
34
26
  defaultProps,
27
+ defaultVariants,
35
28
  componentName: name,
36
29
  isReactNativeWeb,
37
30
  isInput,
@@ -42,8 +35,7 @@ function styled(Component, options, staticExtractionOptions) {
42
35
  }
43
36
  return {};
44
37
  })();
45
- const config = extendStaticConfig(Component, staticConfigProps);
46
- const component = createComponent(config);
38
+ const component = createComponent(staticConfigProps, Component);
47
39
  return component;
48
40
  }
49
41
  __name(styled, "styled");
@@ -1,6 +1,7 @@
1
1
  import { stackDefaultStyles } from "../constants/constants";
2
2
  import { createComponent } from "../createComponent";
3
3
  const Stack = createComponent({
4
+ componentName: "Stack",
4
5
  defaultProps: {
5
6
  ...stackDefaultStyles,
6
7
  flexDirection: "column"
@@ -8,6 +8,7 @@ const ellipseStyle = {
8
8
  whiteSpace: "nowrap"
9
9
  };
10
10
  const Text = createComponent({
11
+ componentName: "Text",
11
12
  isText: true,
12
13
  defaultProps: {
13
14
  display: isWeb ? "inline" : "flex",