@tamagui/core 1.0.1-beta.21 → 1.0.1-beta.210

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 (790) hide show
  1. package/dist/cjs/Tamagui.js +16 -12
  2. package/dist/cjs/Tamagui.js.map +2 -2
  3. package/dist/cjs/addTheme.js +80 -0
  4. package/dist/cjs/addTheme.js.map +7 -0
  5. package/dist/cjs/{conf.js → config.js} +34 -21
  6. package/dist/cjs/config.js.map +7 -0
  7. package/dist/cjs/constants/constants.js +17 -24
  8. package/dist/cjs/constants/constants.js.map +2 -2
  9. package/dist/cjs/{helpers/nativeGestureHandler.js → constants/isDevTools.js} +8 -8
  10. package/dist/cjs/constants/isDevTools.js.map +7 -0
  11. package/dist/cjs/constants/platform.js +32 -16
  12. package/dist/cjs/constants/platform.js.map +2 -2
  13. package/dist/cjs/constants/platform.native.js +62 -0
  14. package/dist/cjs/constants/platform.native.js.map +7 -0
  15. package/dist/cjs/contexts/ButtonInsideButtonContext.js +1 -0
  16. package/dist/cjs/contexts/ButtonInsideButtonContext.js.map +1 -1
  17. package/dist/cjs/contexts/FontLanguageContext.js +30 -0
  18. package/dist/cjs/contexts/FontLanguageContext.js.map +7 -0
  19. package/dist/cjs/contexts/TextAncestorContext.js +30 -0
  20. package/dist/cjs/contexts/TextAncestorContext.js.map +7 -0
  21. package/dist/cjs/{ThemeContext.js → contexts/ThemeContext.js} +1 -0
  22. package/dist/cjs/contexts/ThemeContext.js.map +7 -0
  23. package/dist/cjs/createComponent.js +878 -509
  24. package/dist/cjs/createComponent.js.map +3 -3
  25. package/dist/cjs/createFont.js +5 -8
  26. package/dist/cjs/createFont.js.map +2 -2
  27. package/dist/cjs/createShorthands.js +1 -2
  28. package/dist/cjs/createShorthands.js.map +2 -2
  29. package/dist/cjs/createTamagui.js +134 -184
  30. package/dist/cjs/createTamagui.js.map +3 -3
  31. package/dist/cjs/createTheme.js +4 -2
  32. package/dist/cjs/createTheme.js.map +2 -2
  33. package/dist/cjs/createTokens.js +5 -25
  34. package/dist/cjs/createTokens.js.map +2 -2
  35. package/dist/cjs/createVariable.js +51 -28
  36. package/dist/cjs/createVariable.js.map +2 -2
  37. package/dist/cjs/createVariables.js +52 -0
  38. package/dist/cjs/createVariables.js.map +7 -0
  39. package/dist/cjs/helpers/RNComponents.js +12 -11
  40. package/dist/cjs/helpers/RNComponents.js.map +2 -2
  41. package/dist/cjs/{ThemeManager.js → helpers/ThemeManager.js} +55 -60
  42. package/dist/cjs/helpers/ThemeManager.js.map +7 -0
  43. package/dist/cjs/helpers/areEqualSets.js +3 -3
  44. package/dist/cjs/helpers/areEqualSets.js.map +1 -1
  45. package/dist/cjs/helpers/assignNativePropsToWeb.js +188 -0
  46. package/dist/cjs/helpers/assignNativePropsToWeb.js.map +7 -0
  47. package/dist/cjs/helpers/assignNativePropsToWeb.native.js +30 -0
  48. package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +7 -0
  49. package/dist/cjs/helpers/cache.js +43 -0
  50. package/dist/cjs/helpers/cache.js.map +7 -0
  51. package/dist/cjs/helpers/calc.js +71 -0
  52. package/dist/cjs/helpers/calc.js.map +7 -0
  53. package/dist/cjs/helpers/createMediaStyle.js +26 -12
  54. package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
  55. package/dist/cjs/helpers/createPropMapper.js +272 -122
  56. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  57. package/dist/cjs/helpers/createProxy.js +43 -0
  58. package/dist/cjs/helpers/createProxy.js.map +7 -0
  59. package/dist/cjs/helpers/expandStyle.js +90 -0
  60. package/dist/cjs/helpers/expandStyle.js.map +7 -0
  61. package/dist/cjs/helpers/expandStyles.js +115 -0
  62. package/dist/cjs/helpers/expandStyles.js.map +7 -0
  63. package/dist/cjs/helpers/extendStaticConfig.js +48 -37
  64. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  65. package/dist/cjs/helpers/fixNativeShadow.js +3 -3
  66. package/dist/cjs/helpers/fixNativeShadow.js.map +1 -1
  67. package/dist/cjs/helpers/getAnimationDriver.js +32 -0
  68. package/dist/cjs/helpers/getAnimationDriver.js.map +7 -0
  69. package/dist/cjs/helpers/getExpandedShorthands.js +4 -5
  70. package/dist/cjs/helpers/getExpandedShorthands.js.map +2 -2
  71. package/dist/cjs/helpers/{getTextSize.js → getFont.js} +22 -12
  72. package/dist/cjs/helpers/getFont.js.map +7 -0
  73. package/dist/cjs/helpers/getFontLanguage.js +29 -0
  74. package/dist/cjs/helpers/getFontLanguage.js.map +7 -0
  75. package/dist/cjs/helpers/getSize.js +19 -10
  76. package/dist/cjs/helpers/getSize.js.map +2 -2
  77. package/dist/cjs/helpers/getSplitStyles.js +557 -213
  78. package/dist/cjs/helpers/getSplitStyles.js.map +3 -3
  79. package/dist/cjs/helpers/getStackSize.js +19 -38
  80. package/dist/cjs/helpers/getStackSize.js.map +2 -2
  81. package/dist/cjs/helpers/getStylesAtomic.js +177 -131
  82. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  83. package/dist/cjs/helpers/getStylesAtomic.native.js +1 -2
  84. package/dist/cjs/helpers/getStylesAtomic.native.js.map +1 -1
  85. package/dist/cjs/helpers/getThemeCSSRules.js +103 -0
  86. package/dist/cjs/helpers/getThemeCSSRules.js.map +7 -0
  87. package/dist/cjs/{nativeGestureHandler.native.js → helpers/getThemeCSSRules.native.js} +18 -5
  88. package/dist/cjs/helpers/getThemeCSSRules.native.js.map +7 -0
  89. package/dist/cjs/helpers/getVariantExtras.js +89 -0
  90. package/dist/cjs/helpers/getVariantExtras.js.map +7 -0
  91. package/dist/cjs/helpers/insertStyleRule.js +94 -51
  92. package/dist/cjs/helpers/insertStyleRule.js.map +3 -3
  93. package/dist/cjs/helpers/isObj.js +2 -2
  94. package/dist/cjs/helpers/isObj.js.map +1 -1
  95. package/dist/cjs/helpers/isTamaguiComponent.js +37 -0
  96. package/dist/cjs/helpers/isTamaguiComponent.js.map +7 -0
  97. package/dist/cjs/helpers/isTamaguiElement.js +5 -5
  98. package/dist/cjs/helpers/isTamaguiElement.js.map +2 -2
  99. package/dist/cjs/helpers/matchMedia.js +7 -6
  100. package/dist/cjs/helpers/matchMedia.js.map +2 -2
  101. package/dist/cjs/helpers/matchMedia.native.js +6 -3
  102. package/dist/cjs/helpers/matchMedia.native.js.map +2 -2
  103. package/dist/cjs/helpers/mergeProps.js +54 -0
  104. package/dist/cjs/helpers/mergeProps.js.map +7 -0
  105. package/dist/cjs/helpers/mergeTransform.js +42 -0
  106. package/dist/cjs/helpers/mergeTransform.js.map +7 -0
  107. package/dist/cjs/helpers/normalizeColor.js +80 -0
  108. package/dist/cjs/helpers/normalizeColor.js.map +7 -0
  109. package/dist/cjs/helpers/normalizeValueWithProperty.js +123 -0
  110. package/dist/cjs/helpers/normalizeValueWithProperty.js.map +7 -0
  111. package/dist/cjs/helpers/proxyThemeVariables.js +4 -4
  112. package/dist/cjs/helpers/proxyThemeVariables.js.map +2 -2
  113. package/dist/cjs/helpers/pseudoDescriptors.js +42 -0
  114. package/dist/cjs/helpers/pseudoDescriptors.js.map +7 -0
  115. package/dist/cjs/helpers/registerCSSVariable.js +40 -0
  116. package/dist/cjs/helpers/registerCSSVariable.js.map +7 -0
  117. package/dist/cjs/helpers/{wrapThemeManagerContext.js → startTransition.js} +12 -15
  118. package/dist/cjs/helpers/startTransition.js.map +7 -0
  119. package/dist/cjs/helpers/themeable.js +17 -40
  120. package/dist/cjs/helpers/themeable.js.map +3 -3
  121. package/dist/cjs/helpers/themes.js +79 -0
  122. package/dist/cjs/helpers/themes.js.map +7 -0
  123. package/dist/cjs/helpers/useShallowSetState.js +44 -0
  124. package/dist/cjs/helpers/useShallowSetState.js.map +7 -0
  125. package/dist/cjs/helpers/validate.js +1 -122
  126. package/dist/cjs/helpers/validate.js.map +3 -3
  127. package/dist/cjs/helpers/withStaticProperties.js +3 -3
  128. package/dist/cjs/helpers/withStaticProperties.js.map +1 -1
  129. package/dist/cjs/hooks/getThemeUnwrapped.js +37 -0
  130. package/dist/cjs/hooks/getThemeUnwrapped.js.map +7 -0
  131. package/dist/cjs/hooks/useConstant.js +4 -2
  132. package/dist/cjs/hooks/useConstant.js.map +2 -2
  133. package/dist/cjs/hooks/useElementLayout.js +92 -0
  134. package/dist/cjs/hooks/useElementLayout.js.map +7 -0
  135. package/dist/cjs/hooks/useId.js +3 -33
  136. package/dist/cjs/hooks/useId.js.map +2 -2
  137. package/dist/cjs/hooks/useIsMounted.js +3 -4
  138. package/dist/cjs/hooks/useIsMounted.js.map +2 -2
  139. package/dist/cjs/hooks/useIsTouchDevice.js +6 -12
  140. package/dist/cjs/hooks/useIsTouchDevice.js.map +2 -2
  141. package/dist/cjs/hooks/useMedia.js +166 -123
  142. package/dist/cjs/hooks/useMedia.js.map +3 -3
  143. package/dist/cjs/hooks/usePressable.js +4 -18
  144. package/dist/cjs/hooks/usePressable.js.map +1 -1
  145. package/dist/cjs/hooks/useSafeRef.js +58 -0
  146. package/dist/cjs/hooks/useSafeRef.js.map +7 -0
  147. package/dist/cjs/hooks/useServerHooks.js +36 -0
  148. package/dist/cjs/hooks/useServerHooks.js.map +7 -0
  149. package/dist/cjs/hooks/useTheme.js +168 -134
  150. package/dist/cjs/hooks/useTheme.js.map +3 -3
  151. package/dist/cjs/hooks/useUnmountEffect.js +1 -2
  152. package/dist/cjs/hooks/useUnmountEffect.js.map +1 -1
  153. package/dist/cjs/index.js +49 -26
  154. package/dist/cjs/index.js.map +2 -2
  155. package/dist/cjs/inject-styles.js +40 -0
  156. package/dist/cjs/inject-styles.js.map +7 -0
  157. package/dist/cjs/injectStyles.js +40 -0
  158. package/dist/cjs/injectStyles.js.map +7 -0
  159. package/dist/cjs/insertFont.js +93 -0
  160. package/dist/cjs/insertFont.js.map +7 -0
  161. package/dist/cjs/react-native.js +22 -0
  162. package/dist/cjs/react-native.js.map +7 -0
  163. package/dist/cjs/setupReactNative.js +37 -0
  164. package/dist/cjs/setupReactNative.js.map +7 -0
  165. package/dist/cjs/static.js +2 -15
  166. package/dist/cjs/static.js.map +2 -2
  167. package/dist/cjs/styled.js +57 -51
  168. package/dist/cjs/styled.js.map +2 -2
  169. package/dist/cjs/types-rnw.js +1 -0
  170. package/dist/cjs/types-rnw.js.map +2 -2
  171. package/dist/cjs/types.js +1 -0
  172. package/dist/cjs/types.js.map +2 -2
  173. package/dist/cjs/updateTheme.js +47 -0
  174. package/dist/cjs/updateTheme.js.map +7 -0
  175. package/dist/cjs/vendor/Pressability.js +32 -0
  176. package/dist/cjs/vendor/Pressability.js.map +7 -0
  177. package/dist/cjs/vendor/Pressability.native.js +32 -0
  178. package/dist/cjs/vendor/Pressability.native.js.map +7 -0
  179. package/dist/cjs/views/FontLanguage.js +38 -0
  180. package/dist/cjs/views/FontLanguage.js.map +7 -0
  181. package/dist/cjs/views/FontLanguage.native.js +38 -0
  182. package/dist/cjs/views/FontLanguage.native.js.map +7 -0
  183. package/dist/cjs/{helpers/nativeGestureHandler.native.js → views/FontLanguage.types.js} +4 -5
  184. package/dist/cjs/views/FontLanguage.types.js.map +7 -0
  185. package/dist/cjs/views/Slot.js +64 -72
  186. package/dist/cjs/views/Slot.js.map +2 -2
  187. package/dist/cjs/views/Stack.js +4 -19
  188. package/dist/cjs/views/Stack.js.map +2 -2
  189. package/dist/cjs/views/TamaguiProvider.js +86 -0
  190. package/dist/cjs/views/TamaguiProvider.js.map +7 -0
  191. package/dist/cjs/views/Text.js +32 -29
  192. package/dist/cjs/views/Text.js.map +2 -2
  193. package/dist/cjs/views/Theme.js +43 -21
  194. package/dist/cjs/views/Theme.js.map +3 -3
  195. package/dist/cjs/views/ThemeInverse.js +25 -25
  196. package/dist/cjs/views/ThemeInverse.js.map +2 -2
  197. package/dist/cjs/views/ThemeProvider.js +35 -23
  198. package/dist/cjs/views/ThemeProvider.js.map +3 -3
  199. package/dist/cjs/views/ThemeReset.js +26 -20
  200. package/dist/cjs/views/ThemeReset.js.map +3 -3
  201. package/dist/esm/Tamagui.js +11 -12
  202. package/dist/esm/Tamagui.js.map +2 -2
  203. package/dist/esm/addTheme.js +56 -0
  204. package/dist/esm/addTheme.js.map +7 -0
  205. package/dist/esm/config.js +44 -0
  206. package/dist/esm/config.js.map +7 -0
  207. package/dist/esm/constants/constants.js +12 -8
  208. package/dist/esm/constants/constants.js.map +2 -2
  209. package/dist/esm/constants/isDevTools.js +5 -0
  210. package/dist/esm/constants/isDevTools.js.map +7 -0
  211. package/dist/esm/constants/platform.js +25 -12
  212. package/dist/esm/constants/platform.js.map +2 -2
  213. package/dist/esm/constants/platform.native.js +28 -0
  214. package/dist/esm/constants/platform.native.js.map +7 -0
  215. package/dist/esm/contexts/ButtonInsideButtonContext.js +0 -0
  216. package/dist/esm/contexts/ButtonInsideButtonContext.js.map +1 -1
  217. package/dist/esm/contexts/FontLanguageContext.js +6 -0
  218. package/dist/esm/contexts/FontLanguageContext.js.map +7 -0
  219. package/dist/esm/contexts/TextAncestorContext.js +6 -0
  220. package/dist/esm/contexts/TextAncestorContext.js.map +7 -0
  221. package/dist/esm/{ThemeContext.js → contexts/ThemeContext.js} +0 -0
  222. package/dist/esm/contexts/ThemeContext.js.map +7 -0
  223. package/dist/esm/createComponent.js +843 -416
  224. package/dist/esm/createComponent.js.map +3 -3
  225. package/dist/esm/createFont.js +4 -9
  226. package/dist/esm/createFont.js.map +2 -2
  227. package/dist/esm/createShorthands.js +0 -3
  228. package/dist/esm/createShorthands.js.map +2 -2
  229. package/dist/esm/createTamagui.js +133 -165
  230. package/dist/esm/createTamagui.js.map +3 -3
  231. package/dist/esm/createTheme.js +3 -3
  232. package/dist/esm/createTheme.js.map +2 -2
  233. package/dist/esm/createTokens.js +3 -24
  234. package/dist/esm/createTokens.js.map +2 -2
  235. package/dist/esm/createVariable.js +46 -26
  236. package/dist/esm/createVariable.js.map +2 -2
  237. package/dist/esm/createVariables.js +28 -0
  238. package/dist/esm/createVariables.js.map +7 -0
  239. package/dist/esm/helpers/RNComponents.js +11 -8
  240. package/dist/esm/helpers/RNComponents.js.map +2 -2
  241. package/dist/esm/{ThemeManager.js → helpers/ThemeManager.js} +54 -61
  242. package/dist/esm/helpers/ThemeManager.js.map +7 -0
  243. package/dist/esm/helpers/areEqualSets.js +2 -4
  244. package/dist/esm/helpers/areEqualSets.js.map +1 -1
  245. package/dist/esm/helpers/assignNativePropsToWeb.js +164 -0
  246. package/dist/esm/helpers/assignNativePropsToWeb.js.map +7 -0
  247. package/dist/esm/helpers/assignNativePropsToWeb.native.js +6 -0
  248. package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +7 -0
  249. package/dist/esm/helpers/cache.js +18 -0
  250. package/dist/esm/helpers/cache.js.map +7 -0
  251. package/dist/esm/helpers/calc.js +47 -0
  252. package/dist/esm/helpers/calc.js.map +7 -0
  253. package/dist/esm/helpers/createMediaStyle.js +25 -13
  254. package/dist/esm/helpers/createMediaStyle.js.map +2 -2
  255. package/dist/esm/helpers/createPropMapper.js +267 -123
  256. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  257. package/dist/esm/helpers/createProxy.js +19 -0
  258. package/dist/esm/helpers/createProxy.js.map +7 -0
  259. package/dist/esm/helpers/expandStyle.js +66 -0
  260. package/dist/esm/helpers/expandStyle.js.map +7 -0
  261. package/dist/esm/helpers/expandStyles.js +89 -0
  262. package/dist/esm/helpers/expandStyles.js.map +7 -0
  263. package/dist/esm/helpers/extendStaticConfig.js +34 -28
  264. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  265. package/dist/esm/helpers/fixNativeShadow.js +2 -4
  266. package/dist/esm/helpers/fixNativeShadow.js.map +1 -1
  267. package/dist/esm/helpers/getAnimationDriver.js +8 -0
  268. package/dist/esm/helpers/getAnimationDriver.js.map +7 -0
  269. package/dist/esm/helpers/getExpandedShorthands.js +2 -5
  270. package/dist/esm/helpers/getExpandedShorthands.js.map +2 -2
  271. package/dist/esm/helpers/{getTextSize.js → getFont.js} +17 -9
  272. package/dist/esm/helpers/getFont.js.map +7 -0
  273. package/dist/esm/helpers/getFontLanguage.js +5 -0
  274. package/dist/esm/helpers/getFontLanguage.js.map +7 -0
  275. package/dist/esm/helpers/getSize.js +16 -10
  276. package/dist/esm/helpers/getSize.js.map +2 -2
  277. package/dist/esm/helpers/getSplitStyles.js +552 -197
  278. package/dist/esm/helpers/getSplitStyles.js.map +3 -3
  279. package/dist/esm/helpers/getStackSize.js +17 -37
  280. package/dist/esm/helpers/getStackSize.js.map +2 -2
  281. package/dist/esm/helpers/getStylesAtomic.js +174 -108
  282. package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
  283. package/dist/esm/helpers/getStylesAtomic.native.js +0 -3
  284. package/dist/esm/helpers/getStylesAtomic.native.js.map +1 -1
  285. package/dist/esm/helpers/getThemeCSSRules.js +79 -0
  286. package/dist/esm/helpers/getThemeCSSRules.js.map +7 -0
  287. package/dist/esm/helpers/getThemeCSSRules.native.js +7 -0
  288. package/dist/esm/helpers/getThemeCSSRules.native.js.map +7 -0
  289. package/dist/esm/helpers/getVariantExtras.js +64 -0
  290. package/dist/esm/helpers/getVariantExtras.js.map +7 -0
  291. package/dist/esm/helpers/insertStyleRule.js +89 -49
  292. package/dist/esm/helpers/insertStyleRule.js.map +3 -3
  293. package/dist/esm/helpers/isObj.js +1 -3
  294. package/dist/esm/helpers/isObj.js.map +1 -1
  295. package/dist/esm/helpers/isTamaguiComponent.js +13 -0
  296. package/dist/esm/helpers/isTamaguiComponent.js.map +7 -0
  297. package/dist/esm/helpers/isTamaguiElement.js +4 -6
  298. package/dist/esm/helpers/isTamaguiElement.js.map +2 -2
  299. package/dist/esm/helpers/matchMedia.js +6 -7
  300. package/dist/esm/helpers/matchMedia.js.map +2 -2
  301. package/dist/esm/helpers/matchMedia.native.js +1 -3
  302. package/dist/esm/helpers/matchMedia.native.js.map +1 -1
  303. package/dist/esm/helpers/mergeProps.js +30 -0
  304. package/dist/esm/helpers/mergeProps.js.map +7 -0
  305. package/dist/esm/helpers/mergeTransform.js +17 -0
  306. package/dist/esm/helpers/mergeTransform.js.map +7 -0
  307. package/dist/esm/helpers/normalizeColor.js +49 -0
  308. package/dist/esm/helpers/normalizeColor.js.map +7 -0
  309. package/dist/esm/helpers/normalizeValueWithProperty.js +98 -0
  310. package/dist/esm/helpers/normalizeValueWithProperty.js.map +7 -0
  311. package/dist/esm/helpers/proxyThemeVariables.js +3 -5
  312. package/dist/esm/helpers/proxyThemeVariables.js.map +2 -2
  313. package/dist/esm/helpers/pseudoDescriptors.js +18 -0
  314. package/dist/esm/helpers/pseudoDescriptors.js.map +7 -0
  315. package/dist/esm/helpers/registerCSSVariable.js +14 -0
  316. package/dist/esm/helpers/registerCSSVariable.js.map +7 -0
  317. package/dist/esm/helpers/startTransition.js +6 -0
  318. package/dist/esm/helpers/startTransition.js.map +7 -0
  319. package/dist/esm/helpers/themeable.js +11 -9
  320. package/dist/esm/helpers/themeable.js.map +2 -2
  321. package/dist/esm/helpers/themes.js +54 -0
  322. package/dist/esm/helpers/themes.js.map +7 -0
  323. package/dist/esm/helpers/useShallowSetState.js +20 -0
  324. package/dist/esm/helpers/useShallowSetState.js.map +7 -0
  325. package/dist/esm/helpers/validate.js +0 -75
  326. package/dist/esm/helpers/validate.js.map +3 -3
  327. package/dist/esm/helpers/withStaticProperties.js +2 -4
  328. package/dist/esm/helpers/withStaticProperties.js.map +1 -1
  329. package/dist/esm/hooks/getThemeUnwrapped.js +12 -0
  330. package/dist/esm/hooks/getThemeUnwrapped.js.map +7 -0
  331. package/dist/esm/hooks/useConstant.js +4 -4
  332. package/dist/esm/hooks/useConstant.js.map +2 -2
  333. package/dist/esm/hooks/useElementLayout.js +66 -0
  334. package/dist/esm/hooks/useElementLayout.js.map +7 -0
  335. package/dist/esm/hooks/useId.js +1 -31
  336. package/dist/esm/hooks/useId.js.map +2 -2
  337. package/dist/esm/hooks/useIsMounted.js +1 -4
  338. package/dist/esm/hooks/useIsMounted.js.map +2 -2
  339. package/dist/esm/hooks/useIsTouchDevice.js +5 -13
  340. package/dist/esm/hooks/useIsTouchDevice.js.map +2 -2
  341. package/dist/esm/hooks/useMedia.js +159 -113
  342. package/dist/esm/hooks/useMedia.js.map +3 -3
  343. package/dist/esm/hooks/usePressable.js +2 -4
  344. package/dist/esm/hooks/usePressable.js.map +1 -1
  345. package/dist/esm/hooks/useSafeRef.js +34 -0
  346. package/dist/esm/hooks/useSafeRef.js.map +7 -0
  347. package/dist/esm/hooks/useServerHooks.js +11 -0
  348. package/dist/esm/hooks/useServerHooks.js.map +7 -0
  349. package/dist/esm/hooks/useTheme.js +161 -111
  350. package/dist/esm/hooks/useTheme.js.map +3 -3
  351. package/dist/esm/hooks/useUnmountEffect.js +0 -3
  352. package/dist/esm/hooks/useUnmountEffect.js.map +1 -1
  353. package/dist/esm/index.js +44 -18
  354. package/dist/esm/index.js.map +2 -2
  355. package/dist/esm/inject-styles.js +16 -0
  356. package/dist/esm/inject-styles.js.map +7 -0
  357. package/dist/esm/injectStyles.js +16 -0
  358. package/dist/esm/injectStyles.js.map +7 -0
  359. package/dist/esm/insertFont.js +67 -0
  360. package/dist/esm/insertFont.js.map +7 -0
  361. package/dist/esm/react-native.js +3 -0
  362. package/dist/esm/react-native.js.map +7 -0
  363. package/dist/esm/setupReactNative.js +12 -0
  364. package/dist/esm/setupReactNative.js.map +7 -0
  365. package/dist/esm/static.js +1 -15
  366. package/dist/esm/static.js.map +2 -2
  367. package/dist/esm/styled.js +50 -19
  368. package/dist/esm/styled.js.map +2 -2
  369. package/dist/esm/types-rnw.js +0 -0
  370. package/dist/esm/types-rnw.js.map +0 -0
  371. package/dist/esm/types.js +0 -0
  372. package/dist/esm/types.js.map +0 -0
  373. package/dist/esm/updateTheme.js +23 -0
  374. package/dist/esm/updateTheme.js.map +7 -0
  375. package/dist/esm/vendor/Pressability.js +7 -0
  376. package/dist/esm/vendor/Pressability.js.map +7 -0
  377. package/dist/esm/vendor/Pressability.native.js +7 -0
  378. package/dist/esm/vendor/Pressability.native.js.map +7 -0
  379. package/dist/esm/views/FontLanguage.js +14 -0
  380. package/dist/esm/views/FontLanguage.js.map +7 -0
  381. package/dist/esm/views/FontLanguage.native.js +14 -0
  382. package/dist/esm/views/FontLanguage.native.js.map +7 -0
  383. package/dist/esm/views/FontLanguage.types.js +1 -0
  384. package/dist/{cjs/defaultComponentState.js.map → esm/views/FontLanguage.types.js.map} +0 -0
  385. package/dist/esm/views/Slot.js +55 -37
  386. package/dist/esm/views/Slot.js.map +2 -2
  387. package/dist/esm/views/Stack.js +0 -0
  388. package/dist/esm/views/Stack.js.map +2 -2
  389. package/dist/esm/views/TamaguiProvider.js +56 -0
  390. package/dist/esm/views/TamaguiProvider.js.map +7 -0
  391. package/dist/esm/views/Text.js +17 -5
  392. package/dist/esm/views/Text.js.map +2 -2
  393. package/dist/esm/views/Theme.js +35 -19
  394. package/dist/esm/views/Theme.js.map +3 -3
  395. package/dist/esm/views/ThemeInverse.js +22 -20
  396. package/dist/esm/views/ThemeInverse.js.map +2 -2
  397. package/dist/esm/views/ThemeProvider.js +28 -21
  398. package/dist/esm/views/ThemeProvider.js.map +2 -2
  399. package/dist/esm/views/ThemeReset.js +21 -20
  400. package/dist/esm/views/ThemeReset.js.map +2 -2
  401. package/package.json +52 -16
  402. package/reset.css +25 -4
  403. package/src/Tamagui.ts +48 -0
  404. package/src/addTheme.ts +68 -0
  405. package/src/config.ts +44 -0
  406. package/src/constants/constants.ts +19 -0
  407. package/src/constants/isDevTools.ts +6 -0
  408. package/src/contexts/ButtonInsideButtonContext.tsx +3 -0
  409. package/src/contexts/FontLanguageContext.tsx +5 -0
  410. package/src/contexts/TextAncestorContext.tsx +3 -0
  411. package/src/contexts/ThemeContext.tsx +5 -0
  412. package/src/createComponent.tsx +1460 -0
  413. package/src/createFont.ts +29 -0
  414. package/src/createShorthands.ts +7 -0
  415. package/src/createTamagui.ts +225 -0
  416. package/src/createTheme.ts +13 -0
  417. package/src/createTokens.ts +35 -0
  418. package/src/createVariable.ts +83 -0
  419. package/src/createVariables.ts +42 -0
  420. package/src/helpers/RNComponents.tsx +14 -0
  421. package/src/helpers/ThemeManager.tsx +227 -0
  422. package/src/helpers/areEqualSets.tsx +9 -0
  423. package/src/helpers/cache.ts +18 -0
  424. package/src/helpers/createMediaStyle.ts +55 -0
  425. package/src/helpers/createPropMapper.ts +526 -0
  426. package/src/helpers/createProxy.ts +16 -0
  427. package/src/helpers/expandStyle.ts +81 -0
  428. package/src/helpers/expandStyles.ts +106 -0
  429. package/src/helpers/extendStaticConfig.ts +75 -0
  430. package/src/helpers/fixNativeShadow.tsx +2 -0
  431. package/src/helpers/getAnimationDriver.tsx +5 -0
  432. package/src/helpers/getExpandedShorthands.ts +15 -0
  433. package/src/helpers/getFontLanguage.ts +2 -0
  434. package/src/helpers/getSize.ts +22 -0
  435. package/src/helpers/getSplitStyles.tsx +901 -0
  436. package/src/helpers/getStylesAtomic.native.ts +3 -0
  437. package/src/helpers/getStylesAtomic.ts +272 -0
  438. package/src/helpers/getThemeCSSRules.native.ts +3 -0
  439. package/src/helpers/getThemeCSSRules.ts +105 -0
  440. package/src/helpers/getVariantExtras.tsx +85 -0
  441. package/src/helpers/insertStyleRule.tsx +163 -0
  442. package/src/helpers/isObj.ts +1 -0
  443. package/src/helpers/isTamaguiComponent.tsx +15 -0
  444. package/src/helpers/isTamaguiElement.tsx +12 -0
  445. package/src/helpers/matchMedia.native.ts +6 -0
  446. package/src/helpers/matchMedia.ts +17 -0
  447. package/src/helpers/mergeProps.ts +56 -0
  448. package/src/helpers/mergeTransform.ts +16 -0
  449. package/src/helpers/normalizeColor.ts +53 -0
  450. package/src/helpers/normalizeValueWithProperty.ts +110 -0
  451. package/src/helpers/proxyThemeVariables.tsx +15 -0
  452. package/src/helpers/pseudoDescriptors.ts +18 -0
  453. package/src/helpers/registerCSSVariable.ts +11 -0
  454. package/src/helpers/themeable.tsx +40 -0
  455. package/src/helpers/themes.ts +69 -0
  456. package/src/helpers/useShallowSetState.tsx +19 -0
  457. package/src/helpers/withStaticProperties.tsx +7 -0
  458. package/src/hooks/getThemeUnwrapped.tsx +7 -0
  459. package/src/hooks/useElementLayout.tsx +90 -0
  460. package/src/hooks/useId.tsx +1 -0
  461. package/src/hooks/useIsTouchDevice.tsx +6 -0
  462. package/src/hooks/useMedia.tsx +265 -0
  463. package/src/hooks/useSafeRef.ts +48 -0
  464. package/src/hooks/useServerHooks.tsx +12 -0
  465. package/src/hooks/useTheme.tsx +300 -0
  466. package/src/index.ts +74 -0
  467. package/src/inject-styles.ts +20 -0
  468. package/src/insertFont.ts +70 -0
  469. package/src/setupReactNative.ts +9 -0
  470. package/src/static.ts +5 -0
  471. package/src/styled.tsx +204 -0
  472. package/src/types-rnw.tsx +162 -0
  473. package/src/types.tsx +1327 -0
  474. package/src/updateTheme.ts +23 -0
  475. package/src/vendor/Pressability.native.tsx +3 -0
  476. package/src/vendor/Pressability.tsx +2 -0
  477. package/src/views/FontLanguage.native.tsx +10 -0
  478. package/src/views/FontLanguage.tsx +18 -0
  479. package/src/views/FontLanguage.types.ts +13 -0
  480. package/src/views/Slot.tsx +147 -0
  481. package/src/views/Stack.tsx +24 -0
  482. package/src/views/TamaguiProvider.tsx +60 -0
  483. package/src/views/Text.tsx +86 -0
  484. package/src/views/Theme.tsx +72 -0
  485. package/src/views/ThemeInverse.tsx +33 -0
  486. package/src/views/ThemeProvider.tsx +63 -0
  487. package/src/views/ThemeReset.tsx +43 -0
  488. package/types/Tamagui.d.ts +11 -11
  489. package/types/addTheme.d.ts +11 -0
  490. package/types/config.d.ts +47 -0
  491. package/types/constants/constants.d.ts +15 -4
  492. package/types/constants/isDevTools.d.ts +2 -0
  493. package/types/constants/platform.d.ts +7 -6
  494. package/types/constants/platform.native.d.ts +13 -0
  495. package/types/contexts/FontLanguageContext.d.ts +5 -0
  496. package/types/contexts/TextAncestorContext.d.ts +3 -0
  497. package/types/{ThemeContext.d.ts → contexts/ThemeContext.d.ts} +1 -1
  498. package/types/createComponent.d.ts +16 -14
  499. package/types/createShorthands.d.ts +2 -1
  500. package/types/createTamagui.d.ts +2 -17
  501. package/types/createTheme.d.ts +1 -1
  502. package/types/createTokens.d.ts +5 -6
  503. package/types/createVariable.d.ts +24 -12
  504. package/types/createVariables.d.ts +10 -0
  505. package/types/helpers/RNComponents.d.ts +1 -1
  506. package/types/helpers/ThemeManager.d.ts +45 -0
  507. package/types/helpers/assignNativePropsToWeb.d.ts +2 -0
  508. package/types/helpers/assignNativePropsToWeb.native.d.ts +2 -0
  509. package/types/helpers/cache.d.ts +12 -0
  510. package/types/helpers/calc.d.ts +1 -0
  511. package/types/helpers/createMediaStyle.d.ts +2 -4
  512. package/types/helpers/createPropMapper.d.ts +6 -3
  513. package/types/helpers/createProxy.d.ts +2 -0
  514. package/types/helpers/expandStyle.d.ts +6 -0
  515. package/types/helpers/expandStyles.d.ts +26 -0
  516. package/types/helpers/getAnimationDriver.d.ts +6 -0
  517. package/types/helpers/getFont.d.ts +3 -0
  518. package/types/helpers/getFontLanguage.d.ts +2 -0
  519. package/types/helpers/getSize.d.ts +3 -2
  520. package/types/helpers/getSplitStyles.d.ts +15 -12
  521. package/types/helpers/getStackSize.d.ts +6 -30
  522. package/types/helpers/getStylesAtomic.d.ts +14 -23
  523. package/types/helpers/getThemeCSSRules.d.ts +8 -0
  524. package/types/helpers/getThemeCSSRules.native.d.ts +2 -0
  525. package/types/helpers/getVariantExtras.d.ts +5 -0
  526. package/types/helpers/insertStyleRule.d.ts +8 -4
  527. package/types/helpers/isTamaguiComponent.d.ts +5 -0
  528. package/types/helpers/isTamaguiElement.d.ts +5 -1
  529. package/types/helpers/matchMedia.d.ts +1 -1
  530. package/types/helpers/mergeProps.d.ts +17 -0
  531. package/types/helpers/mergeTransform.d.ts +7 -0
  532. package/types/helpers/normalizeColor.d.ts +3 -0
  533. package/types/helpers/normalizeValueWithProperty.d.ts +7 -0
  534. package/types/helpers/pseudoDescriptors.d.ts +16 -0
  535. package/types/helpers/registerCSSVariable.d.ts +5 -0
  536. package/types/helpers/startTransition.d.ts +3 -0
  537. package/types/helpers/themeable.d.ts +4 -7
  538. package/types/helpers/themes.d.ts +4 -0
  539. package/types/helpers/useShallowSetState.d.ts +3 -0
  540. package/types/helpers/validate.d.ts +0 -3
  541. package/types/hooks/getThemeUnwrapped.d.ts +3 -0
  542. package/types/hooks/useElementLayout.d.ts +27 -0
  543. package/types/hooks/useId.d.ts +1 -8
  544. package/types/hooks/useMedia.d.ts +22 -6
  545. package/types/hooks/useMedia.test.d.ts +1 -0
  546. package/types/hooks/usePressablePressResponder.d.ts +84 -0
  547. package/types/hooks/useSafeRef.d.ts +4 -0
  548. package/types/hooks/useServerHooks.d.ts +4 -0
  549. package/types/hooks/useTheme.d.ts +22 -32
  550. package/types/index.d.ts +25 -14
  551. package/types/inject-styles.d.ts +7 -0
  552. package/types/injectStyles.d.ts +7 -0
  553. package/types/insertFont.d.ts +9 -0
  554. package/types/react-native.d.ts +8 -0
  555. package/types/setupReactNative.d.ts +3 -0
  556. package/types/static.d.ts +1 -15
  557. package/types/styled.d.ts +7 -3
  558. package/types/types.d.ts +314 -108
  559. package/types/updateTheme.d.ts +9 -0
  560. package/types/vendor/Pressability.d.ts +3 -0
  561. package/types/vendor/Pressability.native.d.ts +3 -0
  562. package/types/views/AbsoluteFill.d.ts +5 -0
  563. package/types/views/AbsoluteFill.native.d.ts +3 -0
  564. package/types/views/FontLanguage.d.ts +4 -0
  565. package/types/views/FontLanguage.native.d.ts +4 -0
  566. package/types/views/FontLanguage.types.d.ts +11 -0
  567. package/types/views/Slot.d.ts +5 -4
  568. package/types/views/Stack.d.ts +1 -1
  569. package/types/views/TamaguiProvider.d.ts +4 -0
  570. package/types/views/Text.d.ts +1 -1
  571. package/types/views/Theme.d.ts +3 -9
  572. package/types/views/ThemeInverse.d.ts +4 -8
  573. package/types/views/ThemeProvider.d.ts +2 -1
  574. package/dist/cjs/ThemeContext.js.map +0 -7
  575. package/dist/cjs/ThemeManager.js.map +0 -7
  576. package/dist/cjs/conf.js.map +0 -7
  577. package/dist/cjs/constants/rnw.js +0 -46
  578. package/dist/cjs/constants/rnw.js.map +0 -7
  579. package/dist/cjs/defaultComponentState.js +0 -1
  580. package/dist/cjs/helpers/addStylesUsingClassname.js +0 -87
  581. package/dist/cjs/helpers/addStylesUsingClassname.js.map +0 -7
  582. package/dist/cjs/helpers/createShallowUpdate.js +0 -55
  583. package/dist/cjs/helpers/createShallowUpdate.js.map +0 -7
  584. package/dist/cjs/helpers/createTamaguiProvider.js +0 -93
  585. package/dist/cjs/helpers/createTamaguiProvider.js.map +0 -7
  586. package/dist/cjs/helpers/fixNativeShadow.native.js +0 -53
  587. package/dist/cjs/helpers/fixNativeShadow.native.js.map +0 -7
  588. package/dist/cjs/helpers/getButtonSize.js +0 -45
  589. package/dist/cjs/helpers/getButtonSize.js.map +0 -7
  590. package/dist/cjs/helpers/getTextSize.js.map +0 -7
  591. package/dist/cjs/helpers/nativeGestureHandler.js.map +0 -7
  592. package/dist/cjs/helpers/nativeGestureHandler.native.js.map +0 -7
  593. package/dist/cjs/helpers/wrapThemeManagerContext.js.map +0 -7
  594. package/dist/cjs/hooks/useFeatures.js +0 -228
  595. package/dist/cjs/hooks/useFeatures.js.map +0 -7
  596. package/dist/cjs/hooks/usePrevious.js +0 -1
  597. package/dist/cjs/hooks/usePrevious.js.map +0 -7
  598. package/dist/cjs/nativeGestureHandler.native.js.map +0 -7
  599. package/dist/cjs/views/TextAncestorContext.js +0 -45
  600. package/dist/cjs/views/TextAncestorContext.js.map +0 -7
  601. package/dist/esm/ThemeContext.js.map +0 -7
  602. package/dist/esm/ThemeManager.js.map +0 -7
  603. package/dist/esm/conf.js +0 -36
  604. package/dist/esm/conf.js.map +0 -7
  605. package/dist/esm/constants/rnw.js +0 -24
  606. package/dist/esm/constants/rnw.js.map +0 -7
  607. package/dist/esm/defaultComponentState.js +0 -1
  608. package/dist/esm/defaultComponentState.js.map +0 -7
  609. package/dist/esm/helpers/addStylesUsingClassname.js +0 -64
  610. package/dist/esm/helpers/addStylesUsingClassname.js.map +0 -7
  611. package/dist/esm/helpers/createShallowUpdate.js +0 -19
  612. package/dist/esm/helpers/createShallowUpdate.js.map +0 -7
  613. package/dist/esm/helpers/createTamaguiProvider.js +0 -40
  614. package/dist/esm/helpers/createTamaguiProvider.js.map +0 -7
  615. package/dist/esm/helpers/fixNativeShadow.native.js +0 -32
  616. package/dist/esm/helpers/fixNativeShadow.native.js.map +0 -7
  617. package/dist/esm/helpers/getButtonSize.js +0 -24
  618. package/dist/esm/helpers/getButtonSize.js.map +0 -7
  619. package/dist/esm/helpers/getTextSize.js.map +0 -7
  620. package/dist/esm/helpers/nativeGestureHandler.js +0 -7
  621. package/dist/esm/helpers/nativeGestureHandler.js.map +0 -7
  622. package/dist/esm/helpers/nativeGestureHandler.native.js +0 -2
  623. package/dist/esm/helpers/nativeGestureHandler.native.js.map +0 -7
  624. package/dist/esm/helpers/wrapThemeManagerContext.js +0 -14
  625. package/dist/esm/helpers/wrapThemeManagerContext.js.map +0 -7
  626. package/dist/esm/hooks/useFeatures.js +0 -173
  627. package/dist/esm/hooks/useFeatures.js.map +0 -7
  628. package/dist/esm/hooks/usePrevious.js +0 -1
  629. package/dist/esm/hooks/usePrevious.js.map +0 -7
  630. package/dist/esm/nativeGestureHandler.native.js +0 -2
  631. package/dist/esm/nativeGestureHandler.native.js.map +0 -7
  632. package/dist/esm/views/TextAncestorContext.js +0 -18
  633. package/dist/esm/views/TextAncestorContext.js.map +0 -7
  634. package/dist/jsx/Tamagui.js +0 -41
  635. package/dist/jsx/ThemeContext.js +0 -5
  636. package/dist/jsx/ThemeManager.js +0 -186
  637. package/dist/jsx/conf.js +0 -35
  638. package/dist/jsx/constants/constants.js +0 -17
  639. package/dist/jsx/constants/platform.js +0 -25
  640. package/dist/jsx/constants/rnw.js +0 -23
  641. package/dist/jsx/contexts/ButtonInsideButtonContext.js +0 -5
  642. package/dist/jsx/createComponent.js +0 -636
  643. package/dist/jsx/createFont.js +0 -27
  644. package/dist/jsx/createShorthands.js +0 -9
  645. package/dist/jsx/createTamagui.js +0 -201
  646. package/dist/jsx/createTheme.js +0 -6
  647. package/dist/jsx/createTokens.js +0 -28
  648. package/dist/jsx/createVariable.js +0 -48
  649. package/dist/jsx/defaultComponentState.js +0 -0
  650. package/dist/jsx/helpers/RNComponents.js +0 -11
  651. package/dist/jsx/helpers/addStylesUsingClassname.js +0 -63
  652. package/dist/jsx/helpers/areEqualSets.js +0 -15
  653. package/dist/jsx/helpers/createMediaStyle.js +0 -30
  654. package/dist/jsx/helpers/createPropMapper.js +0 -237
  655. package/dist/jsx/helpers/createShallowUpdate.js +0 -18
  656. package/dist/jsx/helpers/createTamaguiProvider.js +0 -34
  657. package/dist/jsx/helpers/extendStaticConfig.js +0 -61
  658. package/dist/jsx/helpers/fixNativeShadow.js +0 -7
  659. package/dist/jsx/helpers/fixNativeShadow.native.js +0 -31
  660. package/dist/jsx/helpers/getButtonSize.js +0 -23
  661. package/dist/jsx/helpers/getExpandedShorthands.js +0 -18
  662. package/dist/jsx/helpers/getSize.js +0 -12
  663. package/dist/jsx/helpers/getSplitStyles.js +0 -322
  664. package/dist/jsx/helpers/getStackSize.js +0 -41
  665. package/dist/jsx/helpers/getStylesAtomic.js +0 -130
  666. package/dist/jsx/helpers/getStylesAtomic.native.js +0 -9
  667. package/dist/jsx/helpers/getTextSize.js +0 -33
  668. package/dist/jsx/helpers/insertStyleRule.js +0 -94
  669. package/dist/jsx/helpers/isObj.js +0 -6
  670. package/dist/jsx/helpers/isTamaguiElement.js +0 -10
  671. package/dist/jsx/helpers/matchMedia.js +0 -17
  672. package/dist/jsx/helpers/matchMedia.native.js +0 -8
  673. package/dist/jsx/helpers/nativeGestureHandler.js +0 -6
  674. package/dist/jsx/helpers/nativeGestureHandler.native.js +0 -1
  675. package/dist/jsx/helpers/proxyThemeVariables.js +0 -17
  676. package/dist/jsx/helpers/themeable.js +0 -24
  677. package/dist/jsx/helpers/validate.js +0 -75
  678. package/dist/jsx/helpers/withStaticProperties.js +0 -9
  679. package/dist/jsx/helpers/wrapThemeManagerContext.js +0 -10
  680. package/dist/jsx/hooks/useConstant.js +0 -14
  681. package/dist/jsx/hooks/useFeatures.js +0 -167
  682. package/dist/jsx/hooks/useId.js +0 -34
  683. package/dist/jsx/hooks/useIsMounted.js +0 -18
  684. package/dist/jsx/hooks/useIsTouchDevice.js +0 -16
  685. package/dist/jsx/hooks/useMedia.js +0 -158
  686. package/dist/jsx/hooks/usePressable.js +0 -13
  687. package/dist/jsx/hooks/usePrevious.js +0 -0
  688. package/dist/jsx/hooks/useTheme.js +0 -177
  689. package/dist/jsx/hooks/useUnmountEffect.js +0 -10
  690. package/dist/jsx/index.js +0 -54
  691. package/dist/jsx/nativeGestureHandler.native.js +0 -1
  692. package/dist/jsx/static.js +0 -16
  693. package/dist/jsx/styled.js +0 -47
  694. package/dist/jsx/types-rnw.js +0 -0
  695. package/dist/jsx/types.js +0 -0
  696. package/dist/jsx/views/Slot.js +0 -75
  697. package/dist/jsx/views/Stack.js +0 -12
  698. package/dist/jsx/views/Text.js +0 -56
  699. package/dist/jsx/views/TextAncestorContext.js +0 -15
  700. package/dist/jsx/views/Theme.js +0 -31
  701. package/dist/jsx/views/ThemeInverse.js +0 -27
  702. package/dist/jsx/views/ThemeProvider.js +0 -35
  703. package/dist/jsx/views/ThemeReset.js +0 -34
  704. package/types/Tamagui.d.ts.map +0 -1
  705. package/types/ThemeContext.d.ts.map +0 -1
  706. package/types/ThemeManager.d.ts +0 -49
  707. package/types/ThemeManager.d.ts.map +0 -1
  708. package/types/conf.d.ts +0 -27
  709. package/types/conf.d.ts.map +0 -1
  710. package/types/constants/constants.d.ts.map +0 -1
  711. package/types/constants/platform.d.ts.map +0 -1
  712. package/types/constants/rnw.d.ts +0 -2
  713. package/types/constants/rnw.d.ts.map +0 -1
  714. package/types/contexts/ButtonInsideButtonContext.d.ts.map +0 -1
  715. package/types/createComponent.d.ts.map +0 -1
  716. package/types/createFont.d.ts.map +0 -1
  717. package/types/createShorthands.d.ts.map +0 -1
  718. package/types/createTamagui.d.ts.map +0 -1
  719. package/types/createTheme.d.ts.map +0 -1
  720. package/types/createTokens.d.ts.map +0 -1
  721. package/types/createVariable.d.ts.map +0 -1
  722. package/types/defaultComponentState.d.ts +0 -1
  723. package/types/defaultComponentState.d.ts.map +0 -1
  724. package/types/helpers/RNComponents.d.ts.map +0 -1
  725. package/types/helpers/addStylesUsingClassname.d.ts +0 -3
  726. package/types/helpers/addStylesUsingClassname.d.ts.map +0 -1
  727. package/types/helpers/areEqualSets.d.ts.map +0 -1
  728. package/types/helpers/createMediaStyle.d.ts.map +0 -1
  729. package/types/helpers/createPropMapper.d.ts.map +0 -1
  730. package/types/helpers/createShallowUpdate.d.ts +0 -4
  731. package/types/helpers/createShallowUpdate.d.ts.map +0 -1
  732. package/types/helpers/createTamaguiProvider.d.ts +0 -7
  733. package/types/helpers/createTamaguiProvider.d.ts.map +0 -1
  734. package/types/helpers/extendStaticConfig.d.ts.map +0 -1
  735. package/types/helpers/fixNativeShadow.d.ts.map +0 -1
  736. package/types/helpers/fixNativeShadow.native.d.ts +0 -3
  737. package/types/helpers/fixNativeShadow.native.d.ts.map +0 -1
  738. package/types/helpers/getButtonSize.d.ts +0 -8
  739. package/types/helpers/getButtonSize.d.ts.map +0 -1
  740. package/types/helpers/getExpandedShorthands.d.ts.map +0 -1
  741. package/types/helpers/getSize.d.ts.map +0 -1
  742. package/types/helpers/getSplitStyles.d.ts.map +0 -1
  743. package/types/helpers/getStackSize.d.ts.map +0 -1
  744. package/types/helpers/getStylesAtomic.d.ts.map +0 -1
  745. package/types/helpers/getStylesAtomic.native.d.ts.map +0 -1
  746. package/types/helpers/getTextSize.d.ts +0 -3
  747. package/types/helpers/getTextSize.d.ts.map +0 -1
  748. package/types/helpers/insertStyleRule.d.ts.map +0 -1
  749. package/types/helpers/isObj.d.ts.map +0 -1
  750. package/types/helpers/isTamaguiElement.d.ts.map +0 -1
  751. package/types/helpers/matchMedia.d.ts.map +0 -1
  752. package/types/helpers/matchMedia.native.d.ts.map +0 -1
  753. package/types/helpers/nativeGestureHandler.d.ts +0 -2
  754. package/types/helpers/nativeGestureHandler.d.ts.map +0 -1
  755. package/types/helpers/nativeGestureHandler.native.d.ts +0 -2
  756. package/types/helpers/nativeGestureHandler.native.d.ts.map +0 -1
  757. package/types/helpers/proxyThemeVariables.d.ts.map +0 -1
  758. package/types/helpers/themeable.d.ts.map +0 -1
  759. package/types/helpers/validate.d.ts.map +0 -1
  760. package/types/helpers/withStaticProperties.d.ts.map +0 -1
  761. package/types/helpers/wrapThemeManagerContext.d.ts +0 -3
  762. package/types/helpers/wrapThemeManagerContext.d.ts.map +0 -1
  763. package/types/hooks/useConstant.d.ts.map +0 -1
  764. package/types/hooks/useFeatures.d.ts +0 -18
  765. package/types/hooks/useFeatures.d.ts.map +0 -1
  766. package/types/hooks/useId.d.ts.map +0 -1
  767. package/types/hooks/useIsMounted.d.ts.map +0 -1
  768. package/types/hooks/useIsTouchDevice.d.ts.map +0 -1
  769. package/types/hooks/useMedia.d.ts.map +0 -1
  770. package/types/hooks/usePressable.d.ts.map +0 -1
  771. package/types/hooks/usePrevious.d.ts +0 -1
  772. package/types/hooks/usePrevious.d.ts.map +0 -1
  773. package/types/hooks/useTheme.d.ts.map +0 -1
  774. package/types/hooks/useUnmountEffect.d.ts.map +0 -1
  775. package/types/index.d.ts.map +0 -1
  776. package/types/nativeGestureHandler.native.d.ts +0 -2
  777. package/types/nativeGestureHandler.native.d.ts.map +0 -1
  778. package/types/static.d.ts.map +0 -1
  779. package/types/styled.d.ts.map +0 -1
  780. package/types/types-rnw.d.ts.map +0 -1
  781. package/types/types.d.ts.map +0 -1
  782. package/types/views/Slot.d.ts.map +0 -1
  783. package/types/views/Stack.d.ts.map +0 -1
  784. package/types/views/Text.d.ts.map +0 -1
  785. package/types/views/TextAncestorContext.d.ts +0 -5
  786. package/types/views/TextAncestorContext.d.ts.map +0 -1
  787. package/types/views/Theme.d.ts.map +0 -1
  788. package/types/views/ThemeInverse.d.ts.map +0 -1
  789. package/types/views/ThemeProvider.d.ts.map +0 -1
  790. package/types/views/ThemeReset.d.ts.map +0 -1
@@ -0,0 +1,1460 @@
1
+ import { useComposedRefs } from '@tamagui/compose-refs'
2
+ import { isClient, isRSC, isWeb, useIsomorphicLayoutEffect } from '@tamagui/constants'
3
+ /* eslint-disable react-hooks/rules-of-hooks */
4
+ import {
5
+ composeEventHandlers,
6
+ stylePropsView,
7
+ validPseudoKeys,
8
+ validStyles,
9
+ } from '@tamagui/helpers'
10
+ import { useResponderEvents } from '@tamagui/react-native-use-responder-events'
11
+ import type { ViewStyle } from '@tamagui/types-react-native'
12
+ import { useForceUpdate } from '@tamagui/use-force-update'
13
+ import React, {
14
+ Children,
15
+ Fragment,
16
+ RefObject,
17
+ createElement,
18
+ forwardRef,
19
+ memo,
20
+ useCallback,
21
+ useContext,
22
+ useEffect,
23
+ } from 'react'
24
+
25
+ import { onConfiguredOnce } from './config'
26
+ import { stackDefaultStyles } from './constants/constants'
27
+ import { FontLanguageContext } from './contexts/FontLanguageContext'
28
+ import { TextAncestorContext } from './contexts/TextAncestorContext'
29
+ import { extendStaticConfig, parseStaticConfig } from './helpers/extendStaticConfig'
30
+ import {
31
+ SplitStyleResult,
32
+ getSubStyle,
33
+ insertSplitStyles,
34
+ useSplitStyles,
35
+ } from './helpers/getSplitStyles'
36
+ import { getAllSelectors } from './helpers/insertStyleRule'
37
+ import { mergeProps } from './helpers/mergeProps'
38
+ import { proxyThemeVariables } from './helpers/proxyThemeVariables'
39
+ import { useShallowSetState } from './helpers/useShallowSetState'
40
+ import { getRect, measureLayout, useElementLayout } from './hooks/useElementLayout'
41
+ import { addMediaQueryListener, getInitialMediaState } from './hooks/useMedia'
42
+ import { useServerRef, useServerState } from './hooks/useServerHooks'
43
+ import { getThemeManager, useTheme } from './hooks/useTheme'
44
+ import {
45
+ SpaceDirection,
46
+ SpaceTokens,
47
+ SpacerProps,
48
+ StaticConfig,
49
+ StaticConfigParsed,
50
+ StylableComponent,
51
+ TamaguiComponent,
52
+ TamaguiComponentState,
53
+ TamaguiConfig,
54
+ TamaguiElement,
55
+ TamaguiInternalConfig,
56
+ UseAnimationHook,
57
+ UseAnimationProps,
58
+ } from './types'
59
+ import { usePressability } from './vendor/Pressability'
60
+ import { Slot, mergeEvent } from './views/Slot'
61
+ import { wrapThemeManagerContext } from './views/Theme'
62
+
63
+ React['keep']
64
+ // this appears to fix expo / babel not picking this up sometimes? really odd
65
+ process.env.TAMAGUI_TARGET
66
+
67
+ /**
68
+ * All things that need one-time setup after createTamagui is called
69
+ */
70
+ let defaultComponentState: TamaguiComponentState | null = null
71
+ let defaultComponentStateMounted: TamaguiComponentState | null = null
72
+ let tamaguiConfig: TamaguiInternalConfig
73
+ let AnimatedText: any
74
+ let AnimatedView: any
75
+ let initialTheme: any
76
+
77
+ export const mouseUps = new Set<Function>()
78
+ if (typeof document !== 'undefined') {
79
+ const cancelTouches = () => {
80
+ mouseUps.forEach((x) => x())
81
+ mouseUps.clear()
82
+ }
83
+ document.addEventListener('mouseup', cancelTouches)
84
+ document.addEventListener('touchend', cancelTouches)
85
+ document.addEventListener('touchcancel', cancelTouches)
86
+ }
87
+
88
+ // mutates
89
+ function mergeShorthands({ defaultProps }: StaticConfigParsed, { shorthands }: TamaguiConfig) {
90
+ // they are defined in correct order already { ...parent, ...child }
91
+ for (const key of Object.keys(defaultProps)) {
92
+ defaultProps[shorthands[key] || key] = defaultProps[key]
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Only on native do we need the actual underlying View/Text
98
+ * On the web we avoid react-native altogether in core.
99
+ */
100
+ let BaseText: any
101
+ let BaseView: any
102
+ if (process.env.TAMAGUI_TARGET === 'native') {
103
+ const native = require('react-native')
104
+ BaseText = native.Text || native.default.Text
105
+ BaseView = native.View || native.default.View
106
+ }
107
+
108
+ export function createComponent<
109
+ ComponentPropTypes extends Object = {},
110
+ Ref = TamaguiElement,
111
+ BaseProps = never
112
+ >(configIn: Partial<StaticConfig> | StaticConfigParsed, ParentComponent?: StylableComponent) {
113
+ const staticConfig = (() => {
114
+ const next = extendStaticConfig(configIn, ParentComponent)
115
+ if ('parsed' in next) {
116
+ return next
117
+ } else {
118
+ return parseStaticConfig(next)
119
+ }
120
+ })()
121
+
122
+ const defaultComponentClassName = `is_${staticConfig.componentName}`
123
+ const avoidClassesWhileAnimating = true
124
+ let defaultNativeStyle: any
125
+ let tamaguiDefaultProps: any
126
+ let defaultTag: string | undefined
127
+ let initialSplitStyles: SplitStyleResult
128
+
129
+ // see onConfiguredOnce below which attaches a name then to this component
130
+ const component = forwardRef<Ref, ComponentPropTypes>((propsIn: any, forwardedRef) => {
131
+ // React inserts default props after your props for some reason...
132
+ // order important so we do loops, you can't just spread because JS does weird things
133
+ let props: any
134
+ if (tamaguiDefaultProps && !propsIn.asChild) {
135
+ props = mergeProps(tamaguiDefaultProps, propsIn)[0]
136
+ } else {
137
+ props = propsIn
138
+ }
139
+
140
+ const debugProp = props['debug']
141
+ const { Component, isText, isZStack } = staticConfig
142
+ const componentName = props.componentName || staticConfig.componentName
143
+ const componentClassName = props.asChild
144
+ ? ''
145
+ : props.componentName
146
+ ? `is_${props.componentName}`
147
+ : defaultComponentClassName
148
+
149
+ const forceUpdate = useForceUpdate()
150
+ const theme = useTheme(props.theme, componentName, props, forceUpdate)
151
+
152
+ /**
153
+ * Component state for tracking animations, pseudos
154
+ */
155
+ const hasEnterStyle = !!props.enterStyle
156
+ const needsMount = Boolean((isWeb ? isClient : true) && (hasEnterStyle || props.animation))
157
+ const states = useServerState<TamaguiComponentState>(
158
+ needsMount ? defaultComponentState! : defaultComponentStateMounted!
159
+ )
160
+
161
+ const state = propsIn.forceStyle ? { ...states[0], [propsIn.forceStyle]: true } : states[0]
162
+ const setState = states[1]
163
+ const setStateShallow = useShallowSetState(setState)
164
+
165
+ const shouldSetMounted = needsMount && !state.mounted
166
+ const setMounted = shouldSetMounted
167
+ ? () => {
168
+ // for some reason without some small delay it doesn't animate css
169
+ setTimeout(
170
+ () => {
171
+ setStateShallow({
172
+ mounted: true,
173
+ })
174
+ },
175
+ isWeb ? 10 : 0
176
+ )
177
+ }
178
+ : undefined
179
+
180
+ const shouldAvoidClasses =
181
+ !!(props.animation && avoidClassesWhileAnimating) || !staticConfig.acceptsClassName
182
+
183
+ const shouldForcePseudo = !!propsIn.forceStyle
184
+ const hasTextAncestor = !!(isWeb && isText ? useContext(TextAncestorContext) : false)
185
+ const splitStyleState =
186
+ !shouldAvoidClasses && !shouldForcePseudo
187
+ ? {
188
+ ...state,
189
+ hasTextAncestor,
190
+ dynamicStylesInline: true,
191
+ }
192
+ : ({
193
+ ...state,
194
+ noClassNames: true,
195
+ dynamicStylesInline: true,
196
+ hasTextAncestor,
197
+ resolveVariablesAs: 'value',
198
+ } as const)
199
+
200
+ const languageContext = isRSC ? null : useContext(FontLanguageContext)
201
+
202
+ const isDisabled = props.disabled ?? props.accessibilityState?.disabled
203
+
204
+ const useAnimations = tamaguiConfig.animations?.useAnimations as UseAnimationHook | undefined
205
+ const nextIsAnimated = !!(useAnimations && props.animation)
206
+ // conditional but if ever true stays true
207
+ const isAnimated = nextIsAnimated || state.hasAnimation
208
+ if (nextIsAnimated && !state.hasAnimation) {
209
+ setStateShallow({ hasAnimation: true })
210
+ }
211
+
212
+ const isTaggable = !Component || typeof Component === 'string'
213
+ // default to tag, fallback to component (when both strings)
214
+ const element = isWeb
215
+ ? isTaggable
216
+ ? props.tag || defaultTag || Component
217
+ : Component
218
+ : Component
219
+
220
+ const BaseTextComponent = BaseText || element || 'span'
221
+ const BaseViewComponent = BaseView || element || (hasTextAncestor ? 'span' : 'div')
222
+ let elementType = isText
223
+ ? (isAnimated ? AnimatedText : null) || BaseTextComponent
224
+ : (isAnimated ? AnimatedView : null) || BaseViewComponent
225
+
226
+ elementType = Component || elementType
227
+ const isStringElement = typeof elementType === 'string'
228
+
229
+ const splitStyles = useSplitStyles(
230
+ props,
231
+ staticConfig,
232
+ theme,
233
+ splitStyleState,
234
+ props.asChild ? null : initialSplitStyles,
235
+ languageContext || undefined,
236
+ elementType,
237
+ debugProp
238
+ )
239
+
240
+ const hostRef = useServerRef<TamaguiElement>(null)
241
+
242
+ // animation setup
243
+ const isReactNative = Boolean(
244
+ staticConfig.isReactNative || (isAnimated && tamaguiConfig.animations.isReactNative)
245
+ )
246
+ const isAnimatedReactNativeWeb = isAnimated && avoidClassesWhileAnimating
247
+
248
+ if (process.env.NODE_ENV === 'development') {
249
+ if (!process.env.TAMAGUI_TARGET) {
250
+ // eslint-disable-next-line no-console
251
+ console.error(`No process.env.TAMAGUI_TARGET set, please set it to "native" or "web".`)
252
+ }
253
+
254
+ if (debugProp) {
255
+ const name = `${
256
+ componentName || Component?.displayName || Component?.name || '[Unnamed Component]'
257
+ }`
258
+ const type = isReactNative ? 'rnw' : 'tamagui'
259
+ const banner = `${name} ${propsIn['data-is'] || ''} ${type}`
260
+ // eslint-disable-next-line no-console
261
+ console.group(`%c 🐛 ${banner}`, 'background: yellow;')
262
+ // eslint-disable-next-line no-console
263
+ console.groupCollapsed('initial props/state')
264
+ // eslint-disable-next-line no-console
265
+ console.log('propsIn', propsIn, 'turned into', props, 'order', Object.keys(props))
266
+ // eslint-disable-next-line no-console
267
+ console.log('splitStyles', splitStyles)
268
+ // eslint-disable-next-line no-console
269
+ console.log('className', Object.values(splitStyles.classNames))
270
+ if (typeof window !== 'undefined') {
271
+ // eslint-disable-next-line no-console
272
+ console.log('ref', hostRef, '(click to view)')
273
+ }
274
+ // eslint-disable-next-line no-console
275
+ console.groupEnd()
276
+ if (debugProp === 'break') {
277
+ // eslint-disable-next-line no-debugger
278
+ debugger
279
+ }
280
+ }
281
+ }
282
+
283
+ const {
284
+ viewProps: viewPropsIn,
285
+ pseudos,
286
+ medias,
287
+ style: splitStylesStyle,
288
+ classNames,
289
+ mediaKeys,
290
+ } = splitStyles
291
+
292
+ const animationFeatureStylesIn = props.animation
293
+ ? { ...defaultNativeStyle, ...splitStylesStyle }
294
+ : null
295
+ const propsWithAnimation = props as UseAnimationProps
296
+
297
+ // once you set animation prop don't remove it, you can set to undefined/false
298
+ // reason is animations are heavy - no way around it, and must be run inline here (🙅 loading as a sub-component)
299
+ let animationStyles: any
300
+ if (!isRSC && isAnimated && useAnimations) {
301
+ const animations = useAnimations(propsWithAnimation, {
302
+ state,
303
+ pseudos,
304
+ onDidAnimate: props.onDidAnimate,
305
+ hostRef,
306
+ staticConfig,
307
+ getStyle({ isExiting, isEntering, exitVariant, enterVariant } = {}) {
308
+ // we have to merge such that transforms keys all exist
309
+ const style = animationFeatureStylesIn
310
+
311
+ const enterStyle = isEntering
312
+ ? enterVariant && staticConfig.variants?.[enterVariant]['true']
313
+ ? getSubStyle(
314
+ '',
315
+ staticConfig.variants?.[enterVariant]['true'],
316
+ staticConfig,
317
+ theme,
318
+ props,
319
+ state,
320
+ tamaguiConfig
321
+ ) || pseudos.enterStyle
322
+ : pseudos.enterStyle
323
+ : null
324
+
325
+ const exitStyle = isExiting
326
+ ? exitVariant && staticConfig.variants?.[exitVariant]['true']
327
+ ? getSubStyle(
328
+ '',
329
+ staticConfig.variants?.[exitVariant]['true'],
330
+ staticConfig,
331
+ theme,
332
+ props,
333
+ state,
334
+ tamaguiConfig
335
+ ) || pseudos.exitStyle
336
+ : pseudos.exitStyle
337
+ : null
338
+
339
+ // if you have hoverStyle={{ scale: 1.1 }} and don't have scale set on the base style
340
+ // no animation will run! this is really confusing. this will look at all variants,
341
+ // and fill in base styles if they don't exist. eg:
342
+ // input:
343
+ // base: {}
344
+ // hoverStyle: { scale: 2 }
345
+ // enterStyle: { x: 100 }
346
+ // output:
347
+ // base: { x: 0, scale: 1 }
348
+ ensureBaseHasDefaults(
349
+ style,
350
+ // enterStyle,
351
+ pseudos.hoverStyle,
352
+ pseudos.focusStyle,
353
+ pseudos.pressStyle
354
+ )
355
+
356
+ enterStyle && isEntering && merge(style, enterStyle)
357
+ state.hover && pseudos.hoverStyle && merge(style, pseudos.hoverStyle)
358
+ state.focus && pseudos.focusStyle && merge(style, pseudos.focusStyle)
359
+ state.press && pseudos.pressStyle && merge(style, pseudos.pressStyle)
360
+ exitStyle && isExiting && merge(style, exitStyle)
361
+
362
+ if (process.env.NODE_ENV === 'development') {
363
+ if (debugProp === 'verbose') {
364
+ // eslint-disable-next-line no-console
365
+ console.log('animation style', style)
366
+ }
367
+ }
368
+
369
+ return style
370
+ },
371
+ //, delay
372
+ })
373
+
374
+ if (animations) {
375
+ animationStyles = animations.style
376
+ }
377
+ }
378
+
379
+ // media queries
380
+ useIsomorphicLayoutEffect(() => {
381
+ if (!mediaKeys.length) return
382
+ const disposers: any[] = []
383
+ for (const key of mediaKeys) {
384
+ disposers.push(
385
+ addMediaQueryListener(key, (next: boolean) => {
386
+ setState((prev) => {
387
+ if (prev.mediaState![key] !== next) {
388
+ return {
389
+ ...prev,
390
+ mediaState: getMediaStateObject({
391
+ ...prev.mediaState,
392
+ [key]: next,
393
+ }),
394
+ }
395
+ }
396
+ return prev
397
+ })
398
+ })
399
+ )
400
+ }
401
+ return () => {
402
+ for (const disposer of disposers) {
403
+ disposer()
404
+ }
405
+ }
406
+ }, [mediaKeys.join(',')])
407
+
408
+ const {
409
+ hitSlop,
410
+ asChild,
411
+ children,
412
+ onPress,
413
+ onPressIn,
414
+ onPressOut,
415
+ onHoverIn,
416
+ onHoverOut,
417
+ themeShallow,
418
+ space: spaceProp,
419
+ spaceDirection: _spaceDirection,
420
+ disabled: disabledProp,
421
+ onMouseUp,
422
+ onMouseDown,
423
+ onMouseEnter,
424
+ onMouseLeave,
425
+ hrefAttrs,
426
+ separator,
427
+ // ignore from here on out
428
+ forceStyle: _forceStyle,
429
+ // @ts-ignore for next/link compat etc
430
+ onClick,
431
+ theme: _themeProp,
432
+ // @ts-ignore
433
+ defaultVariants,
434
+
435
+ ...nonTamaguiProps
436
+ } = viewPropsIn
437
+
438
+ const disabled =
439
+ (props.accessibilityState != null && props.accessibilityState.disabled === true) ||
440
+ props.accessibilityDisabled
441
+
442
+ // these can ultimately be for DOM, react-native-web views, or animated views
443
+ // so the type is pretty loose
444
+ let viewProps: Record<string, any>
445
+
446
+ // if react-native-web view just pass all props down
447
+ if (process.env.TAMAGUI_TARGET === 'web' && !isReactNative) {
448
+ // otherwise replicate react-native-web functionality
449
+ const {
450
+ // event props
451
+ onMoveShouldSetResponder,
452
+ onMoveShouldSetResponderCapture,
453
+ onResponderEnd,
454
+ onResponderGrant,
455
+ onResponderMove,
456
+ onResponderReject,
457
+ onResponderRelease,
458
+ onResponderStart,
459
+ onResponderTerminate,
460
+ onResponderTerminationRequest,
461
+ onScrollShouldSetResponder,
462
+ onScrollShouldSetResponderCapture,
463
+ onSelectionChangeShouldSetResponder,
464
+ onSelectionChangeShouldSetResponderCapture,
465
+ onStartShouldSetResponder,
466
+ onStartShouldSetResponderCapture,
467
+
468
+ // android
469
+ collapsable,
470
+ focusable,
471
+
472
+ // deprecated,
473
+ accessible,
474
+ accessibilityDisabled,
475
+
476
+ onLayout,
477
+
478
+ ...webProps
479
+ } = nonTamaguiProps
480
+
481
+ viewProps = webProps
482
+
483
+ if (!isRSC) {
484
+ usePlatformMethods(hostRef as RefObject<Element>)
485
+
486
+ useElementLayout(hostRef as RefObject<Element>, onLayout as any)
487
+
488
+ useResponderEvents(hostRef, {
489
+ onMoveShouldSetResponder,
490
+ onMoveShouldSetResponderCapture,
491
+ onResponderEnd,
492
+ onResponderGrant,
493
+ onResponderMove,
494
+ onResponderReject,
495
+ onResponderRelease,
496
+ onResponderStart,
497
+ onResponderTerminate,
498
+ onResponderTerminationRequest,
499
+ onScrollShouldSetResponder,
500
+ onScrollShouldSetResponderCapture,
501
+ onSelectionChangeShouldSetResponder,
502
+ onSelectionChangeShouldSetResponderCapture,
503
+ onStartShouldSetResponder,
504
+ onStartShouldSetResponderCapture,
505
+ } as any)
506
+ }
507
+
508
+ if (props.href != undefined && hrefAttrs != undefined) {
509
+ const { download, rel, target } = hrefAttrs
510
+ if (download != null) {
511
+ viewProps.download = download
512
+ }
513
+ if (rel != null) {
514
+ viewProps.rel = rel
515
+ }
516
+ if (typeof target === 'string') {
517
+ viewProps.target = target.charAt(0) !== '_' ? '_' + target : target
518
+ }
519
+ }
520
+
521
+ // FOCUS
522
+ // "focusable" indicates that an element may be a keyboard tab-stop.
523
+ const _focusable = focusable != undefined ? focusable : accessible
524
+ const role = viewProps.role
525
+ if (_focusable === false) {
526
+ viewProps.tabIndex = '-1'
527
+ }
528
+ if (
529
+ // These native elements are focusable by default
530
+ elementType === 'a' ||
531
+ elementType === 'button' ||
532
+ elementType === 'input' ||
533
+ elementType === 'select' ||
534
+ elementType === 'textarea'
535
+ ) {
536
+ if (_focusable === false || accessibilityDisabled === true) {
537
+ viewProps.tabIndex = '-1'
538
+ }
539
+ } else if (
540
+ // These roles are made focusable by default
541
+ role === 'button' ||
542
+ role === 'checkbox' ||
543
+ role === 'link' ||
544
+ role === 'radio' ||
545
+ role === 'textbox' ||
546
+ role === 'switch'
547
+ ) {
548
+ if (_focusable !== false) {
549
+ viewProps.tabIndex = '0'
550
+ }
551
+ }
552
+ // Everything else must explicitly set the prop
553
+ if (_focusable === true) {
554
+ viewProps.tabIndex = '0'
555
+ }
556
+ } else {
557
+ viewProps = nonTamaguiProps
558
+ }
559
+
560
+ viewProps.ref = useComposedRefs(hostRef as any, forwardedRef, setMounted)
561
+
562
+ if (process.env.NODE_ENV === 'development' && !isText && isWeb && !staticConfig.isHOC) {
563
+ Children.toArray(props.children).forEach((item) => {
564
+ if (typeof item === 'string') {
565
+ // eslint-disable-next-line no-console
566
+ console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`)
567
+ }
568
+ })
569
+ }
570
+
571
+ const unPress = useCallback(() => {
572
+ setStateShallow({
573
+ press: false,
574
+ pressIn: false,
575
+ })
576
+ }, [setStateShallow])
577
+
578
+ if (!isRSC) {
579
+ useEffect(() => {
580
+ return () => {
581
+ mouseUps.delete(unPress)
582
+ }
583
+ }, [unPress])
584
+ }
585
+
586
+ let styles: any[]
587
+
588
+ if (isStringElement && shouldAvoidClasses && !shouldForcePseudo) {
589
+ styles = {
590
+ ...defaultNativeStyle,
591
+ ...(animationStyles ?? splitStylesStyle),
592
+ ...medias,
593
+ }
594
+ } else {
595
+ styles = [isWeb ? null : defaultNativeStyle, animationStyles ?? splitStylesStyle, medias]
596
+ if (!animationStyles && initialSplitStyles) {
597
+ const initPseudos = initialSplitStyles.pseudos
598
+ !state.mounted && addPseudoToStyles(styles, initPseudos, pseudos, 'enterStyle')
599
+ state.hover &&
600
+ addPseudoToStyles(styles, initPseudos, pseudos, 'hoverStyle', shouldForcePseudo)
601
+ state.focus &&
602
+ addPseudoToStyles(styles, initPseudos, pseudos, 'focusStyle', shouldForcePseudo)
603
+ state.press &&
604
+ addPseudoToStyles(styles, initPseudos, pseudos, 'pressStyle', shouldForcePseudo)
605
+ }
606
+ // ugly but for now...
607
+ if (shouldForcePseudo) {
608
+ const next = {}
609
+ for (const style of styles) {
610
+ if (style) {
611
+ Object.assign(next, style)
612
+ }
613
+ }
614
+ // @ts-ignore
615
+ Object.assign(splitStyles.style, next)
616
+ }
617
+ }
618
+
619
+ let fontFamily = isText ? splitStyles.fontFamily || staticConfig.defaultProps.fontFamily : null
620
+ if (fontFamily && fontFamily[0] === '$') {
621
+ fontFamily = fontFamily.slice(1)
622
+ }
623
+ const fontFamilyClassName = fontFamily ? `font_${fontFamily}` : ''
624
+
625
+ const classList = [
626
+ componentName ? componentClassName : '',
627
+ fontFamilyClassName,
628
+ theme.className,
629
+ classNames ? Object.values(classNames).join(' ') : '',
630
+ ]
631
+ const className = classList.join(' ')
632
+
633
+ if (process.env.TAMAGUI_TARGET === 'web') {
634
+ const style = animationStyles ?? splitStyles.style
635
+
636
+ if (isAnimatedReactNativeWeb) {
637
+ viewProps.style = style
638
+ } else if (isReactNative) {
639
+ const rnwStyle = { $$css: true }
640
+ for (const name of className.split(' ')) {
641
+ rnwStyle[name] = name
642
+ }
643
+ viewProps.style = [rnwStyle, ...(Array.isArray(style) ? style : [style])]
644
+ if (process.env.NODE_ENV === 'development') {
645
+ // turn debug data- props into dataSet in dev mode
646
+ Object.keys(viewProps).forEach((key) => {
647
+ if (key.startsWith('data-')) {
648
+ viewProps.dataSet ??= {}
649
+ viewProps.dataSet[key.replace('data-', '')] = viewProps[key]
650
+ delete viewProps[key]
651
+ }
652
+ })
653
+ }
654
+ } else {
655
+ viewProps.className = className
656
+ viewProps.style = style
657
+ }
658
+ }
659
+
660
+ if (process.env.TAMAGUI_TARGET === 'native') {
661
+ // swap out the right family based on weight/style
662
+ if (splitStyles.fontFamily) {
663
+ const faceInfo = tamaguiConfig.fontsParsed[splitStyles.fontFamily]?.face
664
+ if (faceInfo) {
665
+ const [weight, style] = (() => {
666
+ let weight: string | undefined
667
+ let style: string | undefined
668
+ for (let i = styles.length; i >= 0; i--) {
669
+ weight ??= styles[i]?.fontWeight
670
+ style ??= styles[i]?.fontStyle
671
+ }
672
+ return [weight || '400', style || 'normal'] as const
673
+ })()
674
+ const overrideFace = faceInfo[weight]?.[style]?.val
675
+ if (overrideFace) {
676
+ for (const style of styles) {
677
+ if (style?.fontFamily) {
678
+ style.fontFamily = overrideFace
679
+ }
680
+ }
681
+ }
682
+ }
683
+ }
684
+
685
+ // assign styles
686
+ viewProps.style = styles
687
+ }
688
+
689
+ // TODO need to loop active variants and see if they have matchin pseudos and apply as well
690
+ const initialPseudos = initialSplitStyles?.pseudos
691
+ const attachPress = !!(
692
+ pseudos?.pressStyle ||
693
+ initialPseudos?.pressStyle ||
694
+ onPress ||
695
+ onPressOut ||
696
+ onPressIn ||
697
+ onClick
698
+ )
699
+
700
+ const isHoverable = isWeb
701
+ const attachHover =
702
+ isHoverable &&
703
+ !!((pseudos && pseudos.hoverStyle) || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave)
704
+
705
+ const handlesPressEvents = !isWeb && !asChild
706
+
707
+ // check presence rather than value to prevent reparenting bugs
708
+ // allows for onPress={x ? function : undefined} without re-ordering dom
709
+ const shouldAttach = asChild
710
+ ? false
711
+ : Boolean(
712
+ attachPress ||
713
+ attachHover ||
714
+ 'pressStyle' in props ||
715
+ 'onPress' in props ||
716
+ 'onPressIn' in props ||
717
+ 'onPressOut' in props ||
718
+ (isWeb &&
719
+ ('hoverStyle' in props ||
720
+ 'onHoverIn' in props ||
721
+ 'onHoverOut' in props ||
722
+ 'onMouseEnter' in props ||
723
+ 'onMouseLeave' in props))
724
+ )
725
+
726
+ const events =
727
+ shouldAttach && !isRSC && !isDisabled
728
+ ? {
729
+ onPressOut: attachPress
730
+ ? (e) => {
731
+ unPress()
732
+ onPressOut?.(e)
733
+ onMouseUp?.(e)
734
+ }
735
+ : undefined,
736
+ ...(isHoverable && {
737
+ onMouseEnter: attachHover
738
+ ? (e) => {
739
+ const next: Partial<typeof state> = {}
740
+ if (attachHover) {
741
+ next.hover = true
742
+ }
743
+ if (state.pressIn) {
744
+ next.press = true
745
+ }
746
+ if (attachHover || state.pressIn) {
747
+ setStateShallow(next)
748
+ }
749
+ onHoverIn?.(e)
750
+ onMouseEnter?.(e)
751
+ }
752
+ : undefined,
753
+ onMouseLeave: attachHover
754
+ ? (e) => {
755
+ const next: Partial<typeof state> = {}
756
+ mouseUps.add(unPress)
757
+ if (attachHover) {
758
+ next.hover = false
759
+ }
760
+ if (state.pressIn) {
761
+ next.press = false
762
+ next.pressIn = false
763
+ }
764
+ if (Object.keys(next).length) {
765
+ setStateShallow(next)
766
+ }
767
+ onHoverOut?.(e)
768
+ onMouseLeave?.(e)
769
+ }
770
+ : undefined,
771
+ }),
772
+ onPressIn: attachPress
773
+ ? (e) => {
774
+ setStateShallow({
775
+ press: true,
776
+ pressIn: true,
777
+ hover: false,
778
+ })
779
+ onPressIn?.(e)
780
+ onMouseDown?.(e)
781
+ if (isWeb) {
782
+ mouseUps.add(unPress)
783
+ }
784
+ }
785
+ : undefined,
786
+ onPress: attachPress
787
+ ? (e) => {
788
+ unPress()
789
+ // @ts-ignore
790
+ onClick?.(e)
791
+ onPress?.(e)
792
+ }
793
+ : undefined,
794
+
795
+ // replicating TouchableWithoutFeedback
796
+ ...(!isWeb && {
797
+ cancelable: !props.rejectResponderTermination,
798
+ disabled: isDisabled,
799
+ hitSlop: props.hitSlop,
800
+ delayLongPress: props.delayLongPress,
801
+ delayPressIn: props.delayPressIn,
802
+ delayPressOut: props.delayPressOut,
803
+ focusable: viewProps.focusable ?? true,
804
+ minPressDuration: 0,
805
+ }),
806
+ }
807
+ : null
808
+
809
+ let space = spaceProp
810
+
811
+ // find space by media query
812
+ if (state.mediaState && mediaKeys.length) {
813
+ for (const key in state.mediaState) {
814
+ if (state.mediaState[key] && props[key] && props[key].space !== undefined) {
815
+ space = props[key].space
816
+ }
817
+ }
818
+ }
819
+
820
+ const themeManager = getThemeManager(theme)
821
+
822
+ const shouldSetChildrenThemeToParent = Boolean(
823
+ themeShallow && themeManager && themeManager.didChangeTheme
824
+ )
825
+
826
+ const shouldProvideThemeManager =
827
+ shouldSetChildrenThemeToParent || (themeManager && themeManager.didChangeTheme)
828
+
829
+ const childEls =
830
+ !children || asChild
831
+ ? children
832
+ : wrapThemeManagerContext(
833
+ spacedChildren({
834
+ separator,
835
+ children,
836
+ space,
837
+ direction: props.spaceDirection || 'both',
838
+ isZStack,
839
+ }),
840
+ // only set context if changed theme
841
+ shouldProvideThemeManager ? themeManager : undefined,
842
+ shouldSetChildrenThemeToParent
843
+ )
844
+
845
+ let content: any
846
+
847
+ if (asChild) {
848
+ elementType = Slot
849
+ viewProps = {
850
+ ...viewProps,
851
+ onPress,
852
+ onPressIn,
853
+ onPressOut,
854
+ }
855
+ }
856
+
857
+ // EVENTS native
858
+ if (process.env.TAMAGUI_TARGET === 'native') {
859
+ // add focus events
860
+ const attachFocus = !!(
861
+ (pseudos && pseudos.focusStyle) ||
862
+ (initialPseudos && initialPseudos.focusStyle)
863
+ )
864
+ if (attachFocus) {
865
+ viewProps.onFocus = mergeEvent(viewProps.onFocus, () => {
866
+ setStateShallow({ focus: true })
867
+ })
868
+ viewProps.onBlur = mergeEvent(viewProps.onBlur, () => {
869
+ setStateShallow({ focus: false })
870
+ })
871
+ }
872
+
873
+ // use Pressability to get smooth unPress when you press + hold + move out
874
+ // only ever create once, use .configure() to update later
875
+ const pressability = usePressability(events)
876
+ if (attachPress && events) {
877
+ if (hitSlop) {
878
+ viewProps.hitSlop = hitSlop
879
+ }
880
+ for (const key in pressability) {
881
+ const og = props[key]
882
+ const val = pressability[key]
883
+ viewProps[key] =
884
+ og && !dontComposePressabilityKeys[key] ? composeEventHandlers(og, val) : val
885
+ }
886
+ }
887
+ }
888
+
889
+ content = createElement(elementType, viewProps, childEls)
890
+
891
+ if (process.env.TAMAGUI_TARGET === 'web') {
892
+ if (events || isAnimatedReactNativeWeb) {
893
+ content = (
894
+ <span
895
+ style={styleDisplayContents}
896
+ className={isAnimatedReactNativeWeb ? className : undefined}
897
+ {...(events && {
898
+ onMouseEnter: events.onMouseEnter,
899
+ onMouseLeave: events.onMouseLeave,
900
+ onClick: events.onPress,
901
+ onMouseDown: events.onPressIn,
902
+ onMouseUp: events.onPressOut,
903
+ onTouchStart: events.onPressIn,
904
+ onTouchEnd: events.onPressOut,
905
+ })}
906
+ >
907
+ {content}
908
+ </span>
909
+ )
910
+ }
911
+ }
912
+
913
+ if (process.env.NODE_ENV === 'development' && process.env.DEBUG !== 'tamagui') {
914
+ if (debugProp) {
915
+ const element = typeof elementType === 'string' ? elementType : 'Component'
916
+ // eslint-disable-next-line no-console
917
+ console.groupCollapsed(`render <${element} /> with props`, viewProps)
918
+ for (const key in viewProps) {
919
+ // eslint-disable-next-line no-console
920
+ console.log(key, viewProps[key])
921
+ }
922
+ // eslint-disable-next-line no-console
923
+ console.log('children', content)
924
+ // eslint-disable-next-line no-console
925
+ console.groupEnd()
926
+ if (typeof window !== 'undefined') {
927
+ // prettier-ignore
928
+ // eslint-disable-next-line no-console
929
+ console.log({ state, shouldProvideThemeManager, isAnimated, isAnimatedReactNativeWeb, tamaguiDefaultProps, viewProps, splitStyles, animationStyles, handlesPressEvents, isStringElement, classNamesIn: props.className?.split(' '), classNamesOut: viewProps.className?.split(' '), events, shouldAttach, styles, pseudos, content, childEls, shouldAvoidClasses, avoidClasses: avoidClassesWhileAnimating, animation: props.animation, style: splitStylesStyle, defaultNativeStyle, initialSplitStyles, ...(typeof window !== 'undefined' ? { theme, themeClassName: theme.className, staticConfig, tamaguiConfig, events, shouldAvoidClasses, shouldForcePseudo, classNames: Object.fromEntries(Object.entries(classNames).map(([k, v]) => [v, getAllSelectors()[v]])) } : null) })
930
+ }
931
+ // eslint-disable-next-line no-console
932
+ console.groupEnd()
933
+ }
934
+ }
935
+
936
+ return content
937
+ })
938
+
939
+ if (staticConfig.componentName) {
940
+ component.displayName = staticConfig.componentName
941
+ }
942
+
943
+ onConfiguredOnce((conf) => {
944
+ // one time only setup
945
+ if (!tamaguiConfig) {
946
+ tamaguiConfig = conf
947
+
948
+ if (!defaultComponentState) {
949
+ defaultComponentState = {
950
+ hover: false,
951
+ press: false,
952
+ pressIn: false,
953
+ focus: false,
954
+ mounted: false,
955
+ mediaState: getMediaStateObject(getInitialMediaState()),
956
+ }
957
+ defaultComponentStateMounted = {
958
+ ...defaultComponentState,
959
+ mounted: true,
960
+ }
961
+ }
962
+
963
+ if (tamaguiConfig.animations) {
964
+ AnimatedText = tamaguiConfig.animations.Text
965
+ AnimatedView = tamaguiConfig.animations.View
966
+ }
967
+
968
+ if (!initialTheme) {
969
+ const next = conf.themes[Object.keys(conf.themes)[0]]
970
+ initialTheme = proxyThemeVariables(next)
971
+ if (process.env.NODE_ENV === 'development') {
972
+ if (!initialTheme) {
973
+ // eslint-disable-next-line no-console
974
+ console.log(`Warning: Missing theme`)
975
+ }
976
+ }
977
+ }
978
+ }
979
+
980
+ // per-component setup
981
+ // do this to make sure shorthands don't duplicate with.. longhands
982
+ mergeShorthands(staticConfig, tamaguiConfig)
983
+
984
+ let defaultPropsIn = staticConfig.defaultProps || {}
985
+
986
+ // because we run createTamagui after styled() defs, have to do some work here
987
+ // gather defaults props one time and merge downwards
988
+ // find last unprocessed and process
989
+ const parentNames = [...(staticConfig.parentNames || []), staticConfig.componentName]
990
+
991
+ if (tamaguiConfig.defaultProps && parentNames && staticConfig.componentName) {
992
+ defaultPropsIn = mergeConfigDefaultProps(
993
+ staticConfig.componentName,
994
+ defaultPropsIn,
995
+ tamaguiConfig.defaultProps,
996
+ parentNames,
997
+ tamaguiConfig
998
+ )
999
+ }
1000
+
1001
+ const debug = defaultPropsIn['debug']
1002
+
1003
+ // remove all classNames
1004
+ const [ourProps, ourClassNames] = mergeProps(defaultPropsIn, {}, true)
1005
+
1006
+ if (ourProps.tag) {
1007
+ defaultTag = ourProps.tag
1008
+ }
1009
+
1010
+ const noClassNames = !staticConfig.acceptsClassName
1011
+
1012
+ initialSplitStyles = insertSplitStyles(
1013
+ ourProps,
1014
+ staticConfig,
1015
+ initialTheme,
1016
+ {
1017
+ mounted: true,
1018
+ hover: false,
1019
+ press: false,
1020
+ pressIn: false,
1021
+ focus: false,
1022
+ resolveVariablesAs: 'both',
1023
+ noClassNames,
1024
+ keepVariantsAsProps: true,
1025
+ },
1026
+ undefined,
1027
+ undefined,
1028
+ debug
1029
+ )
1030
+
1031
+ // must preserve prop order
1032
+ // leave out className because we handle that already with initialSplitStyles.classNames
1033
+ // otherwise it confuses variant functions getting className props
1034
+ const [defaults, defaultsClassnames] = mergeProps(
1035
+ component.defaultProps as any,
1036
+ initialSplitStyles.viewProps,
1037
+ true
1038
+ // conf.inverseShorthands
1039
+ )
1040
+
1041
+ // avoid passing className props to variants
1042
+ initialSplitStyles.classNames = {
1043
+ ...defaultsClassnames,
1044
+ ...initialSplitStyles.classNames,
1045
+ ...ourClassNames,
1046
+ }
1047
+
1048
+ defaultNativeStyle = {}
1049
+
1050
+ const validStyles = staticConfig.validStyles || stylePropsView
1051
+
1052
+ // split - keep variables on props to be processed using theme values at runtime (native)
1053
+ if (!isWeb) {
1054
+ for (const key in staticConfig.defaultProps) {
1055
+ const val = staticConfig.defaultProps[key]
1056
+ if (validPseudoKeys[key]) continue
1057
+ if ((typeof val === 'string' && val[0] === '$') || !validStyles[key]) {
1058
+ defaults[key] = val
1059
+ } else {
1060
+ defaultNativeStyle[key] = val
1061
+ }
1062
+ }
1063
+ }
1064
+
1065
+ if (Object.keys(defaults).length) {
1066
+ tamaguiDefaultProps = defaults
1067
+ }
1068
+
1069
+ // add debug logs
1070
+ if (process.env.NODE_ENV === 'development' && debug) {
1071
+ if (process.env.IS_STATIC !== 'is_static') {
1072
+ // eslint-disable-next-line no-console
1073
+ console.log(`🐛 [${staticConfig.componentName || 'Component'}]`, {
1074
+ staticConfig,
1075
+ initialSplitStyles,
1076
+ tamaguiDefaultProps,
1077
+ defaultNativeStyle,
1078
+ defaults,
1079
+ defaultPropsIn,
1080
+ defaultPropsKeyOrder: Object.keys(staticConfig.defaultProps),
1081
+ defaultPropsInKeyOrder: Object.keys(defaultPropsIn).map((k) => [k, defaultPropsIn[k]]),
1082
+ ourProps,
1083
+ ourClassNames,
1084
+ defaultsClassnames,
1085
+ defaultTag,
1086
+ noClassNames,
1087
+ })
1088
+ }
1089
+ }
1090
+ })
1091
+
1092
+ let res: TamaguiComponent<ComponentPropTypes, Ref, BaseProps> = component as any
1093
+
1094
+ if (configIn.memo) {
1095
+ res = memo(res) as any
1096
+ }
1097
+
1098
+ res.staticConfig = {
1099
+ validStyles: staticConfig.validStyles || stylePropsView,
1100
+ ...staticConfig,
1101
+ }
1102
+
1103
+ // res.extractable HoC
1104
+ res.extractable = (Component: any, conf?: Partial<StaticConfig>) => {
1105
+ Component.staticConfig = extendStaticConfig(
1106
+ {
1107
+ Component,
1108
+ ...conf,
1109
+ neverFlatten: true,
1110
+ isHOC: true,
1111
+ defaultProps: {
1112
+ ...Component.defaultProps,
1113
+ ...conf?.defaultProps,
1114
+ },
1115
+ },
1116
+ res
1117
+ )
1118
+ return Component
1119
+ }
1120
+
1121
+ return res
1122
+ }
1123
+
1124
+ // for elements to avoid spacing
1125
+ export const Unspaced = (props: { children?: any }) => {
1126
+ return props.children
1127
+ }
1128
+ Unspaced['isUnspaced'] = true
1129
+
1130
+ // dont used styled() here to avoid circular deps
1131
+ // keep inline to avoid circular deps
1132
+
1133
+ export const Spacer = createComponent<SpacerProps>({
1134
+ memo: true,
1135
+ componentName: 'Spacer',
1136
+ validStyles,
1137
+
1138
+ defaultProps: {
1139
+ ...stackDefaultStyles,
1140
+ // avoid nesting issues
1141
+ tag: 'span',
1142
+ size: true,
1143
+ },
1144
+
1145
+ variants: {
1146
+ size: {
1147
+ '...size': (size, { tokens }) => {
1148
+ size = size == true ? '$true' : size
1149
+ const sizePx = tokens.space[size] ?? size
1150
+ return {
1151
+ width: sizePx,
1152
+ height: sizePx,
1153
+ minWidth: sizePx,
1154
+ minHeight: sizePx,
1155
+ }
1156
+ },
1157
+ },
1158
+
1159
+ flex: {
1160
+ true: {
1161
+ flexGrow: 1,
1162
+ },
1163
+ },
1164
+
1165
+ direction: {
1166
+ horizontal: {
1167
+ height: 0,
1168
+ minHeight: 0,
1169
+ },
1170
+ vertical: {
1171
+ width: 0,
1172
+ minWidth: 0,
1173
+ },
1174
+ both: {},
1175
+ },
1176
+ } as const,
1177
+ })
1178
+
1179
+ export type SpacedChildrenProps = {
1180
+ isZStack?: boolean
1181
+ children?: React.ReactNode
1182
+ space?: SpaceTokens | number | null
1183
+ spaceFlex?: boolean | number
1184
+ direction?: SpaceDirection
1185
+ separator?: React.ReactNode
1186
+ }
1187
+
1188
+ export function spacedChildren({
1189
+ isZStack,
1190
+ children,
1191
+ space,
1192
+ direction,
1193
+ spaceFlex,
1194
+ separator,
1195
+ }: SpacedChildrenProps) {
1196
+ const hasSpace = !!(space || spaceFlex)
1197
+ const hasSeparator = !(separator === undefined || separator === null)
1198
+ if (!hasSpace && !hasSeparator && !isZStack) {
1199
+ return children
1200
+ }
1201
+ const childrenList = Children.toArray(children)
1202
+ if (childrenList.length <= 1 && !isZStack) {
1203
+ return childrenList
1204
+ }
1205
+ const final: React.ReactNode[] = []
1206
+ for (const [index, child] of childrenList.entries()) {
1207
+ const isEmpty =
1208
+ child === null || child === undefined || (Array.isArray(child) && child.length === 0)
1209
+
1210
+ // push them all, but wrap some in Fragment
1211
+ if (isEmpty || !child || (child['key'] && !isZStack)) {
1212
+ final.push(child)
1213
+ } else {
1214
+ final.push(
1215
+ <Fragment key={index}>{isZStack ? <AbsoluteFill>{child}</AbsoluteFill> : child}</Fragment>
1216
+ )
1217
+ }
1218
+
1219
+ // first child unspaced avoid insert space
1220
+ if (isUnspaced(child) && index === 0) {
1221
+ continue
1222
+ }
1223
+
1224
+ // no spacing on ZStack
1225
+ if (isZStack) {
1226
+ continue
1227
+ }
1228
+
1229
+ const next = childrenList[index + 1]
1230
+
1231
+ if (next && !isUnspaced(next)) {
1232
+ if (separator) {
1233
+ if (hasSpace) {
1234
+ final.push(
1235
+ createSpacer({
1236
+ key: `_${index}_00tmgui`,
1237
+ direction,
1238
+ space,
1239
+ spaceFlex,
1240
+ })
1241
+ )
1242
+ }
1243
+ final.push(
1244
+ React.isValidElement(separator)
1245
+ ? React.cloneElement(separator, { key: `sep_${index}` })
1246
+ : separator
1247
+ )
1248
+ if (hasSpace) {
1249
+ final.push(
1250
+ createSpacer({
1251
+ key: `_${index}01tmgui`,
1252
+ direction,
1253
+ space,
1254
+ spaceFlex,
1255
+ })
1256
+ )
1257
+ }
1258
+ } else {
1259
+ final.push(
1260
+ createSpacer({
1261
+ key: `_${index}02tmgui`,
1262
+ direction,
1263
+ space,
1264
+ spaceFlex,
1265
+ })
1266
+ )
1267
+ }
1268
+ }
1269
+ }
1270
+
1271
+ return final
1272
+ }
1273
+
1274
+ type CreateSpacerProps = SpacedChildrenProps & { key: string }
1275
+
1276
+ function createSpacer({ key, direction, space, spaceFlex }: CreateSpacerProps) {
1277
+ return (
1278
+ // @ts-ignore this one blew up but the types seem better
1279
+ <Spacer
1280
+ key={key}
1281
+ size={space}
1282
+ direction={direction}
1283
+ {...(typeof spaceFlex !== 'undefined' && {
1284
+ flex: spaceFlex === true ? 1 : spaceFlex === false ? 0 : spaceFlex,
1285
+ })}
1286
+ />
1287
+ )
1288
+ }
1289
+
1290
+ function isUnspaced(child: React.ReactNode) {
1291
+ // console.log('unspaced?', child, getMedia())
1292
+ return child?.['type']?.['isVisuallyHidden'] || child?.['type']?.['isUnspaced']
1293
+ }
1294
+
1295
+ function addPseudoToStyles(
1296
+ styles: any[],
1297
+ initialPseudos: SplitStyleResult['pseudos'],
1298
+ pseudos: any,
1299
+ name: string,
1300
+ force = false
1301
+ ) {
1302
+ // on web use pseudo object { hoverStyle } to keep specificity with concatClassName
1303
+ const pseudoStyle = pseudos[name]
1304
+ const shouldNestObject = isWeb && name !== 'enterStyle' && name !== 'exitStyle'
1305
+ const defaultPseudoStyle = initialPseudos[name]
1306
+ const style = defaultPseudoStyle ? { ...defaultPseudoStyle, ...pseudoStyle } : pseudoStyle
1307
+ if (style) {
1308
+ styles.push(shouldNestObject && !force ? { [name]: style } : style)
1309
+ }
1310
+ }
1311
+
1312
+ const DefaultProps = new Map()
1313
+
1314
+ function mergeConfigDefaultProps(
1315
+ name: string,
1316
+ props: Record<string, any>,
1317
+ configDefaults: Record<string, Object>,
1318
+ parentNames: (string | undefined)[],
1319
+ conf: TamaguiInternalConfig
1320
+ ) {
1321
+ const len = parentNames.length
1322
+ let prev
1323
+
1324
+ for (let i = 0; i < len; i++) {
1325
+ const n = parentNames[i]
1326
+ if (!n) continue
1327
+ if (DefaultProps.has(n)) {
1328
+ prev = DefaultProps.get(n)
1329
+ continue
1330
+ }
1331
+ const props = configDefaults[n]
1332
+ if (!props) {
1333
+ if (prev) {
1334
+ DefaultProps.set(n, prev)
1335
+ }
1336
+ continue
1337
+ }
1338
+ prev = mergeProps(prev || {}, props, false, conf.inverseShorthands)[0]
1339
+ DefaultProps.set(n, prev)
1340
+ }
1341
+
1342
+ // overwrite the user defined defaults on top of internal defined defaults
1343
+ const ourDefaultsMerged = DefaultProps.get(name)
1344
+ if (ourDefaultsMerged) {
1345
+ return mergeProps(props, ourDefaultsMerged, false, conf.inverseShorthands)[0]
1346
+ }
1347
+ return props
1348
+ }
1349
+
1350
+ const defaults = {
1351
+ left: 0,
1352
+ right: 0,
1353
+ top: 0,
1354
+ bottom: 0,
1355
+ opacity: 1,
1356
+ translateX: 0,
1357
+ translateY: 0,
1358
+ skew: 0,
1359
+ skewX: 0,
1360
+ skewY: 0,
1361
+ scale: 1,
1362
+ rotate: '0deg',
1363
+ rotateY: '0deg',
1364
+ rotateX: '0deg',
1365
+ }
1366
+
1367
+ function ensureBaseHasDefaults(base: ViewStyle, ...pseudos: (ViewStyle | null | undefined)[]) {
1368
+ for (const pseudo of pseudos) {
1369
+ if (!pseudo) continue
1370
+ for (const key in pseudo) {
1371
+ const val = pseudo[key]
1372
+ // can we just use merge() here?
1373
+ if (key === 'transform') {
1374
+ if (typeof val === 'string') {
1375
+ continue
1376
+ }
1377
+ for (const t of val) {
1378
+ const tkey = Object.keys(t)[0]
1379
+ const defaultVal = defaults[tkey]
1380
+ const tDefaultVal = { [tkey]: defaultVal } as any
1381
+ if (!base.transform) {
1382
+ base.transform = [tDefaultVal]
1383
+ } else {
1384
+ if (!base.transform.find((x) => x[tkey])) {
1385
+ base.transform.push(tDefaultVal)
1386
+ }
1387
+ }
1388
+ }
1389
+ } else {
1390
+ if (!(key in base)) {
1391
+ base[key] = defaults[key]
1392
+ }
1393
+ }
1394
+ }
1395
+ }
1396
+ }
1397
+
1398
+ function merge(base: ViewStyle, next: ViewStyle) {
1399
+ if (!next.transform || !base.transform) {
1400
+ Object.assign(base, next)
1401
+ return
1402
+ }
1403
+ const { transform, ...rest } = next
1404
+ Object.assign(base, rest)
1405
+ for (const t of transform) {
1406
+ const key = Object.keys(t)[0]
1407
+ const existing = base.transform.find((x) => key in x)
1408
+ if (existing) {
1409
+ existing[key] = t[key]
1410
+ } else {
1411
+ base.transform.push(t)
1412
+ }
1413
+ }
1414
+ }
1415
+
1416
+ // react native compat (web only)
1417
+ function usePlatformMethods(hostRef: RefObject<Element>) {
1418
+ useIsomorphicLayoutEffect(() => {
1419
+ const node = hostRef.current
1420
+ if (!node) return
1421
+ // @ts-ignore
1422
+ node.measure = (callback) => measureLayout(node, null, callback)
1423
+ // @ts-ignore
1424
+ node.measureLayout = (relativeToNode, success) => measureLayout(node, relativeToNode, success)
1425
+ // @ts-ignore
1426
+ node.measureInWindow = (callback) => {
1427
+ if (!node) return
1428
+ setTimeout(() => {
1429
+ const { height, left, top, width } = getRect(node as HTMLElement)!
1430
+ callback(left, top, width, height)
1431
+ }, 0)
1432
+ }
1433
+ }, [hostRef])
1434
+ }
1435
+
1436
+ const AbsoluteFill: any = createComponent({
1437
+ componentName: 'AbsoluteFill',
1438
+ defaultProps: {
1439
+ ...stackDefaultStyles,
1440
+ flexDirection: 'column',
1441
+ position: 'absolute',
1442
+ top: 0,
1443
+ right: 0,
1444
+ bottom: 0,
1445
+ left: 0,
1446
+ pointerEvents: 'box-none',
1447
+ },
1448
+ })
1449
+
1450
+ const styleDisplayContents = {
1451
+ display: 'contents',
1452
+ }
1453
+
1454
+ const dontComposePressabilityKeys = {
1455
+ onClick: true,
1456
+ }
1457
+
1458
+ function getMediaStateObject(obj: Object) {
1459
+ return Object.fromEntries(Object.entries(obj).flatMap(([k, v]) => (v ? [[`$${k}`, v]] : [])))
1460
+ }