@tamagui/core 1.0.1-beta.19 → 1.0.1-beta.191

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