@tamagui/core 1.0.1-beta.140 → 1.0.1-beta.141

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