@tamagui/web 3.0.0-beta.924.1 → 3.0.0

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 (636) hide show
  1. package/dist/cjs/_withNativeStyle.cjs +3 -0
  2. package/dist/cjs/_withNativeStyle.native.cjs +3 -0
  3. package/dist/cjs/_withNativeStyle.native.js +3 -0
  4. package/dist/cjs/_withNativeStyle.native.js.map +1 -1
  5. package/dist/cjs/_withStableStyle.native.cjs +1 -5
  6. package/dist/cjs/_withStableStyle.native.js +1 -5
  7. package/dist/cjs/_withStableStyle.native.js.map +1 -1
  8. package/dist/cjs/config.cjs +6 -3
  9. package/dist/cjs/config.native.cjs +7 -5
  10. package/dist/cjs/config.native.js +7 -5
  11. package/dist/cjs/config.native.js.map +1 -1
  12. package/dist/cjs/contexts/ComponentContext.cjs +1 -0
  13. package/dist/cjs/contexts/ComponentContext.native.cjs +8 -0
  14. package/dist/cjs/contexts/ComponentContext.native.js +8 -0
  15. package/dist/cjs/contexts/ComponentContext.native.js.map +1 -1
  16. package/dist/cjs/createComponent.cjs +46 -32
  17. package/dist/cjs/createComponent.native.cjs +92 -72
  18. package/dist/cjs/createComponent.native.js +92 -72
  19. package/dist/cjs/createComponent.native.js.map +1 -1
  20. package/dist/cjs/createTamagui.cjs +32 -14
  21. package/dist/cjs/createTamagui.native.cjs +33 -19
  22. package/dist/cjs/createTamagui.native.js +33 -19
  23. package/dist/cjs/createTamagui.native.js.map +1 -1
  24. package/dist/cjs/createTokens.native.cjs +1 -5
  25. package/dist/cjs/createTokens.native.js +1 -5
  26. package/dist/cjs/createTokens.native.js.map +1 -1
  27. package/dist/cjs/createVariable.native.cjs +1 -5
  28. package/dist/cjs/createVariable.native.js +1 -5
  29. package/dist/cjs/createVariable.native.js.map +1 -1
  30. package/dist/cjs/createVariables.native.cjs +2 -6
  31. package/dist/cjs/createVariables.native.js +2 -6
  32. package/dist/cjs/createVariables.native.js.map +1 -1
  33. package/dist/cjs/dom/html.cjs +87 -329
  34. package/dist/cjs/dom/html.native.cjs +53 -2
  35. package/dist/cjs/dom/html.native.js +53 -2
  36. package/dist/cjs/dom/html.native.js.map +1 -1
  37. package/dist/cjs/{helpers/timer.native.js → dom/htmlReset.cjs} +6 -12
  38. package/dist/cjs/{helpers/timer.native.cjs → dom/htmlReset.native.cjs} +6 -8
  39. package/dist/cjs/dom/htmlReset.native.js +30 -0
  40. package/dist/cjs/dom/htmlReset.native.js.map +1 -0
  41. package/dist/cjs/dom/htmlRuntime.native.cjs +4 -0
  42. package/dist/cjs/dom/htmlRuntime.native.js +4 -0
  43. package/dist/cjs/dom/htmlRuntime.native.js.map +1 -1
  44. package/dist/cjs/dom/htmlStaticConfig.cjs +44 -0
  45. package/dist/cjs/dom/htmlStaticConfig.native.cjs +46 -0
  46. package/dist/cjs/dom/htmlStaticConfig.native.js +48 -0
  47. package/dist/cjs/dom/htmlStaticConfig.native.js.map +1 -0
  48. package/dist/cjs/dom/primitives.native.cjs +81 -34
  49. package/dist/cjs/dom/primitives.native.js +81 -34
  50. package/dist/cjs/dom/primitives.native.js.map +1 -1
  51. package/dist/cjs/eventHandling.cjs +10 -4
  52. package/dist/cjs/eventHandling.native.cjs +52 -16
  53. package/dist/cjs/eventHandling.native.js +52 -16
  54. package/dist/cjs/eventHandling.native.js.map +1 -1
  55. package/dist/cjs/helpers/NativeTextBinding.cjs +36 -0
  56. package/dist/cjs/helpers/NativeTextBinding.native.cjs +39 -0
  57. package/dist/cjs/helpers/NativeTextBinding.native.js +41 -0
  58. package/dist/cjs/helpers/NativeTextBinding.native.js.map +1 -0
  59. package/dist/cjs/helpers/configVariables.native.cjs +2 -6
  60. package/dist/cjs/helpers/configVariables.native.js +2 -6
  61. package/dist/cjs/helpers/configVariables.native.js.map +1 -1
  62. package/dist/cjs/helpers/createDesignSystem.cjs +14 -10
  63. package/dist/cjs/helpers/createDesignSystem.native.cjs +5 -4
  64. package/dist/cjs/helpers/createDesignSystem.native.js +5 -4
  65. package/dist/cjs/helpers/createDesignSystem.native.js.map +1 -1
  66. package/dist/cjs/helpers/createStyledContext.native.cjs +1 -5
  67. package/dist/cjs/helpers/createStyledContext.native.js +1 -5
  68. package/dist/cjs/helpers/createStyledContext.native.js.map +1 -1
  69. package/dist/cjs/helpers/expandStyle.cjs +45 -1
  70. package/dist/cjs/helpers/expandStyle.native.cjs +38 -2
  71. package/dist/cjs/helpers/expandStyle.native.js +38 -2
  72. package/dist/cjs/helpers/expandStyle.native.js.map +1 -1
  73. package/dist/cjs/helpers/expandStyles.cjs +15 -3
  74. package/dist/cjs/helpers/expandStyles.native.cjs +14 -8
  75. package/dist/cjs/helpers/expandStyles.native.js +14 -8
  76. package/dist/cjs/helpers/expandStyles.native.js.map +1 -1
  77. package/dist/cjs/helpers/fluid.cjs +56 -0
  78. package/dist/cjs/helpers/fluid.native.cjs +58 -0
  79. package/dist/cjs/helpers/fluid.native.js +60 -0
  80. package/dist/cjs/helpers/fluid.native.js.map +1 -0
  81. package/dist/cjs/helpers/formatDiagnostic.native.cjs +2 -6
  82. package/dist/cjs/helpers/formatDiagnostic.native.js +2 -6
  83. package/dist/cjs/helpers/formatDiagnostic.native.js.map +1 -1
  84. package/dist/cjs/helpers/getCSSStylesAtomic.cjs +6 -6
  85. package/dist/cjs/helpers/getSplitStyles.cjs +366 -150
  86. package/dist/cjs/helpers/getSplitStyles.native.cjs +584 -184
  87. package/dist/cjs/helpers/getSplitStyles.native.js +584 -184
  88. package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -1
  89. package/dist/cjs/helpers/getThemeCSSRules.cjs +37 -25
  90. package/dist/cjs/helpers/grammarConfig.cjs +6 -14
  91. package/dist/cjs/helpers/grammarConfig.native.cjs +32 -22
  92. package/dist/cjs/helpers/grammarConfig.native.js +32 -22
  93. package/dist/cjs/helpers/grammarConfig.native.js.map +1 -1
  94. package/dist/cjs/helpers/insertStyleRule.cjs +11 -4
  95. package/dist/cjs/helpers/insertStyleRule.native.cjs +8 -11
  96. package/dist/cjs/helpers/insertStyleRule.native.js +8 -11
  97. package/dist/cjs/helpers/insertStyleRule.native.js.map +1 -1
  98. package/dist/cjs/helpers/isObj.native.cjs +1 -5
  99. package/dist/cjs/helpers/isObj.native.js +1 -5
  100. package/dist/cjs/helpers/isObj.native.js.map +1 -1
  101. package/dist/cjs/helpers/mainThreadPressEvents.native.cjs +48 -100
  102. package/dist/cjs/helpers/mainThreadPressEvents.native.js +48 -100
  103. package/dist/cjs/helpers/mainThreadPressEvents.native.js.map +1 -1
  104. package/dist/cjs/helpers/mergeProps.cjs +18 -21
  105. package/dist/cjs/helpers/mergeProps.native.cjs +20 -23
  106. package/dist/cjs/helpers/mergeProps.native.js +20 -23
  107. package/dist/cjs/helpers/mergeProps.native.js.map +1 -1
  108. package/dist/cjs/helpers/nativeOnlyProps.cjs +0 -1
  109. package/dist/cjs/helpers/nativeOnlyProps.native.cjs +0 -1
  110. package/dist/cjs/helpers/nativeOnlyProps.native.js +0 -1
  111. package/dist/cjs/helpers/nativeOnlyProps.native.js.map +1 -1
  112. package/dist/cjs/helpers/nativeTextMetrics.cjs +74 -0
  113. package/dist/cjs/helpers/nativeTextMetrics.native.cjs +77 -0
  114. package/dist/cjs/helpers/nativeTextMetrics.native.js +79 -0
  115. package/dist/cjs/helpers/nativeTextMetrics.native.js.map +1 -0
  116. package/dist/cjs/helpers/normalizeColor.native.cjs +17 -2
  117. package/dist/cjs/helpers/normalizeColor.native.js +17 -2
  118. package/dist/cjs/helpers/normalizeColor.native.js.map +1 -1
  119. package/dist/cjs/helpers/normalizeValueWithProperty.cjs +2 -1
  120. package/dist/cjs/helpers/normalizeValueWithProperty.native.cjs +3 -6
  121. package/dist/cjs/helpers/normalizeValueWithProperty.native.js +3 -6
  122. package/dist/cjs/helpers/normalizeValueWithProperty.native.js.map +1 -1
  123. package/dist/cjs/helpers/objectIdentityKey.native.cjs +1 -5
  124. package/dist/cjs/helpers/objectIdentityKey.native.js +1 -5
  125. package/dist/cjs/helpers/objectIdentityKey.native.js.map +1 -1
  126. package/dist/cjs/helpers/parseNativeStyle.cjs +187 -0
  127. package/dist/cjs/helpers/parseNativeStyle.native.cjs +6 -4
  128. package/dist/cjs/helpers/parseNativeStyle.native.js +6 -4
  129. package/dist/cjs/helpers/parseNativeStyle.native.js.map +1 -1
  130. package/dist/cjs/helpers/proxyThemeToParents.cjs +9 -2
  131. package/dist/cjs/helpers/proxyThemeToParents.native.cjs +28 -2
  132. package/dist/cjs/helpers/proxyThemeToParents.native.js +28 -2
  133. package/dist/cjs/helpers/proxyThemeToParents.native.js.map +1 -1
  134. package/dist/cjs/helpers/resolveAnimationDriver.native.cjs +1 -5
  135. package/dist/cjs/helpers/resolveAnimationDriver.native.js +1 -5
  136. package/dist/cjs/helpers/resolveAnimationDriver.native.js.map +1 -1
  137. package/dist/cjs/helpers/{timer.cjs → resolveNativeUnits.cjs} +12 -8
  138. package/dist/cjs/helpers/resolveNativeUnits.native.cjs +205 -0
  139. package/dist/cjs/helpers/resolveNativeUnits.native.js +207 -0
  140. package/dist/cjs/helpers/resolveNativeUnits.native.js.map +1 -0
  141. package/dist/cjs/helpers/resolveRem.native.cjs +18 -21
  142. package/dist/cjs/helpers/resolveRem.native.js +18 -21
  143. package/dist/cjs/helpers/resolveRem.native.js.map +1 -1
  144. package/dist/cjs/helpers/resolveSizing.cjs +124 -0
  145. package/dist/cjs/helpers/resolveSizing.native.cjs +133 -0
  146. package/dist/cjs/helpers/resolveSizing.native.js +135 -0
  147. package/dist/cjs/helpers/resolveSizing.native.js.map +1 -0
  148. package/dist/cjs/helpers/resolveVariableValue.cjs +7 -7
  149. package/dist/cjs/helpers/resolveVariableValue.native.cjs +7 -9
  150. package/dist/cjs/helpers/resolveVariableValue.native.js +7 -9
  151. package/dist/cjs/helpers/resolveVariableValue.native.js.map +1 -1
  152. package/dist/cjs/helpers/resolveVariantStyle.native.cjs +2 -6
  153. package/dist/cjs/helpers/resolveVariantStyle.native.js +2 -6
  154. package/dist/cjs/helpers/resolveVariantStyle.native.js.map +1 -1
  155. package/dist/cjs/helpers/skipProps.cjs +0 -1
  156. package/dist/cjs/helpers/skipProps.native.cjs +0 -1
  157. package/dist/cjs/helpers/skipProps.native.js +0 -1
  158. package/dist/cjs/helpers/skipProps.native.js.map +1 -1
  159. package/dist/cjs/helpers/styleFrontend.cjs +23 -1
  160. package/dist/cjs/helpers/styleFrontend.native.cjs +23 -1
  161. package/dist/cjs/helpers/styleFrontend.native.js +23 -1
  162. package/dist/cjs/helpers/styleFrontend.native.js.map +1 -1
  163. package/dist/cjs/helpers/styleStaticConfigCore.cjs +5 -4
  164. package/dist/cjs/helpers/styleStaticConfigCore.native.cjs +7 -4
  165. package/dist/cjs/helpers/styleStaticConfigCore.native.js +7 -4
  166. package/dist/cjs/helpers/styleStaticConfigCore.native.js.map +1 -1
  167. package/dist/cjs/helpers/styledDynamic.cjs +5 -0
  168. package/dist/cjs/helpers/styledDynamic.native.cjs +8 -7
  169. package/dist/cjs/helpers/styledDynamic.native.js +8 -7
  170. package/dist/cjs/helpers/styledDynamic.native.js.map +1 -1
  171. package/dist/cjs/helpers/subscribeToContextGroup.cjs +16 -7
  172. package/dist/cjs/helpers/subscribeToContextGroup.native.cjs +18 -8
  173. package/dist/cjs/helpers/subscribeToContextGroup.native.js +18 -8
  174. package/dist/cjs/helpers/subscribeToContextGroup.native.js.map +1 -1
  175. package/dist/cjs/helpers/themeRef.native.cjs +1 -5
  176. package/dist/cjs/helpers/themeRef.native.js +1 -5
  177. package/dist/cjs/helpers/themeRef.native.js.map +1 -1
  178. package/dist/cjs/helpers/themes.cjs +26 -11
  179. package/dist/cjs/helpers/themes.native.cjs +26 -11
  180. package/dist/cjs/helpers/themes.native.js +26 -11
  181. package/dist/cjs/helpers/themes.native.js.map +1 -1
  182. package/dist/cjs/helpers/tokenCategories.cjs +2 -2
  183. package/dist/cjs/helpers/tokenCategories.native.cjs +2 -2
  184. package/dist/cjs/helpers/tokenCategories.native.js +2 -2
  185. package/dist/cjs/helpers/tokenCategories.native.js.map +1 -1
  186. package/dist/cjs/helpers/variables.cjs +1 -1
  187. package/dist/cjs/helpers/variables.native.cjs +4 -8
  188. package/dist/cjs/helpers/variables.native.js +4 -8
  189. package/dist/cjs/helpers/variables.native.js.map +1 -1
  190. package/dist/cjs/helpers/warnOnce.cjs +6 -0
  191. package/dist/cjs/helpers/warnOnce.native.cjs +6 -0
  192. package/dist/cjs/helpers/warnOnce.native.js +6 -0
  193. package/dist/cjs/helpers/warnOnce.native.js.map +1 -1
  194. package/dist/cjs/helpers/webPropsToSkip.native.cjs +3 -3
  195. package/dist/cjs/helpers/webPropsToSkip.native.js +3 -3
  196. package/dist/cjs/helpers/webPropsToSkip.native.js.map +1 -1
  197. package/dist/cjs/helpers/wrapStyleTags.cjs +1 -1
  198. package/dist/cjs/helpers/wrapStyleTags.native.cjs +1 -1
  199. package/dist/cjs/helpers/wrapStyleTags.native.js +1 -1
  200. package/dist/cjs/helpers/wrapStyleTags.native.js.map +1 -1
  201. package/dist/cjs/hooks/useComponentState.native.cjs +1 -5
  202. package/dist/cjs/hooks/useComponentState.native.js +1 -5
  203. package/dist/cjs/hooks/useComponentState.native.js.map +1 -1
  204. package/dist/cjs/hooks/useMedia.cjs +27 -34
  205. package/dist/cjs/hooks/useMedia.native.cjs +45 -51
  206. package/dist/cjs/hooks/useMedia.native.js +45 -51
  207. package/dist/cjs/hooks/useMedia.native.js.map +1 -1
  208. package/dist/cjs/hooks/useSplitStyles.cjs +1 -1
  209. package/dist/cjs/hooks/useSplitStyles.native.cjs +1 -1
  210. package/dist/cjs/hooks/useSplitStyles.native.js +1 -1
  211. package/dist/cjs/hooks/useSplitStyles.native.js.map +1 -1
  212. package/dist/cjs/hooks/useThemeState.cjs +37 -47
  213. package/dist/cjs/hooks/useThemeState.native.cjs +44 -50
  214. package/dist/cjs/hooks/useThemeState.native.js +44 -50
  215. package/dist/cjs/hooks/useThemeState.native.js.map +1 -1
  216. package/dist/cjs/index.cjs +7 -0
  217. package/dist/cjs/index.native.cjs +7 -0
  218. package/dist/cjs/index.native.js +7 -0
  219. package/dist/cjs/index.native.js.map +1 -1
  220. package/dist/cjs/internal-runtime.cjs +22 -0
  221. package/dist/cjs/internal-runtime.native.cjs +22 -0
  222. package/dist/cjs/internal-runtime.native.js +22 -0
  223. package/dist/cjs/internal-runtime.native.js.map +1 -1
  224. package/dist/cjs/static-resolve.native.cjs +2 -9
  225. package/dist/cjs/static-resolve.native.js +2 -9
  226. package/dist/cjs/static-resolve.native.js.map +1 -1
  227. package/dist/cjs/style.cjs +1 -1
  228. package/dist/cjs/style.native.cjs +4 -7
  229. package/dist/cjs/style.native.js +4 -7
  230. package/dist/cjs/style.native.js.map +1 -1
  231. package/dist/cjs/views/Theme.cjs +10 -17
  232. package/dist/cjs/views/Theme.native.cjs +9 -11
  233. package/dist/cjs/views/Theme.native.js +9 -11
  234. package/dist/cjs/views/Theme.native.js.map +1 -1
  235. package/dist/cjs/views/ThemeDebug.cjs +1 -1
  236. package/dist/cjs/views/ThemeUpdate.cjs +1 -1
  237. package/dist/cjs/views/ThemeUpdate.native.cjs +1 -1
  238. package/dist/cjs/views/ThemeUpdate.native.js +1 -1
  239. package/dist/cjs/views/ThemeUpdate.native.js.map +1 -1
  240. package/dist/esm/_withNativeStyle.mjs +4 -1
  241. package/dist/esm/_withNativeStyle.mjs.map +1 -1
  242. package/dist/esm/_withNativeStyle.native.js +4 -1
  243. package/dist/esm/_withNativeStyle.native.js.map +1 -1
  244. package/dist/esm/_withStableStyle.native.js +1 -5
  245. package/dist/esm/_withStableStyle.native.js.map +1 -1
  246. package/dist/esm/config.mjs +6 -3
  247. package/dist/esm/config.mjs.map +1 -1
  248. package/dist/esm/config.native.js +7 -5
  249. package/dist/esm/config.native.js.map +1 -1
  250. package/dist/esm/contexts/ComponentContext.mjs +9 -9
  251. package/dist/esm/contexts/ComponentContext.mjs.map +1 -1
  252. package/dist/esm/contexts/ComponentContext.native.js +16 -9
  253. package/dist/esm/contexts/ComponentContext.native.js.map +1 -1
  254. package/dist/esm/createComponent.mjs +45 -42
  255. package/dist/esm/createComponent.mjs.map +1 -1
  256. package/dist/esm/createComponent.native.js +93 -82
  257. package/dist/esm/createComponent.native.js.map +1 -1
  258. package/dist/esm/createTamagui.mjs +33 -15
  259. package/dist/esm/createTamagui.mjs.map +1 -1
  260. package/dist/esm/createTamagui.native.js +34 -20
  261. package/dist/esm/createTamagui.native.js.map +1 -1
  262. package/dist/esm/createTokens.native.js +1 -5
  263. package/dist/esm/createTokens.native.js.map +1 -1
  264. package/dist/esm/createVariable.native.js +1 -5
  265. package/dist/esm/createVariable.native.js.map +1 -1
  266. package/dist/esm/createVariables.native.js +2 -6
  267. package/dist/esm/createVariables.native.js.map +1 -1
  268. package/dist/esm/dom/html.mjs +87 -329
  269. package/dist/esm/dom/html.mjs.map +1 -1
  270. package/dist/esm/dom/html.native.js +53 -2
  271. package/dist/esm/dom/html.native.js.map +1 -1
  272. package/dist/esm/dom/htmlReset.mjs +6 -0
  273. package/dist/esm/dom/htmlReset.mjs.map +1 -0
  274. package/dist/esm/dom/htmlReset.native.js +6 -0
  275. package/dist/esm/dom/htmlReset.native.js.map +1 -0
  276. package/dist/esm/dom/htmlRuntime.native.js +4 -0
  277. package/dist/esm/dom/htmlRuntime.native.js.map +1 -1
  278. package/dist/esm/dom/htmlStaticConfig.mjs +22 -0
  279. package/dist/esm/dom/htmlStaticConfig.mjs.map +1 -0
  280. package/dist/esm/dom/htmlStaticConfig.native.js +22 -0
  281. package/dist/esm/dom/htmlStaticConfig.native.js.map +1 -0
  282. package/dist/esm/dom/primitives.native.js +81 -34
  283. package/dist/esm/dom/primitives.native.js.map +1 -1
  284. package/dist/esm/eventHandling.mjs +10 -4
  285. package/dist/esm/eventHandling.mjs.map +1 -1
  286. package/dist/esm/eventHandling.native.js +52 -16
  287. package/dist/esm/eventHandling.native.js.map +1 -1
  288. package/dist/esm/helpers/NativeTextBinding.mjs +17 -0
  289. package/dist/esm/helpers/NativeTextBinding.mjs.map +1 -0
  290. package/dist/esm/helpers/NativeTextBinding.native.js +18 -0
  291. package/dist/esm/helpers/NativeTextBinding.native.js.map +1 -0
  292. package/dist/esm/helpers/configVariables.native.js +2 -6
  293. package/dist/esm/helpers/configVariables.native.js.map +1 -1
  294. package/dist/esm/helpers/createDesignSystem.mjs +14 -10
  295. package/dist/esm/helpers/createDesignSystem.mjs.map +1 -1
  296. package/dist/esm/helpers/createDesignSystem.native.js +4 -4
  297. package/dist/esm/helpers/createDesignSystem.native.js.map +1 -1
  298. package/dist/esm/helpers/createStyledContext.native.js +1 -5
  299. package/dist/esm/helpers/createStyledContext.native.js.map +1 -1
  300. package/dist/esm/helpers/expandStyle.mjs +41 -1
  301. package/dist/esm/helpers/expandStyle.mjs.map +1 -1
  302. package/dist/esm/helpers/expandStyle.native.js +36 -3
  303. package/dist/esm/helpers/expandStyle.native.js.map +1 -1
  304. package/dist/esm/helpers/expandStyles.mjs +15 -3
  305. package/dist/esm/helpers/expandStyles.mjs.map +1 -1
  306. package/dist/esm/helpers/expandStyles.native.js +14 -8
  307. package/dist/esm/helpers/expandStyles.native.js.map +1 -1
  308. package/dist/esm/helpers/fluid.mjs +36 -0
  309. package/dist/esm/helpers/fluid.mjs.map +1 -0
  310. package/dist/esm/helpers/fluid.native.js +36 -0
  311. package/dist/esm/helpers/fluid.native.js.map +1 -0
  312. package/dist/esm/helpers/formatDiagnostic.native.js +2 -6
  313. package/dist/esm/helpers/formatDiagnostic.native.js.map +1 -1
  314. package/dist/esm/helpers/getCSSStylesAtomic.mjs +6 -6
  315. package/dist/esm/helpers/getCSSStylesAtomic.mjs.map +1 -1
  316. package/dist/esm/helpers/getSplitStyles.mjs +364 -150
  317. package/dist/esm/helpers/getSplitStyles.mjs.map +1 -1
  318. package/dist/esm/helpers/getSplitStyles.native.js +588 -188
  319. package/dist/esm/helpers/getSplitStyles.native.js.map +1 -1
  320. package/dist/esm/helpers/getThemeCSSRules.mjs +37 -25
  321. package/dist/esm/helpers/getThemeCSSRules.mjs.map +1 -1
  322. package/dist/esm/helpers/grammarConfig.mjs +6 -14
  323. package/dist/esm/helpers/grammarConfig.mjs.map +1 -1
  324. package/dist/esm/helpers/grammarConfig.native.js +32 -22
  325. package/dist/esm/helpers/grammarConfig.native.js.map +1 -1
  326. package/dist/esm/helpers/insertStyleRule.mjs +11 -4
  327. package/dist/esm/helpers/insertStyleRule.mjs.map +1 -1
  328. package/dist/esm/helpers/insertStyleRule.native.js +4 -4
  329. package/dist/esm/helpers/insertStyleRule.native.js.map +1 -1
  330. package/dist/esm/helpers/isObj.native.js +1 -5
  331. package/dist/esm/helpers/isObj.native.js.map +1 -1
  332. package/dist/esm/helpers/mainThreadPressEvents.native.js +48 -100
  333. package/dist/esm/helpers/mainThreadPressEvents.native.js.map +1 -1
  334. package/dist/esm/helpers/mergeProps.mjs +18 -21
  335. package/dist/esm/helpers/mergeProps.mjs.map +1 -1
  336. package/dist/esm/helpers/mergeProps.native.js +20 -23
  337. package/dist/esm/helpers/mergeProps.native.js.map +1 -1
  338. package/dist/esm/helpers/nativeOnlyProps.mjs +0 -1
  339. package/dist/esm/helpers/nativeOnlyProps.mjs.map +1 -1
  340. package/dist/esm/helpers/nativeOnlyProps.native.js +0 -1
  341. package/dist/esm/helpers/nativeOnlyProps.native.js.map +1 -1
  342. package/dist/esm/helpers/nativeTextMetrics.mjs +55 -0
  343. package/dist/esm/helpers/nativeTextMetrics.mjs.map +1 -0
  344. package/dist/esm/helpers/nativeTextMetrics.native.js +56 -0
  345. package/dist/esm/helpers/nativeTextMetrics.native.js.map +1 -0
  346. package/dist/esm/helpers/normalizeColor.native.js +17 -2
  347. package/dist/esm/helpers/normalizeColor.native.js.map +1 -1
  348. package/dist/esm/helpers/normalizeValueWithProperty.mjs +2 -1
  349. package/dist/esm/helpers/normalizeValueWithProperty.mjs.map +1 -1
  350. package/dist/esm/helpers/normalizeValueWithProperty.native.js +3 -6
  351. package/dist/esm/helpers/normalizeValueWithProperty.native.js.map +1 -1
  352. package/dist/esm/helpers/objectIdentityKey.native.js +1 -5
  353. package/dist/esm/helpers/objectIdentityKey.native.js.map +1 -1
  354. package/dist/esm/helpers/parseNativeStyle.mjs +168 -0
  355. package/dist/esm/helpers/parseNativeStyle.mjs.map +1 -0
  356. package/dist/esm/helpers/parseNativeStyle.native.js +4 -1
  357. package/dist/esm/helpers/parseNativeStyle.native.js.map +1 -1
  358. package/dist/esm/helpers/proxyThemeToParents.mjs +10 -2
  359. package/dist/esm/helpers/proxyThemeToParents.mjs.map +1 -1
  360. package/dist/esm/helpers/proxyThemeToParents.native.js +29 -2
  361. package/dist/esm/helpers/proxyThemeToParents.native.js.map +1 -1
  362. package/dist/esm/helpers/resolveAnimationDriver.native.js +1 -5
  363. package/dist/esm/helpers/resolveAnimationDriver.native.js.map +1 -1
  364. package/dist/esm/helpers/resolveNativeUnits.mjs +9 -0
  365. package/dist/esm/helpers/resolveNativeUnits.mjs.map +1 -0
  366. package/dist/esm/helpers/resolveNativeUnits.native.js +178 -0
  367. package/dist/esm/helpers/resolveNativeUnits.native.js.map +1 -0
  368. package/dist/esm/helpers/resolveRem.native.js +18 -21
  369. package/dist/esm/helpers/resolveRem.native.js.map +1 -1
  370. package/dist/esm/helpers/resolveSizing.mjs +102 -0
  371. package/dist/esm/helpers/resolveSizing.mjs.map +1 -0
  372. package/dist/esm/helpers/resolveSizing.native.js +109 -0
  373. package/dist/esm/helpers/resolveSizing.native.js.map +1 -0
  374. package/dist/esm/helpers/resolveVariableValue.mjs +7 -7
  375. package/dist/esm/helpers/resolveVariableValue.mjs.map +1 -1
  376. package/dist/esm/helpers/resolveVariableValue.native.js +7 -9
  377. package/dist/esm/helpers/resolveVariableValue.native.js.map +1 -1
  378. package/dist/esm/helpers/resolveVariantStyle.native.js +2 -6
  379. package/dist/esm/helpers/resolveVariantStyle.native.js.map +1 -1
  380. package/dist/esm/helpers/skipProps.mjs +0 -1
  381. package/dist/esm/helpers/skipProps.mjs.map +1 -1
  382. package/dist/esm/helpers/skipProps.native.js +0 -1
  383. package/dist/esm/helpers/skipProps.native.js.map +1 -1
  384. package/dist/esm/helpers/styleFrontend.mjs +20 -1
  385. package/dist/esm/helpers/styleFrontend.mjs.map +1 -1
  386. package/dist/esm/helpers/styleFrontend.native.js +20 -1
  387. package/dist/esm/helpers/styleFrontend.native.js.map +1 -1
  388. package/dist/esm/helpers/styleStaticConfigCore.mjs +5 -4
  389. package/dist/esm/helpers/styleStaticConfigCore.mjs.map +1 -1
  390. package/dist/esm/helpers/styleStaticConfigCore.native.js +7 -4
  391. package/dist/esm/helpers/styleStaticConfigCore.native.js.map +1 -1
  392. package/dist/esm/helpers/styledDynamic.mjs +5 -0
  393. package/dist/esm/helpers/styledDynamic.mjs.map +1 -1
  394. package/dist/esm/helpers/styledDynamic.native.js +8 -7
  395. package/dist/esm/helpers/styledDynamic.native.js.map +1 -1
  396. package/dist/esm/helpers/subscribeToContextGroup.mjs +16 -7
  397. package/dist/esm/helpers/subscribeToContextGroup.mjs.map +1 -1
  398. package/dist/esm/helpers/subscribeToContextGroup.native.js +18 -8
  399. package/dist/esm/helpers/subscribeToContextGroup.native.js.map +1 -1
  400. package/dist/esm/helpers/themeRef.native.js +1 -5
  401. package/dist/esm/helpers/themeRef.native.js.map +1 -1
  402. package/dist/esm/helpers/themes.mjs +20 -11
  403. package/dist/esm/helpers/themes.mjs.map +1 -1
  404. package/dist/esm/helpers/themes.native.js +20 -11
  405. package/dist/esm/helpers/themes.native.js.map +1 -1
  406. package/dist/esm/helpers/tokenCategories.mjs +2 -2
  407. package/dist/esm/helpers/tokenCategories.mjs.map +1 -1
  408. package/dist/esm/helpers/tokenCategories.native.js +2 -2
  409. package/dist/esm/helpers/tokenCategories.native.js.map +1 -1
  410. package/dist/esm/helpers/variables.mjs +1 -1
  411. package/dist/esm/helpers/variables.mjs.map +1 -1
  412. package/dist/esm/helpers/variables.native.js +4 -8
  413. package/dist/esm/helpers/variables.native.js.map +1 -1
  414. package/dist/esm/helpers/warnOnce.mjs +6 -1
  415. package/dist/esm/helpers/warnOnce.mjs.map +1 -1
  416. package/dist/esm/helpers/warnOnce.native.js +6 -1
  417. package/dist/esm/helpers/warnOnce.native.js.map +1 -1
  418. package/dist/esm/helpers/webPropsToSkip.native.js +3 -3
  419. package/dist/esm/helpers/webPropsToSkip.native.js.map +1 -1
  420. package/dist/esm/helpers/wrapStyleTags.mjs +1 -1
  421. package/dist/esm/helpers/wrapStyleTags.mjs.map +1 -1
  422. package/dist/esm/helpers/wrapStyleTags.native.js +1 -1
  423. package/dist/esm/helpers/wrapStyleTags.native.js.map +1 -1
  424. package/dist/esm/hooks/useComponentState.native.js +1 -5
  425. package/dist/esm/hooks/useComponentState.native.js.map +1 -1
  426. package/dist/esm/hooks/useMedia.mjs +27 -34
  427. package/dist/esm/hooks/useMedia.mjs.map +1 -1
  428. package/dist/esm/hooks/useMedia.native.js +45 -51
  429. package/dist/esm/hooks/useMedia.native.js.map +1 -1
  430. package/dist/esm/hooks/useSplitStyles.mjs +1 -1
  431. package/dist/esm/hooks/useSplitStyles.mjs.map +1 -1
  432. package/dist/esm/hooks/useSplitStyles.native.js +1 -1
  433. package/dist/esm/hooks/useSplitStyles.native.js.map +1 -1
  434. package/dist/esm/hooks/useThemeState.mjs +36 -48
  435. package/dist/esm/hooks/useThemeState.mjs.map +1 -1
  436. package/dist/esm/hooks/useThemeState.native.js +44 -50
  437. package/dist/esm/hooks/useThemeState.native.js.map +1 -1
  438. package/dist/esm/index.js +4 -1
  439. package/dist/esm/index.mjs +4 -1
  440. package/dist/esm/index.native.js +4 -1
  441. package/dist/esm/internal-runtime.mjs +22 -3
  442. package/dist/esm/internal-runtime.mjs.map +1 -1
  443. package/dist/esm/internal-runtime.native.js +22 -3
  444. package/dist/esm/internal-runtime.native.js.map +1 -1
  445. package/dist/esm/static-resolve.native.js +2 -9
  446. package/dist/esm/static-resolve.native.js.map +1 -1
  447. package/dist/esm/style.mjs +1 -1
  448. package/dist/esm/style.mjs.map +1 -1
  449. package/dist/esm/style.native.js +4 -7
  450. package/dist/esm/style.native.js.map +1 -1
  451. package/dist/esm/views/Theme.mjs +15 -14
  452. package/dist/esm/views/Theme.mjs.map +1 -1
  453. package/dist/esm/views/Theme.native.js +15 -15
  454. package/dist/esm/views/Theme.native.js.map +1 -1
  455. package/dist/esm/views/ThemeDebug.mjs +1 -1
  456. package/dist/esm/views/ThemeDebug.mjs.map +1 -1
  457. package/dist/esm/views/ThemeUpdate.mjs +1 -1
  458. package/dist/esm/views/ThemeUpdate.mjs.map +1 -1
  459. package/dist/esm/views/ThemeUpdate.native.js +1 -1
  460. package/dist/esm/views/ThemeUpdate.native.js.map +1 -1
  461. package/package.json +20 -18
  462. package/reset.css +11 -0
  463. package/src/_withNativeStyle.tsx +6 -1
  464. package/src/config.ts +6 -6
  465. package/src/contexts/ComponentContext.tsx +8 -0
  466. package/src/createComponent.tsx +177 -57
  467. package/src/createStyledHOC.tsx +25 -26
  468. package/src/createTamagui.ts +47 -28
  469. package/src/dom/contract.ts +4 -1
  470. package/src/dom/html.native.tsx +55 -2
  471. package/src/dom/html.tsx +189 -388
  472. package/src/dom/htmlReset.ts +15 -0
  473. package/src/dom/htmlRuntime.native.tsx +5 -0
  474. package/src/dom/htmlStaticConfig.ts +40 -0
  475. package/src/dom/primitives.native.tsx +138 -33
  476. package/src/dom/standalone.ts +2 -1
  477. package/src/dom/styleTypes.ts +82 -92
  478. package/src/eventHandling.native.ts +61 -11
  479. package/src/eventHandling.ts +19 -4
  480. package/src/helpers/NativeTextBinding.tsx +26 -0
  481. package/src/helpers/createDesignSystem.ts +24 -8
  482. package/src/helpers/expandStyle.ts +88 -4
  483. package/src/helpers/expandStyles.ts +6 -11
  484. package/src/helpers/fluid.ts +66 -0
  485. package/src/helpers/getCSSStylesAtomic.ts +11 -6
  486. package/src/helpers/getSplitStyles.tsx +1032 -296
  487. package/src/helpers/getThemeCSSRules.ts +73 -35
  488. package/src/helpers/grammarConfig.ts +23 -8
  489. package/src/helpers/insertStyleRule.tsx +14 -8
  490. package/src/helpers/mainThreadPressEvents.native.ts +65 -141
  491. package/src/helpers/mergeProps.ts +29 -62
  492. package/src/helpers/nativeOnlyProps.ts +0 -1
  493. package/src/helpers/nativeTextMetrics.ts +77 -0
  494. package/src/helpers/normalizeColor.native.ts +29 -4
  495. package/src/helpers/normalizeValueWithProperty.ts +2 -1
  496. package/src/helpers/{parseNativeStyle.native.ts → parseNativeStyle.ts} +8 -1
  497. package/src/helpers/proxyThemeToParents.ts +13 -2
  498. package/src/helpers/resolveNativeUnits.native.ts +247 -0
  499. package/src/helpers/resolveNativeUnits.ts +10 -0
  500. package/src/helpers/resolveRem.native.ts +25 -26
  501. package/src/helpers/resolveSizing.ts +167 -0
  502. package/src/helpers/resolveVariableValue.ts +21 -17
  503. package/src/helpers/skipProps.ts +0 -1
  504. package/src/helpers/styleFrontend.ts +39 -0
  505. package/src/helpers/styleProvenance.ts +1 -1
  506. package/src/helpers/styleStaticConfigCore.ts +15 -4
  507. package/src/helpers/styledDynamic.ts +3 -1
  508. package/src/helpers/subscribeToContextGroup.tsx +16 -7
  509. package/src/helpers/themes.ts +27 -11
  510. package/src/helpers/tokenCategories.ts +15 -3
  511. package/src/helpers/variables.ts +2 -2
  512. package/src/helpers/warnOnce.ts +6 -0
  513. package/src/helpers/webPropsToSkip.native.ts +9 -3
  514. package/src/helpers/wrapStyleTags.tsx +4 -1
  515. package/src/hooks/useMedia.tsx +36 -47
  516. package/src/hooks/useSplitStyles.tsx +4 -1
  517. package/src/hooks/useThemeState.ts +69 -74
  518. package/src/index.ts +13 -0
  519. package/src/interfaces/RNExclusiveTypes.ts +1 -3
  520. package/src/internal-runtime.ts +43 -2
  521. package/src/style.ts +4 -1
  522. package/src/styled.tsx +34 -3
  523. package/src/types.tsx +412 -132
  524. package/src/views/Theme.tsx +18 -21
  525. package/src/views/ThemeDebug.tsx +1 -1
  526. package/src/views/ThemeUpdate.tsx +1 -1
  527. package/types/_withNativeStyle.d.ts.map +1 -1
  528. package/types/config.d.ts.map +1 -1
  529. package/types/contexts/ComponentContext.d.ts +1 -1
  530. package/types/contexts/ComponentContext.d.ts.map +1 -1
  531. package/types/createComponent.d.ts.map +1 -1
  532. package/types/createStyledHOC.d.ts +5 -2
  533. package/types/createStyledHOC.d.ts.map +1 -1
  534. package/types/createTamagui.d.ts.map +1 -1
  535. package/types/dom/contract.d.ts +4 -1
  536. package/types/dom/contract.d.ts.map +1 -1
  537. package/types/dom/html.d.ts +60 -51
  538. package/types/dom/html.d.ts.map +1 -1
  539. package/types/dom/html.native.d.ts.map +1 -1
  540. package/types/dom/htmlReset.d.ts +10 -0
  541. package/types/dom/htmlReset.d.ts.map +1 -0
  542. package/types/dom/htmlRuntime.native.d.ts.map +1 -1
  543. package/types/dom/htmlStaticConfig.d.ts +22 -0
  544. package/types/dom/htmlStaticConfig.d.ts.map +1 -0
  545. package/types/dom/primitives.native.d.ts.map +1 -1
  546. package/types/dom/standalone.d.ts +2 -1
  547. package/types/dom/standalone.d.ts.map +1 -1
  548. package/types/dom/styleTypes.d.ts +63 -84
  549. package/types/dom/styleTypes.d.ts.map +1 -1
  550. package/types/eventHandling.d.ts +12 -4
  551. package/types/eventHandling.d.ts.map +1 -1
  552. package/types/eventHandling.native.d.ts.map +1 -1
  553. package/types/helpers/NativeTextBinding.d.ts +11 -0
  554. package/types/helpers/NativeTextBinding.d.ts.map +1 -0
  555. package/types/helpers/createDesignSystem.d.ts.map +1 -1
  556. package/types/helpers/expandStyle.d.ts +1 -0
  557. package/types/helpers/expandStyle.d.ts.map +1 -1
  558. package/types/helpers/expandStyles.d.ts.map +1 -1
  559. package/types/helpers/fluid.d.ts +21 -0
  560. package/types/helpers/fluid.d.ts.map +1 -0
  561. package/types/helpers/getCSSStylesAtomic.d.ts +3 -1
  562. package/types/helpers/getCSSStylesAtomic.d.ts.map +1 -1
  563. package/types/helpers/getSplitStyles.d.ts +2 -1
  564. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  565. package/types/helpers/getThemeCSSRules.d.ts.map +1 -1
  566. package/types/helpers/grammarConfig.d.ts.map +1 -1
  567. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  568. package/types/helpers/mainThreadPressEvents.native.d.ts +0 -7
  569. package/types/helpers/mainThreadPressEvents.native.d.ts.map +1 -1
  570. package/types/helpers/mergeProps.d.ts +1 -15
  571. package/types/helpers/mergeProps.d.ts.map +1 -1
  572. package/types/helpers/nativeOnlyProps.d.ts +0 -1
  573. package/types/helpers/nativeOnlyProps.d.ts.map +1 -1
  574. package/types/helpers/nativeTextMetrics.d.ts +16 -0
  575. package/types/helpers/nativeTextMetrics.d.ts.map +1 -0
  576. package/types/helpers/normalizeColor.native.d.ts +4 -1
  577. package/types/helpers/normalizeColor.native.d.ts.map +1 -1
  578. package/types/helpers/normalizeShadow.native.d.ts +3 -1
  579. package/types/helpers/normalizeShadow.native.d.ts.map +1 -1
  580. package/types/helpers/normalizeValueWithProperty.d.ts.map +1 -1
  581. package/types/helpers/{parseNativeStyle.native.d.ts → parseNativeStyle.d.ts} +1 -1
  582. package/types/helpers/parseNativeStyle.d.ts.map +1 -0
  583. package/types/helpers/proxyThemeToParents.d.ts +1 -1
  584. package/types/helpers/proxyThemeToParents.d.ts.map +1 -1
  585. package/types/helpers/resolveNativeUnits.d.ts +6 -0
  586. package/types/helpers/resolveNativeUnits.d.ts.map +1 -0
  587. package/types/helpers/resolveNativeUnits.native.d.ts +16 -0
  588. package/types/helpers/resolveNativeUnits.native.d.ts.map +1 -0
  589. package/types/helpers/resolveRem.native.d.ts +6 -4
  590. package/types/helpers/resolveRem.native.d.ts.map +1 -1
  591. package/types/helpers/resolveSizing.d.ts +90 -0
  592. package/types/helpers/resolveSizing.d.ts.map +1 -0
  593. package/types/helpers/resolveVariableValue.d.ts.map +1 -1
  594. package/types/helpers/skipProps.d.ts +0 -1
  595. package/types/helpers/skipProps.d.ts.map +1 -1
  596. package/types/helpers/styleFrontend.d.ts +21 -0
  597. package/types/helpers/styleFrontend.d.ts.map +1 -1
  598. package/types/helpers/styleProvenance.d.ts +1 -1
  599. package/types/helpers/styleProvenance.d.ts.map +1 -1
  600. package/types/helpers/styleStaticConfigCore.d.ts.map +1 -1
  601. package/types/helpers/styledDynamic.d.ts +1 -1
  602. package/types/helpers/styledDynamic.d.ts.map +1 -1
  603. package/types/helpers/themes.d.ts +4 -0
  604. package/types/helpers/themes.d.ts.map +1 -1
  605. package/types/helpers/tokenCategories.d.ts +1 -1
  606. package/types/helpers/tokenCategories.d.ts.map +1 -1
  607. package/types/helpers/warnOnce.d.ts +1 -0
  608. package/types/helpers/warnOnce.d.ts.map +1 -1
  609. package/types/helpers/webPropsToSkip.native.d.ts +6 -2
  610. package/types/helpers/webPropsToSkip.native.d.ts.map +1 -1
  611. package/types/helpers/wrapStyleTags.d.ts.map +1 -1
  612. package/types/hooks/useMedia.d.ts +5 -2
  613. package/types/hooks/useMedia.d.ts.map +1 -1
  614. package/types/hooks/useSplitStyles.d.ts.map +1 -1
  615. package/types/hooks/useThemeState.d.ts.map +1 -1
  616. package/types/index.d.ts +4 -1
  617. package/types/index.d.ts.map +1 -1
  618. package/types/interfaces/RNExclusiveTypes.d.ts +2 -3
  619. package/types/interfaces/RNExclusiveTypes.d.ts.map +1 -1
  620. package/types/internal-runtime.d.ts +12 -1
  621. package/types/internal-runtime.d.ts.map +1 -1
  622. package/types/style.d.ts.map +1 -1
  623. package/types/styled.d.ts +7 -4
  624. package/types/styled.d.ts.map +1 -1
  625. package/types/types.d.ts +258 -102
  626. package/types/types.d.ts.map +1 -1
  627. package/types/views/Theme.d.ts.map +1 -1
  628. package/dist/cjs/helpers/timer.native.js.map +0 -1
  629. package/dist/esm/helpers/timer.mjs +0 -13
  630. package/dist/esm/helpers/timer.mjs.map +0 -1
  631. package/dist/esm/helpers/timer.native.js +0 -13
  632. package/dist/esm/helpers/timer.native.js.map +0 -1
  633. package/src/helpers/timer.ts +0 -9
  634. package/types/helpers/parseNativeStyle.native.d.ts.map +0 -1
  635. package/types/helpers/timer.d.ts +0 -2
  636. package/types/helpers/timer.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeUpdate.js","names":[],"sources":["esm/views/ThemeUpdate.js"],"sourcesContent":["import { createRefComponent } from \"@tamagui/compose-refs\";\nimport { isWeb, useIsomorphicLayoutEffect } from \"@tamagui/constants\";\nimport React from \"react\";\nimport { getConfig } from \"../config\";\nimport { insertStyleRules, shouldInsertStyleRules, updateRules } from \"../helpers/insertStyleRule\";\nimport { getInlineValuesFromProps, getInlineValuesKey, getMergedInlineTheme, getVariablesCSSRules } from \"../helpers/variables\";\nimport { Theme } from \"./Theme\";\nimport { jsx } from \"react/jsx-runtime\";\n\nconst useInsertEffectCompat = isWeb ? React.useInsertionEffect || useIsomorphicLayoutEffect : () => {};\nconst updateStates = /* @__PURE__ */ new WeakMap();\nfunction createThemeUpdateState(values, className) {\n\tconst cached = updateStates.get(values);\n\tif (cached) return cached;\n\tconst state = {\n\t\tkey: getInlineValuesKey(values),\n\t\tclassName,\n\t\tvalues,\n\t\tgetTheme(parentTheme, themeName, config) {\n\t\t\treturn getMergedInlineTheme(parentTheme, values, themeName, config);\n\t\t}\n\t};\n\tupdateStates.set(values, state);\n\treturn state;\n}\nconst ThemeUpdate = createRefComponent(function ThemeUpdate2(props, ref) {\n\t\"use no memo\";\n\tconst config = getConfig();\n\tconst values = getInlineValuesFromProps(props, config);\n\tconst css = process.env.TAMAGUI_DID_OUTPUT_CSS || !values ? null : getVariablesCSSRules(values, config);\n\tlet rulesToInsert = null;\n\tif (css && shouldInsertStyleRules(css.identifier)) {\n\t\tupdateRules(css.identifier, css.rules);\n\t\trulesToInsert = { [css.identifier]: [\n\t\t\t\"variables\",\n\t\t\t\"\",\n\t\t\tcss.identifier,\n\t\t\tvoid 0,\n\t\t\tcss.rules\n\t\t] };\n\t}\n\tuseInsertEffectCompat(() => {\n\t\tif (rulesToInsert) insertStyleRules(rulesToInsert);\n\t}, [css?.identifier]);\n\tif (!values) return props.children;\n\treturn /* @__PURE__ */ jsx(Theme, {\n\t\tref,\n\t\t_themeUpdate: createThemeUpdateState(values, css?.identifier),\n\t\tchildren: props.children\n\t});\n});\n\nexport { ThemeUpdate, createThemeUpdateState };"],"mappings":";;;;;;;;;;AASA,MAAM,wBAAwB,QAAQ,MAAM,sBAAsB,kCAAkC,CAAC;AACrG,MAAM,+BAA+B,IAAI,QAAQ;AACjD,SAAS,uBAAuB,QAAQ,WAAW;CAClD,MAAM,SAAS,aAAa,IAAI,MAAM;CACtC,IAAI,QAAQ,OAAO;CACnB,MAAM,QAAQ;EACb,KAAK,mBAAmB,MAAM;EAC9B;EACA;EACA,SAAS,aAAa,WAAW,QAAQ;GACxC,OAAO,qBAAqB,aAAa,QAAQ,WAAW,MAAM;EACnE;CACD;CACA,aAAa,IAAI,QAAQ,KAAK;CAC9B,OAAO;AACR;AACA,MAAM,cAAc,mBAAmB,SAAS,aAAa,OAAO,KAAK;CACxE;CACA,MAAM,SAAS,UAAU;CACzB,MAAM,SAAS,yBAAyB,OAAO,MAAM;CACrD,MAAM,MAAM,QAAQ,IAAI,0BAA0B,CAAC,SAAS,OAAO,qBAAqB,QAAQ,MAAM;CACtG,IAAI,gBAAgB;CACpB,IAAI,OAAO,uBAAuB,IAAI,UAAU,GAAG;EAClD,YAAY,IAAI,YAAY,IAAI,KAAK;EACrC,gBAAgB,GAAG,IAAI,aAAa;GACnC;GACA;GACA,IAAI;GACJ,KAAK;GACL,IAAI;EACL,EAAE;CACH;CACA,4BAA4B;EAC3B,IAAI,eAAe,iBAAiB,aAAa;CAClD,GAAG,CAAC,KAAK,UAAU,CAAC;CACpB,IAAI,CAAC,QAAQ,OAAO,MAAM;CAC1B,OAAuB,oBAAI,OAAO;EACjC;EACA,cAAc,uBAAuB,QAAQ,KAAK,UAAU;EAC5D,UAAU,MAAM;CACjB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"ThemeUpdate.js","names":[],"sources":["esm/views/ThemeUpdate.js"],"sourcesContent":["import { createRefComponent } from \"@tamagui/compose-refs\";\nimport { isWeb, useIsomorphicLayoutEffect } from \"@tamagui/constants\";\nimport React from \"react\";\nimport { getConfig } from \"../config\";\nimport { insertStyleRules, shouldInsertStyleRules, updateRules } from \"../helpers/insertStyleRule\";\nimport { getInlineValuesFromProps, getInlineValuesKey, getMergedInlineTheme, getVariablesCSSRules } from \"../helpers/variables\";\nimport { Theme } from \"./Theme\";\nimport { jsx } from \"react/jsx-runtime\";\n\nconst useInsertEffectCompat = isWeb ? React.useInsertionEffect || useIsomorphicLayoutEffect : () => {};\nconst updateStates = /* @__PURE__ */ new WeakMap();\nfunction createThemeUpdateState(values, className) {\n\tconst cached = updateStates.get(values);\n\tif (cached) return cached;\n\tconst state = {\n\t\tkey: getInlineValuesKey(values),\n\t\tclassName,\n\t\tvalues,\n\t\tgetTheme(parentTheme, themeName, config) {\n\t\t\treturn getMergedInlineTheme(parentTheme, values, themeName, config);\n\t\t}\n\t};\n\tupdateStates.set(values, state);\n\treturn state;\n}\nconst ThemeUpdate = createRefComponent(function ThemeUpdate2(props, ref) {\n\t\"use no memo\";\n\tconst config = getConfig();\n\tconst values = getInlineValuesFromProps(props, config);\n\tconst css = process.env.TAMAGUI_RUNTIME === \"island\" || !values ? null : getVariablesCSSRules(values, config);\n\tlet rulesToInsert = null;\n\tif (css && shouldInsertStyleRules(css.identifier)) {\n\t\tupdateRules(css.identifier, css.rules);\n\t\trulesToInsert = { [css.identifier]: [\n\t\t\t\"variables\",\n\t\t\t\"\",\n\t\t\tcss.identifier,\n\t\t\tvoid 0,\n\t\t\tcss.rules\n\t\t] };\n\t}\n\tuseInsertEffectCompat(() => {\n\t\tif (rulesToInsert) insertStyleRules(rulesToInsert);\n\t}, [css?.identifier]);\n\tif (!values) return props.children;\n\treturn /* @__PURE__ */ jsx(Theme, {\n\t\tref,\n\t\t_themeUpdate: createThemeUpdateState(values, css?.identifier),\n\t\tchildren: props.children\n\t});\n});\n\nexport { ThemeUpdate, createThemeUpdateState };"],"mappings":";;;;;;;;;;AASA,MAAM,wBAAwB,QAAQ,MAAM,sBAAsB,kCAAkC,CAAC;AACrG,MAAM,+BAA+B,IAAI,QAAQ;AACjD,SAAS,uBAAuB,QAAQ,WAAW;CAClD,MAAM,SAAS,aAAa,IAAI,MAAM;CACtC,IAAI,QAAQ,OAAO;CACnB,MAAM,QAAQ;EACb,KAAK,mBAAmB,MAAM;EAC9B;EACA;EACA,SAAS,aAAa,WAAW,QAAQ;GACxC,OAAO,qBAAqB,aAAa,QAAQ,WAAW,MAAM;EACnE;CACD;CACA,aAAa,IAAI,QAAQ,KAAK;CAC9B,OAAO;AACR;AACA,MAAM,cAAc,mBAAmB,SAAS,aAAa,OAAO,KAAK;CACxE;CACA,MAAM,SAAS,UAAU;CACzB,MAAM,SAAS,yBAAyB,OAAO,MAAM;CACrD,MAAM,MAAM,QAAQ,IAAI,oBAAoB,YAAY,CAAC,SAAS,OAAO,qBAAqB,QAAQ,MAAM;CAC5G,IAAI,gBAAgB;CACpB,IAAI,OAAO,uBAAuB,IAAI,UAAU,GAAG;EAClD,YAAY,IAAI,YAAY,IAAI,KAAK;EACrC,gBAAgB,GAAG,IAAI,aAAa;GACnC;GACA;GACA,IAAI;GACJ,KAAK;GACL,IAAI;EACL,EAAE;CACH;CACA,4BAA4B;EAC3B,IAAI,eAAe,iBAAiB,aAAa;CAClD,GAAG,CAAC,KAAK,UAAU,CAAC;CACpB,IAAI,CAAC,QAAQ,OAAO,MAAM;CAC1B,OAAuB,oBAAI,OAAO;EACjC;EACA,cAAc,uBAAuB,QAAQ,KAAK,UAAU;EAC5D,UAAU,MAAM;CACjB,CAAC;AACF,CAAC"}
@@ -26,7 +26,7 @@ function createThemeUpdateState(values, className) {
26
26
  var ThemeUpdate = createRefComponent(function ThemeUpdate2(props, ref) {
27
27
  "use no memo";
28
28
  var values = getInlineValuesFromProps(props, getConfig());
29
- var css = (process.env.TAMAGUI_DID_OUTPUT_CSS, null);
29
+ var css = (process.env.TAMAGUI_RUNTIME, null);
30
30
  var rulesToInsert = null;
31
31
  if (css && shouldInsertStyleRules(css.identifier)) {
32
32
  updateRules(css.identifier, css.rules);
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeUpdate.native.js","names":[],"sources":["esm/views/ThemeUpdate.native.js"],"sourcesContent":["import { jsx } from \"react/jsx-runtime\";\nimport { createRefComponent } from \"@tamagui/compose-refs\";\nimport { isWeb, useIsomorphicLayoutEffect } from \"@tamagui/constants\";\nimport React from \"react\";\nimport { getConfig } from \"../config\";\nimport { insertStyleRules, shouldInsertStyleRules, updateRules } from \"../helpers/insertStyleRule\";\nimport { getInlineValuesFromProps, getInlineValuesKey, getMergedInlineTheme } from \"../helpers/variables\";\nimport { Theme } from \"./Theme\";\n\nvar useInsertEffectCompat = isWeb ? React.useInsertionEffect || useIsomorphicLayoutEffect : function() {};\nvar updateStates = /* @__PURE__ */ new WeakMap();\nfunction createThemeUpdateState(values, className) {\n\tvar cached = updateStates.get(values);\n\tif (cached) return cached;\n\tvar state = {\n\t\tkey: getInlineValuesKey(values),\n\t\tclassName,\n\t\tvalues,\n\t\tgetTheme(parentTheme, themeName, config) {\n\t\t\treturn getMergedInlineTheme(parentTheme, values, themeName, config);\n\t\t}\n\t};\n\tupdateStates.set(values, state);\n\treturn state;\n}\nvar ThemeUpdate = createRefComponent(function ThemeUpdate2(props, ref) {\n\t\"use no memo\";\n\tvar values = getInlineValuesFromProps(props, getConfig());\n\tvar css = (process.env.TAMAGUI_DID_OUTPUT_CSS, null);\n\tvar rulesToInsert = null;\n\tif (css && shouldInsertStyleRules(css.identifier)) {\n\t\tupdateRules(css.identifier, css.rules);\n\t\trulesToInsert = { [css.identifier]: [\n\t\t\t\"variables\",\n\t\t\t\"\",\n\t\t\tcss.identifier,\n\t\t\tvoid 0,\n\t\t\tcss.rules\n\t\t] };\n\t}\n\tuseInsertEffectCompat(function() {\n\t\tif (rulesToInsert) insertStyleRules(rulesToInsert);\n\t}, [css === null || css === void 0 ? void 0 : css.identifier]);\n\tif (!values) return props.children;\n\treturn /* @__PURE__ */ jsx(Theme, {\n\t\tref,\n\t\t_themeUpdate: createThemeUpdateState(values, css === null || css === void 0 ? void 0 : css.identifier),\n\t\tchildren: props.children\n\t});\n});\n\nexport { ThemeUpdate, createThemeUpdateState };"],"mappings":";;;;;;;;;;AASA,IAAI,wBAAwB,QAAQ,MAAM,sBAAsB,4BAA4B,WAAW,CAAC;AACxG,IAAI,+BAA+B,IAAI,QAAQ;AAC/C,SAAS,uBAAuB,QAAQ,WAAW;CAClD,IAAI,SAAS,aAAa,IAAI,MAAM;CACpC,IAAI,QAAQ,OAAO;CACnB,IAAI,QAAQ;EACX,KAAK,mBAAmB,MAAM;EAC9B;EACA;EACA,SAAS,aAAa,WAAW,QAAQ;GACxC,OAAO,qBAAqB,aAAa,QAAQ,WAAW,MAAM;EACnE;CACD;CACA,aAAa,IAAI,QAAQ,KAAK;CAC9B,OAAO;AACR;AACA,IAAI,cAAc,mBAAmB,SAAS,aAAa,OAAO,KAAK;CACtE;CACA,IAAI,SAAS,yBAAyB,OAAO,UAAU,CAAC;CACxD,IAAI,OAAO,QAAQ,IAAI,wBAAwB;CAC/C,IAAI,gBAAgB;CACpB,IAAI,OAAO,uBAAuB,IAAI,UAAU,GAAG;EAClD,YAAY,IAAI,YAAY,IAAI,KAAK;EACrC,gBAAgB,GAAG,IAAI,aAAa;GACnC;GACA;GACA,IAAI;GACJ,KAAK;GACL,IAAI;EACL,EAAE;CACH;CACA,sBAAsB,WAAW;EAChC,IAAI,eAAe,iBAAiB,aAAa;CAClD,GAAG,CAAC,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC;CAC7D,IAAI,CAAC,QAAQ,OAAO,MAAM;CAC1B,OAAuB,oBAAI,OAAO;EACjC;EACA,cAAc,uBAAuB,QAAQ,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,IAAI,IAAI,UAAU;EACrG,UAAU,MAAM;CACjB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"ThemeUpdate.native.js","names":[],"sources":["esm/views/ThemeUpdate.native.js"],"sourcesContent":["import { jsx } from \"react/jsx-runtime\";\nimport { createRefComponent } from \"@tamagui/compose-refs\";\nimport { isWeb, useIsomorphicLayoutEffect } from \"@tamagui/constants\";\nimport React from \"react\";\nimport { getConfig } from \"../config\";\nimport { insertStyleRules, shouldInsertStyleRules, updateRules } from \"../helpers/insertStyleRule\";\nimport { getInlineValuesFromProps, getInlineValuesKey, getMergedInlineTheme } from \"../helpers/variables\";\nimport { Theme } from \"./Theme\";\n\nvar useInsertEffectCompat = isWeb ? React.useInsertionEffect || useIsomorphicLayoutEffect : function() {};\nvar updateStates = /* @__PURE__ */ new WeakMap();\nfunction createThemeUpdateState(values, className) {\n\tvar cached = updateStates.get(values);\n\tif (cached) return cached;\n\tvar state = {\n\t\tkey: getInlineValuesKey(values),\n\t\tclassName,\n\t\tvalues,\n\t\tgetTheme(parentTheme, themeName, config) {\n\t\t\treturn getMergedInlineTheme(parentTheme, values, themeName, config);\n\t\t}\n\t};\n\tupdateStates.set(values, state);\n\treturn state;\n}\nvar ThemeUpdate = createRefComponent(function ThemeUpdate2(props, ref) {\n\t\"use no memo\";\n\tvar values = getInlineValuesFromProps(props, getConfig());\n\tvar css = (process.env.TAMAGUI_RUNTIME, null);\n\tvar rulesToInsert = null;\n\tif (css && shouldInsertStyleRules(css.identifier)) {\n\t\tupdateRules(css.identifier, css.rules);\n\t\trulesToInsert = { [css.identifier]: [\n\t\t\t\"variables\",\n\t\t\t\"\",\n\t\t\tcss.identifier,\n\t\t\tvoid 0,\n\t\t\tcss.rules\n\t\t] };\n\t}\n\tuseInsertEffectCompat(function() {\n\t\tif (rulesToInsert) insertStyleRules(rulesToInsert);\n\t}, [css === null || css === void 0 ? void 0 : css.identifier]);\n\tif (!values) return props.children;\n\treturn /* @__PURE__ */ jsx(Theme, {\n\t\tref,\n\t\t_themeUpdate: createThemeUpdateState(values, css === null || css === void 0 ? void 0 : css.identifier),\n\t\tchildren: props.children\n\t});\n});\n\nexport { ThemeUpdate, createThemeUpdateState };"],"mappings":";;;;;;;;;;AASA,IAAI,wBAAwB,QAAQ,MAAM,sBAAsB,4BAA4B,WAAW,CAAC;AACxG,IAAI,+BAA+B,IAAI,QAAQ;AAC/C,SAAS,uBAAuB,QAAQ,WAAW;CAClD,IAAI,SAAS,aAAa,IAAI,MAAM;CACpC,IAAI,QAAQ,OAAO;CACnB,IAAI,QAAQ;EACX,KAAK,mBAAmB,MAAM;EAC9B;EACA;EACA,SAAS,aAAa,WAAW,QAAQ;GACxC,OAAO,qBAAqB,aAAa,QAAQ,WAAW,MAAM;EACnE;CACD;CACA,aAAa,IAAI,QAAQ,KAAK;CAC9B,OAAO;AACR;AACA,IAAI,cAAc,mBAAmB,SAAS,aAAa,OAAO,KAAK;CACtE;CACA,IAAI,SAAS,yBAAyB,OAAO,UAAU,CAAC;CACxD,IAAI,OAAO,QAAQ,IAAI,iBAAiB;CACxC,IAAI,gBAAgB;CACpB,IAAI,OAAO,uBAAuB,IAAI,UAAU,GAAG;EAClD,YAAY,IAAI,YAAY,IAAI,KAAK;EACrC,gBAAgB,GAAG,IAAI,aAAa;GACnC;GACA;GACA,IAAI;GACJ,KAAK;GACL,IAAI;EACL,EAAE;CACH;CACA,sBAAsB,WAAW;EAChC,IAAI,eAAe,iBAAiB,aAAa;CAClD,GAAG,CAAC,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC;CAC7D,IAAI,CAAC,QAAQ,OAAO,MAAM;CAC1B,OAAuB,oBAAI,OAAO;EACjC;EACA,cAAc,uBAAuB,QAAQ,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,IAAI,IAAI,UAAU;EACrG,UAAU,MAAM;CACjB,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/web",
3
- "version": "3.0.0-beta.924.1",
3
+ "version": "3.0.0",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "Nate Wienert"
@@ -100,32 +100,34 @@
100
100
  "test:web": "vitest --typecheck --run"
101
101
  },
102
102
  "dependencies": {
103
- "@tamagui/compose-refs": "3.0.0-beta.924.1",
104
- "@tamagui/constants": "3.0.0-beta.924.1",
105
- "@tamagui/dom": "3.0.0-beta.924.1",
106
- "@tamagui/helpers": "3.0.0-beta.924.1",
107
- "@tamagui/is-equal-shallow": "3.0.0-beta.924.1",
108
- "@tamagui/native": "3.0.0-beta.924.1",
109
- "@tamagui/normalize-css-color": "3.0.0-beta.924.1",
110
- "@tamagui/style-grammar": "3.0.0-beta.924.1",
111
- "@tamagui/timer": "3.0.0-beta.924.1",
112
- "@tamagui/types": "3.0.0-beta.924.1",
113
- "@tamagui/use-did-finish-ssr": "3.0.0-beta.924.1",
114
- "@tamagui/use-event": "3.0.0-beta.924.1",
115
- "@tamagui/use-force-update": "3.0.0-beta.924.1"
103
+ "@tamagui/animation-helpers": "3.0.0",
104
+ "@tamagui/compose-refs": "3.0.0",
105
+ "@tamagui/constants": "3.0.0",
106
+ "@tamagui/dom": "3.0.0",
107
+ "@tamagui/helpers": "3.0.0",
108
+ "@tamagui/is-equal-shallow": "3.0.0",
109
+ "@tamagui/native": "3.0.0",
110
+ "@tamagui/normalize-css-color": "3.0.0",
111
+ "@tamagui/react-native-types": "3.0.0",
112
+ "@tamagui/style-grammar": "3.0.0",
113
+ "@tamagui/types": "3.0.0",
114
+ "@tamagui/use-did-finish-ssr": "3.0.0",
115
+ "@tamagui/use-event": "3.0.0",
116
+ "@tamagui/use-force-update": "3.0.0"
116
117
  },
117
118
  "devDependencies": {
118
- "@tamagui/build": "3.0.0-beta.924.1",
119
+ "@tamagui/build": "3.0.0",
119
120
  "@testing-library/react": "^16.1.0",
120
121
  "csstype": "^3.0.10",
121
122
  "react": "19.2.3",
122
123
  "react-dom": "19.2.3",
123
- "react-native": "0.86.2",
124
- "typescript": "~6.0.3",
124
+ "react-native": "0.87.1",
125
+ "typescript": "7.0.2",
125
126
  "vitest": "4.1.0"
126
127
  },
127
128
  "peerDependencies": {
128
129
  "react": ">=19",
129
130
  "react-dom": "*"
130
- }
131
+ },
132
+ "releaseSourceCommit": "15fbca480b143f876f6975601e23a17d3f90d2ee"
131
133
  }
package/reset.css CHANGED
@@ -45,6 +45,17 @@ button,
45
45
  box-sizing: border-box;
46
46
  }
47
47
 
48
+ /* `all: unset` above also unsets display, and this rule and the design
49
+ system's `:where(.is_View)` base are both zero specificity, so whichever
50
+ sheet loads last wins. Restate the base display so a tamagui-rendered
51
+ <button> or <p> keeps its layout however the sheets are ordered. */
52
+ :where(.is_View) {
53
+ display: flex;
54
+ }
55
+ :where(.is_Text) {
56
+ display: inline;
57
+ }
58
+
48
59
  a.tm-button,
49
60
  .tm-anchor:has(.tm-button) {
50
61
  text-decoration: none;
@@ -1,5 +1,5 @@
1
1
  import { setRef } from '@tamagui/compose-refs'
2
- import React, { useCallback, useContext, useRef } from 'react'
2
+ import React, { useCallback, useContext, useRef, useState } from 'react'
3
3
  import { _withStableStyle } from './_withStableStyle'
4
4
  import {
5
5
  getNativeStyleEngine,
@@ -38,6 +38,9 @@ export const _withNativeStyle = (
38
38
  }) {
39
39
  const { ref, _expressions: _ignoredExpressions, ...rest } = props
40
40
  const link = useRef<NativeStyleEngineLinkHandle | null>(null)
41
+ // a host the engine refuses (a nitro view) never gets theme pushes, so
42
+ // this view renders through the theme-subscribed fallback instead
43
+ const [refused, setRefused] = useState(false)
41
44
  const themeState = getThemeState(_scopeId)
42
45
  const stateName = themeState?.name
43
46
  const theme = themeState?.theme
@@ -55,10 +58,12 @@ export const _withNativeStyle = (
55
58
  stateName,
56
59
  theme
57
60
  )
61
+ if (!link.current) setRefused(true)
58
62
  }
59
63
  },
60
64
  [ref, _scopeId, stateName, theme]
61
65
  )
66
+ if (refused) return <Fallback {...props} />
62
67
  const stateStyle =
63
68
  stateName && theme
64
69
  ? resolveNativeStyleMapping(themeStyleKeys, stateName, theme)
package/src/config.ts CHANGED
@@ -37,6 +37,7 @@ const getConfigFromGlobalOrLocal = (): TamaguiInternalConfig | null => {
37
37
  // if it never runs, it's a true duplicate (warn)
38
38
  if (
39
39
  process.env.NODE_ENV === 'development' &&
40
+ globalThis.__tamaguiEvaluationConfig !== globalThis.__tamaguiConfig &&
40
41
  !globalThis.__tamaguiHasWarnedGlobalFallback &&
41
42
  !globalThis.__tamaguiPendingCheck
42
43
  ) {
@@ -71,16 +72,12 @@ export const getSetting = <Key extends keyof GenericTamaguiSettings>(
71
72
  if (process.env.NODE_ENV === 'development') {
72
73
  if (!config) throw new Error(haventCalledErrorMessage)
73
74
  }
74
- return (
75
- config!.settings[key] ??
76
- // @ts-expect-error
77
- config[key]
78
- )
75
+ return config!.settings[key]
79
76
  }
80
77
 
81
78
  export function getStyleCompat(): StyleCompat {
82
79
  const config = getConfigFromGlobalOrLocal()
83
- return (config?.settings.styleCompat ?? (config as any)?.styleCompat) || 'web'
80
+ return config?.settings?.styleCompat || 'web'
84
81
  }
85
82
 
86
83
  export const setConfig = (next: TamaguiInternalConfig) => {
@@ -91,6 +88,9 @@ export const setConfig = (next: TamaguiInternalConfig) => {
91
88
  if (conf !== previous || globalThis.__tamaguiConfig !== previousGlobal) return
92
89
  conf = next
93
90
  globalThis.__tamaguiConfig = next
91
+ if (process.env.TAMAGUI_ENVIRONMENT === 'tamagui') {
92
+ globalThis.__tamaguiEvaluationConfig = next
93
+ }
94
94
  }
95
95
 
96
96
  export const setConfigFont = (name: string, font: any, fontParsed: any) => {
@@ -5,6 +5,9 @@ import type { ComponentContextI } from '../types'
5
5
  const componentContextKeys = [
6
6
  'disableSSR',
7
7
  'inText',
8
+ ...(process.env.TAMAGUI_TARGET === 'native'
9
+ ? (['parentFontSize', 'parentLineHeight', 'animatedText'] as const)
10
+ : []),
8
11
  'language',
9
12
  'animationDriver',
10
13
  'setParentFocusState',
@@ -18,6 +21,11 @@ export const ComponentContext = createStyledContext<
18
21
  {
19
22
  disableSSR: undefined,
20
23
  inText: false,
24
+ ...(process.env.TAMAGUI_TARGET === 'native' && {
25
+ parentFontSize: undefined,
26
+ parentLineHeight: undefined,
27
+ animatedText: null,
28
+ }),
21
29
  language: null,
22
30
  animationDriver: null,
23
31
  setParentFocusState: null,
@@ -1,4 +1,4 @@
1
- import { composeRefs } from '@tamagui/compose-refs'
1
+ import { composeRefs, setRef } from '@tamagui/compose-refs'
2
2
  import {
3
3
  getPlatformDriver,
4
4
  isAndroid,
@@ -21,6 +21,8 @@ import { defaultComponentStateMounted } from './defaultComponentState'
21
21
  import { getWebEvents, useEvents, wrapWithGestureDetector } from './eventHandling'
22
22
  import { componentDisplayName } from './helpers/componentDisplayName'
23
23
  import { getSplitStyles } from './helpers/getSplitStyles'
24
+ import { isTamaguiElement } from './helpers/isTamaguiElement'
25
+ import { NativeTextBinding } from './helpers/NativeTextBinding'
24
26
  import { getConfigRevisionState } from './helpers/grammarConfig'
25
27
  import { getStyleStaticConfig, type StyleStaticConfig } from './helpers/styleStaticConfig'
26
28
  import {
@@ -91,7 +93,6 @@ const avoidReRenderKeys = new Set([
91
93
  'focus',
92
94
  'focusWithin',
93
95
  'media',
94
- 'group',
95
96
  ])
96
97
 
97
98
  const groupPseudoKeys = [
@@ -309,10 +310,15 @@ export function createComponent<
309
310
  resolvedStyleStaticConfig = nextStyleStaticConfig
310
311
  resolvedDefaultProps = nextStyleStaticConfig.defaultProps
311
312
  // the relative-position default is a style, so it joins the base layer
312
- // under everything the call site writes
313
+ // under everything the call site writes. a styled HOC skips it: the
314
+ // frame its render mounts owns the host element and its own default,
315
+ // and a wrapper's base reaches that frame as call-site className, where
316
+ // it would beat the frame's authored position (an absolute background
317
+ // collapsing to relative)
313
318
  if (
314
319
  isWeb &&
315
320
  !staticConfig.isText &&
321
+ !staticConfig.isStyledHOC &&
316
322
  config.settings.defaultPosition === 'relative' &&
317
323
  nextStyleStaticConfig.baseStyle?.position === undefined
318
324
  ) {
@@ -385,16 +391,6 @@ export function createComponent<
385
391
  React.useContext(NativeMenuContext)
386
392
  : false
387
393
 
388
- if (
389
- !process.env.TAMAGUI_IS_CORE_NODE &&
390
- process.env.NODE_ENV === 'development' &&
391
- debugProp === 'profile' &&
392
- !time
393
- ) {
394
- const timer = require('@tamagui/timer').timer()
395
- time = timer.start()
396
- globalThis['time'] = time
397
- }
398
394
  // pick up globalThis.time if set externally (e.g. by a profiling harness)
399
395
  if (process.env.NODE_ENV === 'development' && !time && (globalThis as any).time) {
400
396
  time = (globalThis as any).time
@@ -635,11 +631,27 @@ export function createComponent<
635
631
  elementType = animationDriver[isText ? 'Text' : 'View'] || elementType
636
632
  }
637
633
 
638
- // internal use only
634
+ // internal use only. it says "a theme is already mounted above you, don't
635
+ // read one again", which a styled HOC sets on everything its render
636
+ // forwards props to. a `theme` key still wins: the HOC strips the caller's
637
+ // theme before rendering, so one arriving here was set by the component
638
+ // itself (Checkbox's activeTheme, Tabs' selected tab) and is the whole
639
+ // reason that element exists. it is the presence of the key, never its
640
+ // value, because the disabled path skips hooks and a component that swaps
641
+ // `theme` between null and a name across renders must not change hook order
639
642
  const disableThemeProp =
640
- process.env.TAMAGUI_TARGET === 'native' ? false : props['data-disable-theme']
641
-
642
- const disableTheme = disableThemeProp || isHOC
643
+ process.env.TAMAGUI_TARGET === 'native'
644
+ ? false
645
+ : props['data-disable-theme'] && !('theme' in props)
646
+
647
+ // a styled HOC leaves theming to the component it wraps and hands it the
648
+ // theme prop. on native the HOC's own styles resolve to values here, before
649
+ // that, so an HOC given a theme themes itself and the wrapped component
650
+ // inherits it instead of applying it a second time. keyed on presence, like
651
+ // disableThemeProp, so hook order never changes across renders
652
+ const hocThemesSelf =
653
+ process.env.TAMAGUI_TARGET === 'native' && isHOC && 'theme' in props
654
+ const disableTheme = disableThemeProp || (isHOC && !hocThemesSelf)
643
655
 
644
656
  if (process.env.NODE_ENV === 'development' && time) time`theme-props`
645
657
 
@@ -746,7 +758,7 @@ export function createComponent<
746
758
 
747
759
  // stateRef.current is this instance's key into useMedia's per-component
748
760
  // States map (setMediaShouldUpdate below writes under the same key)
749
- const mediaState = useMedia(componentContext, debugProp, stateRef.current)
761
+ const mediaState = useMedia(stateRef.current, debugProp, stateRef.current)
750
762
 
751
763
  setDidGetVariableValue(false)
752
764
 
@@ -769,6 +781,7 @@ export function createComponent<
769
781
  canPlatformPseudo: componentState.platformPseudo,
770
782
  displayName,
771
783
  styledContext: styledContextValue,
784
+ prevStyle: isWeb ? undefined : stateRef.current.prevStyle,
772
785
  } as const
773
786
 
774
787
  const themeName = themeState?.name || ''
@@ -1151,7 +1164,10 @@ export function createComponent<
1151
1164
  useStyleListener(
1152
1165
  (nextStyles?.style || {}) as any,
1153
1166
  effectiveTransition,
1154
- hasActivePseudo
1167
+ hasActivePseudo,
1168
+ process.env.TAMAGUI_TARGET === 'native'
1169
+ ? nextStyles?.nativeTextMetrics
1170
+ : undefined
1155
1171
  )
1156
1172
  }
1157
1173
 
@@ -1173,31 +1189,22 @@ export function createComponent<
1173
1189
  }
1174
1190
  }
1175
1191
 
1176
- // don't change this ever or else you break ComponentContext and cause re-rendering
1177
- // use a Set of listeners so multiple components can register
1178
- componentContext.mediaEmitListeners =
1179
- componentContext.mediaEmitListeners || new Set()
1180
-
1181
- // only register once per component instance
1182
- if (!stateRef.current.mediaEmitCleanup) {
1183
- const updateListener = (next: Record<string, boolean>) => {
1184
- stateRef.current.nextMedia = next
1185
- stateRef.current.updateStyleListener?.()
1186
- }
1187
- componentContext.mediaEmitListeners.add(updateListener)
1188
- stateRef.current.mediaEmitCleanup = () => {
1189
- componentContext.mediaEmitListeners?.delete(updateListener)
1190
- }
1191
- }
1192
-
1193
- componentContext.mediaEmit =
1194
- componentContext.mediaEmit ||
1195
- ((next) => {
1196
- // notify all registered components
1197
- for (const listener of componentContext.mediaEmitListeners!) {
1198
- listener(next)
1199
- }
1192
+ // a media change restyles only this instance: its useMedia emits through
1193
+ // this state ref. a context-wide emitter made every component in the
1194
+ // provider restyle on every other component's media change (quadratic).
1195
+ // one dimension change fires one update per changed media key, so like
1196
+ // nativeMediaUpdate this coalesces to a single restyle per event turn,
1197
+ // against the media state every key has settled to by then
1198
+ stateRef.current.mediaEmit ||= (next) => {
1199
+ const sr = stateRef.current
1200
+ sr.nextMedia = next
1201
+ if (sr.mediaEmitQueued) return
1202
+ sr.mediaEmitQueued = true
1203
+ queueMicrotask(() => {
1204
+ sr.mediaEmitQueued = false
1205
+ sr.updateStyleListener?.()
1200
1206
  })
1207
+ }
1201
1208
 
1202
1209
  stateRef.current.setStateShallow = (nextOrGetNext) => {
1203
1210
  const prev = stateRef.current.nextState || state
@@ -1302,13 +1309,18 @@ export function createComponent<
1302
1309
  } = splitStyles || {}
1303
1310
  const groupSetRevision = useGroupSetRevision(pseudoGroups, mediaGroups)
1304
1311
 
1312
+ // native style stability: persist the resolved style for next render's
1313
+ // inline comparison (see getSplitStyles prevStyle tracking)
1314
+ if (!isWeb) {
1315
+ stateRef.current.prevStyle = splitStylesStyle || null
1316
+ }
1317
+
1305
1318
  const propsWithAnimation = props as UseAnimationProps
1306
1319
 
1307
1320
  const {
1308
1321
  asChild,
1309
1322
  children,
1310
1323
  themeShallow,
1311
- spaceDirection: _spaceDirection,
1312
1324
  onPress,
1313
1325
  onLongPress,
1314
1326
  onPressIn,
@@ -1340,7 +1352,7 @@ export function createComponent<
1340
1352
  }
1341
1353
 
1342
1354
  if (isHOC) {
1343
- if (typeof _themeProp !== 'undefined') {
1355
+ if (typeof _themeProp !== 'undefined' && !hocThemesSelf) {
1344
1356
  viewProps.theme = _themeProp
1345
1357
  }
1346
1358
  if (typeof passThrough !== 'undefined') {
@@ -1368,6 +1380,14 @@ export function createComponent<
1368
1380
  // once you set animation prop don't remove it, you can set to undefined/false
1369
1381
  // reason is animations are heavy - no way around it, and must be run inline here (🙅 loading as a sub-component)
1370
1382
  let animationStyles: any
1383
+ let animatedText =
1384
+ process.env.TAMAGUI_TARGET === 'native'
1385
+ ? isText &&
1386
+ splitStyles?.nativeTextMetrics &&
1387
+ !splitStyles.nativeTextMetrics.inheritsFontSize
1388
+ ? null
1389
+ : componentContext.animatedText
1390
+ : null
1371
1391
  const shouldUseAnimation =
1372
1392
  // if it supports css vars we run it on server too to get matching initial style
1373
1393
  (inputStyle === 'css' ? willBeAnimatedClient : willBeAnimated) &&
@@ -1398,6 +1418,11 @@ export function createComponent<
1398
1418
  stateRef.current.prevPseudoState = extractPseudoState(state)
1399
1419
 
1400
1420
  const animations = useAnimations({
1421
+ ...(process.env.TAMAGUI_TARGET === 'native' && {
1422
+ inheritedText: splitStyles?.nativeTextMetrics?.inheritsFontSize
1423
+ ? componentContext.animatedText
1424
+ : null,
1425
+ }),
1401
1426
  props: propsWithAnimation,
1402
1427
  // clone style to prevent animation driver mutations from leaking to viewProps
1403
1428
  // during SSR/pre-hydration (CSS driver mutates style.transition in place)
@@ -1415,6 +1440,7 @@ export function createComponent<
1415
1440
  })
1416
1441
 
1417
1442
  if (animations) {
1443
+ if (process.env.TAMAGUI_TARGET === 'native') animatedText = animations.textChannel
1418
1444
  if (animations.ref) {
1419
1445
  // @ts-ignore
1420
1446
  animatedRef = animations.ref
@@ -1476,6 +1502,13 @@ export function createComponent<
1476
1502
  stateRef.current.willHydrate
1477
1503
  ) || nonTamaguiProps
1478
1504
 
1505
+ // the composed ref keeps one identity for the life of the component so react
1506
+ // never detaches and reattaches the host mid-life. that means it can't close
1507
+ // over forwardedRef, which would pin the first render's ref forever - read it
1508
+ // off stateRef instead, and record what it actually attached to so a swapped
1509
+ // ref can be handed the host below (#4031)
1510
+ stateRef.current.composedForwardedRef = forwardedRef
1511
+
1479
1512
  if (!stateRef.current.composedRef) {
1480
1513
  stateRef.current.composedRef = composeRefs<TamaguiElement>(
1481
1514
  (x) => {
@@ -1483,8 +1516,10 @@ export function createComponent<
1483
1516
  if (process.env.TAMAGUI_TARGET === 'native') {
1484
1517
  updateNativeStyleLink(stateRef.current, x)
1485
1518
  }
1519
+ const current = stateRef.current.composedForwardedRef
1520
+ stateRef.current.attachedForwardedRef = x ? current : undefined
1521
+ setRef<TamaguiElement>(current, x as TamaguiElement)
1486
1522
  },
1487
- forwardedRef,
1488
1523
  setElementProps,
1489
1524
  animatedRef
1490
1525
  )
@@ -1503,6 +1538,22 @@ export function createComponent<
1503
1538
  viewProps.onClick = onClick
1504
1539
  }
1505
1540
 
1541
+ // react only re-runs a ref callback when its identity changes, and ours never
1542
+ // does, so hand the host over by hand when a parent swaps the forwarded ref -
1543
+ // react-hook-form re-registering a field after reset() is the common case.
1544
+ // the comparison reads what the ref callback attached, never a value written
1545
+ // during render: a render-phase "previous" pointer reads back its own write
1546
+ // on react's second pass and the handover silently no-ops under StrictMode
1547
+ useIsomorphicLayoutEffect(() => {
1548
+ const attached = stateRef.current.attachedForwardedRef
1549
+ if (attached === forwardedRef) return
1550
+ if (attached) setRef<TamaguiElement | null>(attached, null)
1551
+ stateRef.current.attachedForwardedRef = forwardedRef
1552
+ if (stateRef.current.host) {
1553
+ setRef<TamaguiElement>(forwardedRef, stateRef.current.host)
1554
+ }
1555
+ }, [forwardedRef])
1556
+
1506
1557
  // handle pointer events (native: maps to touch events, web: no-op)
1507
1558
  usePointerEvents(props, viewProps)
1508
1559
 
@@ -1588,16 +1639,10 @@ export function createComponent<
1588
1639
 
1589
1640
  // unmount-only cleanup. this must NOT live on the enter effect above: that
1590
1641
  // effect re-runs on every unmounted transition (true -> 'should-enter' ->
1591
- // false), and a cleanup returned there ran mid-lifecycle — dropping the
1592
- // mediaEmit listener right after mount for value-input avoidReRenders
1593
- // drivers, with no re-registration (render only registers while
1594
- // mediaEmitCleanup is unset), so media styles silently stopped applying
1642
+ // false), and a cleanup there would run mid-lifecycle
1595
1643
  useIsomorphicLayoutEffect(() => {
1596
1644
  return () => {
1597
1645
  componentSetStates.delete(setState)
1598
- stateRef.current.mediaEmitCleanup?.()
1599
- // clear so a render after a simulated unmount (StrictMode dev) can re-register
1600
- stateRef.current.mediaEmitCleanup = undefined
1601
1646
  }
1602
1647
  }, [])
1603
1648
 
@@ -1833,6 +1878,23 @@ export function createComponent<
1833
1878
  }
1834
1879
  : null
1835
1880
 
1881
+ // press plumbing detached mid-press (a conditional pressStyle/onPress removed
1882
+ // by the same tap's re-render racing the touch-up, e.g. a selection flip):
1883
+ // the release then lands on detached handlers and press latches true,
1884
+ // sticking the press wash with no recovery on native. with no handlers
1885
+ // attached no future event can clear it, so any active press is
1886
+ // definitionally stale — drop it. group subscribers keep theirs: their press
1887
+ // may be parent-driven, and the group channel still delivers its release.
1888
+ useIsomorphicLayoutEffect(() => {
1889
+ const hadPressPlumbing = stateRef.current.hadAttachPress
1890
+ stateRef.current.hadAttachPress = attachPress
1891
+ if (hadPressPlumbing && !attachPress && !pseudoGroups?.size) {
1892
+ const clearPress =
1893
+ stateRef.current.setStateShallow ?? stateRef.current.baseSetStateShallow
1894
+ clearPress?.({ press: false, pressIn: false })
1895
+ }
1896
+ }, [attachPress, pseudoGroups])
1897
+
1836
1898
  if (process.env.TAMAGUI_TARGET === 'native' && events && !asChild) {
1837
1899
  // replicating TouchableWithoutFeedback
1838
1900
  Object.assign(events, {
@@ -1907,6 +1969,8 @@ export function createComponent<
1907
1969
  onMouseDown,
1908
1970
  onMouseEnter,
1909
1971
  onMouseLeave,
1972
+ onFocus,
1973
+ onBlur,
1910
1974
  },
1911
1975
  webStyleEvents
1912
1976
  )
@@ -1983,6 +2047,26 @@ export function createComponent<
1983
2047
  }
1984
2048
 
1985
2049
  content = React.createElement(elementType, viewProps, content || children)
2050
+ if (
2051
+ process.env.TAMAGUI_TARGET === 'native' &&
2052
+ !shouldUseAnimation &&
2053
+ !isHOC &&
2054
+ !staticConfig.isDOM &&
2055
+ !asChild &&
2056
+ splitStyles?.nativeTextMetrics?.inheritsFontSize &&
2057
+ componentContext.animatedText &&
2058
+ animationDriver?.useTextMetrics
2059
+ ) {
2060
+ content = (
2061
+ <NativeTextBinding
2062
+ element={content as ReactElement<any>}
2063
+ useTextMetrics={animationDriver.useTextMetrics}
2064
+ inheritedText={componentContext.animatedText}
2065
+ lineHeight={splitStyles.nativeTextMetrics.lineHeight}
2066
+ isInput={staticConfig.isInput}
2067
+ />
2068
+ )
2069
+ }
1986
2070
  }
1987
2071
 
1988
2072
  if (process.env.NODE_ENV === 'development' && time) time`use-children`
@@ -1998,7 +2082,7 @@ export function createComponent<
1998
2082
  stateRef,
1999
2083
  isHOC,
2000
2084
  isCompositeComponent,
2001
- hasRealPressEvents
2085
+ hasRealPressEvents && !isInsideNativeMenu
2002
2086
  )
2003
2087
  }
2004
2088
 
@@ -2030,7 +2114,7 @@ export function createComponent<
2030
2114
 
2031
2115
  if (process.env.NODE_ENV === 'development' && time) time`create-element`
2032
2116
 
2033
- if (conditionalStates?.has('focus-within')) {
2117
+ if (process.env.TAMAGUI_TARGET === 'web' && conditionalStates?.has('focus-within')) {
2034
2118
  content = (
2035
2119
  <ComponentContext.Provider
2036
2120
  {...componentContext}
@@ -2050,7 +2134,43 @@ export function createComponent<
2050
2134
  )
2051
2135
  }
2052
2136
 
2053
- // Text components set inText context for children so nested Text can inherit styles
2137
+ if (process.env.TAMAGUI_TARGET === 'native') {
2138
+ const textMetrics =
2139
+ !staticConfig.isDOM &&
2140
+ !isHOC &&
2141
+ isText &&
2142
+ !(asChild && isTamaguiElement(children))
2143
+ ? splitStyles?.nativeTextMetrics
2144
+ : undefined
2145
+ const provideText =
2146
+ !!textMetrics &&
2147
+ children !== null &&
2148
+ typeof children === 'object' &&
2149
+ (!componentContext.inText ||
2150
+ textMetrics.fontSize !== componentContext.parentFontSize ||
2151
+ textMetrics.lineHeight !== componentContext.parentLineHeight ||
2152
+ animatedText !== componentContext.animatedText)
2153
+ const provideFocus = conditionalStates?.has('focus-within')
2154
+ if (provideText || provideFocus) {
2155
+ content = (
2156
+ <ComponentContext.Provider
2157
+ {...componentContext}
2158
+ inText={provideText || componentContext.inText}
2159
+ parentFontSize={textMetrics?.fontSize ?? componentContext.parentFontSize}
2160
+ parentLineHeight={
2161
+ textMetrics ? textMetrics.lineHeight : componentContext.parentLineHeight
2162
+ }
2163
+ animatedText={animatedText}
2164
+ setParentFocusState={
2165
+ provideFocus ? setStateShallow : componentContext.setParentFocusState
2166
+ }
2167
+ >
2168
+ {content}
2169
+ </ComponentContext.Provider>
2170
+ )
2171
+ }
2172
+ }
2173
+
2054
2174
  if (process.env.TAMAGUI_TARGET === 'web' && !asChild && isText && !hasTextAncestor) {
2055
2175
  content = (
2056
2176
  <ComponentContext.Provider {...componentContext} inText={true}>
@@ -2090,7 +2210,7 @@ export function createComponent<
2090
2210
  // SSR style support - for non compiled styles we render them inline until client takes over
2091
2211
  // on client we then switch over to our global sheet insert, because rendering inline is expensive
2092
2212
  if (
2093
- !process.env.TAMAGUI_DID_OUTPUT_CSS &&
2213
+ process.env.TAMAGUI_RUNTIME !== 'island' &&
2094
2214
  process.env.TAMAGUI_TARGET === 'web' &&
2095
2215
  startedUnhydrated &&
2096
2216
  splitStyles