@tamagui/core 1.0.1-beta.141 → 1.0.1-beta.142

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 (200) hide show
  1. package/dist/cjs/Tamagui.js +2 -2
  2. package/dist/cjs/Tamagui.js.map +2 -2
  3. package/dist/cjs/addTheme.js +28 -22
  4. package/dist/cjs/addTheme.js.map +2 -2
  5. package/dist/cjs/config.js +75 -0
  6. package/dist/cjs/config.js.map +7 -0
  7. package/dist/cjs/constants/platform.js +7 -1
  8. package/dist/cjs/constants/platform.js.map +2 -2
  9. package/dist/cjs/constants/platform.native.js +62 -0
  10. package/dist/cjs/constants/platform.native.js.map +7 -0
  11. package/dist/cjs/createComponent.js +71 -58
  12. package/dist/cjs/createComponent.js.map +2 -2
  13. package/dist/cjs/createComponent.server.js +431 -0
  14. package/dist/cjs/createComponent.server.js.map +7 -0
  15. package/dist/cjs/createTamagui.js +10 -8
  16. package/dist/cjs/createTamagui.js.map +2 -2
  17. package/dist/cjs/createVariable.js +6 -12
  18. package/dist/cjs/createVariable.js.map +2 -2
  19. package/dist/cjs/createVariables.js +5 -2
  20. package/dist/cjs/createVariables.js.map +2 -2
  21. package/dist/cjs/helpers/RNComponents.js +11 -11
  22. package/dist/cjs/helpers/RNComponents.js.map +2 -2
  23. package/dist/cjs/helpers/ThemeManager.js +7 -9
  24. package/dist/cjs/helpers/ThemeManager.js.map +2 -2
  25. package/dist/cjs/helpers/assignNativePropsToWeb.js +0 -1
  26. package/dist/cjs/helpers/assignNativePropsToWeb.js.map +2 -2
  27. package/dist/cjs/helpers/createPropMapper.js +3 -3
  28. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  29. package/dist/cjs/helpers/expandStyles.js +4 -4
  30. package/dist/cjs/helpers/expandStyles.js.map +2 -2
  31. package/dist/cjs/helpers/getAnimationDriver.js +32 -0
  32. package/dist/cjs/helpers/getAnimationDriver.js.map +7 -0
  33. package/dist/cjs/helpers/getExpandedShorthands.js +3 -3
  34. package/dist/cjs/helpers/getExpandedShorthands.js.map +2 -2
  35. package/dist/cjs/helpers/getFont.js +1 -1
  36. package/dist/cjs/helpers/getFont.js.map +2 -2
  37. package/dist/cjs/helpers/getSize.js +2 -2
  38. package/dist/cjs/helpers/getSize.js.map +2 -2
  39. package/dist/cjs/helpers/getSplitStyles.js +12 -13
  40. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  41. package/dist/cjs/helpers/getStylesAtomic.js +6 -4
  42. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  43. package/dist/cjs/helpers/getVariantExtras.js +2 -2
  44. package/dist/cjs/helpers/getVariantExtras.js.map +2 -2
  45. package/dist/cjs/helpers/normalizeColor.js +2 -2
  46. package/dist/cjs/helpers/normalizeColor.js.map +2 -2
  47. package/dist/cjs/helpers/normalizeValueWithProperty.js.map +2 -2
  48. package/dist/cjs/helpers/useAnimationDriver.js +2 -0
  49. package/dist/cjs/helpers/useAnimationDriver.js.map +7 -0
  50. package/dist/cjs/hooks/getThemeUnwrapped.js +2 -0
  51. package/dist/cjs/hooks/getThemeUnwrapped.js.map +2 -2
  52. package/dist/cjs/hooks/useAnimationDriver.js +2 -0
  53. package/dist/cjs/hooks/useAnimationDriver.js.map +7 -0
  54. package/dist/cjs/hooks/useFeatures.js +2 -2
  55. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  56. package/dist/cjs/hooks/useServerContext.js +21 -0
  57. package/dist/cjs/hooks/useServerContext.js.map +7 -0
  58. package/dist/cjs/hooks/useServerHooks.js +36 -0
  59. package/dist/cjs/hooks/useServerHooks.js.map +7 -0
  60. package/dist/cjs/hooks/useTheme.js +71 -41
  61. package/dist/cjs/hooks/useTheme.js.map +2 -2
  62. package/dist/cjs/index.js +7 -6
  63. package/dist/cjs/index.js.map +2 -2
  64. package/dist/cjs/injectStyles.js +40 -0
  65. package/dist/cjs/injectStyles.js.map +7 -0
  66. package/dist/cjs/insertFont.js +2 -2
  67. package/dist/cjs/insertFont.js.map +2 -2
  68. package/dist/cjs/styled.js +11 -1
  69. package/dist/cjs/styled.js.map +2 -2
  70. package/dist/cjs/types.js.map +1 -1
  71. package/dist/cjs/views/TamaguiProvider.js +6 -1
  72. package/dist/cjs/views/TamaguiProvider.js.map +2 -2
  73. package/dist/cjs/views/ThemeProvider.js +9 -5
  74. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  75. package/dist/esm/Tamagui.js +1 -1
  76. package/dist/esm/Tamagui.js.map +1 -1
  77. package/dist/esm/addTheme.js +27 -21
  78. package/dist/esm/addTheme.js.map +2 -2
  79. package/dist/esm/config.js +43 -0
  80. package/dist/esm/config.js.map +7 -0
  81. package/dist/esm/constants/platform.js +5 -1
  82. package/dist/esm/constants/platform.js.map +2 -2
  83. package/dist/esm/constants/platform.native.js +28 -0
  84. package/dist/esm/constants/platform.native.js.map +7 -0
  85. package/dist/esm/createComponent.js +71 -60
  86. package/dist/esm/createComponent.js.map +2 -2
  87. package/dist/esm/createComponent.server.js +408 -0
  88. package/dist/esm/createComponent.server.js.map +7 -0
  89. package/dist/esm/createTamagui.js +7 -5
  90. package/dist/esm/createTamagui.js.map +2 -2
  91. package/dist/esm/createVariable.js +6 -12
  92. package/dist/esm/createVariable.js.map +2 -2
  93. package/dist/esm/createVariables.js +5 -2
  94. package/dist/esm/createVariables.js.map +2 -2
  95. package/dist/esm/helpers/RNComponents.js +11 -8
  96. package/dist/esm/helpers/RNComponents.js.map +2 -2
  97. package/dist/esm/helpers/ThemeManager.js +6 -8
  98. package/dist/esm/helpers/ThemeManager.js.map +2 -2
  99. package/dist/esm/helpers/assignNativePropsToWeb.js +0 -1
  100. package/dist/esm/helpers/assignNativePropsToWeb.js.map +2 -2
  101. package/dist/esm/helpers/createPropMapper.js +2 -2
  102. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  103. package/dist/esm/helpers/expandStyles.js +3 -3
  104. package/dist/esm/helpers/expandStyles.js.map +2 -2
  105. package/dist/esm/helpers/getAnimationDriver.js +8 -0
  106. package/dist/esm/helpers/getAnimationDriver.js.map +7 -0
  107. package/dist/esm/helpers/getExpandedShorthands.js +2 -2
  108. package/dist/esm/helpers/getExpandedShorthands.js.map +2 -2
  109. package/dist/esm/helpers/getFont.js +1 -1
  110. package/dist/esm/helpers/getFont.js.map +2 -2
  111. package/dist/esm/helpers/getSize.js +1 -1
  112. package/dist/esm/helpers/getSize.js.map +1 -1
  113. package/dist/esm/helpers/getSplitStyles.js +12 -13
  114. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  115. package/dist/esm/helpers/getStylesAtomic.js +5 -3
  116. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  117. package/dist/esm/helpers/getVariantExtras.js +1 -1
  118. package/dist/esm/helpers/getVariantExtras.js.map +1 -1
  119. package/dist/esm/helpers/normalizeColor.js +1 -1
  120. package/dist/esm/helpers/normalizeColor.js.map +1 -1
  121. package/dist/esm/helpers/normalizeValueWithProperty.js.map +2 -2
  122. package/dist/esm/helpers/useAnimationDriver.js +1 -0
  123. package/dist/esm/helpers/useAnimationDriver.js.map +7 -0
  124. package/dist/esm/hooks/getThemeUnwrapped.js +2 -0
  125. package/dist/esm/hooks/getThemeUnwrapped.js.map +2 -2
  126. package/dist/esm/hooks/useAnimationDriver.js +1 -0
  127. package/dist/esm/hooks/useAnimationDriver.js.map +7 -0
  128. package/dist/esm/hooks/useFeatures.js +1 -1
  129. package/dist/esm/hooks/useFeatures.js.map +2 -2
  130. package/dist/esm/hooks/useServerContext.js +4 -0
  131. package/dist/esm/hooks/useServerContext.js.map +7 -0
  132. package/dist/esm/hooks/useServerHooks.js +11 -0
  133. package/dist/esm/hooks/useServerHooks.js.map +7 -0
  134. package/dist/esm/hooks/useTheme.js +72 -42
  135. package/dist/esm/hooks/useTheme.js.map +2 -2
  136. package/dist/esm/index.js +2 -1
  137. package/dist/esm/index.js.map +2 -2
  138. package/dist/esm/injectStyles.js +16 -0
  139. package/dist/esm/injectStyles.js.map +7 -0
  140. package/dist/esm/insertFont.js +1 -1
  141. package/dist/esm/insertFont.js.map +1 -1
  142. package/dist/esm/styled.js +11 -1
  143. package/dist/esm/styled.js.map +2 -2
  144. package/dist/esm/views/TamaguiProvider.js +7 -2
  145. package/dist/esm/views/TamaguiProvider.js.map +2 -2
  146. package/dist/esm/views/ThemeProvider.js +9 -5
  147. package/dist/esm/views/ThemeProvider.js.map +2 -2
  148. package/package.json +35 -14
  149. package/src/Tamagui.ts +1 -1
  150. package/src/addTheme.ts +33 -21
  151. package/src/{conf.ts → config.ts} +4 -0
  152. package/src/constants/platform.native.ts +14 -0
  153. package/src/constants/platform.ts +12 -1
  154. package/src/createComponent.tsx +164 -148
  155. package/src/createTamagui.ts +11 -5
  156. package/src/createVariable.ts +8 -25
  157. package/src/createVariables.ts +5 -2
  158. package/src/helpers/RNComponents.tsx +13 -13
  159. package/src/helpers/ThemeManager.tsx +15 -12
  160. package/src/helpers/assignNativePropsToWeb.tsx +0 -1
  161. package/src/helpers/createPropMapper.ts +2 -2
  162. package/src/helpers/expandStyles.ts +4 -3
  163. package/src/helpers/getAnimationDriver.tsx +5 -0
  164. package/src/helpers/getExpandedShorthands.ts +2 -2
  165. package/src/helpers/getFont.tsx +1 -1
  166. package/src/helpers/getSize.ts +1 -1
  167. package/src/helpers/getSplitStyles.tsx +12 -13
  168. package/src/helpers/getStylesAtomic.ts +6 -3
  169. package/src/helpers/getVariantExtras.tsx +2 -2
  170. package/src/helpers/normalizeColor.ts +1 -1
  171. package/src/helpers/normalizeValueWithProperty.ts +2 -0
  172. package/src/hooks/getThemeUnwrapped.tsx +1 -0
  173. package/src/hooks/useFeatures.tsx +2 -1
  174. package/src/hooks/useServerHooks.tsx +13 -0
  175. package/src/hooks/useTheme.tsx +94 -48
  176. package/src/index.ts +2 -1
  177. package/src/injectStyles.ts +20 -0
  178. package/src/insertFont.ts +1 -1
  179. package/src/styled.tsx +15 -1
  180. package/src/types.tsx +33 -0
  181. package/src/views/TamaguiProvider.tsx +11 -4
  182. package/src/views/ThemeProvider.tsx +9 -6
  183. package/types/config.d.ts +27 -0
  184. package/types/constants/platform.d.ts +1 -0
  185. package/types/constants/platform.native.d.ts +13 -0
  186. package/types/createComponent.server.d.ts +36 -0
  187. package/types/createVariable.d.ts +1 -2
  188. package/types/helpers/RNComponents.d.ts +1 -1
  189. package/types/helpers/ThemeManager.d.ts +2 -8
  190. package/types/helpers/getAnimationDriver.d.ts +6 -0
  191. package/types/helpers/useAnimationDriver.d.ts +1 -0
  192. package/types/hooks/useAnimationDriver.d.ts +1 -0
  193. package/types/hooks/useServerContext.d.ts +2 -0
  194. package/types/hooks/useServerHooks.d.ts +4 -0
  195. package/types/hooks/useTheme.d.ts +5 -21
  196. package/types/index.d.ts +2 -1
  197. package/types/injectStyles.d.ts +7 -0
  198. package/types/types.d.ts +23 -0
  199. package/types/views/TamaguiProvider.d.ts +1 -1
  200. package/types/views/ThemeProvider.d.ts +0 -1
@@ -0,0 +1,408 @@
1
+ import {
2
+ stylePropsView,
3
+ validPseudoKeys,
4
+ validStyles
5
+ } from "@tamagui/helpers";
6
+ import { useForceUpdate } from "@tamagui/use-force-update";
7
+ import React, {
8
+ Children,
9
+ Fragment,
10
+ forwardRef,
11
+ memo,
12
+ useContext,
13
+ useState
14
+ } from "react";
15
+ import { StyleSheet, View } from "react-native";
16
+ import { getConfig, onConfiguredOnce } from "./conf";
17
+ import { stackDefaultStyles } from "./constants/constants";
18
+ import { isWeb } from "./constants/platform";
19
+ import { FontLanguageContext } from "./contexts/FontLanguageContext";
20
+ import { TextAncestorContext } from "./contexts/TextAncestorContext";
21
+ import { extendStaticConfig, parseStaticConfig } from "./helpers/extendStaticConfig";
22
+ import { insertSplitStyles, useSplitStyles } from "./helpers/getSplitStyles";
23
+ import { mergeProps } from "./helpers/mergeProps";
24
+ import { proxyThemeVariables } from "./helpers/proxyThemeVariables";
25
+ import { useTheme } from "./hooks/useTheme";
26
+ React["keep"];
27
+ const isRSC = import.meta.env.SSR;
28
+ const defaultComponentState = Object.freeze({
29
+ hover: false,
30
+ press: false,
31
+ pressIn: false,
32
+ focus: false,
33
+ mounted: false,
34
+ animation: null
35
+ });
36
+ const mouseUps = /* @__PURE__ */ new Set();
37
+ if (typeof document !== "undefined") {
38
+ const cancelTouches = () => {
39
+ mouseUps.forEach((x) => x());
40
+ mouseUps.clear();
41
+ };
42
+ document.addEventListener("mouseup", cancelTouches);
43
+ document.addEventListener("touchend", cancelTouches);
44
+ document.addEventListener("touchcancel", cancelTouches);
45
+ }
46
+ function mergeShorthands({ defaultProps }, { shorthands }) {
47
+ for (const key in defaultProps) {
48
+ defaultProps[shorthands[key] || key] = defaultProps[key];
49
+ }
50
+ }
51
+ let initialTheme;
52
+ let config;
53
+ function createComponent(configIn, ParentComponent) {
54
+ const staticConfig = (() => {
55
+ const next = extendStaticConfig(configIn, ParentComponent);
56
+ if ("parsed" in next) {
57
+ return next;
58
+ } else {
59
+ return parseStaticConfig(next);
60
+ }
61
+ })();
62
+ const defaultComponentClassName = `is_${staticConfig.componentName}`;
63
+ let tamaguiConfig;
64
+ let AnimatedText;
65
+ let AnimatedView;
66
+ let avoidClasses = true;
67
+ let defaultNativeStyle;
68
+ let defaultNativeStyleSheet;
69
+ let tamaguiDefaultProps;
70
+ let initialSplitStyles;
71
+ const component = forwardRef((propsIn, forwardedRef) => {
72
+ let props;
73
+ if (tamaguiDefaultProps && !propsIn.asChild) {
74
+ props = mergeProps(tamaguiDefaultProps, propsIn)[0];
75
+ } else {
76
+ props = propsIn;
77
+ }
78
+ const { Component, isText, isZStack } = staticConfig;
79
+ const componentName = props.componentName || staticConfig.componentName;
80
+ const componentClassName = props.asChild ? "" : props.componentName ? `is_${props.componentName}` : defaultComponentClassName;
81
+ if (process.env.NODE_ENV === "development") {
82
+ if (props["debug"]) {
83
+ const name = `${componentName || (Component == null ? void 0 : Component.displayName) || (Component == null ? void 0 : Component.name) || "[Unnamed Component]"}`;
84
+ const banner = `${name} ${propsIn["data-is"] || ""}`;
85
+ console.group(`%c \u{1F41B} ${banner}`, "background: yellow;");
86
+ console.log("props", propsIn);
87
+ if (props["debug"] === "break") {
88
+ debugger;
89
+ }
90
+ }
91
+ }
92
+ const forceUpdate = useForceUpdate();
93
+ config = config || getConfig();
94
+ const theme = useTheme(props.theme, componentName, props, forceUpdate);
95
+ const states = isRSC ? [defaultComponentState, null] : useState(defaultComponentState);
96
+ const state = propsIn.forceStyle ? { ...states[0], [propsIn.forceStyle]: true } : states[0];
97
+ const shouldAvoidClasses = !!(props.animation && avoidClasses);
98
+ const shouldForcePseudo = !!propsIn.forceStyle;
99
+ const hasTextAncestor = !!(isWeb && isText ? useContext(TextAncestorContext) : false);
100
+ const splitStyleState = !shouldAvoidClasses && !shouldForcePseudo ? {
101
+ ...state,
102
+ hasTextAncestor,
103
+ dynamicStylesInline: true
104
+ } : {
105
+ ...state,
106
+ noClassNames: true,
107
+ dynamicStylesInline: true,
108
+ hasTextAncestor,
109
+ resolveVariablesAs: "value"
110
+ };
111
+ const languageContext = isRSC ? null : useContext(FontLanguageContext);
112
+ const splitStyles = useSplitStyles(props, staticConfig, theme, splitStyleState, props.asChild ? null : initialSplitStyles == null ? void 0 : initialSplitStyles.classNames, languageContext || void 0, props["debug"]);
113
+ console.log("hi2");
114
+ return propsIn.children;
115
+ });
116
+ if (staticConfig.componentName) {
117
+ component.displayName = staticConfig.componentName;
118
+ }
119
+ onConfiguredOnce((conf) => {
120
+ if (isRSC)
121
+ return;
122
+ if (process.env.IS_STATIC === "is_static")
123
+ return;
124
+ tamaguiConfig = conf;
125
+ mergeShorthands(staticConfig, tamaguiConfig);
126
+ if (tamaguiConfig.animations) {
127
+ avoidClasses = !!tamaguiConfig.animations.avoidClasses;
128
+ AnimatedText = tamaguiConfig.animations.Text;
129
+ AnimatedView = tamaguiConfig.animations.View;
130
+ }
131
+ initialTheme = initialTheme || proxyThemeVariables(conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]]);
132
+ config = getConfig();
133
+ let defaultPropsIn = staticConfig.defaultProps || {};
134
+ const parentNames = [...staticConfig.parentNames || [], staticConfig.componentName];
135
+ if (config.defaultProps && parentNames && staticConfig.componentName) {
136
+ defaultPropsIn = mergeConfigDefaultProps(staticConfig.componentName, defaultPropsIn, config.defaultProps, parentNames, conf);
137
+ }
138
+ const debug = true ? defaultPropsIn["debug"] : false;
139
+ if (process.env.NODE_ENV === "development" && debug === "break") {
140
+ debugger;
141
+ }
142
+ const [parentProps, parentClassNames] = mergeProps(defaultPropsIn, {}, true);
143
+ initialSplitStyles = insertSplitStyles(parentProps, staticConfig, initialTheme, {
144
+ mounted: true,
145
+ hover: false,
146
+ press: false,
147
+ pressIn: false,
148
+ focus: false,
149
+ resolveVariablesAs: "both",
150
+ keepVariantsAsProps: true
151
+ }, void 0, void 0, debug);
152
+ const [defaults, defaultsClassnames] = mergeProps(component.defaultProps, initialSplitStyles.viewProps, true);
153
+ initialSplitStyles.classNames = {
154
+ ...parentClassNames,
155
+ ...defaultsClassnames,
156
+ ...initialSplitStyles.classNames
157
+ };
158
+ defaultNativeStyle = {};
159
+ const validStyles2 = staticConfig.validStyles || stylePropsView;
160
+ if (!isWeb) {
161
+ for (const key in staticConfig.defaultProps) {
162
+ const val = staticConfig.defaultProps[key];
163
+ if (validPseudoKeys[key])
164
+ continue;
165
+ if (typeof val === "string" && val[0] === "$" || !validStyles2[key]) {
166
+ defaults[key] = val;
167
+ } else {
168
+ defaultNativeStyle[key] = val;
169
+ }
170
+ }
171
+ }
172
+ defaultNativeStyleSheet = StyleSheet.create({
173
+ base: defaultNativeStyle
174
+ });
175
+ if (Object.keys(defaults).length) {
176
+ tamaguiDefaultProps = defaults;
177
+ }
178
+ if (process.env.NODE_ENV === "development" && debug) {
179
+ if (process.env.IS_STATIC !== "is_static") {
180
+ console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, {
181
+ staticConfig,
182
+ initialSplitStyles,
183
+ tamaguiDefaultProps,
184
+ defaultNativeStyle,
185
+ defaults,
186
+ defaultPropsIn
187
+ });
188
+ }
189
+ }
190
+ });
191
+ let res = component;
192
+ if (configIn.memo) {
193
+ res = memo(res);
194
+ }
195
+ res.staticConfig = {
196
+ validStyles: staticConfig.validStyles || stylePropsView,
197
+ ...staticConfig
198
+ };
199
+ res.extractable = (Component, conf) => {
200
+ Component.staticConfig = extendStaticConfig({
201
+ Component,
202
+ ...conf,
203
+ neverFlatten: true,
204
+ isExtractable: true,
205
+ defaultProps: {
206
+ ...Component.defaultProps,
207
+ ...conf == null ? void 0 : conf.defaultProps
208
+ }
209
+ }, res);
210
+ return Component;
211
+ };
212
+ return res;
213
+ }
214
+ const Unspaced = (props) => {
215
+ return props.children;
216
+ };
217
+ Unspaced["isUnspaced"] = true;
218
+ const Spacer = createComponent({
219
+ memo: true,
220
+ componentName: "Spacer",
221
+ validStyles,
222
+ defaultProps: {
223
+ ...stackDefaultStyles,
224
+ size: true
225
+ },
226
+ variants: {
227
+ size: {
228
+ "...size": (size, { tokens }) => {
229
+ size = size == true ? "$true" : size;
230
+ const sizePx = tokens.space[size] ?? size;
231
+ return {
232
+ width: sizePx,
233
+ height: sizePx,
234
+ minWidth: sizePx,
235
+ minHeight: sizePx
236
+ };
237
+ }
238
+ },
239
+ flex: {
240
+ true: {
241
+ flexGrow: 1
242
+ }
243
+ },
244
+ direction: {
245
+ horizontal: {
246
+ height: 0,
247
+ minHeight: 0
248
+ },
249
+ vertical: {
250
+ width: 0,
251
+ minWidth: 0
252
+ },
253
+ both: {}
254
+ }
255
+ },
256
+ defaultVariants: {
257
+ direction: "both"
258
+ }
259
+ });
260
+ function spacedChildren({
261
+ isZStack,
262
+ children,
263
+ space,
264
+ direction,
265
+ spaceFlex,
266
+ separator
267
+ }) {
268
+ const hasSpace = !!(space || spaceFlex);
269
+ const hasSeparator = !(separator === void 0 || separator === null);
270
+ if (!hasSpace && !hasSeparator && !isZStack) {
271
+ return children;
272
+ }
273
+ const childrenList = Children.toArray(children);
274
+ if (childrenList.length <= 1 && !isZStack) {
275
+ return childrenList;
276
+ }
277
+ const final = [];
278
+ for (const [index, child] of childrenList.entries()) {
279
+ const isEmpty = child === null || child === void 0 || Array.isArray(child) && child.length === 0;
280
+ if (isEmpty || !child || child["key"] && !isZStack) {
281
+ final.push(child);
282
+ } else {
283
+ final.push(/* @__PURE__ */ React.createElement(Fragment, {
284
+ key: index
285
+ }, isZStack ? /* @__PURE__ */ React.createElement(AbsoluteFill, null, child) : child));
286
+ }
287
+ if (isUnspaced(child) && index === 0) {
288
+ continue;
289
+ }
290
+ if (isZStack) {
291
+ continue;
292
+ }
293
+ const next = childrenList[index + 1];
294
+ if (next && !isUnspaced(next)) {
295
+ if (separator) {
296
+ if (hasSpace) {
297
+ final.push(createSpacer({
298
+ key: `_${index}_before_sep_spacer`,
299
+ direction,
300
+ space,
301
+ spaceFlex
302
+ }));
303
+ }
304
+ final.push(React.isValidElement(separator) ? React.cloneElement(separator, { key: `sep_${index}` }) : separator);
305
+ if (hasSpace) {
306
+ final.push(createSpacer({
307
+ key: `_${index}_after_sep_spacer`,
308
+ direction,
309
+ space,
310
+ spaceFlex
311
+ }));
312
+ }
313
+ } else {
314
+ final.push(createSpacer({
315
+ key: `_${index}_spacer`,
316
+ direction,
317
+ space,
318
+ spaceFlex
319
+ }));
320
+ }
321
+ }
322
+ }
323
+ return final;
324
+ }
325
+ function createSpacer({ key, direction, space, spaceFlex }) {
326
+ return /* @__PURE__ */ React.createElement(Spacer, {
327
+ key,
328
+ size: space,
329
+ direction,
330
+ ...spaceFlex && {
331
+ flex: spaceFlex
332
+ }
333
+ });
334
+ }
335
+ function isUnspaced(child) {
336
+ var _a, _b;
337
+ return ((_a = child == null ? void 0 : child["type"]) == null ? void 0 : _a["isVisuallyHidden"]) || ((_b = child == null ? void 0 : child["type"]) == null ? void 0 : _b["isUnspaced"]);
338
+ }
339
+ function AbsoluteFill(props) {
340
+ return /* @__PURE__ */ React.createElement(View, {
341
+ pointerEvents: "box-none",
342
+ style: StyleSheet.absoluteFill
343
+ }, props.children);
344
+ }
345
+ function processIDRefList(idRefList) {
346
+ return Array.isArray(idRefList) ? idRefList.join(" ") : idRefList;
347
+ }
348
+ const accessibilityRoleToWebRole = {
349
+ adjustable: "slider",
350
+ button: "button",
351
+ header: "heading",
352
+ image: "img",
353
+ imagebutton: null,
354
+ keyboardkey: null,
355
+ label: null,
356
+ link: "link",
357
+ none: "presentation",
358
+ search: "search",
359
+ summary: "region",
360
+ text: null
361
+ };
362
+ function addPseudoToStyles(styles, initialPseudos, pseudos, name, force = false) {
363
+ const pseudoStyle = pseudos[name];
364
+ const shouldNestObject = isWeb && name !== "enterStyle" && name !== "exitStyle";
365
+ const defaultPseudoStyle = initialPseudos[name];
366
+ const style = defaultPseudoStyle ? { ...defaultPseudoStyle, ...pseudoStyle } : pseudoStyle;
367
+ if (style) {
368
+ styles.push(shouldNestObject && !force ? { [name]: style } : style);
369
+ }
370
+ }
371
+ const DefaultProps = /* @__PURE__ */ new Map();
372
+ function mergeConfigDefaultProps(name, props, configDefaults, parentNames, conf) {
373
+ const len = parentNames.length;
374
+ let prev;
375
+ for (let i = 0; i < len; i++) {
376
+ const n = parentNames[i];
377
+ if (!n)
378
+ continue;
379
+ if (DefaultProps.has(n)) {
380
+ prev = DefaultProps.get(n);
381
+ continue;
382
+ }
383
+ const props2 = configDefaults[n];
384
+ if (!props2) {
385
+ if (prev) {
386
+ DefaultProps.set(n, prev);
387
+ }
388
+ continue;
389
+ }
390
+ prev = mergeProps(prev || {}, props2, false, conf.inverseShorthands)[0];
391
+ DefaultProps.set(n, prev);
392
+ }
393
+ const ourDefaultsMerged = DefaultProps.get(name);
394
+ if (ourDefaultsMerged) {
395
+ return mergeProps(props, ourDefaultsMerged, false, conf.inverseShorthands)[0];
396
+ }
397
+ return props;
398
+ }
399
+ export {
400
+ Spacer,
401
+ Unspaced,
402
+ accessibilityRoleToWebRole,
403
+ createComponent,
404
+ mouseUps,
405
+ processIDRefList,
406
+ spacedChildren
407
+ };
408
+ //# sourceMappingURL=createComponent.server.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createComponent.server.tsx"],
4
+ "sourcesContent": ["/* eslint-disable react-hooks/rules-of-hooks */\nimport {\n composeEventHandlers,\n stylePropsView,\n validPseudoKeys,\n validStyles,\n} from '@tamagui/helpers'\nimport {\n useElementLayout,\n useMergeRefs,\n usePlatformMethods,\n useResponderEvents,\n} from '@tamagui/rnw'\nimport { useForceUpdate } from '@tamagui/use-force-update'\nimport React, {\n Children,\n Fragment,\n createElement,\n forwardRef,\n memo,\n useCallback,\n useContext,\n useRef,\n useState,\n} from 'react'\nimport { StyleSheet, Text, View, ViewStyle } from 'react-native'\n\nimport { getConfig, onConfiguredOnce } from './conf'\nimport { stackDefaultStyles } from './constants/constants'\nimport { isClient, isWeb, useIsomorphicLayoutEffect } from './constants/platform'\nimport { FontLanguageContext } from './contexts/FontLanguageContext'\nimport { TextAncestorContext } from './contexts/TextAncestorContext'\nimport { assignNativePropsToWeb } from './helpers/assignNativePropsToWeb'\nimport { getReturnVariablesAs } from './helpers/createPropMapper'\nimport { createShallowUpdate } from './helpers/createShallowUpdate'\nimport { extendStaticConfig, parseStaticConfig } from './helpers/extendStaticConfig'\nimport { SplitStyleResult, insertSplitStyles, useSplitStyles } from './helpers/getSplitStyles'\nimport { getAllSelectors } from './helpers/insertStyleRule'\nimport { mergeProps } from './helpers/mergeProps'\nimport { proxyThemeVariables } from './helpers/proxyThemeVariables'\nimport { useFeatures } from './hooks/useFeatures'\nimport { mediaState } from './hooks/useMedia'\nimport { usePressable } from './hooks/usePressable'\nimport { getThemeManager, useTheme } from './hooks/useTheme'\nimport {\n SpaceDirection,\n SpaceTokens,\n SpacerProps,\n StaticConfig,\n StaticConfigParsed,\n StylableComponent,\n TamaguiComponent,\n TamaguiComponentState,\n TamaguiConfig,\n TamaguiElement,\n TamaguiInternalConfig,\n UseAnimationHook,\n} from './types'\nimport { usePressability } from './vendor/Pressability'\nimport { Slot, mergeEvent } from './views/Slot'\nimport { wrapThemeManagerContext } from './views/Theme'\n\nReact['keep']\n\n// @ts-ignore\nconst isRSC = import.meta.env.SSR\n\nconst defaultComponentState: TamaguiComponentState = Object.freeze({\n hover: false,\n press: false,\n pressIn: false,\n focus: false,\n // only used by enterStyle\n mounted: false,\n animation: null,\n})\n\nexport const mouseUps = new Set<Function>()\nif (typeof document !== 'undefined') {\n const cancelTouches = () => {\n mouseUps.forEach((x) => x())\n mouseUps.clear()\n }\n document.addEventListener('mouseup', cancelTouches)\n document.addEventListener('touchend', cancelTouches)\n document.addEventListener('touchcancel', cancelTouches)\n}\n\n// mutates\nfunction mergeShorthands({ defaultProps }: StaticConfigParsed, { shorthands }: TamaguiConfig) {\n // they are defined in correct order already { ...parent, ...child }\n for (const key in defaultProps) {\n defaultProps[shorthands[key] || key] = defaultProps[key]\n }\n}\n\nlet initialTheme: any\nlet config: TamaguiInternalConfig\n\nexport function createComponent<\n ComponentPropTypes extends Object = {},\n Ref = TamaguiElement,\n BaseProps = never\n>(configIn: Partial<StaticConfig> | StaticConfigParsed, ParentComponent?: StylableComponent) {\n const staticConfig = (() => {\n const next = extendStaticConfig(configIn, ParentComponent)\n if ('parsed' in next) {\n return next\n } else {\n return parseStaticConfig(next)\n }\n })()\n\n const defaultComponentClassName = `is_${staticConfig.componentName}`\n let tamaguiConfig: TamaguiInternalConfig\n let AnimatedText: any\n let AnimatedView: any\n let avoidClasses = true\n let defaultNativeStyle: any\n let defaultNativeStyleSheet: StyleSheet.NamedStyles<{ base: {} }>\n let tamaguiDefaultProps: any\n let initialSplitStyles: SplitStyleResult\n\n // see onConfiguredOnce below which attaches a name then to this component\n const component = forwardRef<Ref, ComponentPropTypes>((propsIn: any, forwardedRef) => {\n // React inserts default props after your props for some reason...\n // order important so we do loops, you can't just spread because JS does weird things\n let props: any\n if (tamaguiDefaultProps && !propsIn.asChild) {\n props = mergeProps(tamaguiDefaultProps, propsIn)[0]\n } else {\n props = propsIn\n }\n\n const { Component, isText, isZStack } = staticConfig\n const componentName = props.componentName || staticConfig.componentName\n const componentClassName = props.asChild\n ? ''\n : props.componentName\n ? `is_${props.componentName}`\n : defaultComponentClassName\n\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n const name = `${\n componentName || Component?.displayName || Component?.name || '[Unnamed Component]'\n }`\n const banner = `${name} ${propsIn['data-is'] || ''}`\n // eslint-disable-next-line no-console\n console.group(`%c \uD83D\uDC1B ${banner}`, 'background: yellow;')\n // eslint-disable-next-line no-console\n console.log('props', propsIn)\n // eslint-disable-next-line no-console\n // console.log('ref', hostRef, '(click to view)')\n if (props['debug'] === 'break') {\n // eslint-disable-next-line no-debugger\n debugger\n }\n }\n }\n\n const forceUpdate = useForceUpdate()\n config = config || getConfig()\n const theme = useTheme(props.theme, componentName, props, forceUpdate)\n\n const states = isRSC\n ? ([defaultComponentState, null as any] as [\n TamaguiComponentState,\n React.Dispatch<React.SetStateAction<TamaguiComponentState>>\n ])\n : useState<TamaguiComponentState>(defaultComponentState)\n const state = propsIn.forceStyle ? { ...states[0], [propsIn.forceStyle]: true } : states[0]\n\n const shouldAvoidClasses = !!(props.animation && avoidClasses)\n const shouldForcePseudo = !!propsIn.forceStyle\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const hasTextAncestor = !!(isWeb && isText ? useContext(TextAncestorContext) : false)\n const splitStyleState =\n !shouldAvoidClasses && !shouldForcePseudo\n ? {\n ...state,\n hasTextAncestor,\n dynamicStylesInline: true,\n }\n : ({\n ...state,\n noClassNames: true,\n dynamicStylesInline: true,\n hasTextAncestor,\n resolveVariablesAs: 'value',\n } as const)\n\n const languageContext = isRSC ? null : useContext(FontLanguageContext)\n\n const splitStyles = useSplitStyles(\n props,\n staticConfig,\n theme,\n splitStyleState,\n props.asChild ? null : initialSplitStyles?.classNames,\n languageContext || undefined,\n props['debug']\n )\n\n console.log('hi2')\n\n return propsIn.children\n })\n\n if (staticConfig.componentName) {\n component.displayName = staticConfig.componentName\n }\n\n // Once configuration is run and all components are registered\n // get default props + className and analyze styles\n onConfiguredOnce((conf) => {\n if (isRSC) return\n // in static mode we just use these to lookup configuration\n // ... we likely want this? need to test\n if (process.env.IS_STATIC === 'is_static') return\n\n tamaguiConfig = conf\n\n // do this to make sure shorthands don't duplicate with.. longhands\n mergeShorthands(staticConfig, tamaguiConfig)\n\n if (tamaguiConfig.animations) {\n avoidClasses = !!tamaguiConfig.animations.avoidClasses\n AnimatedText = tamaguiConfig.animations.Text\n AnimatedView = tamaguiConfig.animations.View\n }\n\n initialTheme =\n initialTheme ||\n proxyThemeVariables(conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]])\n\n // adds in user defined default props\n config = getConfig()\n\n let defaultPropsIn = staticConfig.defaultProps || {}\n\n // because we run createTamagui after styled() defs, have to do some work here\n // gather defaults props one time and merge downwards\n // find last unprocessed and process\n const parentNames = [...(staticConfig.parentNames || []), staticConfig.componentName]\n\n if (config.defaultProps && parentNames && staticConfig.componentName) {\n defaultPropsIn = mergeConfigDefaultProps(\n staticConfig.componentName,\n defaultPropsIn,\n config.defaultProps,\n parentNames,\n conf\n )\n }\n\n const debug = true ? defaultPropsIn['debug'] : false\n\n if (process.env.NODE_ENV === 'development' && debug === 'break') {\n // eslint-disable-next-line no-debugger\n debugger\n }\n\n // remove all classNames\n const [parentProps, parentClassNames] = mergeProps(defaultPropsIn, {}, true)\n\n initialSplitStyles = insertSplitStyles(\n parentProps,\n staticConfig,\n initialTheme,\n {\n mounted: true,\n hover: false,\n press: false,\n pressIn: false,\n focus: false,\n resolveVariablesAs: 'both',\n keepVariantsAsProps: true,\n },\n undefined,\n undefined,\n debug\n )\n\n // must preserve prop order\n // leave out className because we handle that already with initialSplitStyles.classNames\n // otherwise it confuses variant functions getting className props\n const [defaults, defaultsClassnames] = mergeProps(\n component.defaultProps as any,\n initialSplitStyles.viewProps,\n true\n // conf.inverseShorthands\n )\n\n // avoid passing className props to variants\n initialSplitStyles.classNames = {\n ...parentClassNames,\n ...defaultsClassnames,\n ...initialSplitStyles.classNames,\n }\n\n defaultNativeStyle = {}\n\n const validStyles = staticConfig.validStyles || stylePropsView\n\n // split - keep variables on props to be processed using theme values at runtime (native)\n if (!isWeb) {\n for (const key in staticConfig.defaultProps) {\n const val = staticConfig.defaultProps[key]\n if (validPseudoKeys[key]) continue\n if ((typeof val === 'string' && val[0] === '$') || !validStyles[key]) {\n defaults[key] = val\n } else {\n defaultNativeStyle[key] = val\n }\n }\n }\n\n defaultNativeStyleSheet = StyleSheet.create({\n base: defaultNativeStyle,\n })\n\n if (Object.keys(defaults).length) {\n tamaguiDefaultProps = defaults\n }\n\n // add debug logs\n if (process.env.NODE_ENV === 'development' && debug) {\n if (process.env.IS_STATIC !== 'is_static') {\n // eslint-disable-next-line no-console\n console.log(`\uD83D\uDC1B [${staticConfig.componentName || 'Component'}]`, {\n staticConfig,\n initialSplitStyles,\n tamaguiDefaultProps,\n defaultNativeStyle,\n defaults,\n defaultPropsIn,\n })\n }\n }\n })\n\n let res: TamaguiComponent<ComponentPropTypes, Ref, BaseProps> = component as any\n\n if (configIn.memo) {\n res = memo(res) as any\n }\n\n res.staticConfig = {\n validStyles: staticConfig.validStyles || stylePropsView,\n ...staticConfig,\n }\n\n // res.extractable HoC\n res.extractable = (Component: any, conf?: Partial<StaticConfig>) => {\n Component.staticConfig = extendStaticConfig(\n {\n Component,\n ...conf,\n neverFlatten: true,\n isExtractable: true,\n defaultProps: {\n ...Component.defaultProps,\n ...conf?.defaultProps,\n },\n },\n res\n )\n return Component\n }\n\n return res\n}\n\n// for elements to avoid spacing\nexport const Unspaced = (props: { children?: any }) => {\n return props.children\n}\nUnspaced['isUnspaced'] = true\n\n// dont used styled() here to avoid circular deps\n// keep inline to avoid circular deps\n\nexport const Spacer = createComponent<SpacerProps>({\n memo: true,\n componentName: 'Spacer',\n validStyles,\n defaultProps: {\n ...stackDefaultStyles,\n size: true,\n },\n variants: {\n size: {\n '...size': (size, { tokens }) => {\n size = size == true ? '$true' : size\n const sizePx = tokens.space[size] ?? size\n return {\n width: sizePx,\n height: sizePx,\n minWidth: sizePx,\n minHeight: sizePx,\n }\n },\n },\n\n flex: {\n true: {\n flexGrow: 1,\n },\n },\n\n direction: {\n horizontal: {\n height: 0,\n minHeight: 0,\n },\n vertical: {\n width: 0,\n minWidth: 0,\n },\n both: {},\n },\n },\n\n defaultVariants: {\n direction: 'both',\n },\n})\n\nexport type SpacedChildrenProps = {\n isZStack?: boolean\n children?: React.ReactNode\n space?: SpaceTokens | number | null\n spaceFlex?: boolean | number\n direction?: SpaceDirection\n separator?: React.ReactNode\n}\n\nexport function spacedChildren({\n isZStack,\n children,\n space,\n direction,\n spaceFlex,\n separator,\n}: SpacedChildrenProps) {\n const hasSpace = !!(space || spaceFlex)\n const hasSeparator = !(separator === undefined || separator === null)\n if (!hasSpace && !hasSeparator && !isZStack) {\n return children\n }\n const childrenList = Children.toArray(children)\n if (childrenList.length <= 1 && !isZStack) {\n return childrenList\n }\n const final: React.ReactNode[] = []\n for (const [index, child] of childrenList.entries()) {\n const isEmpty =\n child === null || child === undefined || (Array.isArray(child) && child.length === 0)\n\n // push them all, but wrap some in Fragment\n if (isEmpty || !child || (child['key'] && !isZStack)) {\n final.push(child)\n } else {\n final.push(\n <Fragment key={index}>{isZStack ? <AbsoluteFill>{child}</AbsoluteFill> : child}</Fragment>\n )\n }\n\n // first child unspaced avoid insert space\n if (isUnspaced(child) && index === 0) {\n continue\n }\n\n // no spacing on ZStack\n if (isZStack) {\n continue\n }\n\n const next = childrenList[index + 1]\n\n if (next && !isUnspaced(next)) {\n if (separator) {\n if (hasSpace) {\n final.push(\n createSpacer({\n key: `_${index}_before_sep_spacer`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n final.push(\n React.isValidElement(separator)\n ? React.cloneElement(separator, { key: `sep_${index}` })\n : separator\n )\n if (hasSpace) {\n final.push(\n createSpacer({\n key: `_${index}_after_sep_spacer`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n } else {\n final.push(\n createSpacer({\n key: `_${index}_spacer`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n }\n }\n\n return final\n}\n\ntype CreateSpacerProps = SpacedChildrenProps & { key: string }\n\nfunction createSpacer({ key, direction, space, spaceFlex }: CreateSpacerProps) {\n return (\n <Spacer\n key={key}\n size={space}\n direction={direction}\n {...(spaceFlex && {\n flex: spaceFlex,\n })}\n />\n )\n}\n\nfunction isUnspaced(child: React.ReactNode) {\n // console.log('unspaced?', child, getMedia())\n return child?.['type']?.['isVisuallyHidden'] || child?.['type']?.['isUnspaced']\n}\n\nfunction AbsoluteFill(props: { children?: any }) {\n return (\n <View pointerEvents=\"box-none\" style={StyleSheet.absoluteFill}>\n {props.children}\n </View>\n )\n}\n\n// this can be done with CSS entirely right?\n// const shouldWrapTextAncestor = isWeb && isText && !hasTextAncestor\n// if (shouldWrapTextAncestor) {\n// // from react-native-web\n// content = createElement(TextAncestorContext.Provider, { value: true }, content)\n// }\n\nexport function processIDRefList(idRefList: string | Array<string>): string {\n return Array.isArray(idRefList) ? idRefList.join(' ') : idRefList\n}\n\nexport const accessibilityRoleToWebRole = {\n adjustable: 'slider',\n button: 'button',\n header: 'heading',\n image: 'img',\n imagebutton: null,\n keyboardkey: null,\n label: null,\n link: 'link',\n none: 'presentation',\n search: 'search',\n summary: 'region',\n text: null,\n}\n\nfunction addPseudoToStyles(\n styles: any[],\n initialPseudos: SplitStyleResult['pseudos'],\n pseudos: any,\n name: string,\n force = false\n) {\n // on web use pseudo object { hoverStyle } to keep specificity with concatClassName\n const pseudoStyle = pseudos[name]\n const shouldNestObject = isWeb && name !== 'enterStyle' && name !== 'exitStyle'\n const defaultPseudoStyle = initialPseudos[name]\n const style = defaultPseudoStyle ? { ...defaultPseudoStyle, ...pseudoStyle } : pseudoStyle\n if (style) {\n styles.push(shouldNestObject && !force ? { [name]: style } : style)\n }\n}\n\nconst DefaultProps = new Map()\n\nfunction mergeConfigDefaultProps(\n name: string,\n props: Record<string, any>,\n configDefaults: Record<string, Object>,\n parentNames: (string | undefined)[],\n conf: TamaguiInternalConfig\n) {\n const len = parentNames.length\n let prev\n\n for (let i = 0; i < len; i++) {\n const n = parentNames[i]\n if (!n) continue\n if (DefaultProps.has(n)) {\n prev = DefaultProps.get(n)\n continue\n }\n const props = configDefaults[n]\n if (!props) {\n if (prev) {\n DefaultProps.set(n, prev)\n }\n continue\n }\n prev = mergeProps(prev || {}, props, false, conf.inverseShorthands)[0]\n DefaultProps.set(n, prev)\n }\n\n // overwrite the user defined defaults on top of internal defined defaults\n const ourDefaultsMerged = DefaultProps.get(name)\n if (ourDefaultsMerged) {\n return mergeProps(props, ourDefaultsMerged, false, conf.inverseShorthands)[0]\n }\n return props\n}\n"],
5
+ "mappings": "AACA;AAAA;AAAA;AAAA;AAAA;AAYA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AAIA;AAmBA,MAAM;AAGN,MAAM,QAAQ,YAAY,IAAI;AAE9B,MAAM,wBAA+C,OAAO,OAAO;AAAA,EACjE,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EAEP,SAAS;AAAA,EACT,WAAW;AACb,CAAC;AAEM,MAAM,WAAW,oBAAI,IAAc;AAC1C,IAAI,OAAO,aAAa,aAAa;AACnC,QAAM,gBAAgB,MAAM;AAC1B,aAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,aAAS,MAAM;AAAA,EACjB;AACA,WAAS,iBAAiB,WAAW,aAAa;AAClD,WAAS,iBAAiB,YAAY,aAAa;AACnD,WAAS,iBAAiB,eAAe,aAAa;AACxD;AAGA,yBAAyB,EAAE,gBAAoC,EAAE,cAA6B;AAE5F,aAAW,OAAO,cAAc;AAC9B,iBAAa,WAAW,QAAQ,OAAO,aAAa;AAAA,EACtD;AACF;AAEA,IAAI;AACJ,IAAI;AAEG,yBAIL,UAAsD,iBAAqC;AAC3F,QAAM,eAAgB,OAAM;AAC1B,UAAM,OAAO,mBAAmB,UAAU,eAAe;AACzD,QAAI,YAAY,MAAM;AACpB,aAAO;AAAA,IACT,OAAO;AACL,aAAO,kBAAkB,IAAI;AAAA,IAC/B;AAAA,EACF,GAAG;AAEH,QAAM,4BAA4B,MAAM,aAAa;AACrD,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI,eAAe;AACnB,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAGJ,QAAM,YAAY,WAAoC,CAAC,SAAc,iBAAiB;AAGpF,QAAI;AACJ,QAAI,uBAAuB,CAAC,QAAQ,SAAS;AAC3C,cAAQ,WAAW,qBAAqB,OAAO,EAAE;AAAA,IACnD,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,UAAM,EAAE,WAAW,QAAQ,aAAa;AACxC,UAAM,gBAAgB,MAAM,iBAAiB,aAAa;AAC1D,UAAM,qBAAqB,MAAM,UAC7B,KACA,MAAM,gBACN,MAAM,MAAM,kBACZ;AAEJ,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,UAAI,MAAM,UAAU;AAClB,cAAM,OAAO,GACX,iBAAiB,wCAAW,gBAAe,wCAAW,SAAQ;AAEhE,cAAM,SAAS,GAAG,QAAQ,QAAQ,cAAc;AAEhD,gBAAQ,MAAM,gBAAS,UAAU,qBAAqB;AAEtD,gBAAQ,IAAI,SAAS,OAAO;AAG5B,YAAI,MAAM,aAAa,SAAS;AAE9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,eAAe;AACnC,aAAS,UAAU,UAAU;AAC7B,UAAM,QAAQ,SAAS,MAAM,OAAO,eAAe,OAAO,WAAW;AAErE,UAAM,SAAS,QACV,CAAC,uBAAuB,IAAW,IAIpC,SAAgC,qBAAqB;AACzD,UAAM,QAAQ,QAAQ,aAAa,EAAE,GAAG,OAAO,IAAI,CAAC,QAAQ,aAAa,KAAK,IAAI,OAAO;AAEzF,UAAM,qBAAqB,CAAC,CAAE,OAAM,aAAa;AACjD,UAAM,oBAAoB,CAAC,CAAC,QAAQ;AAEpC,UAAM,kBAAkB,CAAC,CAAE,UAAS,SAAS,WAAW,mBAAmB,IAAI;AAC/E,UAAM,kBACJ,CAAC,sBAAsB,CAAC,oBACpB;AAAA,MACE,GAAG;AAAA,MACH;AAAA,MACA,qBAAqB;AAAA,IACvB,IACC;AAAA,MACC,GAAG;AAAA,MACH,cAAc;AAAA,MACd,qBAAqB;AAAA,MACrB;AAAA,MACA,oBAAoB;AAAA,IACtB;AAEN,UAAM,kBAAkB,QAAQ,OAAO,WAAW,mBAAmB;AAErE,UAAM,cAAc,eAClB,OACA,cACA,OACA,iBACA,MAAM,UAAU,OAAO,yDAAoB,YAC3C,mBAAmB,QACnB,MAAM,QACR;AAEA,YAAQ,IAAI,KAAK;AAEjB,WAAO,QAAQ;AAAA,EACjB,CAAC;AAED,MAAI,aAAa,eAAe;AAC9B,cAAU,cAAc,aAAa;AAAA,EACvC;AAIA,mBAAiB,CAAC,SAAS;AACzB,QAAI;AAAO;AAGX,QAAI,QAAQ,IAAI,cAAc;AAAa;AAE3C,oBAAgB;AAGhB,oBAAgB,cAAc,aAAa;AAE3C,QAAI,cAAc,YAAY;AAC5B,qBAAe,CAAC,CAAC,cAAc,WAAW;AAC1C,qBAAe,cAAc,WAAW;AACxC,qBAAe,cAAc,WAAW;AAAA,IAC1C;AAEA,mBACE,gBACA,oBAAoB,KAAK,OAAO,KAAK,gBAAgB,OAAO,KAAK,KAAK,MAAM,EAAE,GAAG;AAGnF,aAAS,UAAU;AAEnB,QAAI,iBAAiB,aAAa,gBAAgB,CAAC;AAKnD,UAAM,cAAc,CAAC,GAAI,aAAa,eAAe,CAAC,GAAI,aAAa,aAAa;AAEpF,QAAI,OAAO,gBAAgB,eAAe,aAAa,eAAe;AACpE,uBAAiB,wBACf,aAAa,eACb,gBACA,OAAO,cACP,aACA,IACF;AAAA,IACF;AAEA,UAAM,QAAQ,OAAO,eAAe,WAAW;AAE/C,QAAI,QAAQ,IAAI,aAAa,iBAAiB,UAAU,SAAS;AAE/D;AAAA,IACF;AAGA,UAAM,CAAC,aAAa,oBAAoB,WAAW,gBAAgB,CAAC,GAAG,IAAI;AAE3E,yBAAqB,kBACnB,aACA,cACA,cACA;AAAA,MACE,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB,GACA,QACA,QACA,KACF;AAKA,UAAM,CAAC,UAAU,sBAAsB,WACrC,UAAU,cACV,mBAAmB,WACnB,IAEF;AAGA,uBAAmB,aAAa;AAAA,MAC9B,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG,mBAAmB;AAAA,IACxB;AAEA,yBAAqB,CAAC;AAEtB,UAAM,eAAc,aAAa,eAAe;AAGhD,QAAI,CAAC,OAAO;AACV,iBAAW,OAAO,aAAa,cAAc;AAC3C,cAAM,MAAM,aAAa,aAAa;AACtC,YAAI,gBAAgB;AAAM;AAC1B,YAAK,OAAO,QAAQ,YAAY,IAAI,OAAO,OAAQ,CAAC,aAAY,MAAM;AACpE,mBAAS,OAAO;AAAA,QAClB,OAAO;AACL,6BAAmB,OAAO;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAEA,8BAA0B,WAAW,OAAO;AAAA,MAC1C,MAAM;AAAA,IACR,CAAC;AAED,QAAI,OAAO,KAAK,QAAQ,EAAE,QAAQ;AAChC,4BAAsB;AAAA,IACxB;AAGA,QAAI,QAAQ,IAAI,aAAa,iBAAiB,OAAO;AACnD,UAAI,QAAQ,IAAI,cAAc,aAAa;AAEzC,gBAAQ,IAAI,cAAO,aAAa,iBAAiB,gBAAgB;AAAA,UAC/D;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,MAA4D;AAEhE,MAAI,SAAS,MAAM;AACjB,UAAM,KAAK,GAAG;AAAA,EAChB;AAEA,MAAI,eAAe;AAAA,IACjB,aAAa,aAAa,eAAe;AAAA,IACzC,GAAG;AAAA,EACL;AAGA,MAAI,cAAc,CAAC,WAAgB,SAAiC;AAClE,cAAU,eAAe,mBACvB;AAAA,MACE;AAAA,MACA,GAAG;AAAA,MACH,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAc;AAAA,QACZ,GAAG,UAAU;AAAA,QACb,GAAG,6BAAM;AAAA,MACX;AAAA,IACF,GACA,GACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAGO,MAAM,WAAW,CAAC,UAA8B;AACrD,SAAO,MAAM;AACf;AACA,SAAS,gBAAgB;AAKlB,MAAM,SAAS,gBAA6B;AAAA,EACjD,MAAM;AAAA,EACN,eAAe;AAAA,EACf;AAAA,EACA,cAAc;AAAA,IACZ,GAAG;AAAA,IACH,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,WAAW,CAAC,MAAM,EAAE,aAAa;AAC/B,eAAO,QAAQ,OAAO,UAAU;AAChC,cAAM,SAAS,OAAO,MAAM,SAAS;AACrC,eAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,QACJ,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,WAAW;AAAA,MACT,YAAY;AAAA,QACV,QAAQ;AAAA,QACR,WAAW;AAAA,MACb;AAAA,MACA,UAAU;AAAA,QACR,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,MACA,MAAM,CAAC;AAAA,IACT;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,WAAW;AAAA,EACb;AACF,CAAC;AAWM,wBAAwB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GACsB;AACtB,QAAM,WAAW,CAAC,CAAE,UAAS;AAC7B,QAAM,eAAe,CAAE,eAAc,UAAa,cAAc;AAChE,MAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU;AAC3C,WAAO;AAAA,EACT;AACA,QAAM,eAAe,SAAS,QAAQ,QAAQ;AAC9C,MAAI,aAAa,UAAU,KAAK,CAAC,UAAU;AACzC,WAAO;AAAA,EACT;AACA,QAAM,QAA2B,CAAC;AAClC,aAAW,CAAC,OAAO,UAAU,aAAa,QAAQ,GAAG;AACnD,UAAM,UACJ,UAAU,QAAQ,UAAU,UAAc,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;AAGrF,QAAI,WAAW,CAAC,SAAU,MAAM,UAAU,CAAC,UAAW;AACpD,YAAM,KAAK,KAAK;AAAA,IAClB,OAAO;AACL,YAAM,KACJ,oCAAC;AAAA,QAAS,KAAK;AAAA,SAAQ,WAAW,oCAAC,oBAAc,KAAM,IAAkB,KAAM,CACjF;AAAA,IACF;AAGA,QAAI,WAAW,KAAK,KAAK,UAAU,GAAG;AACpC;AAAA,IACF;AAGA,QAAI,UAAU;AACZ;AAAA,IACF;AAEA,UAAM,OAAO,aAAa,QAAQ;AAElC,QAAI,QAAQ,CAAC,WAAW,IAAI,GAAG;AAC7B,UAAI,WAAW;AACb,YAAI,UAAU;AACZ,gBAAM,KACJ,aAAa;AAAA,YACX,KAAK,IAAI;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC,CACH;AAAA,QACF;AACA,cAAM,KACJ,MAAM,eAAe,SAAS,IAC1B,MAAM,aAAa,WAAW,EAAE,KAAK,OAAO,QAAQ,CAAC,IACrD,SACN;AACA,YAAI,UAAU;AACZ,gBAAM,KACJ,aAAa;AAAA,YACX,KAAK,IAAI;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC,CACH;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,KACJ,aAAa;AAAA,UACX,KAAK,IAAI;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC,CACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAIA,sBAAsB,EAAE,KAAK,WAAW,OAAO,aAAgC;AAC7E,SACE,oCAAC;AAAA,IACC;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACC,GAAI,aAAa;AAAA,MAChB,MAAM;AAAA,IACR;AAAA,GACF;AAEJ;AAEA,oBAAoB,OAAwB;AA3hB5C;AA6hBE,SAAO,sCAAQ,YAAR,mBAAkB,wBAAuB,sCAAQ,YAAR,mBAAkB;AACpE;AAEA,sBAAsB,OAA2B;AAC/C,SACE,oCAAC;AAAA,IAAK,eAAc;AAAA,IAAW,OAAO,WAAW;AAAA,KAC9C,MAAM,QACT;AAEJ;AASO,0BAA0B,WAA2C;AAC1E,SAAO,MAAM,QAAQ,SAAS,IAAI,UAAU,KAAK,GAAG,IAAI;AAC1D;AAEO,MAAM,6BAA6B;AAAA,EACxC,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAEA,2BACE,QACA,gBACA,SACA,MACA,QAAQ,OACR;AAEA,QAAM,cAAc,QAAQ;AAC5B,QAAM,mBAAmB,SAAS,SAAS,gBAAgB,SAAS;AACpE,QAAM,qBAAqB,eAAe;AAC1C,QAAM,QAAQ,qBAAqB,EAAE,GAAG,oBAAoB,GAAG,YAAY,IAAI;AAC/E,MAAI,OAAO;AACT,WAAO,KAAK,oBAAoB,CAAC,QAAQ,EAAE,CAAC,OAAO,MAAM,IAAI,KAAK;AAAA,EACpE;AACF;AAEA,MAAM,eAAe,oBAAI,IAAI;AAE7B,iCACE,MACA,OACA,gBACA,aACA,MACA;AACA,QAAM,MAAM,YAAY;AACxB,MAAI;AAEJ,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,IAAI,YAAY;AACtB,QAAI,CAAC;AAAG;AACR,QAAI,aAAa,IAAI,CAAC,GAAG;AACvB,aAAO,aAAa,IAAI,CAAC;AACzB;AAAA,IACF;AACA,UAAM,SAAQ,eAAe;AAC7B,QAAI,CAAC,QAAO;AACV,UAAI,MAAM;AACR,qBAAa,IAAI,GAAG,IAAI;AAAA,MAC1B;AACA;AAAA,IACF;AACA,WAAO,WAAW,QAAQ,CAAC,GAAG,QAAO,OAAO,KAAK,iBAAiB,EAAE;AACpE,iBAAa,IAAI,GAAG,IAAI;AAAA,EAC1B;AAGA,QAAM,oBAAoB,aAAa,IAAI,IAAI;AAC/C,MAAI,mBAAmB;AACrB,WAAO,WAAW,OAAO,mBAAmB,OAAO,KAAK,iBAAiB,EAAE;AAAA,EAC7E;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,5 +1,5 @@
1
- import { configListeners, setConfig } from "./conf";
2
- import { isWeb } from "./constants/platform";
1
+ import { configListeners, setConfig } from "./config";
2
+ import { isRSC, isWeb } from "./constants/platform";
3
3
  import { createVariables } from "./createVariables";
4
4
  import { getThemeCSSRules } from "./helpers/getThemeCSSRules";
5
5
  import { getAllRules } from "./helpers/insertStyleRule";
@@ -32,7 +32,9 @@ function createTamagui(configIn) {
32
32
  queries: configIn.media,
33
33
  defaultActive: configIn.mediaQueryDefaultActive
34
34
  });
35
- const fontTokens = createVariables(configIn.fonts, "", true);
35
+ const fontTokens = Object.fromEntries(Object.entries(configIn.fonts).map(([k, v]) => {
36
+ return [k, createVariables(v, "f", true)];
37
+ }));
36
38
  const fontsParsed = (() => {
37
39
  const res = {};
38
40
  for (const familyName in fontTokens) {
@@ -97,7 +99,7 @@ function createTamagui(configIn) {
97
99
  };
98
100
  existing.set(rawTheme, dedupedThemes[themeName]);
99
101
  }
100
- if (isWeb) {
102
+ if (isWeb || isRSC) {
101
103
  for (const themeName in dedupedThemes) {
102
104
  cssRuleSets = [
103
105
  ...cssRuleSets,
@@ -133,7 +135,7 @@ ${getAllRules().join("\n")}`;
133
135
  animations: {},
134
136
  media: {},
135
137
  ...configIn,
136
- shorthands,
138
+ shorthands: { ...shorthands },
137
139
  inverseShorthands: shorthands ? Object.fromEntries(Object.entries(shorthands).map(([k, v]) => [v, k])) : {},
138
140
  themes: themeConfig.themes,
139
141
  fontsParsed,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createTamagui.ts"],
4
- "sourcesContent": ["import { configListeners, setConfig } from './conf'\nimport { isWeb } from './constants/platform'\nimport { createVariables } from './createVariables'\nimport { getThemeCSSRules } from './helpers/getThemeCSSRules'\nimport { getAllRules } from './helpers/insertStyleRule'\nimport {\n registerCSSVariable,\n tokensValueToVariable,\n variableToCSS,\n} from './helpers/registerCSSVariable'\nimport { ensureThemeVariable, proxyThemeToParents } from './helpers/themes'\nimport { configureMedia } from './hooks/useMedia'\nimport { parseFont, registerFontVariables } from './insertFont'\nimport { Tamagui } from './Tamagui'\nimport { CreateTamaguiProps, InferTamaguiConfig, TamaguiInternalConfig, ThemeObject } from './types'\n\n// config is re-run by the @tamagui/static, dont double validate\nconst createdConfigs = new WeakMap<any, boolean>()\n\nexport function createTamagui<Conf extends CreateTamaguiProps>(\n configIn: Conf\n): InferTamaguiConfig<Conf> {\n if (createdConfigs.has(configIn)) {\n return configIn as any\n }\n\n if (process.env.NODE_ENV === 'development') {\n if (!configIn.tokens) {\n throw new Error(`Must define tokens`)\n }\n if (!configIn.themes) {\n throw new Error(`Must define themes`)\n }\n if (!configIn.fonts) {\n throw new Error(`Must define fonts`)\n }\n }\n\n configureMedia({\n queries: configIn.media as any,\n defaultActive: configIn.mediaQueryDefaultActive,\n })\n\n const fontTokens = createVariables(configIn.fonts!, '', true)\n const fontsParsed = (() => {\n const res = {} as typeof fontTokens\n for (const familyName in fontTokens) {\n res[`$${familyName}`] = parseFont(fontTokens[familyName])\n }\n return res!\n })()\n\n const themeConfig = (() => {\n const themes = { ...configIn.themes }\n let cssRuleSets: string[] = []\n\n if (isWeb) {\n const declarations: string[] = []\n const fontDeclarations: Record<\n string,\n { name: string; declarations: string[]; language?: string }\n > = {}\n\n for (const key in configIn.tokens) {\n for (const skey in configIn.tokens[key]) {\n const val = configIn.tokens[key][skey]\n registerCSSVariable(val)\n declarations.push(variableToCSS(val))\n }\n }\n\n for (const key in fontsParsed) {\n const fontParsed = fontsParsed[key]\n const [name, language] = key.includes('_') ? key.split('_') : [key]\n const fontVars = registerFontVariables(fontParsed)\n fontDeclarations[key] = { name: name.slice(1), declarations: fontVars, language }\n }\n\n const sep = process.env.NODE_ENV === 'development' ? configIn.cssStyleSeparator || ' ' : ''\n\n function declarationsToRuleSet(decs: string[], selector = '') {\n return `:root${selector} {${sep}${[...decs].join(`;${sep}`)}${sep}}`\n }\n\n // non-font\n cssRuleSets.push(declarationsToRuleSet(declarations))\n\n // fonts\n if (fontDeclarations) {\n for (const key in fontDeclarations) {\n const { name, declarations, language = 'default' } = fontDeclarations[key]\n const fontSelector = `.font_${name}`\n const langSelector = `:root .t_lang-${name}-${language} ${fontSelector}`\n const selectors =\n language === 'default' ? ` ${fontSelector}, ${langSelector}` : langSelector\n const specificRuleSet = declarationsToRuleSet(declarations, selectors)\n cssRuleSets.push(specificRuleSet)\n }\n }\n }\n\n // dedupe themes to avoid duplicate CSS generation\n type DedupedTheme = {\n names: string[]\n theme: ThemeObject\n }\n const dedupedThemes: {\n [key: string]: DedupedTheme\n } = {}\n const existing = new WeakMap<ThemeObject, DedupedTheme>()\n\n // first, de-dupe and parse them\n for (const themeName in themes) {\n const rawTheme = themes[themeName]\n\n // if existing, avoid\n if (existing.has(rawTheme)) {\n const e = existing.get(rawTheme)!\n themes[themeName] = e.theme\n e.names.push(themeName)\n continue\n }\n\n // ensure each theme object unique for dedupe\n const theme = { ...rawTheme }\n // parse into variables\n for (const key in theme) {\n // make sure properly names theme variables\n ensureThemeVariable(theme, key)\n }\n themes[themeName] = theme\n\n // set deduped\n dedupedThemes[themeName] = {\n names: [themeName],\n theme,\n }\n existing.set(rawTheme, dedupedThemes[themeName])\n }\n\n // then, generate CSS from de-duped\n if (isWeb) {\n for (const themeName in dedupedThemes) {\n cssRuleSets = [\n ...cssRuleSets,\n ...getThemeCSSRules({\n config: configIn,\n themeName,\n ...dedupedThemes[themeName],\n }),\n ]\n }\n }\n\n // proxy upwards to get parent variables (themes are subset going down)\n for (const themeName in themes) {\n themes[themeName] = proxyThemeToParents(themeName, themes[themeName], themes)\n }\n\n tokensValueToVariable.clear()\n Object.freeze(cssRuleSets)\n const css = cssRuleSets.join('\\n')\n\n return {\n themes,\n cssRuleSets,\n css,\n }\n })()\n\n // faster lookups token keys become $keys to match input\n const tokensParsed: any = parseTokens(configIn.tokens)\n\n const getCSS = () => {\n return `${themeConfig.css}\\n${getAllRules().join('\\n')}`\n }\n\n const shorthands = configIn.shorthands || {}\n\n const config: TamaguiInternalConfig = {\n fontLanguages: [],\n defaultTheme: 'light',\n animations: {} as any,\n media: {},\n ...configIn,\n shorthands,\n inverseShorthands: shorthands\n ? Object.fromEntries(Object.entries(shorthands).map(([k, v]) => [v, k]))\n : {},\n themes: themeConfig.themes,\n fontsParsed,\n themeConfig,\n tokensParsed,\n parsed: true,\n getCSS,\n }\n\n setConfig(config)\n\n if (configListeners.size) {\n configListeners.forEach((cb) => cb(config))\n configListeners.clear()\n }\n\n createdConfigs.set(config, true)\n\n if (process.env.NODE_ENV === 'development') {\n if (!globalThis['Tamagui']) {\n globalThis['Tamagui'] = Tamagui\n }\n }\n\n // @ts-expect-error\n return config\n}\n\nconst parseTokens = (tokens: any) => {\n const res: any = {}\n for (const key in tokens) {\n res[key] = {}\n for (const skey in tokens[key]) {\n res[key][`$${skey}`] = tokens[key][skey]\n }\n }\n return res\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { configListeners, setConfig } from './config'\nimport { isRSC, isWeb } from './constants/platform'\nimport { createVariables } from './createVariables'\nimport { getThemeCSSRules } from './helpers/getThemeCSSRules'\nimport { getAllRules } from './helpers/insertStyleRule'\nimport {\n registerCSSVariable,\n tokensValueToVariable,\n variableToCSS,\n} from './helpers/registerCSSVariable'\nimport { ensureThemeVariable, proxyThemeToParents } from './helpers/themes'\nimport { configureMedia } from './hooks/useMedia'\nimport { parseFont, registerFontVariables } from './insertFont'\nimport { Tamagui } from './Tamagui'\nimport { CreateTamaguiProps, InferTamaguiConfig, TamaguiInternalConfig, ThemeObject } from './types'\n\n// config is re-run by the @tamagui/static, dont double validate\nconst createdConfigs = new WeakMap<any, boolean>()\n\nexport function createTamagui<Conf extends CreateTamaguiProps>(\n configIn: Conf\n): InferTamaguiConfig<Conf> {\n if (createdConfigs.has(configIn)) {\n return configIn as any\n }\n\n if (process.env.NODE_ENV === 'development') {\n if (!configIn.tokens) {\n throw new Error(`Must define tokens`)\n }\n if (!configIn.themes) {\n throw new Error(`Must define themes`)\n }\n if (!configIn.fonts) {\n throw new Error(`Must define fonts`)\n }\n }\n\n configureMedia({\n queries: configIn.media as any,\n defaultActive: configIn.mediaQueryDefaultActive,\n })\n\n const fontTokens = Object.fromEntries(\n Object.entries(configIn.fonts!).map(([k, v]) => {\n return [k, createVariables(v, 'f', true)]\n })\n )\n\n const fontsParsed = (() => {\n const res = {} as typeof fontTokens\n for (const familyName in fontTokens) {\n res[`$${familyName}`] = parseFont(fontTokens[familyName])\n }\n return res!\n })()\n\n const themeConfig = (() => {\n const themes = { ...configIn.themes }\n let cssRuleSets: string[] = []\n\n if (isWeb) {\n const declarations: string[] = []\n const fontDeclarations: Record<\n string,\n { name: string; declarations: string[]; language?: string }\n > = {}\n\n for (const key in configIn.tokens) {\n for (const skey in configIn.tokens[key]) {\n const val = configIn.tokens[key][skey]\n registerCSSVariable(val)\n declarations.push(variableToCSS(val))\n }\n }\n\n for (const key in fontsParsed) {\n const fontParsed = fontsParsed[key]\n const [name, language] = key.includes('_') ? key.split('_') : [key]\n const fontVars = registerFontVariables(fontParsed)\n fontDeclarations[key] = { name: name.slice(1), declarations: fontVars, language }\n }\n\n const sep = process.env.NODE_ENV === 'development' ? configIn.cssStyleSeparator || ' ' : ''\n\n function declarationsToRuleSet(decs: string[], selector = '') {\n return `:root${selector} {${sep}${[...decs].join(`;${sep}`)}${sep}}`\n }\n\n // non-font\n cssRuleSets.push(declarationsToRuleSet(declarations))\n\n // fonts\n if (fontDeclarations) {\n for (const key in fontDeclarations) {\n const { name, declarations, language = 'default' } = fontDeclarations[key]\n const fontSelector = `.font_${name}`\n const langSelector = `:root .t_lang-${name}-${language} ${fontSelector}`\n const selectors =\n language === 'default' ? ` ${fontSelector}, ${langSelector}` : langSelector\n const specificRuleSet = declarationsToRuleSet(declarations, selectors)\n cssRuleSets.push(specificRuleSet)\n }\n }\n }\n\n // dedupe themes to avoid duplicate CSS generation\n type DedupedTheme = {\n names: string[]\n theme: ThemeObject\n }\n const dedupedThemes: {\n [key: string]: DedupedTheme\n } = {}\n const existing = new WeakMap<ThemeObject, DedupedTheme>()\n\n // first, de-dupe and parse them\n for (const themeName in themes) {\n const rawTheme = themes[themeName]\n\n // if existing, avoid\n if (existing.has(rawTheme)) {\n const e = existing.get(rawTheme)!\n themes[themeName] = e.theme\n e.names.push(themeName)\n continue\n }\n\n // ensure each theme object unique for dedupe\n const theme = { ...rawTheme }\n // parse into variables\n for (const key in theme) {\n // make sure properly names theme variables\n ensureThemeVariable(theme, key)\n }\n themes[themeName] = theme\n\n // set deduped\n dedupedThemes[themeName] = {\n names: [themeName],\n theme,\n }\n existing.set(rawTheme, dedupedThemes[themeName])\n }\n\n // then, generate CSS from de-duped\n if (isWeb || isRSC) {\n for (const themeName in dedupedThemes) {\n cssRuleSets = [\n ...cssRuleSets,\n ...getThemeCSSRules({\n config: configIn,\n themeName,\n ...dedupedThemes[themeName],\n }),\n ]\n }\n }\n\n // proxy upwards to get parent variables (themes are subset going down)\n for (const themeName in themes) {\n themes[themeName] = proxyThemeToParents(themeName, themes[themeName], themes)\n }\n\n tokensValueToVariable.clear()\n Object.freeze(cssRuleSets)\n const css = cssRuleSets.join('\\n')\n\n return {\n themes,\n cssRuleSets,\n css,\n }\n })()\n\n // faster lookups token keys become $keys to match input\n const tokensParsed: any = parseTokens(configIn.tokens)\n\n const getCSS = () => {\n return `${themeConfig.css}\\n${getAllRules().join('\\n')}`\n }\n\n const shorthands = configIn.shorthands || {}\n\n const config: TamaguiInternalConfig = {\n fontLanguages: [],\n defaultTheme: 'light',\n animations: {} as any,\n media: {},\n ...configIn,\n // vite made this into a function if it wasn't set\n shorthands: { ...shorthands },\n inverseShorthands: shorthands\n ? Object.fromEntries(Object.entries(shorthands).map(([k, v]) => [v, k]))\n : {},\n themes: themeConfig.themes,\n fontsParsed,\n themeConfig,\n tokensParsed,\n parsed: true,\n getCSS,\n }\n\n setConfig(config)\n\n if (configListeners.size) {\n configListeners.forEach((cb) => cb(config))\n configListeners.clear()\n }\n\n createdConfigs.set(config, true)\n\n if (process.env.NODE_ENV === 'development') {\n if (!globalThis['Tamagui']) {\n globalThis['Tamagui'] = Tamagui\n }\n }\n\n // @ts-expect-error\n return config\n}\n\nconst parseTokens = (tokens: any) => {\n const res: any = {}\n for (const key in tokens) {\n res[key] = {}\n for (const skey in tokens[key]) {\n res[key][`$${skey}`] = tokens[key][skey]\n }\n }\n return res\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ import { simpleHash } from "@tamagui/helpers";
1
2
  import { isWeb } from "./constants/platform";
2
3
  const IS_VAR = "__isVar__";
3
4
  const createVariable = (props) => {
@@ -13,9 +14,10 @@ const createVariable = (props) => {
13
14
  function variableToString(vrble) {
14
15
  if (!vrble)
15
16
  return "";
16
- if (typeof vrble === "string")
17
- return vrble;
18
- return `${isWeb ? vrble.variable : vrble.val}`;
17
+ if (isVariable(vrble)) {
18
+ return `${isWeb ? vrble.variable : vrble.val}`;
19
+ }
20
+ return `${vrble}`;
19
21
  }
20
22
  function isVariable(v) {
21
23
  return !!(v && v[IS_VAR]);
@@ -42,15 +44,7 @@ const createCSSVariable = (nameProp, includeVar = true) => {
42
44
  return ``;
43
45
  }
44
46
  }
45
- let name = "";
46
- for (let i = 0; i < nameProp.length; i++) {
47
- const code = nameProp.charCodeAt(i);
48
- if (code >= 65 && code <= 90 || code >= 97 && code <= 122 || code == 95 || code === 45 || code >= 48 && code <= 57) {
49
- name += nameProp[i];
50
- } else {
51
- name += `-c${code}-`;
52
- }
53
- }
47
+ const name = simpleHash(nameProp, 60);
54
48
  return includeVar ? `var(--${name})` : name;
55
49
  };
56
50
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createVariable.ts"],
4
- "sourcesContent": ["import { isWeb } from './constants/platform'\nimport { VariableColorVal } from './types'\n\n/**\n * Should rename this to Token\n * Moving to objects for React Server Components support\n */\n\nconst IS_VAR = '__isVar__'\n\nexport type VariableValue = string | number\n\ntype VariableIn<A extends VariableValue = VariableValue> = {\n val: A\n name: string\n key: string\n isFloating?: boolean\n}\n\nexport type Variable<A extends VariableValue = VariableValue> = VariableIn<A> & {\n [IS_VAR]?: true\n variable?: string\n}\n\nexport const createVariable = <A extends string | number = any>(props: VariableIn<A>) => {\n if (isVariable(props)) {\n return props\n }\n return {\n [IS_VAR]: true,\n // @ts-ignore\n ...props,\n variable: isWeb ? createCSSVariable(props.name) : '',\n }\n}\n\n// on the client maybe we can change the prototype of variable object toString to keep backwards compat\nexport function variableToString(vrble?: Variable | VariableColorVal) {\n if (!vrble) return ''\n if (typeof vrble === 'string') return vrble\n return `${isWeb ? vrble.variable : vrble.val}`\n}\n\nexport function isVariable(v: Variable | any): v is Variable {\n return !!(v && v[IS_VAR])\n}\n\nexport function getVariableValue(v: Variable | any) {\n if (isVariable(v)) return v.val\n return v\n}\n\nexport function getVariableName(v: Variable | any) {\n if (isVariable(v)) return v.name\n return v\n}\n\nexport function getVariableVariable(v: Variable | any) {\n if (isVariable(v)) return v.variable\n return v\n}\n\n// bugfix { space: { 0.5: 10 } } was generating var(--space-0.5) (invalid CSS):\nexport const createCSSVariable = (nameProp: string, includeVar = true) => {\n if (process.env.NODE_ENV === 'development') {\n if (!nameProp || typeof nameProp !== 'string') {\n // eslint-disable-next-line no-console\n console.trace('createCSSVariable invalid name', nameProp)\n return ``\n }\n }\n let name = ''\n for (let i = 0; i < nameProp.length; i++) {\n const code = nameProp.charCodeAt(i)\n if (\n // A-Z\n (code >= 65 && code <= 90) ||\n // a-z\n (code >= 97 && code <= 122) ||\n // _\n code == 95 ||\n // -\n code === 45 ||\n // 0-9\n (code >= 48 && code <= 57)\n ) {\n name += nameProp[i]\n } else {\n // allow any name but turn it into a stringified num\n name += `-c${code}-`\n }\n }\n return includeVar ? `var(--${name})` : name\n}\n"],
5
- "mappings": "AAAA;AAQA,MAAM,SAAS;AAgBR,MAAM,iBAAiB,CAAkC,UAAyB;AACvF,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,CAAC,SAAS;AAAA,IAEV,GAAG;AAAA,IACH,UAAU,QAAQ,kBAAkB,MAAM,IAAI,IAAI;AAAA,EACpD;AACF;AAGO,0BAA0B,OAAqC;AACpE,MAAI,CAAC;AAAO,WAAO;AACnB,MAAI,OAAO,UAAU;AAAU,WAAO;AACtC,SAAO,GAAG,QAAQ,MAAM,WAAW,MAAM;AAC3C;AAEO,oBAAoB,GAAkC;AAC3D,SAAO,CAAC,CAAE,MAAK,EAAE;AACnB;AAEO,0BAA0B,GAAmB;AAClD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,yBAAyB,GAAmB;AACjD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,6BAA6B,GAAmB;AACrD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAGO,MAAM,oBAAoB,CAAC,UAAkB,aAAa,SAAS;AACxE,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAE7C,cAAQ,MAAM,kCAAkC,QAAQ;AACxD,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,OAAO,SAAS,WAAW,CAAC;AAClC,QAEG,QAAQ,MAAM,QAAQ,MAEtB,QAAQ,MAAM,QAAQ,OAEvB,QAAQ,MAER,SAAS,MAER,QAAQ,MAAM,QAAQ,IACvB;AACA,cAAQ,SAAS;AAAA,IACnB,OAAO;AAEL,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AACA,SAAO,aAAa,SAAS,UAAU;AACzC;",
4
+ "sourcesContent": ["import { isValidCSSCharCode, simpleHash } from '@tamagui/helpers'\n\nimport { isWeb } from './constants/platform'\n\n/**\n * Should rename this to Token\n * Moving to objects for React Server Components support\n */\n\nconst IS_VAR = '__isVar__'\n\nexport type VariableValue = string | number\n\ntype VariableIn<A extends VariableValue = VariableValue> = {\n val: A\n name: string\n key: string\n isFloating?: boolean\n}\n\nexport type Variable<A extends VariableValue = VariableValue> = VariableIn<A> & {\n [IS_VAR]?: true\n variable?: string\n}\n\nexport const createVariable = <A extends string | number = any>(props: VariableIn<A>) => {\n if (isVariable(props)) {\n return props\n }\n return {\n [IS_VAR]: true,\n // @ts-ignore\n ...props,\n variable: isWeb ? createCSSVariable(props.name) : '',\n }\n}\n\n// on the client maybe we can change the prototype of variable object toString to keep backwards compat\nexport function variableToString(vrble?: any) {\n if (!vrble) return ''\n if (isVariable(vrble)) {\n return `${isWeb ? vrble.variable : vrble.val}`\n }\n return `${vrble}`\n}\n\nexport function isVariable(v: Variable | any): v is Variable {\n return !!(v && v[IS_VAR])\n}\n\nexport function getVariableValue(v: Variable | any) {\n if (isVariable(v)) return v.val\n return v\n}\n\nexport function getVariableName(v: Variable | any) {\n if (isVariable(v)) return v.name\n return v\n}\n\nexport function getVariableVariable(v: Variable | any) {\n if (isVariable(v)) return v.variable\n return v\n}\n\n// bugfix { space: { 0.5: 10 } } was generating var(--space-0.5) (invalid CSS):\nexport const createCSSVariable = (nameProp: string, includeVar = true) => {\n if (process.env.NODE_ENV === 'development') {\n if (!nameProp || typeof nameProp !== 'string') {\n // eslint-disable-next-line no-console\n console.trace('createCSSVariable invalid name', nameProp)\n return ``\n }\n }\n const name = simpleHash(nameProp, 60)\n return includeVar ? `var(--${name})` : name\n}\n"],
5
+ "mappings": "AAAA;AAEA;AAOA,MAAM,SAAS;AAgBR,MAAM,iBAAiB,CAAkC,UAAyB;AACvF,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,CAAC,SAAS;AAAA,IAEV,GAAG;AAAA,IACH,UAAU,QAAQ,kBAAkB,MAAM,IAAI,IAAI;AAAA,EACpD;AACF;AAGO,0BAA0B,OAAa;AAC5C,MAAI,CAAC;AAAO,WAAO;AACnB,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO,GAAG,QAAQ,MAAM,WAAW,MAAM;AAAA,EAC3C;AACA,SAAO,GAAG;AACZ;AAEO,oBAAoB,GAAkC;AAC3D,SAAO,CAAC,CAAE,MAAK,EAAE;AACnB;AAEO,0BAA0B,GAAmB;AAClD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,yBAAyB,GAAmB;AACjD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,6BAA6B,GAAmB;AACrD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAGO,MAAM,oBAAoB,CAAC,UAAkB,aAAa,SAAS;AACxE,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAE7C,cAAQ,MAAM,kCAAkC,QAAQ;AACxD,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,OAAO,WAAW,UAAU,EAAE;AACpC,SAAO,aAAa,SAAS,UAAU;AACzC;",
6
6
  "names": []
7
7
  }
@@ -1,18 +1,21 @@
1
1
  import { createVariable, isVariable } from "./createVariable";
2
2
  const createVariables = (tokens, parentPath = "", isFont = false) => {
3
3
  const res = {};
4
+ let i = 0;
4
5
  for (const key in tokens) {
6
+ i++;
7
+ const variableName = isFont ? key.slice(0, 2) : i;
5
8
  const val = tokens[key];
6
9
  if (isVariable(val)) {
7
10
  res[key] = val;
8
11
  continue;
9
12
  }
10
- let name = parentPath ? `${parentPath}-${key}` : key;
13
+ let name = parentPath ? `${parentPath}-${variableName}` : key;
11
14
  if (isFont && name.includes("_")) {
12
15
  name = name.replace(/_[a-z0-9]+/i, "");
13
16
  }
14
17
  if (val && typeof val === "object") {
15
- res[key] = createVariables(tokens[key], isFont ? "f" : name);
18
+ res[key] = createVariables(tokens[key], `${name}`);
16
19
  continue;
17
20
  }
18
21
  res[key] = isVariable(val) ? val : createVariable({ val, name, key });