@tamagui/core 1.0.0-alpha.7 → 1.0.0-alpha.8

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 (128) hide show
  1. package/dist/cjs/constants/constants.js +50 -0
  2. package/dist/cjs/constants/constants.js.map +7 -0
  3. package/dist/cjs/constants/platform.js +43 -0
  4. package/dist/cjs/constants/platform.js.map +7 -0
  5. package/dist/cjs/constants/pseudos.js +25 -0
  6. package/dist/cjs/constants/pseudos.js.map +7 -0
  7. package/dist/cjs/constants/rnw.js +28 -0
  8. package/dist/cjs/constants/rnw.js.map +7 -0
  9. package/dist/cjs/createComponent.js +531 -0
  10. package/dist/cjs/createComponent.js.map +7 -0
  11. package/dist/cjs/createFont.js +50 -0
  12. package/dist/cjs/createFont.js.map +7 -0
  13. package/dist/cjs/createShorthands.js +16 -0
  14. package/dist/cjs/createShorthands.js.map +7 -0
  15. package/dist/cjs/createTamagui.js +206 -0
  16. package/dist/cjs/createTamagui.js.map +7 -0
  17. package/dist/cjs/createTheme.js +42 -0
  18. package/dist/cjs/createTheme.js.map +7 -0
  19. package/dist/cjs/createTokens.js +55 -0
  20. package/dist/cjs/createTokens.js.map +7 -0
  21. package/dist/cjs/createVariable.js +47 -0
  22. package/dist/cjs/createVariable.js.map +7 -0
  23. package/dist/cjs/helpers/addStylesUsingClassname.js +79 -0
  24. package/dist/cjs/helpers/addStylesUsingClassname.js.map +7 -0
  25. package/dist/cjs/helpers/createMediaStyle.js +56 -0
  26. package/dist/cjs/helpers/createMediaStyle.js.map +7 -0
  27. package/dist/cjs/helpers/createPropMapper.js +190 -0
  28. package/dist/cjs/helpers/createPropMapper.js.map +7 -0
  29. package/dist/cjs/helpers/createTamaguiProvider.js +74 -0
  30. package/dist/cjs/helpers/createTamaguiProvider.js.map +7 -0
  31. package/dist/cjs/helpers/extendStaticConfig.js +82 -0
  32. package/dist/cjs/helpers/extendStaticConfig.js.map +7 -0
  33. package/dist/cjs/helpers/fixNativeShadow.js +14 -0
  34. package/dist/cjs/helpers/fixNativeShadow.js.map +7 -0
  35. package/dist/cjs/helpers/fixNativeShadow.native.js +36 -0
  36. package/dist/cjs/helpers/fixNativeShadow.native.js.map +7 -0
  37. package/dist/cjs/helpers/getSplitStyles.js +180 -0
  38. package/dist/cjs/helpers/getSplitStyles.js.map +7 -0
  39. package/dist/cjs/helpers/getStylesAtomic.js +117 -0
  40. package/dist/cjs/helpers/getStylesAtomic.js.map +7 -0
  41. package/dist/cjs/helpers/getStylesAtomic.native.js +16 -0
  42. package/dist/cjs/helpers/getStylesAtomic.native.js.map +7 -0
  43. package/dist/cjs/helpers/insertStyleRule.js +46 -0
  44. package/dist/cjs/helpers/insertStyleRule.js.map +7 -0
  45. package/dist/cjs/helpers/isObj.js +13 -0
  46. package/dist/cjs/helpers/isObj.js.map +7 -0
  47. package/dist/cjs/helpers/isTamaguiElement.js +33 -0
  48. package/dist/cjs/helpers/isTamaguiElement.js.map +7 -0
  49. package/dist/cjs/helpers/matchMedia.js +24 -0
  50. package/dist/cjs/helpers/matchMedia.js.map +7 -0
  51. package/dist/cjs/helpers/matchMedia.native.js +31 -0
  52. package/dist/cjs/helpers/matchMedia.native.js.map +7 -0
  53. package/dist/cjs/helpers/themeable.js +78 -0
  54. package/dist/cjs/helpers/themeable.js.map +7 -0
  55. package/dist/cjs/helpers/validate.js +82 -0
  56. package/dist/cjs/helpers/validate.js.map +7 -0
  57. package/dist/cjs/hooks/useConstant.js +37 -0
  58. package/dist/cjs/hooks/useConstant.js.map +7 -0
  59. package/dist/cjs/hooks/useFeatures.js +100 -0
  60. package/dist/cjs/hooks/useFeatures.js.map +7 -0
  61. package/dist/cjs/hooks/useMedia.js +204 -0
  62. package/dist/cjs/hooks/useMedia.js.map +7 -0
  63. package/dist/cjs/hooks/usePressable.js +50 -0
  64. package/dist/cjs/hooks/usePressable.js.map +7 -0
  65. package/dist/cjs/hooks/useTheme.js +111 -0
  66. package/dist/cjs/hooks/useTheme.js.map +7 -0
  67. package/dist/cjs/index.js +55 -0
  68. package/dist/cjs/index.js.map +7 -0
  69. package/dist/cjs/static/postProcessStyles.js +40 -0
  70. package/dist/cjs/static/postProcessStyles.js.map +7 -0
  71. package/dist/cjs/static.js +34 -0
  72. package/dist/cjs/static.js.map +7 -0
  73. package/dist/cjs/styled.js +72 -0
  74. package/dist/cjs/styled.js.map +7 -0
  75. package/dist/cjs/types.js +4 -0
  76. package/dist/cjs/types.js.map +7 -0
  77. package/dist/cjs/views/Animated.js +129 -0
  78. package/dist/cjs/views/Animated.js.map +7 -0
  79. package/dist/cjs/views/Stack.js +51 -0
  80. package/dist/cjs/views/Stack.js.map +7 -0
  81. package/dist/cjs/views/Text.js +93 -0
  82. package/dist/cjs/views/Text.js.map +7 -0
  83. package/dist/cjs/views/TextAncestorContext.js +41 -0
  84. package/dist/cjs/views/TextAncestorContext.js.map +7 -0
  85. package/dist/cjs/views/Theme.js +88 -0
  86. package/dist/cjs/views/Theme.js.map +7 -0
  87. package/dist/cjs/views/ThemeContext.js +29 -0
  88. package/dist/cjs/views/ThemeContext.js.map +7 -0
  89. package/dist/cjs/views/ThemeInverse.js +48 -0
  90. package/dist/cjs/views/ThemeInverse.js.map +7 -0
  91. package/dist/cjs/views/ThemeManagerContext.js +84 -0
  92. package/dist/cjs/views/ThemeManagerContext.js.map +7 -0
  93. package/dist/cjs/views/ThemeProvider.js +67 -0
  94. package/dist/cjs/views/ThemeProvider.js.map +7 -0
  95. package/dist/createComponent.js +7 -3
  96. package/dist/createComponent.js.map +2 -2
  97. package/dist/createTamagui.js +4 -2
  98. package/dist/createTamagui.js.map +2 -2
  99. package/dist/helpers/createPropMapper.js +2 -2
  100. package/dist/helpers/createPropMapper.js.map +1 -1
  101. package/dist/helpers/getSplitStyles.js +12 -10
  102. package/dist/helpers/getSplitStyles.js.map +2 -2
  103. package/dist/helpers/matchMedia.js +3 -0
  104. package/dist/helpers/matchMedia.js.map +2 -2
  105. package/dist/helpers/matchMedia.native.js +1 -0
  106. package/dist/helpers/matchMedia.native.js.map +2 -2
  107. package/dist/hooks/useFeatures.js +39 -51
  108. package/dist/hooks/useFeatures.js.map +2 -2
  109. package/dist/hooks/useMedia.js.map +1 -1
  110. package/dist/hooks/useTheme.js +5 -9
  111. package/dist/hooks/useTheme.js.map +2 -2
  112. package/dist/index.cjs +51 -60
  113. package/dist/index.cjs.map +2 -2
  114. package/dist/views/ThemeManagerContext.js +4 -4
  115. package/dist/views/ThemeManagerContext.js.map +2 -2
  116. package/package.json +11 -10
  117. package/src/createComponent.tsx +7 -3
  118. package/src/createTamagui.ts +3 -1
  119. package/src/helpers/createPropMapper.ts +2 -2
  120. package/src/helpers/getSplitStyles.tsx +13 -10
  121. package/src/helpers/matchMedia.native.ts +3 -0
  122. package/src/helpers/matchMedia.ts +9 -1
  123. package/src/hooks/useFeatures.tsx +54 -53
  124. package/src/hooks/useMedia.tsx +1 -1
  125. package/src/hooks/useTheme.tsx +7 -8
  126. package/src/types.tsx +2 -2
  127. package/src/views/ThemeManagerContext.tsx +7 -5
  128. package/types.d.ts +7 -4
@@ -0,0 +1,531 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
25
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
26
+ var __objRest = (source, exclude) => {
27
+ var target = {};
28
+ for (var prop in source)
29
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
30
+ target[prop] = source[prop];
31
+ if (source != null && __getOwnPropSymbols)
32
+ for (var prop of __getOwnPropSymbols(source)) {
33
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
34
+ target[prop] = source[prop];
35
+ }
36
+ return target;
37
+ };
38
+ var __export = (target, all) => {
39
+ __markAsModule(target);
40
+ for (var name in all)
41
+ __defProp(target, name, { get: all[name], enumerable: true });
42
+ };
43
+ var __reExport = (target, module2, desc) => {
44
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
45
+ for (let key of __getOwnPropNames(module2))
46
+ if (!__hasOwnProp.call(target, key) && key !== "default")
47
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
48
+ }
49
+ return target;
50
+ };
51
+ var __toModule = (module2) => {
52
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
53
+ };
54
+ __export(exports, {
55
+ Spacer: () => Spacer,
56
+ createComponent: () => createComponent,
57
+ mouseUps: () => mouseUps,
58
+ spacedChildren: () => spacedChildren
59
+ });
60
+ var import_helpers = __toModule(require("@tamagui/helpers"));
61
+ var import_use_force_update = __toModule(require("@tamagui/use-force-update"));
62
+ var import_react = __toModule(require("react"));
63
+ var import_react_native = __toModule(require("react-native"));
64
+ var import_constants = __toModule(require("./constants/constants"));
65
+ var import_platform = __toModule(require("./constants/platform"));
66
+ var import_rnw = __toModule(require("./constants/rnw"));
67
+ var import_createTamagui = __toModule(require("./createTamagui"));
68
+ var import_addStylesUsingClassname = __toModule(require("./helpers/addStylesUsingClassname"));
69
+ var import_extendStaticConfig = __toModule(require("./helpers/extendStaticConfig"));
70
+ var import_getSplitStyles = __toModule(require("./helpers/getSplitStyles"));
71
+ var import_useFeatures = __toModule(require("./hooks/useFeatures"));
72
+ var import_usePressable = __toModule(require("./hooks/usePressable"));
73
+ var import_TextAncestorContext = __toModule(require("./views/TextAncestorContext"));
74
+ var import_ThemeManagerContext = __toModule(require("./views/ThemeManagerContext"));
75
+ const mouseUps = new Set();
76
+ if (typeof document !== "undefined") {
77
+ document.addEventListener("mouseup", () => {
78
+ mouseUps.forEach((x) => x());
79
+ mouseUps.clear();
80
+ });
81
+ }
82
+ function createComponent(configIn) {
83
+ let staticConfig;
84
+ if ("parsed" in configIn) {
85
+ staticConfig = configIn;
86
+ } else {
87
+ staticConfig = (0, import_extendStaticConfig.parseStaticConfig)(configIn);
88
+ }
89
+ const { Component, validStyles, isText, isZStack } = staticConfig;
90
+ const validStyleProps = validStyles ?? import_helpers.stylePropsView;
91
+ let defaultProps = null;
92
+ let tamaguiConfig;
93
+ let defaultsStyle;
94
+ let defaultsClassName = "";
95
+ let initialTheme;
96
+ const component = (0, import_react.forwardRef)((props, forwardedRef) => {
97
+ var _b;
98
+ const forceUpdate = (0, import_use_force_update.useForceUpdate)();
99
+ const features = (0, import_useFeatures.useFeatures)(props, { forceUpdate });
100
+ const manager = (0, import_react.useContext)(import_ThemeManagerContext.ThemeManagerContext);
101
+ const [state, set_] = (0, import_react.useState)(() => ({
102
+ hover: false,
103
+ press: false,
104
+ pressIn: false,
105
+ theme: manager.name
106
+ }));
107
+ const set = /* @__PURE__ */ __name((next) => set_((prev) => {
108
+ for (const key in next) {
109
+ if (prev[key] !== next[key]) {
110
+ return __spreadValues(__spreadValues({}, prev), next);
111
+ }
112
+ }
113
+ return prev;
114
+ }), "set");
115
+ if (process.env.NODE_ENV === "development" && !isText && import_platform.isWeb) {
116
+ import_react.Children.toArray(props.children).forEach((item) => {
117
+ if (typeof item === "string") {
118
+ console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`);
119
+ }
120
+ });
121
+ }
122
+ const hasTextAncestor = import_platform.isWeb ? (0, import_react.useContext)(import_TextAncestorContext.TextAncestorContext) : false;
123
+ const hostRef = (0, import_react.useRef)(null);
124
+ const {
125
+ viewProps: viewPropsIn,
126
+ pseudos,
127
+ style,
128
+ classNames
129
+ } = (0, import_getSplitStyles.getSplitStyles)(props, staticConfig, manager.theme || initialTheme);
130
+ const _a = viewPropsIn, {
131
+ tag,
132
+ hitSlop,
133
+ children,
134
+ pointerEvents,
135
+ onPress,
136
+ onPressIn,
137
+ onPressOut,
138
+ onHoverIn,
139
+ onHoverOut,
140
+ space,
141
+ disabled,
142
+ onMouseEnter,
143
+ onMouseLeave,
144
+ hrefAttrs,
145
+ onMoveShouldSetResponder,
146
+ onMoveShouldSetResponderCapture,
147
+ onResponderEnd,
148
+ onResponderGrant,
149
+ onResponderMove,
150
+ onResponderReject,
151
+ onResponderRelease,
152
+ onResponderStart,
153
+ onResponderTerminate,
154
+ onResponderTerminationRequest,
155
+ onScrollShouldSetResponder,
156
+ onScrollShouldSetResponderCapture,
157
+ onSelectionChangeShouldSetResponder,
158
+ onSelectionChangeShouldSetResponderCapture,
159
+ onStartShouldSetResponder,
160
+ onStartShouldSetResponderCapture,
161
+ onMouseDown,
162
+ onClick,
163
+ accessible,
164
+ accessibilityRole,
165
+ onLayout
166
+ } = _a, viewProps = __objRest(_a, [
167
+ "tag",
168
+ "hitSlop",
169
+ "children",
170
+ "pointerEvents",
171
+ "onPress",
172
+ "onPressIn",
173
+ "onPressOut",
174
+ "onHoverIn",
175
+ "onHoverOut",
176
+ "space",
177
+ "disabled",
178
+ "onMouseEnter",
179
+ "onMouseLeave",
180
+ "hrefAttrs",
181
+ "onMoveShouldSetResponder",
182
+ "onMoveShouldSetResponderCapture",
183
+ "onResponderEnd",
184
+ "onResponderGrant",
185
+ "onResponderMove",
186
+ "onResponderReject",
187
+ "onResponderRelease",
188
+ "onResponderStart",
189
+ "onResponderTerminate",
190
+ "onResponderTerminationRequest",
191
+ "onScrollShouldSetResponder",
192
+ "onScrollShouldSetResponderCapture",
193
+ "onSelectionChangeShouldSetResponder",
194
+ "onSelectionChangeShouldSetResponderCapture",
195
+ "onStartShouldSetResponder",
196
+ "onStartShouldSetResponderCapture",
197
+ "onMouseDown",
198
+ "onClick",
199
+ "accessible",
200
+ "accessibilityRole",
201
+ "onLayout"
202
+ ]);
203
+ if (!import_platform.isWeb) {
204
+ if (accessible)
205
+ viewProps.accessible = accessible;
206
+ if (accessibilityRole)
207
+ viewProps.accessibilityRole = accessibilityRole;
208
+ }
209
+ if (import_platform.isWeb) {
210
+ import_rnw.rnw.useResponderEvents(hostRef, {
211
+ onMoveShouldSetResponder,
212
+ onMoveShouldSetResponderCapture,
213
+ onResponderEnd,
214
+ onResponderGrant,
215
+ onResponderMove,
216
+ onResponderReject,
217
+ onResponderRelease,
218
+ onResponderStart,
219
+ onResponderTerminate,
220
+ onResponderTerminationRequest,
221
+ onScrollShouldSetResponder,
222
+ onScrollShouldSetResponderCapture,
223
+ onSelectionChangeShouldSetResponder,
224
+ onSelectionChangeShouldSetResponderCapture,
225
+ onStartShouldSetResponder,
226
+ onStartShouldSetResponderCapture
227
+ });
228
+ }
229
+ const isTracking = (0, import_react.useRef)(false);
230
+ const internal = (0, import_react.useRef)();
231
+ if (!internal.current) {
232
+ internal.current = {
233
+ isMounted: true
234
+ };
235
+ }
236
+ (0, import_react.useEffect)(() => {
237
+ internal.current.isMounted = true;
238
+ const dispose = manager == null ? void 0 : manager.onChangeTheme((name) => {
239
+ if (isTracking.current) {
240
+ set({ theme: name });
241
+ }
242
+ });
243
+ return () => {
244
+ dispose();
245
+ mouseUps.delete(unPress);
246
+ isTracking.current = false;
247
+ internal.current.isMounted = false;
248
+ };
249
+ }, [manager]);
250
+ const element = import_platform.isWeb ? !Component || typeof Component === "string" ? tag || Component : Component : Component;
251
+ const ReactView = !import_platform.isWeb ? import_react_native.View : element || (hasTextAncestor ? "span" : "div");
252
+ const ReactText = !import_platform.isWeb ? import_react_native.Text : element || "span";
253
+ const ViewComponent = isText ? ReactText : ReactView;
254
+ const isHovering = !import_platform.isTouchDevice && !disabled && pseudos && state.hover;
255
+ const isPressing = !disabled && pseudos && state.press;
256
+ const styles = [
257
+ style,
258
+ isHovering ? pseudos.hoverStyle || null : null,
259
+ isPressing ? pseudos.pressStyle || null : null
260
+ ];
261
+ if (import_platform.isWeb) {
262
+ const stylesClassNames = (0, import_addStylesUsingClassname.useStylesAsClassname)(styles);
263
+ const classList = isText ? [
264
+ defaultsClassName,
265
+ classNames,
266
+ stylesClassNames,
267
+ props.className
268
+ ] : [defaultsClassName, props.className, classNames, stylesClassNames];
269
+ const className = (0, import_helpers.concatClassName)(...classList);
270
+ if (process.env.NODE_ENV === "development") {
271
+ if (props["debug"]) {
272
+ console.log("\u{1F95A} className", { style, styles, classList, stylesClassNames, className });
273
+ }
274
+ }
275
+ viewProps.className = className;
276
+ } else {
277
+ viewProps.style = styles;
278
+ }
279
+ if (pointerEvents) {
280
+ viewProps.pointerEvents = pointerEvents;
281
+ }
282
+ if (import_platform.isWeb) {
283
+ const platformMethodsRef = import_rnw.rnw.usePlatformMethods(viewProps);
284
+ const setRef = import_rnw.rnw.useMergeRefs(hostRef, platformMethodsRef, forwardedRef);
285
+ viewProps.ref = setRef;
286
+ if (props.href != null && hrefAttrs != null) {
287
+ const { download, rel, target } = hrefAttrs;
288
+ if (download != null) {
289
+ viewProps.download = download;
290
+ }
291
+ if (rel != null) {
292
+ viewProps.rel = rel;
293
+ }
294
+ if (typeof target === "string") {
295
+ viewProps.target = target.charAt(0) !== "_" ? "_" + target : target;
296
+ }
297
+ }
298
+ } else {
299
+ if (forwardedRef) {
300
+ viewProps.ref = forwardedRef;
301
+ }
302
+ }
303
+ const attachPress = !!(pseudos && pseudos.pressStyle || onPress || onPressOut || onPressIn || onClick);
304
+ const attachHover = import_platform.isWeb && !import_platform.isTouchDevice && !!(pseudos && pseudos.hoverStyle || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave);
305
+ const shouldAttach = internal.current.hasEverHadEvents || attachPress || attachHover || "pressStyle" in props || "onPress" in props || "onPressIn" in props || "onPressOut" in props || import_platform.isWeb && ("hoverStyle" in props || "onClick" in props || "onHoverIn" in props || "onHoverOut" in props || "onMouseEnter" in props || "onMouseLeave" in props);
306
+ if (shouldAttach) {
307
+ internal.current.hasEverHadEvents = true;
308
+ }
309
+ const unPress = (0, import_react.useCallback)(() => {
310
+ if (!internal.current.isMounted)
311
+ return;
312
+ set({
313
+ press: false,
314
+ pressIn: false
315
+ });
316
+ }, []);
317
+ const events = shouldAttach ? __spreadProps(__spreadValues(__spreadValues({}, !import_platform.isWeb && {
318
+ onPressOut: (e) => {
319
+ unPress();
320
+ onPressOut == null ? void 0 : onPressOut(e);
321
+ }
322
+ }), import_platform.isWeb && !import_platform.isTouchDevice && {
323
+ onMouseEnter: attachHover || attachPress ? (e) => {
324
+ let next = {};
325
+ if (attachHover) {
326
+ next.hover = true;
327
+ }
328
+ if (state.pressIn) {
329
+ next.press = true;
330
+ }
331
+ if (Object.keys(next).length) {
332
+ set(next);
333
+ }
334
+ onHoverIn == null ? void 0 : onHoverIn(e);
335
+ onMouseEnter == null ? void 0 : onMouseEnter(e);
336
+ } : void 0,
337
+ onMouseLeave: attachHover || attachPress ? (e) => {
338
+ let next = {};
339
+ mouseUps.add(unPress);
340
+ if (attachHover) {
341
+ next.hover = false;
342
+ }
343
+ if (state.pressIn) {
344
+ next.press = false;
345
+ next.pressIn = false;
346
+ }
347
+ if (Object.keys(next).length) {
348
+ set(next);
349
+ }
350
+ onHoverOut == null ? void 0 : onHoverOut(e);
351
+ onMouseLeave == null ? void 0 : onMouseLeave(e);
352
+ } : void 0
353
+ }), {
354
+ onMouseDown: attachPress ? (e) => {
355
+ set({
356
+ press: true,
357
+ pressIn: true
358
+ });
359
+ onPressIn == null ? void 0 : onPressIn(e);
360
+ onMouseDown == null ? void 0 : onMouseDown(e);
361
+ } : onPressIn,
362
+ onClick: attachPress ? (e) => {
363
+ onPress == null ? void 0 : onPress(e);
364
+ onClick == null ? void 0 : onClick(e);
365
+ unPress();
366
+ onPressOut == null ? void 0 : onPressOut(e);
367
+ } : onPressOut
368
+ }) : null;
369
+ if (events) {
370
+ if (typeof ViewComponent !== "string") {
371
+ const [pressProps] = (0, import_usePressable.usePressable)({
372
+ disabled,
373
+ hitSlop,
374
+ onPressIn: events.onMouseDown,
375
+ onPressOut: events.onPressOut,
376
+ onPress: events.onClick
377
+ });
378
+ Object.assign(viewProps, pressProps);
379
+ } else {
380
+ Object.assign(viewProps, events);
381
+ }
382
+ }
383
+ const childEls = spacedChildren({
384
+ children,
385
+ space,
386
+ flexDirection: props.flexDirection || (defaultProps == null ? void 0 : defaultProps.flexDirection),
387
+ isZStack
388
+ });
389
+ let content;
390
+ if (import_platform.isWeb && import_rnw.rnw) {
391
+ const domProps = import_rnw.rnw.createDOMProps(viewProps);
392
+ const className = domProps.className && domProps.className !== viewProps.className ? `${domProps.className} ${viewProps.className}` : viewProps.className;
393
+ Object.assign(viewProps, domProps);
394
+ viewProps.className = className;
395
+ content = (0, import_react.createElement)(ViewComponent, viewProps, childEls);
396
+ } else {
397
+ content = (0, import_react.createElement)(ViewComponent, viewProps, childEls);
398
+ }
399
+ const shouldWrapTextAncestor = import_platform.isWeb && isText && !hasTextAncestor;
400
+ if (shouldWrapTextAncestor) {
401
+ content = (0, import_react.createElement)(import_TextAncestorContext.TextAncestorContext.Provider, { value: true }, content);
402
+ }
403
+ if (process.env.NODE_ENV === "development") {
404
+ if (props["debug"]) {
405
+ viewProps["debug"] = true;
406
+ console.log("\u{1F95A} props in:", props);
407
+ console.log("\u{1F95A} props out:", viewProps);
408
+ console.log((_b = props.onClick) == null ? void 0 : _b.toString());
409
+ console.log("\u{1F95A} etc:", { shouldAttach, ViewComponent, viewProps, styles, pseudos, content, childEls });
410
+ if (import_platform.isWeb) {
411
+ console.log("\u{1F95A} component info", { staticConfig, tamaguiConfig });
412
+ }
413
+ }
414
+ }
415
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, features, content);
416
+ });
417
+ (0, import_createTamagui.onConfiguredOnce)((conf) => {
418
+ var _a;
419
+ tamaguiConfig = conf;
420
+ initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]];
421
+ const next = (0, import_getSplitStyles.getSplitStyles)(staticConfig.defaultProps, staticConfig, initialTheme, true);
422
+ if (import_platform.isWeb) {
423
+ if (next.classNames) {
424
+ defaultsClassName += next.classNames + " ";
425
+ }
426
+ defaultsClassName += (0, import_addStylesUsingClassname.addStylesUsingClassname)([next.style, next.pseudos]);
427
+ } else {
428
+ if (!hasWarnedOnce) {
429
+ hasWarnedOnce = true;
430
+ console.log("\u26A0\uFE0F TODO account for default styles for media queries");
431
+ }
432
+ }
433
+ component.defaultProps = __spreadValues(__spreadValues({}, next.viewProps), component.defaultProps);
434
+ if (process.env.NODE_ENV === "development") {
435
+ if ((_a = staticConfig.defaultProps) == null ? void 0 : _a.debug) {
436
+ console.log("tamagui debug component:", next, defaultsClassName, component.defaultProps);
437
+ }
438
+ }
439
+ });
440
+ component["staticConfig"] = __spreadValues({
441
+ validStyles: validStyleProps
442
+ }, staticConfig);
443
+ const res = component;
444
+ res["extractable"] = (Component2, conf) => {
445
+ Component2["staticConfig"] = (0, import_extendStaticConfig.extendStaticConfig)(res, __spreadProps(__spreadValues({}, conf), {
446
+ neverFlatten: true,
447
+ defaultProps: __spreadValues(__spreadValues({}, Component2.defaultProps), conf == null ? void 0 : conf.defaultProps)
448
+ }));
449
+ return Component2;
450
+ };
451
+ return res;
452
+ }
453
+ __name(createComponent, "createComponent");
454
+ let hasWarnedOnce = false;
455
+ const Spacer = createComponent({
456
+ defaultProps: __spreadProps(__spreadValues({}, import_constants.stackDefaultStyles), {
457
+ size: true
458
+ }),
459
+ variants: {
460
+ size: {
461
+ "...size": (size, { tokens }) => {
462
+ size = size == true ? "$true" : size;
463
+ return {
464
+ width: tokens.size[size] ?? size,
465
+ height: tokens.size[size] ?? size
466
+ };
467
+ }
468
+ },
469
+ direction: {
470
+ horizontal: {
471
+ height: 0
472
+ },
473
+ vertical: {
474
+ width: 0
475
+ }
476
+ }
477
+ }
478
+ });
479
+ function spacedChildren({
480
+ isZStack,
481
+ children,
482
+ space,
483
+ flexDirection
484
+ }) {
485
+ var _a;
486
+ if (!space && !isZStack) {
487
+ return children;
488
+ }
489
+ const childrenList = import_react.Children.toArray(children);
490
+ const len = childrenList.length;
491
+ if (len === 1) {
492
+ return children;
493
+ }
494
+ const next = [];
495
+ for (const [index, child] of childrenList.entries()) {
496
+ if (child === null || child === void 0) {
497
+ continue;
498
+ }
499
+ const key = `${(child == null ? void 0 : child["key"]) ?? index}`;
500
+ next.push(/* @__PURE__ */ import_react.default.createElement(import_react.Fragment, {
501
+ key
502
+ }, isZStack ? /* @__PURE__ */ import_react.default.createElement(Absolute, null, child) : child));
503
+ if ((_a = child == null ? void 0 : child["type"]) == null ? void 0 : _a["isVisuallyHidden"]) {
504
+ continue;
505
+ }
506
+ if (index !== len - 1) {
507
+ if (space) {
508
+ next.push(/* @__PURE__ */ import_react.default.createElement(Spacer, {
509
+ key: `${key}_spacer`,
510
+ direction: flexDirection === "row" || flexDirection === "row-reverse" ? "horizontal" : "vertical",
511
+ size: space
512
+ }));
513
+ }
514
+ }
515
+ }
516
+ return next;
517
+ }
518
+ __name(spacedChildren, "spacedChildren");
519
+ const Absolute = /* @__PURE__ */ __name(({ children }) => /* @__PURE__ */ import_react.default.createElement(import_react_native.View, {
520
+ style: sheet.fullscreen
521
+ }, children), "Absolute");
522
+ const sheet = import_react_native.StyleSheet.create({
523
+ fullscreen: {
524
+ position: "absolute",
525
+ top: 0,
526
+ left: 0,
527
+ right: 0,
528
+ bottom: 0
529
+ }
530
+ });
531
+ //# sourceMappingURL=createComponent.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createComponent.tsx"],
4
+ "sourcesContent": ["import { concatClassName, stylePropsView } from '@tamagui/helpers'\nimport { useForceUpdate } from '@tamagui/use-force-update'\nimport React, {\n Children,\n Fragment,\n createElement,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { StyleSheet, Text, View, ViewStyle } from 'react-native'\n\nimport { stackDefaultStyles } from './constants/constants'\nimport { isTouchDevice, isWeb } from './constants/platform'\nimport { rnw } from './constants/rnw'\nimport { onConfiguredOnce } from './createTamagui'\nimport { addStylesUsingClassname, useStylesAsClassname } from './helpers/addStylesUsingClassname'\nimport { extendStaticConfig, parseStaticConfig } from './helpers/extendStaticConfig'\nimport { getSplitStyles } from './helpers/getSplitStyles'\nimport { useFeatures } from './hooks/useFeatures'\nimport { usePressable } from './hooks/usePressable'\nimport {\n SpaceTokens,\n StaticComponent,\n StaticConfig,\n StaticConfigParsed,\n TamaguiInternalConfig,\n} from './types'\nimport { TextAncestorContext } from './views/TextAncestorContext'\nimport { ThemeManagerContext } from './views/ThemeManagerContext'\n\nexport const mouseUps = new Set<Function>()\n\nif (typeof document !== 'undefined') {\n document.addEventListener('mouseup', () => {\n mouseUps.forEach((x) => x())\n mouseUps.clear()\n })\n}\n\ntype DefaultProps = {}\n\nexport function createComponent<A extends Object = DefaultProps>(\n configIn: Partial<StaticConfig> | StaticConfigParsed\n) {\n let staticConfig: StaticConfigParsed\n if ('parsed' in configIn) {\n staticConfig = configIn\n } else {\n staticConfig = parseStaticConfig(configIn)\n }\n\n const { Component, validStyles, isText, isZStack } = staticConfig\n const validStyleProps = validStyles ?? stylePropsView\n\n // split out default styles vs props so we can assign it to component.defaultProps\n let defaultProps = null as any\n let tamaguiConfig: TamaguiInternalConfig\n\n // web uses className, native uses style\n let defaultsStyle: any\n let defaultsClassName = ''\n let initialTheme: any\n\n // see onConfiguredOnce below which attaches a name then to this component\n\n const component = forwardRef<View, A>((props: any, forwardedRef) => {\n const forceUpdate = useForceUpdate()\n const features = useFeatures(props, { forceUpdate })\n const manager = useContext(ThemeManagerContext)\n const [state, set_] = useState(() => ({\n hover: false,\n press: false,\n pressIn: false,\n theme: manager.name,\n }))\n const set = (next: Partial<typeof state>) =>\n set_((prev) => {\n for (const key in next) {\n if (prev[key] !== next[key]) {\n return { ...prev, ...next }\n }\n }\n return prev\n })\n\n // from react-native-web\n if (process.env.NODE_ENV === 'development' && !isText && isWeb) {\n Children.toArray(props.children).forEach((item) => {\n if (typeof item === 'string') {\n console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`)\n }\n })\n }\n\n const hasTextAncestor = isWeb ? useContext(TextAncestorContext) : false\n const hostRef = useRef(null)\n\n const {\n viewProps: viewPropsIn,\n pseudos,\n style,\n classNames,\n } = getSplitStyles(props, staticConfig, (manager.theme as any) || initialTheme)\n\n const {\n tag,\n hitSlop,\n children,\n pointerEvents,\n onPress,\n onPressIn,\n onPressOut,\n onHoverIn,\n onHoverOut,\n space,\n disabled,\n onMouseEnter,\n onMouseLeave,\n hrefAttrs,\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n onMouseDown,\n onClick,\n\n accessible,\n accessibilityRole,\n\n // TODO feature load layout hook\n onLayout,\n ...viewProps\n } = viewPropsIn\n\n if (!isWeb) {\n if (accessible) viewProps.accessible = accessible\n if (accessibilityRole) viewProps.accessibilityRole = accessibilityRole\n }\n\n if (isWeb) {\n // from react-native-web\n rnw.useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n })\n }\n\n const isTracking = useRef(false)\n\n // hasEverHadEvents prevents repareting if you remove onPress or similar...\n const internal = useRef<{ isMounted: boolean; hasEverHadEvents?: boolean }>()\n if (!internal.current) {\n internal.current = {\n isMounted: true,\n }\n }\n\n useEffect(() => {\n internal.current!.isMounted = true\n const dispose = manager?.onChangeTheme((name) => {\n if (isTracking.current) {\n set({ theme: name })\n }\n })\n return () => {\n dispose()\n mouseUps.delete(unPress)\n isTracking.current = false\n internal.current!.isMounted = false\n }\n }, [manager])\n\n // element\n const element = isWeb\n ? !Component || typeof Component === 'string'\n ? // default to tag, fallback to component (when both strings)\n tag || Component\n : Component\n : Component\n const ReactView = !isWeb ? View : element || (hasTextAncestor ? 'span' : 'div')\n const ReactText = !isWeb ? Text : element || 'span'\n const ViewComponent = isText ? ReactText : ReactView\n\n // styles\n const isHovering = !isTouchDevice && !disabled && pseudos && state.hover\n const isPressing = !disabled && pseudos && state.press\n\n const styles = [\n // parity w react-native-web, only for text in text\n // TODO this should be able to be done w css to replicate after extraction:\n // (.text .text { display: inline-flex; }) (but if they set display we'd need stronger precendence)\n // isText && hasTextAncestor && isWeb ? { display: 'inline-flex' } : null,\n style,\n isHovering ? pseudos.hoverStyle || null : null,\n isPressing ? pseudos.pressStyle || null : null,\n ]\n\n if (isWeb) {\n const stylesClassNames = useStylesAsClassname(styles)\n const classList = isText\n ? [\n defaultsClassName,\n // hasTextAncestor === true && cssText.textHasAncestor,\n // TODO MOVE TO VARIANTS [number] [any]\n // numberOfLines != null && numberOfLines > 1 && cssText.textMultiLine,\n classNames,\n stylesClassNames,\n props.className,\n ]\n : [defaultsClassName, props.className, classNames, stylesClassNames]\n\n // @ts-expect-error\n const className = concatClassName(...classList)\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n // prettier-ignore\n console.log('\uD83E\uDD5A className', { style, styles, classList, stylesClassNames, className })\n }\n }\n viewProps.className = className\n } else {\n viewProps.style = styles\n }\n\n if (pointerEvents) {\n viewProps.pointerEvents = pointerEvents\n }\n\n if (isWeb) {\n // from react-native-web\n const platformMethodsRef = rnw.usePlatformMethods(viewProps)\n const setRef = rnw.useMergeRefs(hostRef, platformMethodsRef, forwardedRef)\n viewProps.ref = setRef\n if (props.href != null && hrefAttrs != null) {\n const { download, rel, target } = hrefAttrs\n if (download != null) {\n viewProps.download = download\n }\n if (rel != null) {\n viewProps.rel = rel\n }\n if (typeof target === 'string') {\n viewProps.target = target.charAt(0) !== '_' ? '_' + target : target\n }\n }\n } else {\n if (forwardedRef) {\n viewProps.ref = forwardedRef\n }\n }\n\n const attachPress = !!(\n (pseudos && pseudos.pressStyle) ||\n onPress ||\n onPressOut ||\n onPressIn ||\n onClick\n )\n const attachHover =\n isWeb &&\n !isTouchDevice &&\n !!((pseudos && pseudos.hoverStyle) || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave)\n\n // check presence to prevent reparenting bugs, allows for onPress={x ? function : undefined} usage\n // while avoiding reparenting...\n // once proper reparenting is supported, we can remove this and use that...\n const shouldAttach =\n internal.current.hasEverHadEvents ||\n attachPress ||\n attachHover ||\n 'pressStyle' in props ||\n 'onPress' in props ||\n 'onPressIn' in props ||\n 'onPressOut' in props ||\n (isWeb &&\n ('hoverStyle' in props ||\n 'onClick' in props ||\n 'onHoverIn' in props ||\n 'onHoverOut' in props ||\n 'onMouseEnter' in props ||\n 'onMouseLeave' in props))\n\n // never remove events as we wrap in a div (for now, may be able to remove..)\n if (shouldAttach) {\n internal.current.hasEverHadEvents = true\n }\n\n const unPress = useCallback(() => {\n if (!internal.current!.isMounted) return\n set({\n press: false,\n pressIn: false,\n })\n }, [])\n\n const events = shouldAttach\n ? {\n ...(!isWeb && {\n // non web\n onPressOut: (e) => {\n unPress()\n onPressOut?.(e)\n },\n }),\n ...(isWeb &&\n !isTouchDevice && {\n onMouseEnter:\n attachHover || attachPress\n ? (e) => {\n let next: Partial<typeof state> = {}\n if (attachHover) {\n next.hover = true\n }\n if (state.pressIn) {\n next.press = true\n }\n if (Object.keys(next).length) {\n set(next)\n }\n onHoverIn?.(e)\n onMouseEnter?.(e)\n }\n : undefined,\n onMouseLeave:\n attachHover || attachPress\n ? (e) => {\n let next: Partial<typeof state> = {}\n mouseUps.add(unPress)\n if (attachHover) {\n next.hover = false\n }\n if (state.pressIn) {\n next.press = false\n next.pressIn = false\n }\n if (Object.keys(next).length) {\n set(next)\n }\n onHoverOut?.(e)\n onMouseLeave?.(e)\n }\n : undefined,\n }),\n onMouseDown: attachPress\n ? (e) => {\n set({\n press: true,\n pressIn: true,\n })\n onPressIn?.(e)\n onMouseDown?.(e)\n }\n : (onPressIn as any),\n onClick: attachPress\n ? (e) => {\n // this caused issue with next.js passing href\n // e.preventDefault()\n onPress?.(e)\n onClick?.(e)\n unPress()\n onPressOut?.(e)\n }\n : (onPressOut as any),\n }\n : null\n\n if (events) {\n if (typeof ViewComponent !== 'string') {\n // TODO once we do the above we can then rely entirely on pressStyle returned here isntead of above pressStyle logic\n const [pressProps] = usePressable({\n disabled,\n hitSlop,\n onPressIn: events.onMouseDown,\n onPressOut: events.onPressOut,\n onPress: events.onClick,\n })\n Object.assign(viewProps, pressProps)\n } else {\n Object.assign(viewProps, events)\n }\n }\n\n const childEls = spacedChildren({\n children,\n space,\n flexDirection: props.flexDirection || defaultProps?.flexDirection,\n isZStack: isZStack,\n })\n\n let content: any\n\n // replicate react-native-web's `createElement`\n if (isWeb && rnw) {\n const domProps = rnw.createDOMProps(viewProps)\n const className =\n domProps.className && domProps.className !== viewProps.className\n ? `${domProps.className} ${viewProps.className}`\n : viewProps.className\n Object.assign(viewProps, domProps)\n viewProps.className = className\n content = createElement(ViewComponent, viewProps, childEls)\n } else {\n content = createElement(ViewComponent, viewProps, childEls)\n }\n\n const shouldWrapTextAncestor = isWeb && isText && !hasTextAncestor\n if (shouldWrapTextAncestor) {\n // from react-native-web\n // @ts-ignore\n content = createElement(TextAncestorContext.Provider, { value: true }, content)\n }\n\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n viewProps['debug'] = true\n console.log('\uD83E\uDD5A props in:', props)\n console.log('\uD83E\uDD5A props out:', viewProps)\n console.log(props.onClick?.toString())\n // prettier-ignore\n console.log('\uD83E\uDD5A etc:', { shouldAttach, ViewComponent, viewProps, styles, pseudos, content, childEls })\n // only on browser because node expands it huge\n if (isWeb) {\n console.log('\uD83E\uDD5A component info', { staticConfig, tamaguiConfig })\n }\n }\n }\n\n return (\n <>\n {features}\n {content}\n </>\n )\n })\n\n // Once configuration is run and all components are registered\n // get default props + className and analyze styles\n onConfiguredOnce((conf) => {\n tamaguiConfig = conf\n initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]]\n const next = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, true)\n if (isWeb) {\n if (next.classNames) {\n defaultsClassName += next.classNames + ' '\n }\n defaultsClassName += addStylesUsingClassname([next.style, next.pseudos])\n } else {\n if (!hasWarnedOnce) {\n hasWarnedOnce = true\n console.log('\u26A0\uFE0F TODO account for default styles for media queries')\n }\n }\n // @ts-ignore\n component.defaultProps = {\n ...next.viewProps,\n ...component.defaultProps,\n }\n if (process.env.NODE_ENV === 'development') {\n if (staticConfig.defaultProps?.debug) {\n console.log('tamagui debug component:', next, defaultsClassName, component.defaultProps)\n }\n }\n })\n\n component['staticConfig'] = {\n validStyles: validStyleProps,\n ...staticConfig,\n }\n\n const res = component as any as StaticComponent<A, void>\n\n // add extractable HoC\n res['extractable'] = (Component: any, conf?: StaticConfig) => {\n Component['staticConfig'] = extendStaticConfig(res, {\n ...conf,\n neverFlatten: true,\n defaultProps: {\n ...Component.defaultProps,\n ...conf?.defaultProps,\n },\n })\n return Component\n }\n\n return res\n}\n\nlet hasWarnedOnce = false\n\n// dont used styled() here to avoid circular deps\n// keep inline to avoid circular deps\n\nexport const Spacer = createComponent<{ size?: number | SpaceTokens; flex?: boolean | number }>({\n defaultProps: {\n ...stackDefaultStyles,\n size: true,\n },\n variants: {\n size: {\n '...size': (size, { tokens }) => {\n size = size == true ? '$true' : size\n return {\n width: tokens.size[size] ?? size,\n height: tokens.size[size] ?? size,\n }\n },\n },\n\n direction: {\n horizontal: {\n height: 0,\n },\n vertical: {\n width: 0,\n },\n },\n },\n})\n\nexport function spacedChildren({\n isZStack,\n children,\n space,\n flexDirection,\n}: {\n isZStack?: boolean\n children: any\n space?: any\n flexDirection?: ViewStyle['flexDirection']\n}) {\n if (!space && !isZStack) {\n return children\n }\n const childrenList = Children.toArray(children)\n const len = childrenList.length\n if (len === 1) {\n return children\n }\n const next: any[] = []\n for (const [index, child] of childrenList.entries()) {\n if (child === null || child === undefined) {\n continue\n }\n\n const key = `${child?.['key'] ?? index}`\n\n next.push(<Fragment key={key}>{isZStack ? <Absolute>{child}</Absolute> : child}</Fragment>)\n\n // allows for custom visually hidden components that dont insert spacing\n if (child?.['type']?.['isVisuallyHidden']) {\n continue\n }\n\n if (index !== len - 1) {\n if (space) {\n next.push(\n <Spacer\n key={`${key}_spacer`}\n // @ts-ignore TODO\n direction={\n flexDirection === 'row' || flexDirection === 'row-reverse' ? 'horizontal' : 'vertical'\n }\n size={space}\n />\n )\n }\n }\n }\n return next\n}\n\n// for now not so \"tamagui-y\"\nconst Absolute = ({ children }) => <View style={sheet.fullscreen}>{children}</View>\nconst sheet = StyleSheet.create({\n fullscreen: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n})\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,50 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __export = (target, all) => {
10
+ __markAsModule(target);
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __reExport = (target, module2, desc) => {
15
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
16
+ for (let key of __getOwnPropNames(module2))
17
+ if (!__hasOwnProp.call(target, key) && key !== "default")
18
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
19
+ }
20
+ return target;
21
+ };
22
+ var __toModule = (module2) => {
23
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
24
+ };
25
+ __export(exports, {
26
+ createFont: () => createFont
27
+ });
28
+ var import_validate = __toModule(require("./helpers/validate"));
29
+ const createFont = /* @__PURE__ */ __name((font) => {
30
+ if (process.env.NODE_ENV === "development") {
31
+ (0, import_validate.validateFont)(font);
32
+ }
33
+ const sizeKeys = Object.keys(font.size);
34
+ for (const key in font) {
35
+ if (key === "size" || key === "family")
36
+ continue;
37
+ const section = font[key];
38
+ const keys = Object.keys(section);
39
+ let fillVal = section[keys[0]];
40
+ for (const sKey of sizeKeys) {
41
+ if (!(sKey in section)) {
42
+ section[sKey] = fillVal;
43
+ } else {
44
+ fillVal = section[sKey];
45
+ }
46
+ }
47
+ }
48
+ return Object.freeze(font);
49
+ }, "createFont");
50
+ //# sourceMappingURL=createFont.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createFont.ts"],
4
+ "sourcesContent": ["import { validateFont } from './helpers/validate'\nimport { GenericFont } from './types'\n\nexport const createFont = <A extends GenericFont>(font: A): A => {\n if (process.env.NODE_ENV === 'development') {\n validateFont(font)\n }\n\n // fills in any missing values based on size keys being standard\n const sizeKeys = Object.keys(font.size)\n\n for (const key in font) {\n if (key === 'size' || key === 'family') continue\n const section = font[key]\n const keys = Object.keys(section)\n\n // fill with first filled in value to start\n let fillVal = section[keys[0]]\n\n for (const sKey of sizeKeys) {\n if (!(sKey in section)) {\n section[sKey] = fillVal\n } else {\n // if exists, set as the fillVal\n fillVal = section[sKey]\n }\n }\n }\n\n return Object.freeze(font)\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,sBAA6B;AAGtB,MAAM,aAAa,wBAAwB,SAAe;AAC/D,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,sCAAa;AAAA;AAIf,QAAM,WAAW,OAAO,KAAK,KAAK;AAElC,aAAW,OAAO,MAAM;AACtB,QAAI,QAAQ,UAAU,QAAQ;AAAU;AACxC,UAAM,UAAU,KAAK;AACrB,UAAM,OAAO,OAAO,KAAK;AAGzB,QAAI,UAAU,QAAQ,KAAK;AAE3B,eAAW,QAAQ,UAAU;AAC3B,UAAI,CAAE,SAAQ,UAAU;AACtB,gBAAQ,QAAQ;AAAA,aACX;AAEL,kBAAU,QAAQ;AAAA;AAAA;AAAA;AAKxB,SAAO,OAAO,OAAO;AAAA,GA1BG;",
6
+ "names": []
7
+ }
@@ -0,0 +1,16 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
+ var __export = (target, all) => {
5
+ __markAsModule(target);
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ __export(exports, {
10
+ createShorthands: () => createShorthands
11
+ });
12
+ function createShorthands(shorthands) {
13
+ return Object.freeze(shorthands);
14
+ }
15
+ __name(createShorthands, "createShorthands");
16
+ //# sourceMappingURL=createShorthands.js.map