@tamagui/core 1.0.1-beta.20 → 1.0.1-beta.201

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