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

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