@tamagui/core 1.2.3 → 1.2.5

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 +152 -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 +157 -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 -411
  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 -384
  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 -1291
  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 -544
  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,1137 +0,0 @@
1
- import {
2
- isClient,
3
- isRSC,
4
- isServer,
5
- isWeb,
6
- useIsomorphicLayoutEffect,
7
- } from '@tamagui/constants'
8
- import {
9
- stylePropsText,
10
- stylePropsTransform,
11
- validPseudoKeys,
12
- validStyles,
13
- validStylesOnBaseProps,
14
- } from '@tamagui/helpers'
15
- import { useInsertionEffect } from 'react'
16
- import type { TextStyle, ViewStyle } from 'react-native'
17
-
18
- import { getConfig, getFont } from '../config'
19
- import { isDevTools } from '../constants/isDevTools'
20
- import {
21
- getMediaImportanceIfMoreImportant,
22
- mediaState as globalMediaState,
23
- mediaKeysWithAndWithout$,
24
- mediaQueryConfig,
25
- mergeMediaByImportance,
26
- } from '../hooks/useMedia'
27
- import type {
28
- DebugProp,
29
- MediaQueryKey,
30
- PseudoPropKeys,
31
- PseudoStyles,
32
- SpaceTokens,
33
- SplitStyleState,
34
- StackProps,
35
- StaticConfigParsed,
36
- TamaguiInternalConfig,
37
- ThemeParsed,
38
- } from '../types'
39
- import { FontLanguageProps, LanguageContextType } from '../views/FontLanguage.types'
40
- import { createMediaStyle } from './createMediaStyle'
41
- import { getPropMappedFontFamily } from './createPropMapper'
42
- import { fixStyles } from './expandStyles'
43
- import { getAtomicStyle, getStylesAtomic, styleToCSS } from './getStylesAtomic'
44
- import {
45
- PartialStyleObject,
46
- RulesToInsert,
47
- insertStyleRules,
48
- insertedTransforms,
49
- scanAllSheets,
50
- shouldInsertStyleRules,
51
- updateRules,
52
- } from './insertStyleRule'
53
- import { FlatTransforms, mergeTransform, mergeTransforms } from './mergeTransform'
54
- import {
55
- normalizeValueWithProperty,
56
- reverseMapClassNameToValue,
57
- } from './normalizeValueWithProperty.js'
58
- import { pseudoDescriptors } from './pseudoDescriptors'
59
- import { warnOnce } from './warnOnce'
60
-
61
- type GetStyleResult = {
62
- pseudos?: PseudoStyles
63
- style: ViewStyle
64
- classNames: ClassNamesObject
65
- rulesToInsert: RulesToInsert
66
- viewProps: StackProps & Record<string, any>
67
- fontFamily: string | undefined
68
- space?: any // SpaceTokens?
69
- hasMedia: boolean | 'space'
70
- }
71
-
72
- type GetStyleState = {
73
- style: ViewStyle
74
- usedKeys: Record<string, number>
75
- classNames: ClassNamesObject
76
- flatTransforms: FlatTransforms
77
- staticConfig: StaticConfigParsed
78
- theme: ThemeParsed
79
- props: Record<string, any>
80
- viewProps: Record<string, any>
81
- state: SplitStyleState
82
- conf: TamaguiInternalConfig
83
- languageContext?: FontLanguageProps
84
- avoidDefaultProps?: boolean
85
- avoidMergeTransform?: boolean
86
- }
87
-
88
- export type SplitStyles = ReturnType<typeof getSplitStyles>
89
- export type ClassNamesObject = Record<string, string>
90
- export type SplitStyleResult = ReturnType<typeof getSplitStyles>
91
-
92
- const skipProps = {
93
- animation: true,
94
- space: true,
95
- animateOnly: true,
96
- debug: true,
97
- componentName: true,
98
- role: true,
99
- tag: true,
100
- }
101
- if (process.env.NODE_ENV === 'test') {
102
- skipProps['data-test-renders'] = true
103
- }
104
-
105
- const IS_STATIC = process.env.IS_STATIC === 'is_static'
106
-
107
- // native only skips
108
- if (process.env.TAMAGUI_TARGET === 'native') {
109
- Object.assign(skipProps, {
110
- whiteSpace: true,
111
- wordWrap: true,
112
- textOverflow: true,
113
- textDecorationDistance: true,
114
- cursor: true,
115
- contain: true,
116
- boxSizing: true,
117
- boxShadow: true,
118
- })
119
- }
120
-
121
- // web only maps accessibility to aria props
122
- const accessibilityDirectMap: Record<string, string> = {}
123
- if (process.env.TAMAGUI_TARGET === 'web') {
124
- // bundle size shave
125
- const items = {
126
- Hidden: true,
127
- ActiveDescendant: true,
128
- Atomic: true,
129
- AutoComplete: true,
130
- Busy: true,
131
- Checked: true,
132
- ColumnCount: 'colcount',
133
- ColumnIndex: 'colindex',
134
- ColumnSpan: 'colspan',
135
- Current: true,
136
- Details: true,
137
- ErrorMessage: true,
138
- Expanded: true,
139
- HasPopup: true,
140
- Invalid: true,
141
- Label: true,
142
- Level: true,
143
- Modal: true,
144
- Multiline: true,
145
- MultiSelectable: true,
146
- Orientation: true,
147
- Owns: true,
148
- Placeholder: true,
149
- PosInSet: true,
150
- Pressed: true,
151
- RoleDescription: true,
152
- RowCount: true,
153
- RowIndex: true,
154
- RowSpan: true,
155
- Selected: true,
156
- SetSize: true,
157
- Sort: true,
158
- ValueMax: true,
159
- ValueMin: true,
160
- ValueNow: true,
161
- ValueText: true,
162
- }
163
- for (const key in items) {
164
- let val = items[key]
165
- if (val === true) {
166
- val = key.toLowerCase()
167
- }
168
- accessibilityDirectMap[`accessibility${key}`] = `aria-${val}`
169
- }
170
- }
171
-
172
- type TransformNamespaceKey = 'transform' | PseudoPropKeys | MediaQueryKey
173
-
174
- let conf: TamaguiInternalConfig
175
-
176
- type StyleSplitter = (
177
- props: { [key: string]: any },
178
- staticConfig: StaticConfigParsed,
179
- theme: ThemeParsed,
180
- state: SplitStyleState,
181
- parentSplitStyles?: GetStyleResult | null,
182
- languageContext?: LanguageContextType,
183
- // web-only
184
- elementType?: string,
185
- debug?: DebugProp
186
- ) => GetStyleResult
187
-
188
- export const PROP_SPLIT = '-'
189
-
190
- const accessibilityRoleToWebRole = {
191
- adjustable: 'slider',
192
- header: 'heading',
193
- image: 'img',
194
- link: 'link',
195
- none: 'presentation',
196
- summary: 'region',
197
- }
198
-
199
- // loop props backwards
200
- // track used keys:
201
- // const keys = new Set<string>()
202
- // keep classnames and styles separate:
203
- // const styles = {}
204
- // const classNames = {}
205
-
206
- const isMediaKey = (key: string) =>
207
- Boolean(key[0] === '$' && mediaKeysWithAndWithout$.has(key))
208
-
209
- export const getSplitStyles: StyleSplitter = (
210
- props,
211
- staticConfig,
212
- theme,
213
- state,
214
- parentSplitStyles,
215
- languageContext,
216
- elementType,
217
- debug
218
- ) => {
219
- if (cache.has(props)) {
220
- return cache.get(props)
221
- }
222
-
223
- conf = conf || getConfig()
224
- const { shorthands } = conf
225
- const {
226
- defaultVariants,
227
- variants,
228
- propMapper,
229
- isReactNative,
230
- deoptProps,
231
- inlineProps,
232
- inlineWhenUnflattened,
233
- } = staticConfig
234
- const validStyleProps = staticConfig.isText ? stylePropsText : validStyles
235
- const viewProps: GetStyleResult['viewProps'] = {}
236
- let pseudos: PseudoStyles | null = null
237
- let psuedosUsed: Record<string, number> | null = null
238
- const mediaState = state.mediaState || globalMediaState
239
- const usedKeys: Record<string, number> = {}
240
- const propKeys = Object.keys(props)
241
- let space: SpaceTokens | null = props.space
242
- let hasMedia: boolean | string[] = false
243
-
244
- const shouldDoClasses =
245
- staticConfig.acceptsClassName && (isWeb || IS_STATIC) && !state.noClassNames
246
-
247
- let style: ViewStyle | TextStyle = {}
248
- const flatTransforms: FlatTransforms = {}
249
-
250
- const len = propKeys.length
251
- const rulesToInsert: RulesToInsert = []
252
- const classNames: ClassNamesObject = {}
253
- let className = '' // existing classNames
254
- // we need to gather these specific to each media query / pseudo
255
- // value is [hash, val], so ["-jnjad-asdnjk", "scaleX(1) rotate(10deg)"]
256
- const transforms: Record<TransformNamespaceKey, [string, string]> = {}
257
- // fontFamily is our special baby, ensure we grab the latest set one always
258
- let fontFamily: string | undefined
259
-
260
- const styleState: GetStyleState = {
261
- classNames,
262
- conf,
263
- flatTransforms,
264
- props,
265
- state,
266
- staticConfig,
267
- style,
268
- theme,
269
- usedKeys,
270
- viewProps,
271
- languageContext,
272
- }
273
-
274
- if (process.env.NODE_ENV === 'development') {
275
- if (props.selectable) {
276
- warnOnce('props.selectable', 'selectable props deprecated, use userSelect')
277
- }
278
- }
279
-
280
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
281
- // eslint-disable-next-line no-console
282
- console.groupCollapsed('getSplitStyles (looping backwards)')
283
- // eslint-disable-next-line no-console
284
- console.log({ staticConfig, shouldDoClasses, state, IS_STATIC, propKeys })
285
- // eslint-disable-next-line no-console
286
- console.groupEnd()
287
- }
288
-
289
- if (props.className) {
290
- for (const cn of props.className.split(' ')) {
291
- if (cn[0] === '_') {
292
- // tamagui, merge it expanded on key, eventually this will go away with better compiler
293
- const [shorthand, mediaOrPseudo] = cn.slice(1).split('-')
294
- const isMedia = mediaOrPseudo[0] === '_'
295
- const isPseudo = mediaOrPseudo[0] === '0'
296
- const isMediaOrPseudo = isMedia || isPseudo
297
- let fullKey = shorthands[shorthand]
298
- if (isMedia) {
299
- // is media
300
- let mediaShortKey = mediaOrPseudo.slice(1)
301
- mediaShortKey = mediaShortKey.slice(0, mediaShortKey.indexOf('_'))
302
- fullKey += `${PROP_SPLIT}${mediaShortKey}`
303
- } else if (isPseudo) {
304
- // is pseudo
305
- const pseudoShortKey = mediaOrPseudo.slice(1)
306
- fullKey += `${PROP_SPLIT}${pseudoShortKey}`
307
- }
308
- usedKeys[fullKey] = 1
309
- mergeClassName(transforms, classNames, fullKey, cn, isMediaOrPseudo)
310
- } else if (cn) {
311
- className += ` ${cn}`
312
- }
313
- }
314
- }
315
-
316
- // loop backwards so we can skip already-used props
317
- for (let i = len - 1; i >= 0; i--) {
318
- let keyInit = propKeys[i]
319
- if (keyInit === 'className') continue // handled above
320
- let valInit = props[keyInit]
321
-
322
- // normalize shorthands up front
323
- if (keyInit in shorthands) {
324
- keyInit = shorthands[keyInit]
325
- }
326
-
327
- if (process.env.TAMAGUI_TARGET === 'native') {
328
- // map userSelect to native prop
329
- if (keyInit === 'userSelect') {
330
- keyInit = 'selectable'
331
- valInit = valInit === 'none' ? false : true
332
- } else if (keyInit.startsWith('data-') || keyInit.startsWith('aria-')) {
333
- continue
334
- }
335
- }
336
-
337
- if (keyInit in usedKeys) continue
338
- if (keyInit in skipProps) continue
339
-
340
- if (typeof valInit === 'string' && valInit[0] === '_') {
341
- if (keyInit in validStyleProps || keyInit.includes('-')) {
342
- if (shouldDoClasses) {
343
- classNames[keyInit] = valInit
344
- } else {
345
- style[keyInit] = reverseMapClassNameToValue(keyInit, valInit)
346
- }
347
- usedKeys[keyInit] = 1
348
- continue
349
- }
350
- }
351
-
352
- if (keyInit === 'dataSet') {
353
- for (const key in valInit) {
354
- viewProps[`data-${hyphenate(key)}`] = valInit[key]
355
- }
356
- continue
357
- }
358
-
359
- const isMainStyle = keyInit === 'style'
360
- if (isMainStyle || keyInit.startsWith('_style')) {
361
- if (!valInit) continue
362
- const styles = Array.isArray(valInit) ? valInit : [valInit]
363
- const styleLen = styles.length
364
- for (let j = styleLen; j >= 0; j--) {
365
- const cur = styles[j]
366
- if (!cur) continue
367
- for (const key in cur) {
368
- if (!isMainStyle && usedKeys[key]) {
369
- continue
370
- }
371
- usedKeys[key] = 1
372
- style[key] = cur[key]
373
- }
374
- }
375
- continue
376
- }
377
-
378
- if (process.env.TAMAGUI_TARGET === 'web') {
379
- /**
380
- * Copying in the accessibility/prop handling from react-native-web here
381
- * Keeps it in a single loop, avoids dup de-structuring to avoid bundle size
382
- */
383
- if (keyInit === 'disabled' && valInit === true) {
384
- usedKeys[keyInit] = 1
385
- viewProps['aria-disabled'] = true
386
- // Enhance with native semantics
387
- if (
388
- elementType === 'button' ||
389
- elementType === 'form' ||
390
- elementType === 'input' ||
391
- elementType === 'select' ||
392
- elementType === 'textarea'
393
- ) {
394
- viewProps.disabled = true
395
- }
396
- if (!variants?.disabled) {
397
- continue
398
- }
399
- }
400
-
401
- if (keyInit === 'testID') {
402
- usedKeys[keyInit] = 1
403
- viewProps[isReactNative ? 'testId' : 'data-testid'] = valInit
404
- continue
405
- }
406
-
407
- if (keyInit === 'id' || keyInit === 'nativeID') {
408
- usedKeys[keyInit] = 1
409
- if (isReactNative) {
410
- viewProps.nativeID = valInit
411
- } else {
412
- viewProps.id = valInit
413
- }
414
- continue
415
- }
416
-
417
- let didUseKeyInit = false
418
-
419
- if (isReactNative) {
420
- // pass along to react-native-web
421
- if (accessibilityDirectMap[keyInit] || keyInit.startsWith('accessibility')) {
422
- viewProps[keyInit] = valInit
423
- usedKeys[keyInit] = 1
424
- continue
425
- }
426
- } else {
427
- didUseKeyInit = true
428
-
429
- if (accessibilityDirectMap[keyInit]) {
430
- viewProps[accessibilityDirectMap[keyInit]] = valInit
431
- } else {
432
- switch (keyInit) {
433
- case 'accessibilityRole': {
434
- if (valInit === 'none') {
435
- viewProps.role = 'presentation'
436
- } else {
437
- viewProps.role = accessibilityRoleToWebRole[valInit] || valInit
438
- }
439
- continue
440
- }
441
- case 'accessibilityLabelledBy':
442
- case 'accessibilityFlowTo':
443
- case 'accessibilityControls':
444
- case 'accessibilityDescribedBy': {
445
- viewProps[`aria-${keyInit.replace('accessibility', '').toLowerCase()}`] =
446
- processIDRefList(valInit)
447
- continue
448
- }
449
- case 'accessibilityKeyShortcuts': {
450
- if (Array.isArray(valInit)) {
451
- viewProps['aria-keyshortcuts'] = valInit.join(' ')
452
- }
453
- continue
454
- }
455
- case 'accessibilityLiveRegion': {
456
- viewProps['aria-live'] = valInit === 'none' ? 'off' : valInit
457
- continue
458
- }
459
- case 'accessibilityReadOnly': {
460
- viewProps['aria-readonly'] = valInit
461
- // Enhance with native semantics
462
- if (
463
- elementType === 'input' ||
464
- elementType === 'select' ||
465
- elementType === 'textarea'
466
- ) {
467
- viewProps.readOnly = true
468
- }
469
- continue
470
- }
471
- case 'accessibilityRequired': {
472
- viewProps['aria-required'] = valInit
473
- // Enhance with native semantics
474
- if (
475
- elementType === 'input' ||
476
- elementType === 'select' ||
477
- elementType === 'textarea'
478
- ) {
479
- viewProps.required = valInit
480
- }
481
- continue
482
- }
483
- default: {
484
- didUseKeyInit = false
485
- }
486
- }
487
- }
488
- }
489
-
490
- if (didUseKeyInit) {
491
- usedKeys[keyInit] = 1
492
- continue
493
- }
494
-
495
- if (valInit && valInit[0] === '_') {
496
- // if valid style key (or pseudo like color-hover):
497
- // this conditional and esp the pseudo check rarely runs so not a perf issue
498
- const isValidClassName = validStyles[keyInit]
499
- const isMediaOrPseudo =
500
- !isValidClassName &&
501
- keyInit.includes(PROP_SPLIT) &&
502
- validStyles[keyInit.split(PROP_SPLIT)[0]]
503
-
504
- if (isValidClassName || isMediaOrPseudo) {
505
- usedKeys[keyInit] = 1
506
- if (process.env.NODE_ENV === 'development') {
507
- if (debug) {
508
- // eslint-disable-next-line no-console
509
- console.log('tamagui classname props', keyInit, valInit)
510
- }
511
- }
512
- mergeClassName(transforms, classNames, keyInit, valInit, isMediaOrPseudo)
513
- continue
514
- }
515
- }
516
- }
517
-
518
- if (
519
- (defaultVariants && keyInit in defaultVariants) ||
520
- // may want to just: not compile styled() into classnames, always do this, and always pass in all values in extras.props
521
- // but we'd want to add styled({ extracted: true }) or something at compile time to save on parsing a bit...
522
- (state.keepVariantsAsProps && variants && keyInit in variants)
523
- ) {
524
- viewProps[keyInit] = valInit
525
- }
526
-
527
- /**
528
- * There's (some) reason to this madness: we want to allow returning media/pseudo from variants
529
- * Say you have a variant hoverable: { true: { hoverStyle: {} } }
530
- * We run propMapper first to expand variant, then we run the inner loop and look again
531
- * for if there's a pseudo/media returned from it.
532
- */
533
-
534
- let isMedia = isMediaKey(keyInit)
535
- let isPseudo = validPseudoKeys[keyInit]
536
-
537
- if (
538
- !(
539
- isMedia ||
540
- isPseudo ||
541
- variants?.[keyInit] ||
542
- validStyleProps[keyInit] ||
543
- shorthands[keyInit]
544
- )
545
- ) {
546
- usedKeys[keyInit] = 1
547
- viewProps[keyInit] = valInit
548
- continue
549
- }
550
-
551
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
552
- // eslint-disable-next-line no-console
553
- console.groupCollapsed(' 🔹 styles', keyInit, valInit)
554
- }
555
-
556
- const expanded =
557
- isMedia || isPseudo
558
- ? [[keyInit, valInit]]
559
- : propMapper(
560
- keyInit,
561
- valInit,
562
- theme,
563
- props,
564
- state,
565
- languageContext,
566
- undefined,
567
- debug
568
- )
569
-
570
- if (!fontFamily) {
571
- fontFamily = getPropMappedFontFamily(expanded)
572
- }
573
-
574
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
575
- if (!isServer && isDevTools) {
576
- // eslint-disable-next-line no-console
577
- console.log('expanded', expanded, '\nusedKeys', usedKeys, '\ncurrent', {
578
- ...style,
579
- })
580
- }
581
- // eslint-disable-next-line no-console
582
- console.groupEnd()
583
- }
584
-
585
- if (!expanded) continue
586
-
587
- for (const [key, val] of expanded) {
588
- if (val === undefined) continue
589
-
590
- isMedia = isMediaKey(key)
591
- isPseudo = validPseudoKeys[key]
592
- const isMediaOrPseudo = isMedia || isPseudo
593
-
594
- if (!isMediaOrPseudo && usedKeys[key]) {
595
- if (process.env.NODE_ENV === 'developmnet' && debug === 'verbose') {
596
- console.log(`Used media/pseudo ${key}`)
597
- }
598
- continue
599
- }
600
-
601
- if (inlineProps?.has(key) || inlineWhenUnflattened?.has(key)) {
602
- usedKeys[key] = 1
603
- viewProps[key] = props[key] ?? val
604
- }
605
-
606
- // pseudo
607
- if (isPseudo) {
608
- if (!val) continue
609
-
610
- // TODO can avoid processing this if !shouldDoClasses + state is off
611
- const pseudoStyleObject = getSubStyle(
612
- styleState,
613
- key,
614
- val,
615
- true,
616
- state.noClassNames
617
- )
618
-
619
- const descriptor = pseudoDescriptors[key as keyof typeof pseudoDescriptors]
620
- const isEnter = descriptor.name === 'enter'
621
- const isExit = descriptor.name === 'exit'
622
-
623
- // don't continue here on isEnter && !state.unmounted because we need to merge defaults
624
- if (!descriptor || (isExit && !state.isExiting)) {
625
- continue
626
- }
627
-
628
- if (!shouldDoClasses || IS_STATIC) {
629
- pseudos ||= {}
630
- pseudos[key] ||= {}
631
- Object.assign(pseudos[key], pseudoStyleObject)
632
- }
633
-
634
- if (shouldDoClasses && !isEnter && !isExit) {
635
- const pseudoStyles = getAtomicStyle(pseudoStyleObject, descriptor)
636
- for (const psuedoStyle of pseudoStyles) {
637
- const fullKey = `${psuedoStyle.property}${PROP_SPLIT}${descriptor.name}`
638
- if (!usedKeys[fullKey]) {
639
- usedKeys[fullKey] = 1
640
- addStyleToInsertRules(rulesToInsert, psuedoStyle)
641
- mergeClassName(
642
- transforms,
643
- classNames,
644
- fullKey,
645
- psuedoStyle.identifier,
646
- isMediaOrPseudo
647
- )
648
- }
649
- }
650
- } else {
651
- if (usedKeys[key]) {
652
- continue
653
- }
654
-
655
- let isDisabled = !state[descriptor.stateKey || descriptor.name]
656
-
657
- // we never animate in on server side just show the full thing
658
- // on client side we use CSS to hide the fully in SSR items, then
659
- // un-hide and replay with original animation.
660
- if (isWeb && !isClient && isEnter) {
661
- isDisabled = false
662
- }
663
-
664
- if (!isDisabled) {
665
- if (valInit === staticConfig.defaultProps[keyInit]) {
666
- // ignore:
667
- // if it's a default property given by styled(), we don't mark it as used, so
668
- // that props given inline can override:
669
- } else {
670
- usedKeys[key] ||= 1
671
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
672
- console.log(`Setting used ${key}`)
673
- }
674
- }
675
- }
676
-
677
- psuedosUsed ||= {}
678
-
679
- const importance = descriptor.priority
680
- for (const pkey in pseudoStyleObject) {
681
- const val = pseudoStyleObject[pkey]
682
- // when disabled ensure the default value is set for future animations to align
683
- if (isDisabled) {
684
- if (!(pkey in usedKeys) && pkey in animatableDefaults) {
685
- const defaultVal = animatableDefaults[pkey]
686
- mergeStyle(styleState, pkey, defaultVal, true)
687
- }
688
- continue
689
- }
690
- const curImportance = psuedosUsed[importance] || 0
691
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
692
- console.log('Merge pseudo?', { importance, curImportance, pkey, val })
693
- }
694
- if (importance >= curImportance) {
695
- psuedosUsed[pkey] = importance
696
- pseudos ||= {}
697
- pseudos[key] ||= {}
698
- pseudos[key][pkey] = val
699
- mergeStyle(styleState, pkey, val)
700
- }
701
- }
702
- }
703
- continue
704
- }
705
-
706
- // media
707
- if (isMedia) {
708
- if (!val) continue
709
-
710
- hasMedia ||= true
711
-
712
- // THIS USED TO PROXY BACK TO REGULAR PROPS BUT THAT IS THE WRONG BEHAVIOR
713
- // we avoid passing in default props for media queries because that would confuse things like SizableText.size:
714
-
715
- const mediaStyle = getSubStyle(
716
- styleState,
717
- key,
718
- val,
719
- // TODO try true like pseudo
720
- false
721
- )
722
-
723
- const mediaKeyShort = key.slice(1)
724
-
725
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
726
- // prettier-ignore
727
- // eslint-disable-next-line no-console
728
- console.log(` 📺 ${key}`, { key, mediaStyle, props, shouldDoClasses })
729
- }
730
-
731
- if ('space' in mediaStyle) {
732
- if (!Array.isArray(hasMedia)) {
733
- hasMedia = []
734
- }
735
- hasMedia.push(mediaKeyShort)
736
- }
737
-
738
- if (shouldDoClasses) {
739
- if ('space' in mediaStyle) {
740
- delete mediaStyle['space']
741
- if (mediaState[mediaKeyShort]) {
742
- const val = valInit.space
743
- const importance = getMediaImportanceIfMoreImportant(
744
- mediaKeyShort,
745
- 'space',
746
- usedKeys
747
- )
748
- if (importance) {
749
- space = val
750
- usedKeys['space'] = importance
751
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
752
- console.log(
753
- `Found more important space for current media ${mediaKeyShort}: ${val} (importance: ${importance})`
754
- )
755
- }
756
- }
757
- }
758
- }
759
- const mediaStyles = getStylesAtomic(mediaStyle)
760
- for (const style of mediaStyles) {
761
- const out = createMediaStyle(style, mediaKeyShort, mediaQueryConfig)
762
- const fullKey = `${style.property}${PROP_SPLIT}${mediaKeyShort}`
763
- if (!usedKeys[fullKey]) {
764
- usedKeys[fullKey] = 1
765
- addStyleToInsertRules(rulesToInsert, out)
766
- mergeClassName(transforms, classNames, fullKey, out.identifier, true)
767
- }
768
- }
769
- } else if (mediaState[mediaKeyShort]) {
770
- for (const subKey in mediaStyle) {
771
- const importance = getMediaImportanceIfMoreImportant(
772
- mediaKeyShort,
773
- subKey,
774
- usedKeys
775
- )
776
- if (importance === null) continue
777
- if (subKey === 'space') {
778
- space = valInit.space
779
- continue
780
- }
781
- mergeMediaByImportance(
782
- style,
783
- mediaKeyShort,
784
- subKey,
785
- mediaStyle[subKey],
786
- usedKeys
787
- )
788
- if (key === 'fontFamily') {
789
- fontFamily = mediaStyle[key]
790
- }
791
- }
792
- }
793
- continue
794
- }
795
-
796
- if (process.env.TAMAGUI_TARGET === 'native') {
797
- if (key === 'pointerEvents') {
798
- usedKeys[key] = 1
799
- viewProps[key] = val
800
- continue
801
- }
802
- }
803
-
804
- if (key === 'fontFamily' && !fontFamily && valInit && val) {
805
- fontFamily = valInit[0] === '$' ? valInit : val
806
- }
807
-
808
- if (key in validStyleProps) {
809
- mergeStyle(styleState, key, val)
810
- continue
811
- }
812
-
813
- // pass to view props
814
- if (!(variants && key in variants)) {
815
- if (!skipProps[key]) {
816
- viewProps[key] = val
817
- usedKeys[key] = 1
818
- }
819
- }
820
- }
821
- }
822
-
823
- fixStyles(style)
824
- if (isWeb) {
825
- styleToCSS(style)
826
- }
827
-
828
- // native: swap out the right family based on weight/style
829
- if (process.env.TAMAGUI_TARGET === 'native') {
830
- if ('fontFamily' in style && style.fontFamily) {
831
- const faceInfo = getFont(style.fontFamily)?.face
832
- if (faceInfo) {
833
- const overrideFace =
834
- faceInfo[style.fontWeight!]?.[style.fontStyle || 'normal']?.val
835
- if (overrideFace) {
836
- style.fontFamily = overrideFace
837
- fontFamily = overrideFace
838
- delete style.fontWeight
839
- delete style.fontStyle
840
- }
841
- }
842
- if (process.env.NODE_ENV === 'development') {
843
- if (debug) {
844
- console.log(`Found fontFamily native: ${style.fontFamily}`, faceInfo)
845
- }
846
- }
847
- }
848
- }
849
-
850
- // always do this at the very end to preserve the order strictly (animations, origin)
851
- // and allow proper merging of all pseudos before applying
852
- if (flatTransforms) {
853
- if (process.env.NODE_ENV === 'development' && debug) {
854
- // eslint-disable-next-line no-console
855
- console.log(
856
- 'Merging flat transforms, transform before',
857
- [...(style.transform || [])],
858
- flatTransforms
859
- )
860
- }
861
- mergeTransforms(style, flatTransforms, true)
862
- }
863
-
864
- // add in defaults if not set:
865
- if (parentSplitStyles) {
866
- if (process.env.TAMAGUI_TARGET === 'web') {
867
- if (shouldDoClasses) {
868
- for (const key in parentSplitStyles.classNames) {
869
- const val = parentSplitStyles.classNames[key]
870
- if (key in style || key in classNames) continue
871
- classNames[key] = val
872
- }
873
- }
874
- }
875
- if (!shouldDoClasses) {
876
- for (const key in parentSplitStyles.style) {
877
- if (key in classNames || key in style) continue
878
- style[key] = parentSplitStyles.style[key]
879
- }
880
- }
881
- }
882
-
883
- if (process.env.TAMAGUI_TARGET === 'web') {
884
- if (shouldDoClasses) {
885
- const retainedStyles = {}
886
- if (style['$$css']) {
887
- // avoid re-processing for rnw
888
- } else {
889
- const atomic = getStylesAtomic(style)
890
- for (const atomicStyle of atomic) {
891
- const key = atomicStyle.property
892
- if (props.animateOnly && props.animateOnly.includes(key)) {
893
- retainedStyles[key] = atomicStyle.value
894
- } else {
895
- addStyleToInsertRules(rulesToInsert, atomicStyle)
896
- mergeClassName(transforms, classNames, key, atomicStyle.identifier)
897
- }
898
- }
899
- if (!IS_STATIC) {
900
- style = retainedStyles
901
- }
902
- }
903
- }
904
-
905
- if (transforms) {
906
- for (const namespace in transforms) {
907
- if (!transforms[namespace]) {
908
- if (process.env.NODE_ENV === 'development') {
909
- // eslint-disable-next-line no-console
910
- console.warn('Error no transform', transforms, namespace)
911
- }
912
- continue
913
- }
914
- const [hash, val] = transforms[namespace]
915
- const identifier = `_transform${hash}`
916
- if (isClient && !insertedTransforms[identifier]) {
917
- const rule = `.${identifier} { transform: ${val}; }`
918
- addStyleToInsertRules(rulesToInsert, {
919
- identifier,
920
- rules: [rule],
921
- property: namespace,
922
- })
923
- }
924
- classNames[namespace] = identifier
925
- }
926
- }
927
- }
928
-
929
- const result = {
930
- space,
931
- hasMedia,
932
- fontFamily,
933
- viewProps,
934
- style,
935
- pseudos,
936
- classNames,
937
- rulesToInsert,
938
- }
939
-
940
- if (className) {
941
- classNames.className = className
942
- }
943
-
944
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
945
- if (isDevTools) {
946
- // eslint-disable-next-line no-console
947
- console.groupCollapsed(' 🔹 styles =>')
948
- // prettier-ignore
949
- const logs = { transforms, viewProps, state, rulesToInsert, parentSplitStyles, flatTransforms, result }
950
- for (const key in { ...result, ...logs }) {
951
- // eslint-disable-next-line no-console
952
- console.log(key, logs[key])
953
- }
954
- // eslint-disable-next-line no-console
955
- console.groupEnd()
956
- }
957
- }
958
-
959
- cache.set(props, result)
960
-
961
- return result
962
- }
963
-
964
- function mergeClassName(
965
- transforms: Record<string, any[]>,
966
- classNames: Record<string, string>,
967
- key: string,
968
- val: string,
969
- isMediaOrPseudo = false
970
- ) {
971
- if (process.env.TAMAGUI_TARGET === 'web') {
972
- // empty classnames passed by compiler sometimes
973
- if (!val) return
974
- if (val[0] === '_' && val.startsWith('_transform-')) {
975
- const ns: TransformNamespaceKey = isMediaOrPseudo ? key : 'transform'
976
- let transform = insertedTransforms[val]
977
- if (isClient && !transform) {
978
- scanAllSheets() // HMR or loaded a new chunk
979
- transform = insertedTransforms[val]
980
- if (!transform && isWeb && val[0] !== '_') {
981
- transform = val // runtime insert
982
- }
983
- }
984
- transforms[ns] ||= ['', '']
985
- transforms[ns][0] += val.replace('_transform', '')
986
- // ssr doesn't need to do anything just make the right classname
987
- if (transform) {
988
- transforms[ns][1] += transform
989
- }
990
- } else {
991
- classNames[key] = val
992
- }
993
- }
994
- }
995
-
996
- /**
997
- * getSubStyle calls propMapper with props
998
- * those should be specific to the substyle, but fallback to the base props
999
- * so given props:
1000
- *
1001
- * { fontSize: 12, color: 'red', $sm: { color: 'blue' } }
1002
- *
1003
- * getSubStyle props should be a proxy that ends up like:
1004
- *
1005
- * { fontSize: 12, color: 'blue' }
1006
- *
1007
- * and to avoid re-creating it over and over, use a WeakMap
1008
- */
1009
- const cache = new WeakMap()
1010
- function getSubStyleProps(
1011
- defaultProps: Object,
1012
- baseProps: Object,
1013
- specificProps: Object
1014
- ) {
1015
- const key = specificProps || baseProps
1016
- // can cache based only on specific it's always referentially consistent with base
1017
- if (!cache.has(key)) {
1018
- cache.set(key, {
1019
- ...defaultProps,
1020
- ...baseProps,
1021
- ...specificProps,
1022
- })
1023
- }
1024
- return cache.get(key)!
1025
- }
1026
-
1027
- function mergeStyle(
1028
- { usedKeys, classNames, flatTransforms, viewProps, style }: GetStyleState,
1029
- key: string,
1030
- val: any,
1031
- dontSetUsed = false
1032
- ) {
1033
- if (!dontSetUsed) {
1034
- usedKeys[key] ||= 1
1035
- }
1036
- if (val && val[0] === '_') {
1037
- classNames[key] = val
1038
- } else if (key in stylePropsTransform) {
1039
- flatTransforms ||= {}
1040
- flatTransforms[key] = val
1041
- } else {
1042
- const out = normalizeValueWithProperty(val, key)
1043
- if (key in validStylesOnBaseProps) {
1044
- viewProps[key] = out
1045
- } else {
1046
- style[key] = out
1047
- }
1048
- }
1049
- }
1050
-
1051
- export const getSubStyle = (
1052
- styleState: GetStyleState,
1053
- subKey: string,
1054
- styleIn: Object,
1055
- avoidDefaultProps?: boolean,
1056
- avoidMergeTransform?: boolean
1057
- ): ViewStyle => {
1058
- const { staticConfig, theme, props, state, conf, languageContext } = styleState
1059
- const styleOut: ViewStyle = {}
1060
-
1061
- for (let key in styleIn) {
1062
- const val = styleIn[key]
1063
- key = conf.shorthands[key] || key
1064
- const expanded = staticConfig.propMapper(
1065
- key,
1066
- val,
1067
- theme,
1068
- getSubStyleProps(staticConfig.defaultProps, props, props[subKey]),
1069
- state,
1070
- languageContext,
1071
- avoidDefaultProps
1072
- )
1073
- if (!expanded) continue
1074
- for (const [skey, sval] of expanded) {
1075
- if (!avoidMergeTransform && skey in stylePropsTransform) {
1076
- mergeTransform(styleOut, skey, sval)
1077
- } else {
1078
- styleOut[skey] = normalizeValueWithProperty(sval, key)
1079
- }
1080
- }
1081
- }
1082
-
1083
- fixStyles(styleOut)
1084
-
1085
- return styleOut
1086
- }
1087
-
1088
- export const insertSplitStyles: StyleSplitter = (...args) => {
1089
- const res = getSplitStyles(...args)
1090
- insertStyleRules(res.rulesToInsert)
1091
- return res
1092
- }
1093
-
1094
- // on native no need to insert any css
1095
- const useInsertEffectCompat = isWeb
1096
- ? useInsertionEffect || useIsomorphicLayoutEffect
1097
- : () => {}
1098
-
1099
- export const useSplitStyles: StyleSplitter = (...args) => {
1100
- const res = getSplitStyles(...args)
1101
-
1102
- if (!isRSC) {
1103
- useInsertEffectCompat(() => {
1104
- insertStyleRules(res.rulesToInsert)
1105
- }, [res.rulesToInsert])
1106
- }
1107
-
1108
- return res
1109
- }
1110
-
1111
- function addStyleToInsertRules(
1112
- rulesToInsert: RulesToInsert,
1113
- styleObject: PartialStyleObject
1114
- ) {
1115
- if (process.env.TAMAGUI_TARGET === 'web') {
1116
- if (!shouldInsertStyleRules(styleObject)) {
1117
- return
1118
- }
1119
- updateRules(styleObject.identifier, styleObject.rules)
1120
- rulesToInsert.push(styleObject)
1121
- }
1122
- }
1123
-
1124
- function processIDRefList(idRefList: string | Array<string>): string {
1125
- return Array.isArray(idRefList) ? idRefList.join(' ') : idRefList
1126
- }
1127
-
1128
- const animatableDefaults = {
1129
- opacity: 1,
1130
- scale: 1,
1131
- rotate: '0deg',
1132
- rotateY: '0deg',
1133
- rotateX: '0deg',
1134
- }
1135
-
1136
- const lowercaseHyphenate = (match: string) => `-${match.toLowerCase()}`
1137
- const hyphenate = (str: string) => str.replace(/[A-Z]/g, lowercaseHyphenate)