@tamagui/core 1.0.1-beta.18 → 1.0.1-beta.181

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