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