@tamagui/core 1.2.4 → 1.2.6

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