@tamagui/web 3.0.0-beta.807.1 → 3.0.0-beta.831.1

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 (266) hide show
  1. package/dist/cjs/config.cjs +1 -1
  2. package/dist/cjs/config.native.cjs +1 -1
  3. package/dist/cjs/config.native.js +1 -1
  4. package/dist/cjs/config.native.js.map +1 -1
  5. package/dist/cjs/createComponent.cjs +28 -18
  6. package/dist/cjs/createComponent.native.cjs +30 -20
  7. package/dist/cjs/createComponent.native.js +30 -20
  8. package/dist/cjs/createComponent.native.js.map +1 -1
  9. package/dist/cjs/createStyledHOC.cjs +54 -4
  10. package/dist/cjs/createStyledHOC.native.cjs +55 -4
  11. package/dist/cjs/createStyledHOC.native.js +55 -4
  12. package/dist/cjs/createStyledHOC.native.js.map +1 -1
  13. package/dist/cjs/createTokens.cjs +1 -1
  14. package/dist/cjs/createTokens.native.cjs +1 -1
  15. package/dist/cjs/createTokens.native.js +1 -1
  16. package/dist/cjs/createTokens.native.js.map +1 -1
  17. package/dist/cjs/dom/html.cjs +147 -99
  18. package/dist/cjs/dom/htmlRuntime.native.cjs +6 -2
  19. package/dist/cjs/dom/htmlRuntime.native.js +6 -2
  20. package/dist/cjs/dom/htmlRuntime.native.js.map +1 -1
  21. package/dist/cjs/dom/primitives.native.cjs +16 -13
  22. package/dist/cjs/dom/primitives.native.js +16 -13
  23. package/dist/cjs/dom/primitives.native.js.map +1 -1
  24. package/dist/cjs/helpers/componentDisplayName.cjs +1 -11
  25. package/dist/cjs/helpers/componentDisplayName.native.cjs +1 -11
  26. package/dist/cjs/helpers/componentDisplayName.native.js +1 -11
  27. package/dist/cjs/helpers/componentDisplayName.native.js.map +1 -1
  28. package/dist/cjs/helpers/directStyleCSS.cjs +101 -104
  29. package/dist/cjs/helpers/formatDiagnostic.cjs +2 -4
  30. package/dist/cjs/helpers/formatDiagnostic.native.cjs +2 -4
  31. package/dist/cjs/helpers/formatDiagnostic.native.js +2 -4
  32. package/dist/cjs/helpers/formatDiagnostic.native.js.map +1 -1
  33. package/dist/cjs/helpers/getCSSStylesAtomic.cjs +10 -10
  34. package/dist/cjs/helpers/getSplitStyles.cjs +168 -600
  35. package/dist/cjs/helpers/getSplitStyles.native.cjs +168 -762
  36. package/dist/cjs/helpers/getSplitStyles.native.js +168 -762
  37. package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -1
  38. package/dist/cjs/helpers/splitStyleProps.cjs +46 -0
  39. package/dist/cjs/helpers/splitStyleProps.native.cjs +49 -0
  40. package/dist/cjs/helpers/splitStyleProps.native.js +51 -0
  41. package/dist/cjs/helpers/splitStyleProps.native.js.map +1 -0
  42. package/dist/cjs/helpers/styleStaticConfig.cjs +76 -0
  43. package/dist/cjs/helpers/styleStaticConfig.native.cjs +79 -0
  44. package/dist/cjs/helpers/styleStaticConfig.native.js +81 -0
  45. package/dist/cjs/helpers/styleStaticConfig.native.js.map +1 -0
  46. package/dist/cjs/helpers/tokenCategories.cjs +32 -71
  47. package/dist/cjs/helpers/tokenCategories.native.cjs +34 -73
  48. package/dist/cjs/helpers/tokenCategories.native.js +34 -73
  49. package/dist/cjs/helpers/tokenCategories.native.js.map +1 -1
  50. package/dist/cjs/helpers/variantResolvers.cjs +87 -0
  51. package/dist/cjs/helpers/variantResolvers.native.cjs +140 -0
  52. package/dist/cjs/helpers/variantResolvers.native.js +142 -0
  53. package/dist/cjs/helpers/variantResolvers.native.js.map +1 -0
  54. package/dist/cjs/hooks/useSplitStyles.cjs +2 -2
  55. package/dist/cjs/hooks/useSplitStyles.native.cjs +2 -2
  56. package/dist/cjs/hooks/useSplitStyles.native.js +2 -2
  57. package/dist/cjs/hooks/useSplitStyles.native.js.map +1 -1
  58. package/dist/cjs/index.cjs +3 -9
  59. package/dist/cjs/index.native.cjs +3 -9
  60. package/dist/cjs/index.native.js +3 -9
  61. package/dist/cjs/index.native.js.map +1 -1
  62. package/dist/cjs/internal-runtime.cjs +8 -7
  63. package/dist/cjs/internal-runtime.native.cjs +8 -7
  64. package/dist/cjs/internal-runtime.native.js +8 -7
  65. package/dist/cjs/internal-runtime.native.js.map +1 -1
  66. package/dist/cjs/static-resolve.cjs +6 -5
  67. package/dist/cjs/static-resolve.native.cjs +6 -5
  68. package/dist/cjs/static-resolve.native.js +6 -5
  69. package/dist/cjs/static-resolve.native.js.map +1 -1
  70. package/dist/cjs/styled.cjs +4 -56
  71. package/dist/cjs/styled.native.cjs +4 -58
  72. package/dist/cjs/styled.native.js +4 -58
  73. package/dist/cjs/styled.native.js.map +1 -1
  74. package/dist/cjs/types.cjs +1 -21
  75. package/dist/cjs/types.native.cjs +1 -21
  76. package/dist/cjs/types.native.js +1 -21
  77. package/dist/cjs/types.native.js.map +1 -1
  78. package/dist/cjs/views/Text.cjs +4 -2
  79. package/dist/cjs/views/Text.native.cjs +4 -2
  80. package/dist/cjs/views/Text.native.js +4 -2
  81. package/dist/cjs/views/Text.native.js.map +1 -1
  82. package/dist/cjs/views/View.cjs +4 -2
  83. package/dist/cjs/views/View.native.cjs +4 -2
  84. package/dist/cjs/views/View.native.js +4 -2
  85. package/dist/cjs/views/View.native.js.map +1 -1
  86. package/dist/esm/config.mjs +1 -1
  87. package/dist/esm/config.mjs.map +1 -1
  88. package/dist/esm/config.native.js +1 -1
  89. package/dist/esm/config.native.js.map +1 -1
  90. package/dist/esm/createComponent.mjs +29 -19
  91. package/dist/esm/createComponent.mjs.map +1 -1
  92. package/dist/esm/createComponent.native.js +31 -21
  93. package/dist/esm/createComponent.native.js.map +1 -1
  94. package/dist/esm/createStyledHOC.mjs +55 -5
  95. package/dist/esm/createStyledHOC.mjs.map +1 -1
  96. package/dist/esm/createStyledHOC.native.js +56 -5
  97. package/dist/esm/createStyledHOC.native.js.map +1 -1
  98. package/dist/esm/createTokens.mjs +1 -1
  99. package/dist/esm/createTokens.mjs.map +1 -1
  100. package/dist/esm/createTokens.native.js +1 -1
  101. package/dist/esm/createTokens.native.js.map +1 -1
  102. package/dist/esm/dom/html.mjs +147 -99
  103. package/dist/esm/dom/html.mjs.map +1 -1
  104. package/dist/esm/dom/htmlRuntime.native.js +7 -3
  105. package/dist/esm/dom/htmlRuntime.native.js.map +1 -1
  106. package/dist/esm/dom/primitives.native.js +16 -13
  107. package/dist/esm/dom/primitives.native.js.map +1 -1
  108. package/dist/esm/helpers/componentDisplayName.mjs +1 -8
  109. package/dist/esm/helpers/componentDisplayName.mjs.map +1 -1
  110. package/dist/esm/helpers/componentDisplayName.native.js +1 -8
  111. package/dist/esm/helpers/componentDisplayName.native.js.map +1 -1
  112. package/dist/esm/helpers/directStyleCSS.mjs +101 -104
  113. package/dist/esm/helpers/directStyleCSS.mjs.map +1 -1
  114. package/dist/esm/helpers/formatDiagnostic.mjs +2 -4
  115. package/dist/esm/helpers/formatDiagnostic.mjs.map +1 -1
  116. package/dist/esm/helpers/formatDiagnostic.native.js +2 -4
  117. package/dist/esm/helpers/formatDiagnostic.native.js.map +1 -1
  118. package/dist/esm/helpers/getCSSStylesAtomic.mjs +10 -10
  119. package/dist/esm/helpers/getCSSStylesAtomic.mjs.map +1 -1
  120. package/dist/esm/helpers/getSplitStyles.mjs +166 -594
  121. package/dist/esm/helpers/getSplitStyles.mjs.map +1 -1
  122. package/dist/esm/helpers/getSplitStyles.native.js +166 -757
  123. package/dist/esm/helpers/getSplitStyles.native.js.map +1 -1
  124. package/dist/esm/helpers/splitStyleProps.mjs +27 -0
  125. package/dist/esm/helpers/splitStyleProps.mjs.map +1 -0
  126. package/dist/esm/helpers/splitStyleProps.native.js +28 -0
  127. package/dist/esm/helpers/splitStyleProps.native.js.map +1 -0
  128. package/dist/esm/helpers/styleStaticConfig.mjs +57 -0
  129. package/dist/esm/helpers/styleStaticConfig.mjs.map +1 -0
  130. package/dist/esm/helpers/styleStaticConfig.native.js +58 -0
  131. package/dist/esm/helpers/styleStaticConfig.native.js.map +1 -0
  132. package/dist/esm/helpers/tokenCategories.mjs +33 -72
  133. package/dist/esm/helpers/tokenCategories.mjs.map +1 -1
  134. package/dist/esm/helpers/tokenCategories.native.js +35 -74
  135. package/dist/esm/helpers/tokenCategories.native.js.map +1 -1
  136. package/dist/esm/helpers/variantResolvers.mjs +65 -0
  137. package/dist/esm/helpers/variantResolvers.mjs.map +1 -0
  138. package/dist/esm/helpers/variantResolvers.native.js +116 -0
  139. package/dist/esm/helpers/variantResolvers.native.js.map +1 -0
  140. package/dist/esm/hooks/useSplitStyles.mjs +2 -2
  141. package/dist/esm/hooks/useSplitStyles.mjs.map +1 -1
  142. package/dist/esm/hooks/useSplitStyles.native.js +2 -2
  143. package/dist/esm/hooks/useSplitStyles.native.js.map +1 -1
  144. package/dist/esm/index.js +3 -5
  145. package/dist/esm/index.mjs +3 -5
  146. package/dist/esm/index.native.js +3 -5
  147. package/dist/esm/internal-runtime.mjs +8 -7
  148. package/dist/esm/internal-runtime.mjs.map +1 -1
  149. package/dist/esm/internal-runtime.native.js +8 -7
  150. package/dist/esm/internal-runtime.native.js.map +1 -1
  151. package/dist/esm/static-resolve.mjs +8 -6
  152. package/dist/esm/static-resolve.mjs.map +1 -1
  153. package/dist/esm/static-resolve.native.js +8 -6
  154. package/dist/esm/static-resolve.native.js.map +1 -1
  155. package/dist/esm/styled.mjs +6 -57
  156. package/dist/esm/styled.mjs.map +1 -1
  157. package/dist/esm/styled.native.js +6 -59
  158. package/dist/esm/styled.native.js.map +1 -1
  159. package/dist/esm/types.mjs +1 -18
  160. package/dist/esm/types.mjs.map +1 -1
  161. package/dist/esm/types.native.js +1 -18
  162. package/dist/esm/types.native.js.map +1 -1
  163. package/dist/esm/views/Text.mjs +4 -2
  164. package/dist/esm/views/Text.mjs.map +1 -1
  165. package/dist/esm/views/Text.native.js +4 -2
  166. package/dist/esm/views/Text.native.js.map +1 -1
  167. package/dist/esm/views/View.mjs +4 -2
  168. package/dist/esm/views/View.mjs.map +1 -1
  169. package/dist/esm/views/View.native.js +4 -2
  170. package/dist/esm/views/View.native.js.map +1 -1
  171. package/package.json +15 -15
  172. package/src/config.ts +1 -1
  173. package/src/createComponent.tsx +41 -30
  174. package/src/createStyledHOC.tsx +56 -9
  175. package/src/createTokens.ts +1 -1
  176. package/src/dom/html.tsx +778 -877
  177. package/src/dom/htmlRuntime.native.tsx +7 -3
  178. package/src/dom/primitives.native.tsx +30 -39
  179. package/src/helpers/componentDisplayName.ts +0 -11
  180. package/src/helpers/directStyleCSS.ts +91 -112
  181. package/src/helpers/formatDiagnostic.ts +2 -4
  182. package/src/helpers/getCSSStylesAtomic.ts +32 -26
  183. package/src/helpers/getSplitStyles.tsx +315 -1119
  184. package/src/helpers/getVariantExtras.tsx +3 -3
  185. package/src/helpers/splitStyleProps.ts +166 -0
  186. package/src/helpers/styleFrontend.ts +8 -4
  187. package/src/helpers/styleStaticConfig.ts +88 -0
  188. package/src/helpers/tokenCategories.ts +62 -93
  189. package/src/helpers/variantResolvers.ts +121 -0
  190. package/src/hooks/useSplitStyles.tsx +17 -2
  191. package/src/hooks/useTheme.tsx +1 -1
  192. package/src/index.ts +8 -4
  193. package/src/internal-runtime.ts +10 -9
  194. package/src/static-resolve.ts +18 -14
  195. package/src/styled.tsx +7 -264
  196. package/src/types.tsx +19 -40
  197. package/src/views/Text.tsx +6 -7
  198. package/src/views/View.tsx +6 -7
  199. package/types/createComponent.d.ts.map +1 -1
  200. package/types/createStyledHOC.d.ts.map +1 -1
  201. package/types/dom/html.d.ts.map +1 -1
  202. package/types/dom/htmlRuntime.native.d.ts.map +1 -1
  203. package/types/dom/primitives.native.d.ts.map +1 -1
  204. package/types/helpers/componentDisplayName.d.ts +0 -3
  205. package/types/helpers/componentDisplayName.d.ts.map +1 -1
  206. package/types/helpers/directStyleCSS.d.ts.map +1 -1
  207. package/types/helpers/formatDiagnostic.d.ts.map +1 -1
  208. package/types/helpers/getCSSStylesAtomic.d.ts +17 -15
  209. package/types/helpers/getCSSStylesAtomic.d.ts.map +1 -1
  210. package/types/helpers/getSplitStyles.d.ts +6 -6
  211. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  212. package/types/helpers/splitStyleProps.d.ts +44 -0
  213. package/types/helpers/splitStyleProps.d.ts.map +1 -0
  214. package/types/helpers/styleFrontend.d.ts +4 -4
  215. package/types/helpers/styleFrontend.d.ts.map +1 -1
  216. package/types/helpers/styleStaticConfig.d.ts +19 -0
  217. package/types/helpers/styleStaticConfig.d.ts.map +1 -0
  218. package/types/helpers/tokenCategories.d.ts +1 -1
  219. package/types/helpers/tokenCategories.d.ts.map +1 -1
  220. package/types/helpers/variantResolvers.d.ts +9 -0
  221. package/types/helpers/variantResolvers.d.ts.map +1 -0
  222. package/types/hooks/useSplitStyles.d.ts.map +1 -1
  223. package/types/index.d.ts +2 -4
  224. package/types/index.d.ts.map +1 -1
  225. package/types/internal-runtime.d.ts.map +1 -1
  226. package/types/static-resolve.d.ts +2 -2
  227. package/types/static-resolve.d.ts.map +1 -1
  228. package/types/styled.d.ts +3 -39
  229. package/types/styled.d.ts.map +1 -1
  230. package/types/types.d.ts +2 -12
  231. package/types/types.d.ts.map +1 -1
  232. package/types/views/Text.d.ts.map +1 -1
  233. package/types/views/View.d.ts.map +1 -1
  234. package/dist/cjs/helpers/getDefaultProps.cjs +0 -24
  235. package/dist/cjs/helpers/getDefaultProps.native.cjs +0 -28
  236. package/dist/cjs/helpers/getDefaultProps.native.js +0 -30
  237. package/dist/cjs/helpers/getDefaultProps.native.js.map +0 -1
  238. package/dist/cjs/helpers/themeable.cjs +0 -92
  239. package/dist/cjs/helpers/themeable.native.cjs +0 -95
  240. package/dist/cjs/helpers/themeable.native.js +0 -97
  241. package/dist/cjs/helpers/themeable.native.js.map +0 -1
  242. package/dist/cjs/hooks/useProps.cjs +0 -129
  243. package/dist/cjs/hooks/useProps.native.cjs +0 -135
  244. package/dist/cjs/hooks/useProps.native.js +0 -137
  245. package/dist/cjs/hooks/useProps.native.js.map +0 -1
  246. package/dist/esm/helpers/getDefaultProps.mjs +0 -4
  247. package/dist/esm/helpers/getDefaultProps.mjs.map +0 -1
  248. package/dist/esm/helpers/getDefaultProps.native.js +0 -6
  249. package/dist/esm/helpers/getDefaultProps.native.js.map +0 -1
  250. package/dist/esm/helpers/themeable.mjs +0 -67
  251. package/dist/esm/helpers/themeable.mjs.map +0 -1
  252. package/dist/esm/helpers/themeable.native.js +0 -68
  253. package/dist/esm/helpers/themeable.native.js.map +0 -1
  254. package/dist/esm/hooks/useProps.mjs +0 -100
  255. package/dist/esm/hooks/useProps.mjs.map +0 -1
  256. package/dist/esm/hooks/useProps.native.js +0 -104
  257. package/dist/esm/hooks/useProps.native.js.map +0 -1
  258. package/src/helpers/getDefaultProps.ts +0 -3
  259. package/src/helpers/themeable.tsx +0 -96
  260. package/src/hooks/useProps.tsx +0 -186
  261. package/types/helpers/getDefaultProps.d.ts +0 -3
  262. package/types/helpers/getDefaultProps.d.ts.map +0 -1
  263. package/types/helpers/themeable.d.ts +0 -3
  264. package/types/helpers/themeable.d.ts.map +0 -1
  265. package/types/hooks/useProps.d.ts +0 -39
  266. package/types/hooks/useProps.d.ts.map +0 -1
package/src/config.ts CHANGED
@@ -169,7 +169,7 @@ export const getThemes = () => getConfigFromGlobalOrLocal()!.themes
169
169
  export const updateConfig = (key: string, value: any) => {
170
170
  // for usage internally only
171
171
  const config = getConfigFromGlobalOrLocal()
172
- if (!config || !Object.prototype.hasOwnProperty.call(config, key)) {
172
+ if (!config || key === '__proto__' || !(key in config)) {
173
173
  return
174
174
  }
175
175
  Object.assign(config[key], value)
@@ -19,9 +19,10 @@ import { GroupContext } from './contexts/GroupContext'
19
19
  import { didGetVariableValue, setDidGetVariableValue } from './createVariable'
20
20
  import { defaultComponentStateMounted } from './defaultComponentState'
21
21
  import { getWebEvents, useEvents, wrapWithGestureDetector } from './eventHandling'
22
- import { getDefaultProps } from './helpers/getDefaultProps'
23
22
  import { componentDisplayName } from './helpers/componentDisplayName'
24
- import { getSplitStyles, prepareStyleStaticConfig } from './helpers/getSplitStyles'
23
+ import { getSplitStyles } from './helpers/getSplitStyles'
24
+ import { getConfigRevisionState } from './helpers/grammarConfig'
25
+ import { getStyleStaticConfig, type StyleStaticConfig } from './helpers/styleStaticConfig'
25
26
  import {
26
27
  getNativeStyleEngine,
27
28
  queueNativeViewState,
@@ -267,16 +268,10 @@ export function createComponent<
267
268
  )
268
269
  }
269
270
 
270
- prepareStyleStaticConfig(staticConfig)
271
-
272
271
  let config: TamaguiInternalConfig | null = null
273
272
  let resolvedDefaultProps: Record<string, any> | undefined
274
- let didResolveDefaultProps = false
275
- const styledContextPropKeys =
276
- staticConfig.contextProps || staticConfig.context?.propKeys
277
- const styledContextKeys = styledContextPropKeys
278
- ? new Set(styledContextPropKeys)
279
- : undefined
273
+ let resolvedStyleRevision = -1
274
+ let resolvedStyleStaticConfig: StyleStaticConfig | undefined
280
275
 
281
276
  const { Component, isText, isHOC } = staticConfig
282
277
 
@@ -290,11 +285,11 @@ export function createComponent<
290
285
 
291
286
  let res: ComponentType
292
287
 
288
+ const { displayName } = staticConfig
289
+
293
290
  const component = (propsInWithRef: ComponentPropTypes & { ref?: React.Ref<Ref> }) => {
294
291
  'use no memo'
295
292
 
296
- const displayName = (res as any)[componentDisplayName] as string | undefined
297
-
298
293
  // read the forwarded ref directly off the incoming props — do NOT clone the
299
294
  // whole object every render just to strip `ref`. the original props object is
300
295
  // passed straight through; `ref` is skipped in the getSplitStyles pass (so it
@@ -305,6 +300,29 @@ export function createComponent<
305
300
 
306
301
  config = config || getConfig()
307
302
 
303
+ const styleRevision = getConfigRevisionState(config).revision
304
+ if (resolvedStyleRevision !== styleRevision) {
305
+ resolvedStyleRevision = styleRevision
306
+ const nextStyleStaticConfig = getStyleStaticConfig(staticConfig, config)
307
+ resolvedStyleStaticConfig = nextStyleStaticConfig
308
+ resolvedDefaultProps = nextStyleStaticConfig.defaultProps
309
+ // the relative-position default is a style, so it joins the base layer
310
+ // under everything the call site writes
311
+ if (
312
+ isWeb &&
313
+ !staticConfig.isText &&
314
+ config.settings.defaultPosition === 'relative' &&
315
+ nextStyleStaticConfig.baseStyle?.position === undefined
316
+ ) {
317
+ resolvedStyleStaticConfig = {
318
+ ...nextStyleStaticConfig,
319
+ baseStyle: { position: 'relative', ...nextStyleStaticConfig.baseStyle },
320
+ }
321
+ }
322
+ }
323
+ const styleStaticConfig = resolvedStyleStaticConfig!
324
+ const styledContextKeys = styleStaticConfig.styledContextKeys
325
+
308
326
  const internalID = process.env.NODE_ENV === 'development' ? React.useId() : ''
309
327
 
310
328
  if (process.env.NODE_ENV === 'development') {
@@ -386,20 +404,6 @@ export function createComponent<
386
404
  let props: ViewProps | TextProps = propsIn
387
405
 
388
406
  // merge both default props and styled context props - ensure order is preserved
389
- if (!didResolveDefaultProps) {
390
- didResolveDefaultProps = true
391
- const staticDefaultProps = getDefaultProps(staticConfig)
392
- resolvedDefaultProps =
393
- isWeb &&
394
- !isText &&
395
- config.settings.defaultPosition === 'relative' &&
396
- staticDefaultProps?.position === undefined
397
- ? staticDefaultProps
398
- ? { position: 'relative', ...staticDefaultProps }
399
- : { position: 'relative' }
400
- : staticDefaultProps
401
- }
402
-
403
407
  // merge styled context props over defaults, ensure order is preserved
404
408
  const [nextProps, overrides] = mergeComponentProps(
405
409
  resolvedDefaultProps,
@@ -763,7 +767,6 @@ export function createComponent<
763
767
  canPlatformPseudo: componentState.platformPseudo,
764
768
  displayName,
765
769
  styledContext: styledContextValue,
766
- styledContextKeys,
767
770
  } as const
768
771
 
769
772
  const themeName = themeState?.name || ''
@@ -783,7 +786,8 @@ export function createComponent<
783
786
  elementType,
784
787
  startedUnhydrated,
785
788
  debugProp,
786
- animationDriver
789
+ animationDriver,
790
+ styleStaticConfig
787
791
  )
788
792
 
789
793
  const finalizedComponentState = componentState.finalizeStyleFlags(
@@ -957,7 +961,8 @@ export function createComponent<
957
961
  elementType,
958
962
  startedUnhydrated,
959
963
  debugProp,
960
- animationDriver
964
+ animationDriver,
965
+ styleStaticConfig
961
966
  )
962
967
  if (!nextStyles?.style) return false
963
968
 
@@ -1117,7 +1122,8 @@ export function createComponent<
1117
1122
  elementType,
1118
1123
  startedUnhydrated,
1119
1124
  debugProp,
1120
- animationDriver
1125
+ animationDriver,
1126
+ styleStaticConfig
1121
1127
  )
1122
1128
 
1123
1129
  const effectiveTransition =
@@ -2221,6 +2227,11 @@ export function createComponent<
2221
2227
 
2222
2228
  res.staticConfig = staticConfig
2223
2229
 
2230
+ if (displayName) {
2231
+ res.displayName = displayName
2232
+ ;(res as any)[componentDisplayName] = displayName
2233
+ }
2234
+
2224
2235
  return res
2225
2236
  }
2226
2237
 
@@ -1,9 +1,6 @@
1
1
  import React, { type ReactNode, type Ref as ReactRef } from 'react'
2
- import {
3
- componentDisplayName,
4
- setComponentDisplayName,
5
- } from './helpers/componentDisplayName'
6
- import { themeable } from './helpers/themeable'
2
+ import { componentDisplayName } from './helpers/componentDisplayName'
3
+ import { Theme } from './views/Theme'
7
4
  import type {
8
5
  GetFinalProps,
9
6
  StaticConfig,
@@ -11,6 +8,7 @@ import type {
11
8
  StyledHOCOptions,
12
9
  TamaguiComponent,
13
10
  TamaDefer,
11
+ ThemeProps,
14
12
  } from './types'
15
13
 
16
14
  export function createStyledHOC<
@@ -70,18 +68,67 @@ export function createStyledHOC<
70
68
  }
71
69
 
72
70
  let out: any = function StyledHOCComponent(props: any) {
71
+ 'use no memo'
72
+
73
73
  const { ref, ...rest } = props
74
- return render(rest, ref)
75
- }
74
+ if (options?.disableTheme) {
75
+ return render(rest, ref)
76
+ }
77
+
78
+ const defaultTheme = extendedConfig.defaultProps?.theme
79
+ const { theme: _, ...themedRest } = rest
80
+ const element = render({ ...themedRest, 'data-disable-theme': true }, ref)
81
+
82
+ let themeProps: Partial<ThemeProps> | null = null
83
+ if ('debug' in props) {
84
+ themeProps = { debug: props.debug }
85
+ }
86
+ if ('theme' in props || defaultTheme) {
87
+ ;(themeProps ||= {}).name = 'theme' in props ? props.theme : defaultTheme
88
+ }
76
89
 
77
- out = options?.disableTheme ? out : themeable(out, extendedConfig, true)
90
+ // keeping the theme key present with a null value keeps the tree stable
91
+ // across theme changes, while an entirely absent key avoids mounting Theme.
92
+ if (!themeProps) {
93
+ return element
94
+ }
95
+
96
+ const context = extendedConfig.context
97
+ if (!context) {
98
+ return (
99
+ <Theme disable-child-theme {...themeProps}>
100
+ {element}
101
+ </Theme>
102
+ )
103
+ }
104
+
105
+ const contextValue = React.useContext(context)
106
+ let overriddenContextProps: object | undefined
107
+ for (const key in context.props) {
108
+ const value = props[key]
109
+ if (value !== undefined) {
110
+ ;(overriddenContextProps ||= {})[key] = value
111
+ }
112
+ }
113
+ const Provider = context.Provider
114
+ return (
115
+ <Provider {...contextValue} {...overriddenContextProps}>
116
+ <Theme disable-child-theme {...themeProps}>
117
+ {element}
118
+ </Theme>
119
+ </Provider>
120
+ )
121
+ }
78
122
 
79
123
  if (extendedConfig.memo || process.env.TAMAGUI_MEMOIZE_STYLED_HOC) {
80
124
  out = React.memo(out)
81
125
  }
82
126
 
83
127
  const displayName = options?.displayName || (component as any)[componentDisplayName]
84
- setComponentDisplayName(out, displayName)
128
+ if (displayName) {
129
+ out.displayName = displayName
130
+ out[componentDisplayName] = displayName
131
+ }
85
132
 
86
133
  out.staticConfig = extendedConfig
87
134
  return out
@@ -13,7 +13,7 @@ function validateNoTrueTokenKeys(tokens: CreateTokens) {
13
13
  const tokenSet = tokens[category]
14
14
  if (!tokenSet || typeof tokenSet !== 'object') continue
15
15
 
16
- if (Object.prototype.hasOwnProperty.call(tokenSet, 'true')) {
16
+ if ('true' in tokenSet) {
17
17
  throw new Error(
18
18
  `tokens.${category}.true is reserved because boolean values select component defaults. Use an explicit token name instead.`
19
19
  )