@tamagui/web 1.74.3 → 1.74.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/dist/cjs/helpers/getAnimationDriver.js +28 -0
  2. package/dist/cjs/helpers/getAnimationDriver.js.map +6 -0
  3. package/dist/cjs/helpers/getAnimationDriver.native.js +29 -0
  4. package/dist/cjs/helpers/getAnimationDriver.native.js.map +6 -0
  5. package/dist/cjs/helpers/propMapper.js +24 -19
  6. package/dist/cjs/helpers/propMapper.js.map +1 -1
  7. package/dist/cjs/helpers/propMapper.native.js +24 -19
  8. package/dist/cjs/helpers/propMapper.native.js.map +1 -1
  9. package/dist/cjs/hooks/useAnimationDriver.js +26 -0
  10. package/dist/cjs/hooks/useAnimationDriver.js.map +6 -0
  11. package/dist/cjs/hooks/useAnimationDriver.native.js +27 -0
  12. package/dist/cjs/hooks/useAnimationDriver.native.js.map +6 -0
  13. package/dist/cjs/hooks/useStyle.js +47 -0
  14. package/dist/cjs/hooks/useStyle.js.map +6 -0
  15. package/dist/cjs/hooks/useStyle.native.js +48 -0
  16. package/dist/cjs/hooks/useStyle.native.js.map +6 -0
  17. package/dist/cjs/hooks/useTheme.js +1 -1
  18. package/dist/cjs/hooks/useTheme.js.map +1 -1
  19. package/dist/cjs/hooks/useTheme.native.js +2 -2
  20. package/dist/cjs/hooks/useTheme.native.js.map +1 -1
  21. package/dist/cjs/views/AnimationDriverProvider.js +26 -0
  22. package/dist/cjs/views/AnimationDriverProvider.js.map +6 -0
  23. package/dist/cjs/views/AnimationDriverProvider.native.js +27 -0
  24. package/dist/cjs/views/AnimationDriverProvider.native.js.map +6 -0
  25. package/dist/esm/Tamagui.native.js +36 -0
  26. package/dist/esm/Tamagui.native.js.map +6 -0
  27. package/dist/esm/config.native.js +62 -0
  28. package/dist/esm/config.native.js.map +6 -0
  29. package/dist/esm/constants/accessibilityDirectMap.native.js +59 -0
  30. package/dist/esm/constants/accessibilityDirectMap.native.js.map +6 -0
  31. package/dist/esm/constants/constants.native.js +9 -0
  32. package/dist/esm/constants/constants.native.js.map +6 -0
  33. package/dist/esm/constants/isDevTools.native.js +12 -0
  34. package/dist/esm/constants/isDevTools.native.js.map +6 -0
  35. package/dist/esm/contexts/ComponentContext.native.js +22 -0
  36. package/dist/esm/contexts/ComponentContext.native.js.map +6 -0
  37. package/dist/esm/createComponent.native.js +683 -0
  38. package/dist/esm/createComponent.native.js.map +6 -0
  39. package/dist/esm/createFont.native.js +38 -0
  40. package/dist/esm/createFont.native.js.map +6 -0
  41. package/dist/esm/createShorthands.native.js +7 -0
  42. package/dist/esm/createShorthands.native.js.map +6 -0
  43. package/dist/esm/createTamagui.native.js +181 -0
  44. package/dist/esm/createTamagui.native.js.map +6 -0
  45. package/dist/esm/createTheme.native.js +5 -0
  46. package/dist/esm/createTheme.native.js.map +6 -0
  47. package/dist/esm/createTokens.native.js +8 -0
  48. package/dist/esm/createTokens.native.js.map +6 -0
  49. package/dist/esm/createVariable.native.js +57 -0
  50. package/dist/esm/createVariable.native.js.map +6 -0
  51. package/dist/esm/createVariables.native.js +34 -0
  52. package/dist/esm/createVariables.native.js.map +6 -0
  53. package/dist/esm/defaultComponentState.native.js +19 -0
  54. package/dist/esm/defaultComponentState.native.js.map +6 -0
  55. package/dist/esm/helpers/ThemeManager.native.js +157 -0
  56. package/dist/esm/helpers/ThemeManager.native.js.map +6 -0
  57. package/dist/esm/helpers/ThemeManagerContext.native.js +6 -0
  58. package/dist/esm/helpers/ThemeManagerContext.native.js.map +6 -0
  59. package/dist/esm/helpers/createChainedWeakCache.native.js +33 -0
  60. package/dist/esm/helpers/createChainedWeakCache.native.js.map +6 -0
  61. package/dist/esm/helpers/createMediaStyle.native.js +52 -0
  62. package/dist/esm/helpers/createMediaStyle.native.js.map +6 -0
  63. package/dist/esm/helpers/createProxy.native.js +14 -0
  64. package/dist/esm/helpers/createProxy.native.js.map +6 -0
  65. package/dist/esm/helpers/createShallowSetState.native.js +14 -0
  66. package/dist/esm/helpers/createShallowSetState.native.js.map +6 -0
  67. package/dist/esm/helpers/createStyledContext.native.js +30 -0
  68. package/dist/esm/helpers/createStyledContext.native.js.map +6 -0
  69. package/dist/esm/helpers/defaultOffset.native.js +5 -0
  70. package/dist/esm/helpers/defaultOffset.native.js.map +6 -0
  71. package/dist/esm/helpers/expandStyle.native.js +43 -0
  72. package/dist/esm/helpers/expandStyle.native.js.map +6 -0
  73. package/dist/esm/helpers/expandStyles.native.js +37 -0
  74. package/dist/esm/helpers/expandStyles.native.js.map +6 -0
  75. package/dist/esm/helpers/getAnimationDriver.js +8 -0
  76. package/dist/esm/helpers/getAnimationDriver.js.map +6 -0
  77. package/dist/esm/helpers/getExpandedShorthands.native.js +14 -0
  78. package/dist/esm/helpers/getExpandedShorthands.native.js.map +6 -0
  79. package/dist/esm/helpers/getFontLanguage.native.js +5 -0
  80. package/dist/esm/helpers/getFontLanguage.native.js.map +6 -0
  81. package/dist/esm/helpers/getGroupPropParts.native.js +11 -0
  82. package/dist/esm/helpers/getGroupPropParts.native.js.map +6 -0
  83. package/dist/esm/helpers/getSplitStyles.native.js +539 -0
  84. package/dist/esm/helpers/getSplitStyles.native.js.map +6 -0
  85. package/dist/esm/helpers/getStylesAtomic.native.js +10 -0
  86. package/dist/esm/helpers/getStylesAtomic.native.js.map +6 -0
  87. package/dist/esm/helpers/getThemeCSSRules.native.js +7 -0
  88. package/dist/esm/helpers/getThemeCSSRules.native.js.map +6 -0
  89. package/dist/esm/helpers/getVariantExtras.native.js +51 -0
  90. package/dist/esm/helpers/getVariantExtras.native.js.map +6 -0
  91. package/dist/esm/helpers/insertStyleRule.native.js +195 -0
  92. package/dist/esm/helpers/insertStyleRule.native.js.map +6 -0
  93. package/dist/esm/helpers/isObj.native.js +5 -0
  94. package/dist/esm/helpers/isObj.native.js.map +6 -0
  95. package/dist/esm/helpers/isTamaguiComponent.native.js +8 -0
  96. package/dist/esm/helpers/isTamaguiComponent.native.js.map +6 -0
  97. package/dist/esm/helpers/isTamaguiElement.native.js +7 -0
  98. package/dist/esm/helpers/isTamaguiElement.native.js.map +6 -0
  99. package/dist/esm/helpers/matchMedia.native.js +20 -0
  100. package/dist/esm/helpers/matchMedia.native.js.map +6 -0
  101. package/dist/esm/helpers/mergeProps.native.js +28 -0
  102. package/dist/esm/helpers/mergeProps.native.js.map +6 -0
  103. package/dist/esm/helpers/mergeVariants.native.js +35 -0
  104. package/dist/esm/helpers/mergeVariants.native.js.map +6 -0
  105. package/dist/esm/helpers/normalizeColor.native.js +20 -0
  106. package/dist/esm/helpers/normalizeColor.native.js.map +6 -0
  107. package/dist/esm/helpers/normalizeShadow.native.js +28 -0
  108. package/dist/esm/helpers/normalizeShadow.native.js.map +6 -0
  109. package/dist/esm/helpers/normalizeStylePropKeys.native.js +16 -0
  110. package/dist/esm/helpers/normalizeStylePropKeys.native.js.map +6 -0
  111. package/dist/esm/helpers/normalizeValueWithProperty.native.js +40 -0
  112. package/dist/esm/helpers/normalizeValueWithProperty.native.js.map +6 -0
  113. package/dist/esm/helpers/objectIdentityKey.native.js +22 -0
  114. package/dist/esm/helpers/objectIdentityKey.native.js.map +6 -0
  115. package/dist/esm/helpers/propMapper.js +24 -19
  116. package/dist/esm/helpers/propMapper.js.map +1 -1
  117. package/dist/esm/helpers/propMapper.native.js +213 -0
  118. package/dist/esm/helpers/propMapper.native.js.map +6 -0
  119. package/dist/esm/helpers/proxyThemeToParents.native.js +40 -0
  120. package/dist/esm/helpers/proxyThemeToParents.native.js.map +6 -0
  121. package/dist/esm/helpers/proxyThemeVariables.native.js +16 -0
  122. package/dist/esm/helpers/proxyThemeVariables.native.js.map +6 -0
  123. package/dist/esm/helpers/pseudoDescriptors.native.js +37 -0
  124. package/dist/esm/helpers/pseudoDescriptors.native.js.map +6 -0
  125. package/dist/esm/helpers/registerCSSVariable.native.js +10 -0
  126. package/dist/esm/helpers/registerCSSVariable.native.js.map +6 -0
  127. package/dist/esm/helpers/themeable.native.js +29 -0
  128. package/dist/esm/helpers/themeable.native.js.map +6 -0
  129. package/dist/esm/helpers/themes.native.js +17 -0
  130. package/dist/esm/helpers/themes.native.js.map +6 -0
  131. package/dist/esm/helpers/timer.native.js +11 -0
  132. package/dist/esm/helpers/timer.native.js.map +6 -0
  133. package/dist/esm/helpers/withStaticProperties.native.js +20 -0
  134. package/dist/esm/helpers/withStaticProperties.native.js.map +6 -0
  135. package/dist/esm/hooks/getThemeUnwrapped.native.js +6 -0
  136. package/dist/esm/hooks/getThemeUnwrapped.native.js.map +6 -0
  137. package/dist/esm/hooks/useAnimationDriver.js +8 -0
  138. package/dist/esm/hooks/useAnimationDriver.js.map +6 -0
  139. package/dist/esm/hooks/useConfiguration.native.js +15 -0
  140. package/dist/esm/hooks/useConfiguration.native.js.map +6 -0
  141. package/dist/esm/hooks/useDisableSSR.native.js +15 -0
  142. package/dist/esm/hooks/useDisableSSR.native.js.map +6 -0
  143. package/dist/esm/hooks/useId.native.js +5 -0
  144. package/dist/esm/hooks/useId.native.js.map +6 -0
  145. package/dist/esm/hooks/useIsTouchDevice.native.js +7 -0
  146. package/dist/esm/hooks/useIsTouchDevice.native.js.map +6 -0
  147. package/dist/esm/hooks/useMedia.native.js +155 -0
  148. package/dist/esm/hooks/useMedia.native.js.map +6 -0
  149. package/dist/esm/hooks/useMemoDebug.native.js +10 -0
  150. package/dist/esm/hooks/useMemoDebug.native.js.map +6 -0
  151. package/dist/esm/hooks/useProps.native.js +49 -0
  152. package/dist/esm/hooks/useProps.native.js.map +6 -0
  153. package/dist/esm/hooks/useStyle.js +32 -0
  154. package/dist/esm/hooks/useStyle.js.map +6 -0
  155. package/dist/esm/hooks/useTheme.js +1 -1
  156. package/dist/esm/hooks/useTheme.js.map +1 -1
  157. package/dist/esm/hooks/useTheme.native.js +224 -0
  158. package/dist/esm/hooks/useTheme.native.js.map +6 -0
  159. package/dist/esm/hooks/useThemeName.native.js +17 -0
  160. package/dist/esm/hooks/useThemeName.native.js.map +6 -0
  161. package/dist/esm/index.native.js +90 -0
  162. package/dist/esm/index.native.js.map +6 -0
  163. package/dist/esm/inject-styles.native.js +12 -0
  164. package/dist/esm/inject-styles.native.js.map +6 -0
  165. package/dist/esm/insertFont.native.js +48 -0
  166. package/dist/esm/insertFont.native.js.map +6 -0
  167. package/dist/esm/interfaces/CSSColorNames.native.js +1 -0
  168. package/dist/esm/interfaces/CSSColorNames.native.js.map +6 -0
  169. package/dist/esm/interfaces/GetRef.native.js +1 -0
  170. package/dist/esm/interfaces/GetRef.native.js.map +6 -0
  171. package/dist/esm/interfaces/Role.native.js +1 -0
  172. package/dist/esm/interfaces/Role.native.js.map +6 -0
  173. package/dist/esm/setupHooks.native.js +9 -0
  174. package/dist/esm/setupHooks.native.js.map +6 -0
  175. package/dist/esm/setupReactNative.native.js +30 -0
  176. package/dist/esm/setupReactNative.native.js.map +6 -0
  177. package/dist/esm/styled.native.js +56 -0
  178. package/dist/esm/styled.native.js.map +6 -0
  179. package/dist/esm/types.native.js +1 -0
  180. package/dist/esm/types.native.js.map +6 -0
  181. package/dist/esm/views/AnimationDriverProvider.js +7 -0
  182. package/dist/esm/views/AnimationDriverProvider.js.map +6 -0
  183. package/dist/esm/views/Configuration.native.js +7 -0
  184. package/dist/esm/views/Configuration.native.js.map +6 -0
  185. package/dist/esm/views/FontLanguage.native.js +11 -0
  186. package/dist/esm/views/FontLanguage.native.js.map +6 -0
  187. package/dist/esm/views/FontLanguage.types.native.js +1 -0
  188. package/dist/esm/views/FontLanguage.types.native.js.map +6 -0
  189. package/dist/esm/views/Slot.native.js +40 -0
  190. package/dist/esm/views/Slot.native.js.map +6 -0
  191. package/dist/esm/views/Stack.native.js +12 -0
  192. package/dist/esm/views/Stack.native.js.map +6 -0
  193. package/dist/esm/views/TamaguiProvider.native.js +34 -0
  194. package/dist/esm/views/TamaguiProvider.native.js.map +6 -0
  195. package/dist/esm/views/Text.native.js +32 -0
  196. package/dist/esm/views/Text.native.js.map +6 -0
  197. package/dist/esm/views/Theme.native.js +85 -0
  198. package/dist/esm/views/Theme.native.js.map +6 -0
  199. package/dist/esm/views/ThemeDebug.native.js +11 -0
  200. package/dist/esm/views/ThemeDebug.native.js.map +6 -0
  201. package/dist/esm/views/ThemeProvider.native.js +26 -0
  202. package/dist/esm/views/ThemeProvider.native.js.map +6 -0
  203. package/dist/esm/views/View.native.js +13 -0
  204. package/dist/esm/views/View.native.js.map +6 -0
  205. package/package.json +9 -9
  206. package/src/helpers/propMapper.ts +36 -25
  207. package/src/hooks/useTheme.tsx +20 -3
  208. package/src/types.tsx +1 -1
  209. package/types/helpers/propMapper.d.ts.map +1 -1
  210. package/types/hooks/useTheme.d.ts +11 -1
  211. package/types/hooks/useTheme.d.ts.map +1 -1
  212. package/types/types.d.ts +1 -1
  213. package/types/types.d.ts.map +1 -1
@@ -0,0 +1,683 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isClient, isServer, isWeb } from "@tamagui/constants";
3
+ import { composeEventHandlers, validStyles } from "@tamagui/helpers";
4
+ import { useDidFinishSSR } from "@tamagui/use-did-finish-ssr";
5
+ import React, {
6
+ Children,
7
+ Fragment,
8
+ createElement,
9
+ forwardRef,
10
+ memo,
11
+ useContext,
12
+ useEffect,
13
+ useId,
14
+ useMemo,
15
+ useRef,
16
+ useState
17
+ } from "react";
18
+ import { devConfig, getConfig, onConfiguredOnce } from "./config";
19
+ import { stackDefaultStyles } from "./constants/constants";
20
+ import { ComponentContext } from "./contexts/ComponentContext";
21
+ import { didGetVariableValue, setDidGetVariableValue } from "./createVariable";
22
+ import {
23
+ defaultComponentState,
24
+ defaultComponentStateMounted,
25
+ defaultComponentStateShouldEnter
26
+ } from "./defaultComponentState";
27
+ import {
28
+ createShallowSetState,
29
+ mergeIfNotShallowEqual
30
+ } from "./helpers/createShallowSetState";
31
+ import { useSplitStyles } from "./helpers/getSplitStyles";
32
+ import { mergeProps } from "./helpers/mergeProps";
33
+ import { proxyThemeVariables } from "./helpers/proxyThemeVariables";
34
+ import { themeable } from "./helpers/themeable";
35
+ import { mediaKeyMatch, setMediaShouldUpdate, useMedia } from "./hooks/useMedia";
36
+ import { useThemeWithState } from "./hooks/useTheme";
37
+ import { hooks } from "./setupHooks";
38
+ import { Slot } from "./views/Slot";
39
+ import { useThemedChildren } from "./views/Theme";
40
+ import { ThemeDebug } from "./views/ThemeDebug";
41
+ import { jsx } from "react/jsx-runtime";
42
+ let tamaguiConfig, AnimatedText, AnimatedView, initialTheme, time, debugKeyListeners, startVisualizer;
43
+ const mouseUps = /* @__PURE__ */ new Set();
44
+ if (typeof document < "u") {
45
+ const cancelTouches = () => {
46
+ mouseUps.forEach((x) => x()), mouseUps.clear();
47
+ };
48
+ addEventListener("mouseup", cancelTouches), addEventListener("touchend", cancelTouches), addEventListener("touchcancel", cancelTouches), process.env.NODE_ENV === "development" && (startVisualizer = () => {
49
+ const devVisualizerConfig = devConfig?.visualizer;
50
+ if (devVisualizerConfig) {
51
+ debugKeyListeners = /* @__PURE__ */ new Set();
52
+ let tm, isShowing = !1;
53
+ const options = {
54
+ key: "Alt",
55
+ delay: 800,
56
+ ...typeof devVisualizerConfig == "object" ? devVisualizerConfig : {}
57
+ };
58
+ document.addEventListener("blur", () => {
59
+ clearTimeout(tm);
60
+ }), document.addEventListener("keydown", ({ key, defaultPrevented }) => {
61
+ defaultPrevented || (clearTimeout(tm), key === options.key && (tm = setTimeout(() => {
62
+ isShowing = !0, debugKeyListeners?.forEach((l) => l(!0));
63
+ }, options.delay)));
64
+ }), document.addEventListener("keyup", ({ key, defaultPrevented }) => {
65
+ defaultPrevented || key === options.key && (clearTimeout(tm), isShowing && debugKeyListeners?.forEach((l) => l(!1)));
66
+ });
67
+ }
68
+ });
69
+ }
70
+ let BaseText, BaseView, hasSetupBaseViews = !1;
71
+ function createComponent(staticConfig) {
72
+ let config = null;
73
+ onConfiguredOnce((conf) => {
74
+ if (config = conf, !tamaguiConfig && (tamaguiConfig = conf, !initialTheme)) {
75
+ const next = conf.themes[Object.keys(conf.themes)[0]];
76
+ initialTheme = proxyThemeVariables(next), process.env.NODE_ENV === "development" && (initialTheme || console.log("Warning: Missing theme"));
77
+ }
78
+ });
79
+ const {
80
+ Component,
81
+ isText,
82
+ isZStack,
83
+ isHOC,
84
+ validStyles: validStyles2 = {},
85
+ variants = {}
86
+ } = staticConfig, defaultComponentClassName = `is_${staticConfig.componentName}`, defaultProps = staticConfig.defaultProps;
87
+ process.env.NODE_ENV === "development" && staticConfig.defaultProps?.debug && process.env.IS_STATIC !== "is_static" && console.log(`\u{1F41B} [${staticConfig.componentName || "Component"}]`, {
88
+ staticConfig,
89
+ defaultProps,
90
+ defaultPropsKeyOrder: defaultProps ? Object.keys(defaultProps) : []
91
+ });
92
+ const component = forwardRef((propsIn, forwardedRef) => {
93
+ if (process.env.NODE_ENV === "development" && startVisualizer && (startVisualizer(), startVisualizer = void 0), !hasSetupBaseViews) {
94
+ hasSetupBaseViews = !0;
95
+ const baseViews = hooks.getBaseViews?.();
96
+ baseViews && (BaseText = baseViews.Text, BaseView = baseViews.View);
97
+ }
98
+ process.env.NODE_ENV === "test" && propsIn["data-test-renders"] && (propsIn["data-test-renders"].current ??= 0, propsIn["data-test-renders"].current += 1);
99
+ const componentContext = useContext(ComponentContext);
100
+ let styledContextProps, overriddenContextProps, contextValue;
101
+ const { context } = staticConfig;
102
+ if (context) {
103
+ contextValue = useContext(context);
104
+ const { inverseShorthands } = getConfig();
105
+ for (const key in context.props) {
106
+ const propVal = (
107
+ // because its after default props but before props this annoying amount of checks
108
+ propsIn[key] ?? propsIn[inverseShorthands[key]] ?? defaultProps?.[key] ?? defaultProps?.[inverseShorthands[key]]
109
+ );
110
+ propVal === void 0 ? contextValue && (key in validStyles2 || key in variants) && (styledContextProps ||= {}, styledContextProps[key] = contextValue[key]) : (overriddenContextProps ||= {}, overriddenContextProps[key] = propVal);
111
+ }
112
+ }
113
+ const curDefaultProps = styledContextProps ? { ...defaultProps, ...styledContextProps } : defaultProps;
114
+ let props;
115
+ curDefaultProps ? props = mergeProps(curDefaultProps, propsIn) : props = propsIn;
116
+ const debugProp = props.debug, componentName = props.componentName || staticConfig.componentName;
117
+ process.env.NODE_ENV === "development" && isClient && useEffect(() => {
118
+ let overlay = null;
119
+ const debugVisualizerHandler = (show = !1) => {
120
+ const node = hostRef.current;
121
+ if (node)
122
+ if (show) {
123
+ overlay = document.createElement("span"), overlay.style.inset = "0px", overlay.style.zIndex = "1000000", overlay.style.position = "absolute", overlay.style.borderColor = "red", overlay.style.borderWidth = "1px", overlay.style.borderStyle = "dotted";
124
+ const dataAt = node.getAttribute("data-at") || "", dataIn = node.getAttribute("data-in") || "", tooltip = document.createElement("span");
125
+ tooltip.style.position = "absolute", tooltip.style.top = "0px", tooltip.style.left = "0px", tooltip.style.padding = "3px", tooltip.style.background = "rgba(0,0,0,0.75)", tooltip.style.color = "rgba(255,255,255,1)", tooltip.style.fontSize = "12px", tooltip.style.lineHeight = "12px", tooltip.style.fontFamily = "monospace", tooltip.style.webkitFontSmoothing = "none", tooltip.innerText = `${componentName || ""} ${dataAt} ${dataIn}`.trim(), overlay.appendChild(tooltip), node.appendChild(overlay);
126
+ } else
127
+ overlay && node.removeChild(overlay);
128
+ };
129
+ return debugKeyListeners ||= /* @__PURE__ */ new Set(), debugKeyListeners.add(debugVisualizerHandler), () => {
130
+ debugKeyListeners?.delete(debugVisualizerHandler);
131
+ };
132
+ }, [componentName]), !process.env.TAMAGUI_IS_CORE_NODE && process.env.NODE_ENV === "development" && debugProp === "profile" && !time && (time = require("@tamagui/timer").timer().start()), process.env.NODE_ENV === "development" && time && time`start (ignore)`;
133
+ const isHydrated = config?.disableSSR ? !0 : useDidFinishSSR();
134
+ process.env.NODE_ENV === "development" && time && time`did-finish-ssr`;
135
+ const stateRef = useRef(
136
+ void 0
137
+ );
138
+ stateRef.current ||= {}, process.env.NODE_ENV === "development" && time && time`stateref`;
139
+ const hostRef = useRef(null), animationsConfig = componentContext.animationDriver, useAnimations = animationsConfig?.useAnimations, hasAnimationProp = !!(props.animation || props.style && hasAnimatedStyleValue(props.style)), supportsCSSVars = animationsConfig?.supportsCSSVars, willBeAnimated = (() => {
140
+ if (isServer && !supportsCSSVars)
141
+ return !1;
142
+ const curState = stateRef.current;
143
+ return !!(!!(hasAnimationProp && !isHOC && useAnimations) || curState.hasAnimated);
144
+ })(), usePresence = animationsConfig?.usePresence, presence = willBeAnimated && usePresence?.() || null, hasEnterStyle = !!props.enterStyle, needsMount = !!((!isWeb || isClient) && willBeAnimated);
145
+ process.env.NODE_ENV === "development" && time && time`pre-use-state`;
146
+ const initialState = willBeAnimated ? supportsCSSVars ? defaultComponentStateShouldEnter : defaultComponentState : defaultComponentStateMounted, states = useState(initialState), state = propsIn.forceStyle ? { ...states[0], [propsIn.forceStyle]: !0 } : states[0], setState = states[1];
147
+ let setStateShallow = createShallowSetState(setState);
148
+ const groupName = props.group, groupClassName = groupName ? `t_group_${props.group}` : "";
149
+ if (groupName) {
150
+ const groupContextState = componentContext.groups.state, og = setStateShallow;
151
+ setStateShallow = (state2) => {
152
+ og(state2), componentContext.groups.emit(groupName, {
153
+ pseudo: state2
154
+ });
155
+ const next = {
156
+ ...groupContextState[groupName],
157
+ ...state2
158
+ };
159
+ groupContextState[groupName] = next;
160
+ };
161
+ }
162
+ process.env.NODE_ENV === "development" && time && time`use-state`;
163
+ let isAnimated = willBeAnimated;
164
+ willBeAnimated && !supportsCSSVars && !presence && isHydrated && (isServer || state.unmounted === !0) && (isAnimated = !1), willBeAnimated && !stateRef.current.hasAnimated && (stateRef.current.hasAnimated = !0);
165
+ const componentClassName = props.asChild ? "" : props.componentName ? `is_${props.componentName}` : defaultComponentClassName, hasTextAncestor = !!(isWeb && isText && componentContext.inText), isDisabled = props.disabled ?? props.accessibilityState?.disabled;
166
+ process.env.NODE_ENV === "development" && time && time`use-context`;
167
+ const element = isWeb && (!Component || typeof Component == "string") && props.tag || Component, BaseTextComponent = BaseText || element || "span", BaseViewComponent = BaseView || element || (hasTextAncestor ? "span" : "div");
168
+ AnimatedText = animationsConfig ? animationsConfig.Text : BaseTextComponent, AnimatedView = animationsConfig ? animationsConfig.View : BaseViewComponent;
169
+ let elementType = isText ? (isAnimated ? AnimatedText : null) || BaseTextComponent : (isAnimated ? AnimatedView : null) || BaseViewComponent;
170
+ if (isAnimated && presence) {
171
+ const presenceState = presence[2];
172
+ if (presenceState) {
173
+ const isEntering = state.unmounted, isExiting2 = !presenceState.isPresent, enterExitVariant = presenceState.enterExitVariant, enterVariant = enterExitVariant ?? presenceState.enterVariant, exitVariant = enterExitVariant ?? presenceState.exitVariant;
174
+ isEntering && enterVariant ? (process.env.NODE_ENV === "development" && debugProp === "verbose" && console.warn(`Animating presence ENTER "${enterVariant}"`), props[enterVariant] = !0) : isExiting2 && exitVariant && (process.env.NODE_ENV === "development" && debugProp === "verbose" && console.warn(`Animating presence EXIT "${enterVariant}"`), props[exitVariant] = !enterExitVariant);
175
+ }
176
+ }
177
+ const isAnimatedReactNative = hasAnimationProp && animationsConfig?.isReactNative, isReactNative = !!(staticConfig.isReactNative || isAnimatedReactNative), shouldAvoidClasses = !!(!isWeb || isAnimated || !staticConfig.acceptsClassName || propsIn.disableClassName), shouldForcePseudo = !!propsIn.forceStyle, noClassNames = shouldAvoidClasses || shouldForcePseudo, disableThemeProp = !1, disableTheme = disableThemeProp && !willBeAnimated || isHOC;
178
+ process.env.NODE_ENV === "development" && time && time`theme-props`, props.themeShallow && (stateRef.current.themeShallow = !0);
179
+ const themeStateProps = {
180
+ name: props.theme,
181
+ componentName,
182
+ disable: disableTheme,
183
+ shallow: stateRef.current.themeShallow,
184
+ // if this returns undefined it defers to the keys tracking, so its only used to force either updates or no updates
185
+ shouldUpdate: () => (
186
+ // when we use $theme- styles we need to force it to re-render on theme changes (this can be optimized likely)
187
+ stateRef.current.isListeningToTheme
188
+ ),
189
+ debug: debugProp
190
+ };
191
+ themeStateProps.deopt = willBeAnimated;
192
+ const isExiting = !state.unmounted && presence?.[0] === !1;
193
+ if (process.env.NODE_ENV === "development") {
194
+ const id = useId();
195
+ if (debugProp && debugProp !== "profile") {
196
+ const name = `${componentName || Component?.displayName || Component?.name || "[Unnamed Component]"}`, type = isAnimatedReactNative ? "(animated)" : isReactNative ? "(rnw)" : "", dataIs = propsIn["data-is"] || "", banner = `${name}${dataIs ? ` ${dataIs}` : ""} ${type} id ${id}`;
197
+ console.group(
198
+ `%c ${banner} (unmounted: ${state.unmounted})${presence ? ` (presence: ${presence[0]})` : ""} ${isHydrated ? "\u{1F4A6}" : "\u{1F3DC}\uFE0F"}`,
199
+ "background: green; color: white;"
200
+ ), isServer || (console.groupCollapsed(
201
+ `Info (collapsed): ${state.press || state.pressIn ? "PRESSED " : ""}${state.hover ? "HOVERED " : ""}${state.focus ? "FOCUSED" : " "}`
202
+ ), console.log({
203
+ propsIn,
204
+ props,
205
+ state,
206
+ staticConfig,
207
+ elementType,
208
+ themeStateProps,
209
+ styledContext: { contextProps: styledContextProps, overriddenContextProps },
210
+ presence,
211
+ isAnimated,
212
+ isHOC,
213
+ hasAnimationProp,
214
+ useAnimations,
215
+ propsInOrder: Object.keys(propsIn),
216
+ propsOrder: Object.keys(props)
217
+ }), console.groupEnd());
218
+ }
219
+ }
220
+ process.env.NODE_ENV === "development" && time && time`pre-theme-media`;
221
+ const [themeState, theme] = useThemeWithState(themeStateProps);
222
+ elementType = Component || elementType;
223
+ const isStringElement = typeof elementType == "string";
224
+ process.env.NODE_ENV === "development" && time && time`theme`;
225
+ const mediaState = useMedia(stateRef, componentContext);
226
+ process.env.NODE_ENV === "development" && time && time`media`, setDidGetVariableValue(!1);
227
+ const resolveValues = (
228
+ // if HOC + mounted + has animation prop, resolve as value so it passes non-variable to child
229
+ isAnimated && !supportsCSSVars || isHOC && state.unmounted == !1 && hasAnimationProp ? "value" : "auto"
230
+ ), keepStyleSSR = willBeAnimated && animationsConfig?.keepStyleSSR, styleProps = {
231
+ mediaState,
232
+ noClassNames,
233
+ resolveValues,
234
+ isExiting,
235
+ isAnimated,
236
+ keepStyleSSR
237
+ }, splitStyles = useSplitStyles(
238
+ props,
239
+ staticConfig,
240
+ theme,
241
+ themeState?.state?.name || "",
242
+ state,
243
+ styleProps,
244
+ null,
245
+ componentContext,
246
+ elementType,
247
+ debugProp
248
+ );
249
+ props.group && props.untilMeasured === "hide" && !stateRef.current.hasMeasured && (splitStyles.style.opacity = 0), process.env.NODE_ENV === "development" && time && time`split-styles`, stateRef.current.isListeningToTheme = splitStyles.dynamicThemeAccess;
250
+ const isMediaArray = splitStyles.hasMedia && Array.isArray(splitStyles.hasMedia), shouldListenForMedia = didGetVariableValue() || isMediaArray || noClassNames && splitStyles.hasMedia === !0, mediaListeningKeys = isMediaArray ? splitStyles.hasMedia : null;
251
+ setMediaShouldUpdate(stateRef, {
252
+ enabled: shouldListenForMedia,
253
+ keys: mediaListeningKeys
254
+ });
255
+ const isAnimatedReactNativeWeb = hasAnimationProp && isReactNative;
256
+ if (process.env.NODE_ENV === "development" && debugProp && debugProp !== "profile" && (console.groupCollapsed(">>>"), console.log(
257
+ "props in",
258
+ propsIn,
259
+ "mapped to",
260
+ props,
261
+ "in order",
262
+ Object.keys(props)
263
+ ), console.log("splitStyles", splitStyles), console.log("media", { shouldListenForMedia, isMediaArray, mediaListeningKeys }), console.log("className", Object.values(splitStyles.classNames)), isClient && console.log("ref", hostRef, "(click to view)"), console.groupEnd(), debugProp === "break"))
264
+ debugger;
265
+ const {
266
+ viewProps: viewPropsIn,
267
+ pseudos,
268
+ style: splitStylesStyle,
269
+ classNames,
270
+ space
271
+ } = splitStyles, propsWithAnimation = props;
272
+ let animationStyles;
273
+ if (willBeAnimated && useAnimations && !isHOC) {
274
+ const animations = useAnimations({
275
+ props: propsWithAnimation,
276
+ // if hydrating, send empty style
277
+ style: splitStylesStyle,
278
+ // style: splitStylesStyle,
279
+ presence,
280
+ componentState: state,
281
+ styleProps,
282
+ theme: themeState.state?.theme,
283
+ pseudos: pseudos || null,
284
+ hostRef,
285
+ staticConfig
286
+ });
287
+ isAnimated && animations && (animationStyles = animations.style), process.env.NODE_ENV === "development" && time && time`animations`;
288
+ }
289
+ const {
290
+ asChild,
291
+ children,
292
+ themeShallow,
293
+ spaceDirection: _spaceDirection,
294
+ disabled: disabledProp,
295
+ onPress,
296
+ onLongPress,
297
+ onPressIn,
298
+ onPressOut,
299
+ onHoverIn,
300
+ onHoverOut,
301
+ onMouseUp,
302
+ onMouseDown,
303
+ onMouseEnter,
304
+ onMouseLeave,
305
+ separator,
306
+ // ignore from here on out
307
+ forceStyle: _forceStyle,
308
+ // @ts-ignore for next/link compat etc
309
+ onClick,
310
+ theme: _themeProp,
311
+ // @ts-ignore
312
+ defaultVariants,
313
+ ...nonTamaguiProps
314
+ } = viewPropsIn;
315
+ process.env.NODE_ENV === "development" && props.untilMeasured && !props.group && console.warn(
316
+ `You set the untilMeasured prop without setting group. This doesn't work, be sure to set untilMeasured on the parent that sets group, not the children that use the $group- prop.
317
+
318
+ If you meant to do this, you can disable this warning - either change untilMeasured and group at the same time, or do group={conditional ? 'name' : undefined}`
319
+ ), process.env.NODE_ENV === "development" && time && time`destructure`;
320
+ const disabled = props.accessibilityState?.disabled || // @ts-expect-error (comes from core)
321
+ props.accessibilityDisabled;
322
+ let viewProps = nonTamaguiProps;
323
+ isHOC && _themeProp && (viewProps.theme = _themeProp), groupName && (nonTamaguiProps.onLayout = composeEventHandlers(
324
+ nonTamaguiProps.onLayout,
325
+ (e) => {
326
+ componentContext.groups.emit(groupName, {
327
+ layout: e.nativeEvent.layout
328
+ }), !stateRef.current.hasMeasured && props.untilMeasured === "hide" && setState((prev) => ({ ...prev })), stateRef.current.hasMeasured = !0;
329
+ }
330
+ )), viewProps = nonTamaguiProps;
331
+ const composedRef = useComposedRefs(hostRef, forwardedRef);
332
+ viewProps.ref = composedRef, process.env.NODE_ENV === "development" && !isReactNative && !isText && isWeb && !isHOC && Children.toArray(props.children).forEach((item) => {
333
+ typeof item == "string" && item !== `
334
+ ` && console.error(
335
+ `Unexpected text node: ${item}. A text node cannot be a child of a <View>.`
336
+ );
337
+ }), process.env.NODE_ENV === "development" && time && time`events-hooks`;
338
+ let unPress = () => setStateShallow({
339
+ press: !1,
340
+ pressIn: !1
341
+ });
342
+ const shouldSetMounted = needsMount && state.unmounted, { pseudoGroups, mediaGroups } = splitStyles;
343
+ useEffect(() => {
344
+ if (shouldSetMounted) {
345
+ const unmounted = state.unmounted === !0 && hasEnterStyle ? "should-enter" : !1;
346
+ setStateShallow({
347
+ unmounted
348
+ });
349
+ return;
350
+ }
351
+ let disposeGroupsListener;
352
+ if (pseudoGroups || mediaGroups) {
353
+ const current = {
354
+ pseudo: {},
355
+ media: {}
356
+ };
357
+ disposeGroupsListener = componentContext.groups.subscribe(
358
+ (name, { layout, pseudo }) => {
359
+ if (pseudo && pseudoGroups?.has(name))
360
+ Object.assign(current.pseudo, pseudo), persist();
361
+ else if (layout && mediaGroups) {
362
+ const mediaState2 = getMediaState(mediaGroups, layout), next = mergeIfNotShallowEqual(current.media, mediaState2);
363
+ next !== current.media && (Object.assign(current.media, next), persist());
364
+ }
365
+ function persist() {
366
+ setStateShallow({
367
+ // force it to be referentially different so it always updates
368
+ group: {
369
+ ...state.group,
370
+ [name]: current
371
+ }
372
+ });
373
+ }
374
+ }
375
+ );
376
+ }
377
+ return () => {
378
+ disposeGroupsListener?.(), mouseUps.delete(unPress);
379
+ };
380
+ }, [
381
+ shouldSetMounted,
382
+ state.unmounted,
383
+ pseudoGroups ? Object.keys([...pseudoGroups]).join("") : 0,
384
+ mediaGroups ? Object.keys([...mediaGroups]).join("") : 0
385
+ ]);
386
+ const avoidAnimationStyle = keepStyleSSR && state.unmounted === !0;
387
+ let fontFamily = isText ? splitStyles.fontFamily || staticConfig.defaultProps?.fontFamily : null;
388
+ fontFamily && fontFamily[0] === "$" && (fontFamily = fontFamily.slice(1));
389
+ const fontFamilyClassName = fontFamily ? `font_${fontFamily}` : "", style = avoidAnimationStyle ? splitStyles.style : animationStyles || splitStyles.style;
390
+ let className;
391
+ viewProps.style = style;
392
+ const runtimePressStyle = !disabled && noClassNames && pseudos?.pressStyle, attachPress = !!(groupName || runtimePressStyle || onPress || onPressOut || onPressIn || onLongPress || onClick), runtimeHoverStyle = !disabled && noClassNames && pseudos?.hoverStyle, needsHoverState = runtimeHoverStyle || onHoverIn || onHoverOut, isHoverable = isWeb && !!(groupName || needsHoverState || onMouseEnter || onMouseLeave), handlesPressEvents = !(isWeb || asChild), shouldAttach = !!(attachPress || isHoverable || runtimePressStyle || runtimeHoverStyle);
393
+ process.env.NODE_ENV === "development" && time && time`events-setup`;
394
+ const events = shouldAttach && !isDisabled && !props.asChild ? {
395
+ onPressOut: attachPress ? (e) => {
396
+ unPress(), onPressOut?.(e), onMouseUp?.(e);
397
+ } : void 0,
398
+ ...(isHoverable || attachPress) && {
399
+ onMouseEnter: (e) => {
400
+ const next = {};
401
+ needsHoverState && (next.hover = !0), runtimePressStyle && state.pressIn && (next.press = !0), setStateShallow(next), onHoverIn?.(e), onMouseEnter?.(e);
402
+ },
403
+ onMouseLeave: (e) => {
404
+ const next = {};
405
+ mouseUps.add(unPress), needsHoverState && (next.hover = !1), runtimePressStyle && state.pressIn && (next.press = !1, next.pressIn = !1), setStateShallow(next), onHoverOut?.(e), onMouseLeave?.(e);
406
+ }
407
+ },
408
+ onPressIn: attachPress ? (e) => {
409
+ runtimePressStyle && setStateShallow({
410
+ press: !0,
411
+ pressIn: !0
412
+ }), onPressIn?.(e), onMouseDown?.(e), isWeb && mouseUps.add(unPress);
413
+ } : void 0,
414
+ onPress: attachPress ? (e) => {
415
+ unPress(), isWeb && onClick?.(e), onPress?.(e);
416
+ } : void 0,
417
+ onLongPress: attachPress && onLongPress ? (e) => {
418
+ unPress(), onLongPress?.(e);
419
+ } : void 0
420
+ } : null;
421
+ events && !asChild && Object.assign(events, {
422
+ cancelable: !viewProps.rejectResponderTermination,
423
+ disabled: isDisabled,
424
+ hitSlop: viewProps.hitSlop,
425
+ delayLongPress: viewProps.delayLongPress,
426
+ delayPressIn: viewProps.delayPressIn,
427
+ delayPressOut: viewProps.delayPressOut,
428
+ focusable: viewProps.focusable ?? !0,
429
+ minPressDuration: 0
430
+ }), process.env.NODE_ENV === "development" && time && time`events`, process.env.NODE_ENV === "development" && debugProp === "verbose" && console.log("events", { events, isHoverable, attachPress }), hooks.useEvents?.(viewProps, events, splitStyles, setStateShallow);
431
+ const direction = props.spaceDirection || "both";
432
+ process.env.NODE_ENV === "development" && time && time`hooks`;
433
+ let content = !children || asChild ? children : spacedChildren({
434
+ separator,
435
+ children,
436
+ space,
437
+ direction,
438
+ isZStack,
439
+ debug: debugProp
440
+ });
441
+ asChild && (elementType = Slot, Object.assign(viewProps, { onPress, onLongPress })), process.env.NODE_ENV === "development" && time && time`spaced-as-child`, // in test mode disable perf unwrapping so react-testing-library finds Text properly
442
+ process.env.NODE_ENV !== "test" && (elementType === BaseText || elementType === BaseView) ? process.env.TAMAGUI_OPTIMIZE_NATIVE_VIEWS ? (viewProps.children = content, content = createElement(
443
+ elementType === BaseText ? "RCTText" : "RCTView",
444
+ viewProps
445
+ )) : (viewProps.children = content, content = elementType.render(viewProps, viewProps.ref)) : content = createElement(elementType, viewProps, content), process.env.NODE_ENV === "development" && time && time`create-element`;
446
+ const subGroupContext = useMemo(() => {
447
+ if (groupName)
448
+ return {
449
+ ...componentContext.groups,
450
+ // change reference so as we mutate it doesn't affect siblings etc
451
+ state: {
452
+ ...componentContext.groups.state,
453
+ [groupName]: {
454
+ pseudo: initialState,
455
+ // capture just initial width and height if they exist
456
+ // will have top, left, width, height (not x, y)
457
+ layout: {
458
+ width: fromPx(splitStyles.style.width),
459
+ height: fromPx(splitStyles.style.height)
460
+ }
461
+ }
462
+ }
463
+ };
464
+ }, [groupName]);
465
+ if (groupName && subGroupContext && (content = /* @__PURE__ */ jsx(ComponentContext.Provider, { groups: subGroupContext, children: content })), process.env.NODE_ENV === "development" && time && time`group-context`, content = disableThemeProp ? content : useThemedChildren(themeState, content, themeStateProps), process.env.NODE_ENV === "development" && time && time`themed-children`, process.env.NODE_ENV === "development" && props.debug === "visualize" && (content = /* @__PURE__ */ jsx(ThemeDebug, { themeState, themeProps: props, children: content })), staticConfig.context) {
466
+ const contextProps = staticConfig.context.props;
467
+ for (const key in contextProps)
468
+ (key in style || key in viewProps) && (overriddenContextProps ||= {}, overriddenContextProps[key] = style[key] ?? viewProps[key]);
469
+ }
470
+ if (overriddenContextProps) {
471
+ const Provider = staticConfig.context.Provider;
472
+ content = /* @__PURE__ */ jsx(Provider, { ...contextValue, ...overriddenContextProps, children: content });
473
+ }
474
+ if (process.env.NODE_ENV === "development" && debugProp && debugProp !== "profile") {
475
+ console.groupCollapsed(`render <${typeof elementType == "string" ? elementType : "Component"} /> with props`);
476
+ try {
477
+ console.log("viewProps", viewProps), console.log("viewPropsOrder", Object.keys(viewProps));
478
+ for (const key in viewProps)
479
+ console.log(" - ", key, viewProps[key]);
480
+ console.log("children", content), typeof window < "u" && console.log({
481
+ viewProps,
482
+ state,
483
+ styleProps,
484
+ themeState,
485
+ isAnimated,
486
+ isAnimatedReactNativeWeb,
487
+ defaultProps,
488
+ splitStyles,
489
+ animationStyles,
490
+ handlesPressEvents,
491
+ willBeAnimated,
492
+ isStringElement,
493
+ classNamesIn: props.className?.split(" "),
494
+ classNamesOut: viewProps.className?.split(" "),
495
+ events,
496
+ shouldAttach,
497
+ pseudos,
498
+ content,
499
+ shouldAvoidClasses,
500
+ animation: props.animation,
501
+ splitStylesStyle,
502
+ staticConfig,
503
+ tamaguiConfig,
504
+ shouldForcePseudo,
505
+ elementType,
506
+ initialState,
507
+ classNames
508
+ });
509
+ } catch {
510
+ }
511
+ console.groupEnd(), console.groupEnd();
512
+ }
513
+ return process.env.NODE_ENV === "development" && time && (time`rest`, globalThis.willPrint || (globalThis.willPrint = !0, setTimeout(() => {
514
+ delete globalThis.willPrint, time.print(), time = null;
515
+ }, 50))), content;
516
+ });
517
+ staticConfig.componentName && (component.displayName = staticConfig.componentName);
518
+ let res = component;
519
+ process.env.TAMAGUI_DISABLE_MEMO || (res = memo(res)), res.staticConfig = staticConfig;
520
+ function extendStyledConfig(extended) {
521
+ return {
522
+ ...staticConfig,
523
+ ...extended,
524
+ neverFlatten: !0,
525
+ isHOC: !0,
526
+ isStyledHOC: !1
527
+ };
528
+ }
529
+ function extractable(Component2, extended) {
530
+ return Component2.staticConfig = extendStyledConfig(extended), Component2.styleable = styleable, Component2;
531
+ }
532
+ function styleable(Component2, extended) {
533
+ const ComponentForwardedRef = Component2.render?.length === 2 ? Component2 : (
534
+ // memo because theme changes otherwise would always re-render
535
+ memo(forwardRef(Component2))
536
+ ), extendedConfig = extendStyledConfig(extended), out = themeable(ComponentForwardedRef, extendedConfig);
537
+ return out.staticConfig = extendedConfig, out.styleable = styleable, out;
538
+ }
539
+ return res.extractable = extractable, res.styleable = styleable, res;
540
+ }
541
+ function Unspaced(props) {
542
+ return props.children;
543
+ }
544
+ Unspaced.isUnspaced = !0;
545
+ const getSpacerSize = (size, { tokens }) => {
546
+ size = size === !0 ? "$true" : size;
547
+ const sizePx = tokens.space[size] ?? size;
548
+ return {
549
+ width: sizePx,
550
+ height: sizePx,
551
+ minWidth: sizePx,
552
+ minHeight: sizePx
553
+ };
554
+ }, Spacer = createComponent({
555
+ acceptsClassName: !0,
556
+ memo: !0,
557
+ componentName: "Spacer",
558
+ validStyles,
559
+ defaultProps: {
560
+ ...stackDefaultStyles,
561
+ // avoid nesting issues
562
+ tag: "span",
563
+ size: !0,
564
+ pointerEvents: "none"
565
+ },
566
+ variants: {
567
+ size: {
568
+ "...": getSpacerSize
569
+ },
570
+ flex: {
571
+ true: {
572
+ flexGrow: 1
573
+ }
574
+ },
575
+ direction: {
576
+ horizontal: {
577
+ height: 0,
578
+ minHeight: 0
579
+ },
580
+ vertical: {
581
+ width: 0,
582
+ minWidth: 0
583
+ },
584
+ both: {}
585
+ }
586
+ }
587
+ });
588
+ function spacedChildren(props) {
589
+ const { isZStack, children, space, direction, spaceFlex, separator } = props, hasSpace = !!(space || spaceFlex), hasSeparator = separator != null;
590
+ if (!(hasSpace || hasSeparator || isZStack))
591
+ return children;
592
+ const childrenList = Children.toArray(children);
593
+ if (childrenList.length <= 1 && !isZStack && !childrenList[0]?.type?.shouldForwardSpace)
594
+ return childrenList;
595
+ const final = [];
596
+ for (let [index, child] of childrenList.entries()) {
597
+ const isEmpty = child == null || Array.isArray(child) && child.length === 0;
598
+ if (!isEmpty && React.isValidElement(child) && child.type?.shouldForwardSpace && (child = React.cloneElement(child, {
599
+ space,
600
+ spaceFlex,
601
+ separator,
602
+ key: child.key
603
+ })), isEmpty || !child || child.key && !isZStack ? final.push(child) : final.push(
604
+ /* @__PURE__ */ jsx(Fragment, { children: isZStack ? /* @__PURE__ */ jsx(AbsoluteFill, { children: child }) : child }, index)
605
+ ), isUnspaced(child) && index === 0 || isZStack)
606
+ continue;
607
+ const next = childrenList[index + 1];
608
+ next && !isUnspaced(next) && (separator ? (hasSpace && final.push(
609
+ createSpacer({
610
+ key: `_${index}_00tmgui`,
611
+ direction,
612
+ space,
613
+ spaceFlex
614
+ })
615
+ ), final.push(
616
+ React.isValidElement(separator) ? React.cloneElement(separator, { key: `sep_${index}` }) : separator
617
+ ), hasSpace && final.push(
618
+ createSpacer({
619
+ key: `_${index}01tmgui`,
620
+ direction,
621
+ space,
622
+ spaceFlex
623
+ })
624
+ )) : final.push(
625
+ createSpacer({
626
+ key: `_${index}02tmgui`,
627
+ direction,
628
+ space,
629
+ spaceFlex
630
+ })
631
+ ));
632
+ }
633
+ return process.env.NODE_ENV === "development" && props.debug && console.log(" Spaced children", final, props), final;
634
+ }
635
+ function createSpacer({ key, direction, space, spaceFlex }) {
636
+ return /* @__PURE__ */ jsx(
637
+ Spacer,
638
+ {
639
+ size: space,
640
+ direction,
641
+ ...typeof spaceFlex < "u" && {
642
+ flex: spaceFlex === !0 ? 1 : spaceFlex === !1 ? 0 : spaceFlex
643
+ }
644
+ },
645
+ key
646
+ );
647
+ }
648
+ function isUnspaced(child) {
649
+ const t = child?.type;
650
+ return t?.isVisuallyHidden || t?.isUnspaced;
651
+ }
652
+ const AbsoluteFill = createComponent({
653
+ defaultProps: {
654
+ ...stackDefaultStyles,
655
+ flexDirection: "column",
656
+ position: "absolute",
657
+ top: 0,
658
+ right: 0,
659
+ bottom: 0,
660
+ left: 0,
661
+ pointerEvents: "box-none"
662
+ }
663
+ });
664
+ function hasAnimatedStyleValue(style) {
665
+ return Object.keys(style).some((k) => {
666
+ const val = style[k];
667
+ return val && typeof val == "object" && "_animation" in val;
668
+ });
669
+ }
670
+ function getMediaState(mediaGroups, layout) {
671
+ return Object.fromEntries(
672
+ [...mediaGroups].map((mediaKey) => [mediaKey, mediaKeyMatch(mediaKey, layout)])
673
+ );
674
+ }
675
+ const fromPx = (val) => typeof val != "string" ? val : +val.replace("px", "");
676
+ export {
677
+ Spacer,
678
+ Unspaced,
679
+ createComponent,
680
+ mouseUps,
681
+ spacedChildren
682
+ };
683
+ //# sourceMappingURL=createComponent.js.map