@tamagui/core 1.0.1-beta.219 → 1.0.1-beta.221

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 (302) hide show
  1. package/dist/cjs/addTheme.js +7 -10
  2. package/dist/cjs/addTheme.js.map +3 -3
  3. package/dist/cjs/config.js +8 -4
  4. package/dist/cjs/config.js.map +2 -2
  5. package/dist/cjs/{hooks/useUnmountEffect.js → contexts/ButtonNestingContext.js} +7 -9
  6. package/dist/cjs/contexts/ButtonNestingContext.js.map +7 -0
  7. package/dist/cjs/createComponent.js +63 -67
  8. package/dist/cjs/createComponent.js.map +3 -3
  9. package/dist/cjs/createFont.js +11 -4
  10. package/dist/cjs/createFont.js.map +2 -2
  11. package/dist/cjs/createFont.test.js +125 -0
  12. package/dist/cjs/createFont.test.js.map +7 -0
  13. package/dist/cjs/createTamagui.js +13 -12
  14. package/dist/cjs/createTamagui.js.map +2 -2
  15. package/dist/cjs/createTokens.js.map +2 -2
  16. package/dist/cjs/createTokens.test.js +27 -0
  17. package/dist/cjs/createTokens.test.js.map +7 -0
  18. package/dist/cjs/createVariable.js +4 -9
  19. package/dist/cjs/createVariable.js.map +2 -2
  20. package/dist/cjs/createVariable.test.js +7 -0
  21. package/dist/cjs/createVariable.test.js.map +7 -0
  22. package/dist/cjs/createVariables.js +6 -7
  23. package/dist/cjs/createVariables.js.map +2 -2
  24. package/dist/cjs/helpers/ThemeManager.js +161 -147
  25. package/dist/cjs/helpers/ThemeManager.js.map +3 -3
  26. package/dist/cjs/helpers/ThemeManager.test.js +449 -0
  27. package/dist/cjs/helpers/ThemeManager.test.js.map +7 -0
  28. package/dist/cjs/helpers/{getTokens.js → ThemeManagerContext.js} +8 -8
  29. package/dist/cjs/helpers/ThemeManagerContext.js.map +7 -0
  30. package/dist/cjs/helpers/createPropMapper.js +4 -4
  31. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  32. package/dist/cjs/helpers/extendStaticConfig.js +2 -4
  33. package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
  34. package/dist/cjs/helpers/{assignNativePropsToWeb.native.js → getBoundingClientRect.js} +15 -8
  35. package/dist/cjs/helpers/getBoundingClientRect.js.map +7 -0
  36. package/dist/cjs/{hooks/useConstant.js → helpers/getRect.js} +14 -17
  37. package/dist/cjs/helpers/getRect.js.map +7 -0
  38. package/dist/cjs/helpers/getSplitStyles.js +82 -87
  39. package/dist/cjs/helpers/getSplitStyles.js.map +3 -3
  40. package/dist/cjs/helpers/getStylesAtomic.native.js.map +2 -2
  41. package/dist/cjs/helpers/getThemeCSSRules.js +6 -2
  42. package/dist/cjs/helpers/getThemeCSSRules.js.map +2 -2
  43. package/dist/cjs/helpers/insertStyleRule.js +1 -1
  44. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  45. package/dist/cjs/helpers/mergeTransform.js +11 -8
  46. package/dist/cjs/helpers/mergeTransform.js.map +2 -2
  47. package/dist/cjs/helpers/pseudoDescriptors.js +1 -0
  48. package/dist/cjs/helpers/pseudoDescriptors.js.map +2 -2
  49. package/dist/cjs/helpers/themeable.js +9 -9
  50. package/dist/cjs/helpers/themeable.js.map +2 -2
  51. package/dist/cjs/hooks/useElementLayout.js +4 -12
  52. package/dist/cjs/hooks/useElementLayout.js.map +2 -2
  53. package/dist/cjs/hooks/useMedia.js +2 -1
  54. package/dist/cjs/hooks/useMedia.js.map +2 -2
  55. package/dist/cjs/hooks/useTheme.js +114 -156
  56. package/dist/cjs/hooks/useTheme.js.map +3 -3
  57. package/dist/cjs/hooks/{useIsMounted.js → useThemeName.js} +23 -14
  58. package/dist/cjs/hooks/useThemeName.js.map +7 -0
  59. package/dist/cjs/index.js +2 -5
  60. package/dist/cjs/index.js.map +2 -2
  61. package/dist/cjs/setupReactNative.js +20 -7
  62. package/dist/cjs/setupReactNative.js.map +2 -2
  63. package/dist/cjs/styled.js +2 -19
  64. package/dist/cjs/styled.js.map +2 -2
  65. package/dist/cjs/types.js.map +1 -1
  66. package/dist/cjs/updateTheme.js +9 -9
  67. package/dist/cjs/updateTheme.js.map +2 -2
  68. package/dist/cjs/views/TamaguiProvider.js +3 -3
  69. package/dist/cjs/views/TamaguiProvider.js.map +2 -2
  70. package/dist/cjs/views/Theme.js +39 -28
  71. package/dist/cjs/views/Theme.js.map +3 -3
  72. package/dist/cjs/views/ThemeInverse.js +4 -2
  73. package/dist/cjs/views/ThemeInverse.js.map +2 -2
  74. package/dist/cjs/views/ThemeProvider.js +8 -33
  75. package/dist/cjs/views/ThemeProvider.js.map +3 -3
  76. package/dist/esm/addTheme.js +7 -10
  77. package/dist/esm/addTheme.js.map +3 -3
  78. package/dist/esm/config.js +8 -3
  79. package/dist/esm/config.js.map +2 -2
  80. package/dist/esm/contexts/ButtonNestingContext.js +6 -0
  81. package/dist/esm/contexts/ButtonNestingContext.js.map +7 -0
  82. package/dist/esm/createComponent.js +65 -70
  83. package/dist/esm/createComponent.js.map +3 -3
  84. package/dist/esm/createFont.js +11 -4
  85. package/dist/esm/createFont.js.map +2 -2
  86. package/dist/esm/createFont.test.js +124 -0
  87. package/dist/esm/createFont.test.js.map +7 -0
  88. package/dist/esm/createTamagui.js +13 -12
  89. package/dist/esm/createTamagui.js.map +2 -2
  90. package/dist/esm/createTokens.js.map +2 -2
  91. package/dist/esm/createTokens.test.js +26 -0
  92. package/dist/esm/createTokens.test.js.map +7 -0
  93. package/dist/esm/createVariable.js +4 -9
  94. package/dist/esm/createVariable.js.map +2 -2
  95. package/dist/esm/createVariable.test.js +6 -0
  96. package/dist/esm/createVariable.test.js.map +7 -0
  97. package/dist/esm/createVariables.js +6 -7
  98. package/dist/esm/createVariables.js.map +2 -2
  99. package/dist/esm/helpers/ThemeManager.js +140 -144
  100. package/dist/esm/helpers/ThemeManager.js.map +3 -3
  101. package/dist/esm/helpers/ThemeManager.test.js +448 -0
  102. package/dist/esm/helpers/ThemeManager.test.js.map +7 -0
  103. package/dist/esm/helpers/ThemeManagerContext.js +6 -0
  104. package/dist/esm/helpers/ThemeManagerContext.js.map +7 -0
  105. package/dist/esm/helpers/createPropMapper.js +4 -4
  106. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  107. package/dist/esm/helpers/extendStaticConfig.js +2 -4
  108. package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
  109. package/dist/esm/helpers/getBoundingClientRect.js +13 -0
  110. package/dist/esm/helpers/getBoundingClientRect.js.map +7 -0
  111. package/dist/esm/helpers/getRect.js +12 -0
  112. package/dist/esm/helpers/getRect.js.map +7 -0
  113. package/dist/esm/helpers/getSplitStyles.js +90 -89
  114. package/dist/esm/helpers/getSplitStyles.js.map +3 -3
  115. package/dist/esm/helpers/getStylesAtomic.native.js.map +2 -2
  116. package/dist/esm/helpers/getThemeCSSRules.js +6 -2
  117. package/dist/esm/helpers/getThemeCSSRules.js.map +2 -2
  118. package/dist/esm/helpers/insertStyleRule.js +1 -1
  119. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  120. package/dist/esm/helpers/mergeTransform.js +8 -6
  121. package/dist/esm/helpers/mergeTransform.js.map +2 -2
  122. package/dist/esm/helpers/pseudoDescriptors.js +1 -0
  123. package/dist/esm/helpers/pseudoDescriptors.js.map +2 -2
  124. package/dist/esm/helpers/themeable.js +9 -9
  125. package/dist/esm/helpers/themeable.js.map +2 -2
  126. package/dist/esm/hooks/useElementLayout.js +2 -9
  127. package/dist/esm/hooks/useElementLayout.js.map +2 -2
  128. package/dist/esm/hooks/useMedia.js +3 -2
  129. package/dist/esm/hooks/useMedia.js.map +2 -2
  130. package/dist/esm/hooks/useTheme.js +114 -159
  131. package/dist/esm/hooks/useTheme.js.map +3 -3
  132. package/dist/esm/hooks/useThemeName.js +25 -0
  133. package/dist/esm/hooks/useThemeName.js.map +7 -0
  134. package/dist/esm/index.js +3 -5
  135. package/dist/esm/index.js.map +2 -2
  136. package/dist/esm/setupReactNative.js +18 -6
  137. package/dist/esm/setupReactNative.js.map +2 -2
  138. package/dist/esm/styled.js +3 -20
  139. package/dist/esm/styled.js.map +2 -2
  140. package/dist/esm/updateTheme.js +9 -9
  141. package/dist/esm/updateTheme.js.map +2 -2
  142. package/dist/esm/views/TamaguiProvider.js +4 -4
  143. package/dist/esm/views/TamaguiProvider.js.map +2 -2
  144. package/dist/esm/views/Theme.js +40 -29
  145. package/dist/esm/views/Theme.js.map +3 -3
  146. package/dist/esm/views/ThemeInverse.js +4 -2
  147. package/dist/esm/views/ThemeInverse.js.map +2 -2
  148. package/dist/esm/views/ThemeProvider.js +8 -27
  149. package/dist/esm/views/ThemeProvider.js.map +2 -2
  150. package/package.json +13 -13
  151. package/src/__snapshots__/createTokens.test.ts.snap +877 -0
  152. package/src/addTheme.ts +9 -12
  153. package/src/config.ts +10 -2
  154. package/src/contexts/ButtonNestingContext.tsx +3 -0
  155. package/src/createComponent.tsx +117 -108
  156. package/src/createFont.test.ts +129 -0
  157. package/src/createFont.ts +12 -5
  158. package/src/createTamagui.ts +16 -14
  159. package/src/createTokens.test.ts +29 -0
  160. package/src/createTokens.ts +1 -1
  161. package/src/createVariable.test.ts +7 -0
  162. package/src/createVariable.ts +4 -10
  163. package/src/createVariables.ts +7 -7
  164. package/src/helpers/ThemeManager.test.tsx +480 -0
  165. package/src/helpers/ThemeManager.tsx +171 -166
  166. package/src/helpers/ThemeManagerContext.tsx +5 -0
  167. package/src/helpers/createPropMapper.ts +4 -4
  168. package/src/helpers/extendStaticConfig.ts +4 -4
  169. package/src/helpers/getBoundingClientRect.tsx +7 -0
  170. package/src/helpers/getRect.tsx +8 -0
  171. package/src/helpers/getSplitStyles.tsx +98 -94
  172. package/src/helpers/getStylesAtomic.native.ts +1 -0
  173. package/src/helpers/getThemeCSSRules.ts +9 -2
  174. package/src/helpers/insertStyleRule.tsx +2 -2
  175. package/src/helpers/mergeTransform.ts +13 -6
  176. package/src/helpers/pseudoDescriptors.ts +1 -0
  177. package/src/helpers/themeable.tsx +17 -9
  178. package/src/hooks/useElementLayout.tsx +3 -8
  179. package/src/hooks/useMedia.tsx +3 -3
  180. package/src/hooks/useTheme.tsx +138 -211
  181. package/src/hooks/useThemeName.tsx +25 -0
  182. package/src/index.ts +3 -4
  183. package/src/setupReactNative.ts +16 -5
  184. package/src/styled.tsx +4 -23
  185. package/src/types.tsx +42 -17
  186. package/src/updateTheme.ts +12 -9
  187. package/src/views/TamaguiProvider.tsx +5 -5
  188. package/src/views/Theme.tsx +48 -39
  189. package/src/views/ThemeProvider.tsx +11 -33
  190. package/types/Tamagui.d.ts +1 -1
  191. package/types/addTheme.d.ts +23 -2
  192. package/types/config.d.ts +0 -1
  193. package/types/contexts/ButtonNestingContext.d.ts +3 -0
  194. package/types/createFont.test.d.ts +2 -0
  195. package/types/createTokens.test.d.ts +2 -0
  196. package/types/createVariable.d.ts +2 -2
  197. package/types/createVariable.test.d.ts +2 -0
  198. package/types/helpers/ThemeManager.d.ts +20 -30
  199. package/types/helpers/ThemeManager.test.d.ts +2 -0
  200. package/types/helpers/ThemeManagerContext.d.ts +4 -0
  201. package/types/helpers/getBoundingClientRect.d.ts +2 -0
  202. package/types/helpers/getRect.d.ts +9 -0
  203. package/types/helpers/insertStyleRule.d.ts +1 -1
  204. package/types/helpers/mergeTransform.d.ts +5 -3
  205. package/types/helpers/themeable.d.ts +3 -0
  206. package/types/hooks/useElementLayout.d.ts +0 -8
  207. package/types/hooks/useTheme.d.ts +10 -20
  208. package/types/hooks/useThemeName.d.ts +5 -0
  209. package/types/index.d.ts +3 -4
  210. package/types/setupReactNative.d.ts +4 -2
  211. package/types/types.d.ts +35 -10
  212. package/types/updateTheme.d.ts +23 -2
  213. package/types/views/Theme.d.ts +3 -4
  214. package/dist/cjs/constants/platform.js +0 -74
  215. package/dist/cjs/constants/platform.js.map +0 -7
  216. package/dist/cjs/constants/platform.native.js +0 -62
  217. package/dist/cjs/constants/platform.native.js.map +0 -7
  218. package/dist/cjs/helpers/assignNativePropsToWeb.js +0 -188
  219. package/dist/cjs/helpers/assignNativePropsToWeb.js.map +0 -7
  220. package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +0 -7
  221. package/dist/cjs/helpers/calc.js +0 -71
  222. package/dist/cjs/helpers/calc.js.map +0 -7
  223. package/dist/cjs/helpers/getFont.js +0 -66
  224. package/dist/cjs/helpers/getFont.js.map +0 -7
  225. package/dist/cjs/helpers/getStackSize.js +0 -46
  226. package/dist/cjs/helpers/getStackSize.js.map +0 -7
  227. package/dist/cjs/helpers/getTokens.js.map +0 -7
  228. package/dist/cjs/helpers/startTransition.js +0 -36
  229. package/dist/cjs/helpers/startTransition.js.map +0 -7
  230. package/dist/cjs/helpers/validate.js +0 -2
  231. package/dist/cjs/helpers/validate.js.map +0 -7
  232. package/dist/cjs/hooks/useConstant.js.map +0 -7
  233. package/dist/cjs/hooks/useIsMounted.js.map +0 -7
  234. package/dist/cjs/hooks/usePressable.js +0 -36
  235. package/dist/cjs/hooks/usePressable.js.map +0 -7
  236. package/dist/cjs/hooks/useUnmountEffect.js.map +0 -7
  237. package/dist/cjs/injectStyles.js +0 -40
  238. package/dist/cjs/injectStyles.js.map +0 -7
  239. package/dist/cjs/react-native.js +0 -22
  240. package/dist/cjs/react-native.js.map +0 -7
  241. package/dist/esm/constants/platform.js +0 -39
  242. package/dist/esm/constants/platform.js.map +0 -7
  243. package/dist/esm/constants/platform.native.js +0 -28
  244. package/dist/esm/constants/platform.native.js.map +0 -7
  245. package/dist/esm/helpers/assignNativePropsToWeb.js +0 -164
  246. package/dist/esm/helpers/assignNativePropsToWeb.js.map +0 -7
  247. package/dist/esm/helpers/assignNativePropsToWeb.native.js +0 -6
  248. package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +0 -7
  249. package/dist/esm/helpers/calc.js +0 -47
  250. package/dist/esm/helpers/calc.js.map +0 -7
  251. package/dist/esm/helpers/getFont.js +0 -42
  252. package/dist/esm/helpers/getFont.js.map +0 -7
  253. package/dist/esm/helpers/getStackSize.js +0 -22
  254. package/dist/esm/helpers/getStackSize.js.map +0 -7
  255. package/dist/esm/helpers/getTokens.js +0 -6
  256. package/dist/esm/helpers/getTokens.js.map +0 -7
  257. package/dist/esm/helpers/startTransition.js +0 -6
  258. package/dist/esm/helpers/startTransition.js.map +0 -7
  259. package/dist/esm/helpers/validate.js +0 -1
  260. package/dist/esm/helpers/validate.js.map +0 -7
  261. package/dist/esm/hooks/useConstant.js +0 -15
  262. package/dist/esm/hooks/useConstant.js.map +0 -7
  263. package/dist/esm/hooks/useIsMounted.js +0 -16
  264. package/dist/esm/hooks/useIsMounted.js.map +0 -7
  265. package/dist/esm/hooks/usePressable.js +0 -12
  266. package/dist/esm/hooks/usePressable.js.map +0 -7
  267. package/dist/esm/hooks/useUnmountEffect.js +0 -8
  268. package/dist/esm/hooks/useUnmountEffect.js.map +0 -7
  269. package/dist/esm/injectStyles.js +0 -16
  270. package/dist/esm/injectStyles.js.map +0 -7
  271. package/dist/esm/react-native.js +0 -3
  272. package/dist/esm/react-native.js.map +0 -7
  273. package/src/contexts/ButtonInsideButtonContext.tsx +0 -3
  274. package/src/contexts/ThemeContext.tsx +0 -5
  275. package/src/helpers/areEqualSets.tsx +0 -9
  276. package/src/views/ThemeInverse.tsx +0 -40
  277. package/src/views/ThemeReset.tsx +0 -43
  278. package/types/constants/platform.d.ts +0 -13
  279. package/types/constants/platform.native.d.ts +0 -13
  280. package/types/contexts/ButtonInsideButtonContext.d.ts +0 -3
  281. package/types/contexts/ThemeContext.d.ts +0 -7
  282. package/types/helpers/areEqualSets.d.ts +0 -2
  283. package/types/helpers/assignNativePropsToWeb.d.ts +0 -2
  284. package/types/helpers/assignNativePropsToWeb.native.d.ts +0 -2
  285. package/types/helpers/calc.d.ts +0 -1
  286. package/types/helpers/getFont.d.ts +0 -3
  287. package/types/helpers/getStackSize.d.ts +0 -8
  288. package/types/helpers/getTokens.d.ts +0 -2
  289. package/types/helpers/startTransition.d.ts +0 -3
  290. package/types/helpers/validate.d.ts +0 -1
  291. package/types/hooks/useConstant.d.ts +0 -2
  292. package/types/hooks/useIsMounted.d.ts +0 -3
  293. package/types/hooks/useMedia.test.d.ts +0 -1
  294. package/types/hooks/usePressable.d.ts +0 -3
  295. package/types/hooks/usePressablePressResponder.d.ts +0 -84
  296. package/types/hooks/useUnmountEffect.d.ts +0 -2
  297. package/types/injectStyles.d.ts +0 -7
  298. package/types/react-native.d.ts +0 -8
  299. package/types/views/AbsoluteFill.d.ts +0 -5
  300. package/types/views/AbsoluteFill.native.d.ts +0 -3
  301. package/types/views/ThemeInverse.d.ts +0 -9
  302. package/types/views/ThemeReset.d.ts +0 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/ThemeManager.tsx"],
4
- "sourcesContent": ["import { createContext } from 'react'\n\nimport { getThemes } from '../config'\nimport { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from '../constants/constants'\nimport { getThemeUnwrapped } from '../hooks/getThemeUnwrapped'\nimport { ThemeParsed, Themes } from '../types'\n\ntype ThemeListener = (name: string | null, themeManager: ThemeManager) => void\n\nexport type SetActiveThemeProps = {\n className?: string\n parentManager?: ThemeManager | null\n name?: string | null\n theme?: any\n}\n\nexport type GetNextThemeProps = {\n themes?: Themes\n name?: string | null\n componentName?: string | null\n reset?: boolean\n}\n\nexport class ThemeManager {\n keys = new Map<any, Set<string>>()\n listeners = new Map<any, Function>()\n themeListeners = new Set<ThemeListener>()\n\n constructor(\n public name: string = '',\n public className: string = '',\n public theme: ThemeParsed | null = null,\n public parentManager: ThemeManager | null = null,\n public reset: boolean = false\n ) {\n // find the nearest different parentManager\n let parent = parentManager\n let tries = 0\n while (true) {\n tries++\n if (tries > 10) {\n throw new Error(`Nested 10 of the same theme in a row, likely error`)\n }\n if (!parent) break\n if (parent.name === name) {\n // go up if same\n parent = parent.parentManager\n } else {\n this.parentManager = parent\n break\n }\n }\n }\n\n get didChangeTheme() {\n return this.parentManager && this.name !== this.parentManager.fullName\n }\n\n get parentName() {\n return this.parentManager?.name || null\n }\n\n get fullName(): string {\n return this.getNextTheme().name || this.name || ''\n // const parentName = this.parentManager?.fullName || ''\n // const name = this.name || ''\n // const parts = [...new Set([...`${parentName}_${name}`.split('_')])].filter(Boolean)\n // return parts.join('_')\n }\n\n // gets value going up to parents\n getValue(key: string) {\n let theme = this.theme\n let manager = this as ThemeManager | null\n while (true) {\n if (!theme) return\n if (key in theme) {\n return theme[key]\n }\n manager = this.parentManager\n if (!manager || manager.theme === theme) {\n return\n }\n theme = manager.theme\n }\n }\n\n isTracking(uuid: Object) {\n return Boolean(this.keys.get(uuid)?.size)\n }\n\n update({ name, theme, className }: SetActiveThemeProps = {}, force = false, notify = true) {\n if (!force) {\n // className compare on web, avoids light/dark re-renders\n const nameChanged = name !== this.name\n if (!nameChanged) {\n return false\n }\n }\n this.className = className || ''\n this.name = name || ''\n this.theme = theme\n if (notify) {\n this.notify()\n }\n return true\n }\n\n getNextTheme(\n props: GetNextThemeProps = {},\n debug?: any\n ): {\n name: string\n theme: ThemeParsed | null\n className: string | undefined\n } {\n const { themes = getThemes(), name, componentName } = props\n\n if (props.reset && name) {\n return {\n name: name,\n theme: themes[name] as ThemeParsed,\n className: this.getCN(name),\n }\n }\n\n const parentIsReset = this.parentManager?.reset\n\n if (!name) {\n if (componentName) {\n // allow for _Card_Button or just _Button\n const names = [\n `${this.name}_${componentName}`,\n `${withoutComponentName(this.name)}_${componentName}`,\n ]\n for (const name of names) {\n if (name in themes) {\n const className = this.getCN(name)\n return { name, theme: themes[name], className }\n }\n }\n }\n return {\n name: this.name,\n theme: this.theme,\n className: this.className,\n }\n }\n\n let nextName = name || this.name || ''\n let parentName = parentIsReset ? this.parentName || this.fullName : this.fullName\n\n while (true) {\n if (nextName in themes) break\n nextName = `${parentName}_${name}`\n if (nextName in themes) break\n // this is fine - some themes can not have parents\n if (!parentName.includes(THEME_NAME_SEPARATOR)) break\n // go up one\n parentName = parentName.slice(0, parentName.lastIndexOf(THEME_NAME_SEPARATOR))\n }\n\n if (componentName) {\n // allow for _Card_Button or just _Button\n const names = [\n `${nextName}_${componentName}`,\n `${withoutComponentName(nextName)}_${componentName}`,\n ]\n for (const name of names) {\n if (name in themes) {\n nextName = name\n }\n }\n }\n\n let theme = themes[nextName]\n if (!theme) {\n theme = themes[`light_${nextName}`]\n }\n\n if (process.env.NODE_ENV === 'development') {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log('getNextTheme', this.getCN(nextName), { props, nextName, parentName })\n }\n }\n\n return {\n name: nextName,\n theme: getThemeUnwrapped(theme),\n className: this.getCN(nextName),\n }\n }\n\n getCN(name: string) {\n return `${THEME_CLASSNAME_PREFIX}${name} t_Theme`.replace('light_', '').replace('dark_', '')\n }\n\n track(uuid: any, keys: Set<string>) {\n if (!this.name) return\n this.keys.set(uuid, keys)\n }\n\n notify() {\n if (!this.name) {\n this.keys.clear()\n }\n for (const [uuid, keys] of this.keys.entries()) {\n if (keys.size) {\n this.listeners.get(uuid)?.()\n }\n }\n this.themeListeners.forEach((cb) => cb(this.name, this))\n }\n\n onChangeTheme(cb: ThemeListener) {\n this.themeListeners.add(cb)\n return () => {\n this.themeListeners.delete(cb)\n }\n }\n}\n\nexport const ThemeManagerContext = createContext<ThemeManager | null>(null)\nexport const emptyManager = new ThemeManager()\n\nconst withoutComponentName = (name: string) => name.replace(/(\\_[A-Z][a-zA-Z]+)+$/g, '')\n"],
5
- "mappings": "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",
6
- "names": ["name"]
4
+ "sourcesContent": ["import { isWeb } from '@tamagui/constants'\n\nimport { getThemes } from '../config'\nimport { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from '../constants/constants'\nimport { getThemeUnwrapped } from '../hooks/getThemeUnwrapped'\nimport { ThemeParsed, ThemeProps } from '../types'\n\ntype ThemeListener = (name: string | null, themeManager: ThemeManager) => void\n\nexport type SetActiveThemeProps = {\n className?: string\n parentManager?: ThemeManager | null\n name?: string | null\n theme?: any\n reset?: boolean\n}\n\nexport type ThemeManagerState = {\n name: string\n theme?: ThemeParsed | null\n className?: string\n parentName?: string\n}\n\nconst emptyState: ThemeManagerState = { name: '' }\n\nexport function hasNoThemeUpdatingProps(props: ThemeProps) {\n return !props.name && !props.componentName && !props.inverse && !props.reset\n}\n\nexport class ThemeManager {\n themeListeners = new Set<ThemeListener>()\n parentManager: ThemeManager | null = null\n state: ThemeManagerState = emptyState\n\n constructor(\n public props: ThemeProps = {},\n parentManager?: ThemeManager | 'root' | null | undefined\n ) {\n if (parentManager === 'root') {\n this.updateState(props, false)\n return\n }\n if (!parentManager) {\n throw new Error(`Must set up root first`)\n }\n // no change no props\n if (hasNoThemeUpdatingProps(props)) {\n return parentManager\n }\n if (parentManager) {\n this.parentManager = parentManager\n }\n const updatedState = this.getStateIfChanged(props)\n if (updatedState) {\n this.state = updatedState\n return\n }\n return parentManager || this\n }\n\n updateState(props: ThemeProps & { forceTheme?: ThemeParsed } = this.props || {}, notify = true) {\n const shouldFlush = (() => {\n if (props.forceTheme) {\n this.state.theme = props.forceTheme\n this.state.name = props.name || ''\n return true\n }\n const nextState = this.getStateIfChanged(props)\n if (nextState) {\n this.state = nextState\n return true\n }\n })()\n if (shouldFlush) {\n // reset any derived state\n this.#allKeys = null\n notify && this.notify()\n return this.state\n }\n }\n\n getStateIfChanged(props = this.props, state = this.state, parentManager = this.parentManager) {\n const _ =\n getState(props, parentManager) ||\n (process.env.TAMAGUI_TARGET === 'native' ? parentManager?.state : undefined)\n if (!_ || !_.theme || _.theme === state.theme) {\n return null\n }\n return _\n }\n\n getState(props = this.props) {\n return getState(props, this.parentManager)\n }\n\n #allKeys: Set<string> | null = null\n get allKeys() {\n this.#allKeys ??= new Set([\n ...(this.parentManager?.allKeys || []),\n ...Object.keys(this.state.theme || {}),\n ])\n return this.#allKeys\n }\n\n // gets value going up to parents\n getValue(key: string, state?: ThemeManagerState) {\n let theme = (state || this.state).theme\n let manager = this as ThemeManager | null\n while (theme && manager) {\n if (key in theme) {\n return theme[key]\n }\n manager = manager.parentManager\n theme = manager?.state.theme\n }\n }\n\n notify() {\n this.themeListeners.forEach((cb) => cb(this.state.name, this))\n }\n\n onChangeTheme(cb: ThemeListener) {\n this.themeListeners.add(cb)\n return () => {\n this.themeListeners.delete(cb)\n }\n }\n}\n\nfunction getNextThemeClassName(name: string, isInverting = false) {\n const next = `${THEME_CLASSNAME_PREFIX}${name}`\n if (isInverting) {\n return next\n }\n return next.replace('light_', '').replace('dark_', '')\n}\n\nfunction getState(\n props: ThemeProps,\n parentManager?: ThemeManager | null\n): ThemeManagerState | null {\n const themes = getThemes()\n\n if (props.name && props.reset) {\n throw new Error(`Cannot reset + set new name`)\n }\n if (props.reset && !parentManager?.parentManager) {\n throw new Error(`Cannot reset no grandparent exists`)\n }\n\n const nextName = props.reset ? parentManager?.parentManager?.state?.name || '' : props.name || ''\n const { componentName } = props\n const parentName = parentManager?.state?.name || ''\n\n // components look for most specific, fallback upwards\n const base = parentName.split(THEME_NAME_SEPARATOR)\n const lastSegment = base[base.length - 1]\n const isParentAComponentTheme = parentName && lastSegment[0].toUpperCase() === lastSegment[0]\n if (isParentAComponentTheme) {\n base.pop() // always remove componentName they can't nest\n }\n const parentBaseTheme = isParentAComponentTheme\n ? base.slice(0, base.length).join(THEME_NAME_SEPARATOR)\n : parentName\n const max = base.length\n const min = componentName\n ? max // component themes don't search upwards\n : 0\n\n // prettier-ignore\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') console.log('getState', props, { parentName, parentBaseTheme, base, min, max, isParentAComponentTheme, parentManager })\n\n for (let i = max; i >= min; i--) {\n let prefix = base.slice(0, i).join(THEME_NAME_SEPARATOR)\n if (props.inverse) {\n prefix = inverseThemeName(prefix)\n }\n const potentials: string[] = []\n if (prefix && prefix !== parentBaseTheme) {\n potentials.push(prefix)\n }\n if (nextName) {\n potentials.unshift(prefix ? `${prefix}_${nextName}` : nextName)\n }\n if (i === 1) {\n const lastSegment = potentials.findIndex((x) => !x.includes('_'))\n if (lastSegment > 0) {\n potentials.splice(lastSegment, 0, nextName) // last try prefer our new name to parent\n }\n }\n if (componentName) {\n // components only look for component themes\n if (nextName) {\n potentials.push(`${prefix.replace(/_.*$/, '')}_${nextName}_${componentName}`)\n }\n potentials.push(`${prefix}_${componentName}`)\n if (nextName) {\n potentials.unshift(`${prefix}_${nextName}_${componentName}`)\n }\n }\n\n // prettier-ignore\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') console.log('getState potentials', potentials)\n\n const found = potentials.find((t) => t in themes)\n if (found) {\n // optimization return null if not changed\n if (found === parentName) {\n return null\n }\n const theme = themes[found]\n return {\n // need to put concurrent safe things here\n name: found,\n theme: getThemeUnwrapped(theme),\n className: getNextThemeClassName(found, props.inverse),\n parentName,\n }\n }\n }\n\n return null\n}\n\nconst inverseThemeName = (themeName: string) => {\n return themeName.startsWith('light')\n ? themeName.replace(/^light/, 'dark')\n : themeName.replace(/^dark/, 'light')\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_constants", "lastSegment"]
7
7
  }
@@ -0,0 +1,449 @@
1
+ "use strict";
2
+ var import_config_default_node = require("@tamagui/config-default-node");
3
+ var import_vitest = require("vitest");
4
+ var import_createTamagui = require("../createTamagui");
5
+ var import_ThemeManager = require("./ThemeManager");
6
+ const conf = (0, import_config_default_node.getDefaultTamaguiConfig)();
7
+ (0, import_vitest.describe)("ThemeManager", () => {
8
+ (0, import_vitest.beforeAll)(() => {
9
+ (0, import_createTamagui.createTamagui)(conf);
10
+ });
11
+ (0, import_vitest.test)("Changes theme to dark", () => {
12
+ const manager = new import_ThemeManager.ThemeManager(
13
+ {
14
+ name: "dark"
15
+ },
16
+ "root"
17
+ );
18
+ (0, import_vitest.expect)(manager.state.name).toBe("dark");
19
+ });
20
+ (0, import_vitest.test)('Given parent theme "dark" and child theme "red" to return theme "dark_red"', () => {
21
+ const parent = new import_ThemeManager.ThemeManager(
22
+ {
23
+ name: "dark"
24
+ },
25
+ "root"
26
+ );
27
+ const child = new import_ThemeManager.ThemeManager(
28
+ {
29
+ name: "red"
30
+ },
31
+ parent
32
+ );
33
+ (0, import_vitest.expect)(parent.state.name).toBe("dark");
34
+ (0, import_vitest.expect)(child.state.name).toBe("dark_red");
35
+ });
36
+ (0, import_vitest.test)('Given parent theme "dark", child theme "red_alt2" and component "Button" returns "dark_red_alt2_Button"', () => {
37
+ const parent = new import_ThemeManager.ThemeManager(
38
+ {
39
+ name: "dark"
40
+ },
41
+ "root"
42
+ );
43
+ const child1 = new import_ThemeManager.ThemeManager(
44
+ {
45
+ name: "red"
46
+ },
47
+ parent
48
+ );
49
+ (0, import_vitest.expect)(child1.state.name).toBe("dark_red");
50
+ const child2 = new import_ThemeManager.ThemeManager(
51
+ {
52
+ name: "alt2",
53
+ componentName: "Button"
54
+ },
55
+ child1
56
+ );
57
+ (0, import_vitest.expect)(child2.state.name).toBe("dark_red_alt2_Button");
58
+ });
59
+ (0, import_vitest.test)('Given parent theme "dark", child theme "red" and component "Button" returns "dark_red_Button"', () => {
60
+ const parent = new import_ThemeManager.ThemeManager(
61
+ {
62
+ name: "dark"
63
+ },
64
+ "root"
65
+ );
66
+ const child1 = new import_ThemeManager.ThemeManager(
67
+ {
68
+ name: "red"
69
+ },
70
+ parent
71
+ );
72
+ (0, import_vitest.expect)(child1.state.name).toBe("dark_red");
73
+ const child2 = new import_ThemeManager.ThemeManager(
74
+ {
75
+ componentName: "Button"
76
+ },
77
+ child1
78
+ );
79
+ (0, import_vitest.expect)(child2.state.name).toBe("dark_red_Button");
80
+ });
81
+ (0, import_vitest.test)('Given parent theme "dark", child theme "red" and missing component "Card" returns "dark_red"', () => {
82
+ const parent = new import_ThemeManager.ThemeManager(
83
+ {
84
+ name: "dark"
85
+ },
86
+ "root"
87
+ );
88
+ const child1 = new import_ThemeManager.ThemeManager(
89
+ {
90
+ name: "red"
91
+ },
92
+ parent
93
+ );
94
+ (0, import_vitest.expect)(child1.state.name).toBe("dark_red");
95
+ const child2 = new import_ThemeManager.ThemeManager(
96
+ {
97
+ componentName: "Card"
98
+ },
99
+ child1
100
+ );
101
+ (0, import_vitest.expect)(child2.state.name).toBe("dark_red");
102
+ });
103
+ (0, import_vitest.test)('Changes "light" to "dark"', () => {
104
+ const parent = new import_ThemeManager.ThemeManager(
105
+ {
106
+ name: "light"
107
+ },
108
+ "root"
109
+ );
110
+ const child = new import_ThemeManager.ThemeManager(
111
+ {
112
+ name: "dark"
113
+ },
114
+ parent
115
+ );
116
+ (0, import_vitest.expect)(parent.state.name).toBe("light");
117
+ (0, import_vitest.expect)(child.state.name).toBe("dark");
118
+ });
119
+ (0, import_vitest.test)('Inverts "light" to "dark"', () => {
120
+ const parent = new import_ThemeManager.ThemeManager(
121
+ {
122
+ name: "light"
123
+ },
124
+ "root"
125
+ );
126
+ const child1 = new import_ThemeManager.ThemeManager(
127
+ {
128
+ inverse: true
129
+ },
130
+ parent
131
+ );
132
+ (0, import_vitest.expect)(child1.state.name).toBe("dark");
133
+ });
134
+ (0, import_vitest.test)('Inverts "light_red" to "dark_red"', () => {
135
+ const parent = new import_ThemeManager.ThemeManager(
136
+ {
137
+ name: "light"
138
+ },
139
+ "root"
140
+ );
141
+ const child1 = new import_ThemeManager.ThemeManager(
142
+ {
143
+ name: "red",
144
+ inverse: true
145
+ },
146
+ parent
147
+ );
148
+ (0, import_vitest.expect)(child1.state.name).toBe("dark_red");
149
+ });
150
+ (0, import_vitest.test)("Updates state", () => {
151
+ const parent = new import_ThemeManager.ThemeManager(
152
+ {
153
+ name: "light"
154
+ },
155
+ "root"
156
+ );
157
+ const newState = parent.updateState({
158
+ name: "dark"
159
+ });
160
+ (0, import_vitest.expect)(newState).toMatchInlineSnapshot(`
161
+ {
162
+ "className": "t_dark",
163
+ "name": "dark",
164
+ "parentName": "",
165
+ "theme": {
166
+ "background": {
167
+ "isVar": true,
168
+ "key": "color-2",
169
+ "name": "background",
170
+ "val": "#000",
171
+ "variable": "",
172
+ },
173
+ "color": {
174
+ "isVar": true,
175
+ "key": "color-1",
176
+ "name": "color",
177
+ "val": "#fff",
178
+ "variable": "",
179
+ },
180
+ },
181
+ }
182
+ `);
183
+ (0, import_vitest.expect)(parent.state.name).toBe("dark");
184
+ });
185
+ (0, import_vitest.test)("Returns parent on empty", () => {
186
+ const parent = new import_ThemeManager.ThemeManager(
187
+ {
188
+ name: "light"
189
+ },
190
+ "root"
191
+ );
192
+ const child = new import_ThemeManager.ThemeManager(
193
+ {
194
+ name: null
195
+ },
196
+ parent
197
+ );
198
+ (0, import_vitest.expect)(child).toBe(parent);
199
+ });
200
+ (0, import_vitest.test)("Resets theme", () => {
201
+ const parent = new import_ThemeManager.ThemeManager(
202
+ {
203
+ name: "light"
204
+ },
205
+ "root"
206
+ );
207
+ const child = new import_ThemeManager.ThemeManager(
208
+ {
209
+ name: "dark"
210
+ },
211
+ parent
212
+ );
213
+ (0, import_vitest.expect)(child.state.name).toBe("dark");
214
+ (0, import_vitest.expect)(child.parentManager).toBe(parent);
215
+ const child2 = new import_ThemeManager.ThemeManager(
216
+ {
217
+ reset: true
218
+ },
219
+ child
220
+ );
221
+ (0, import_vitest.expect)(child2.parentManager).toBe(child);
222
+ (0, import_vitest.expect)(child2.state.name).toBe("light");
223
+ });
224
+ (0, import_vitest.test)("Nested invert and reset", () => {
225
+ const parent = new import_ThemeManager.ThemeManager(
226
+ {
227
+ name: "light"
228
+ },
229
+ "root"
230
+ );
231
+ const child = new import_ThemeManager.ThemeManager(
232
+ {
233
+ name: "dark"
234
+ },
235
+ parent
236
+ );
237
+ const child2 = new import_ThemeManager.ThemeManager(
238
+ {
239
+ reset: true
240
+ },
241
+ child
242
+ );
243
+ const child3 = new import_ThemeManager.ThemeManager(
244
+ {
245
+ inverse: true
246
+ },
247
+ child2
248
+ );
249
+ (0, import_vitest.expect)(child3.state.name).toBe("dark");
250
+ });
251
+ (0, import_vitest.test)("Updates from null the new theme nested 3 themes", () => {
252
+ const a = new import_ThemeManager.ThemeManager(
253
+ {
254
+ name: "dark"
255
+ },
256
+ "root"
257
+ );
258
+ const b = new import_ThemeManager.ThemeManager(
259
+ {
260
+ name: "red"
261
+ },
262
+ a
263
+ );
264
+ (0, import_vitest.expect)(b.state.name).toBe("dark_red");
265
+ const c = new import_ThemeManager.ThemeManager(
266
+ {
267
+ name: "alt2"
268
+ },
269
+ b
270
+ );
271
+ (0, import_vitest.expect)(c.state.name).toBe("dark_red_alt2");
272
+ });
273
+ (0, import_vitest.test)("Ignored dup themes", () => {
274
+ const a = new import_ThemeManager.ThemeManager(
275
+ {
276
+ name: "dark"
277
+ },
278
+ "root"
279
+ );
280
+ const b = new import_ThemeManager.ThemeManager(
281
+ {
282
+ name: "dark"
283
+ },
284
+ a
285
+ );
286
+ (0, import_vitest.expect)(b === a).toBe(true);
287
+ });
288
+ (0, import_vitest.test)("Nested component themes fallback to grandparents", () => {
289
+ const parent = new import_ThemeManager.ThemeManager(
290
+ {
291
+ name: "dark"
292
+ },
293
+ "root"
294
+ );
295
+ const child = new import_ThemeManager.ThemeManager(
296
+ {
297
+ name: "red",
298
+ componentName: "Button"
299
+ },
300
+ parent
301
+ );
302
+ const child2 = new import_ThemeManager.ThemeManager(
303
+ {
304
+ name: "blue"
305
+ },
306
+ child
307
+ );
308
+ (0, import_vitest.expect)(child2.state.name).toBe("dark_blue");
309
+ const child3 = new import_ThemeManager.ThemeManager(
310
+ {
311
+ componentName: "Button"
312
+ },
313
+ child2
314
+ );
315
+ (0, import_vitest.expect)(child3.state.name).toBe("dark_blue_Button");
316
+ });
317
+ (0, import_vitest.test)(`Component theme with sub component that doesn't exist keeps same theme`, () => {
318
+ const parent = new import_ThemeManager.ThemeManager(
319
+ {
320
+ name: "dark"
321
+ },
322
+ "root"
323
+ );
324
+ const child = new import_ThemeManager.ThemeManager(
325
+ {
326
+ name: "red",
327
+ componentName: "Button"
328
+ },
329
+ parent
330
+ );
331
+ const child2 = new import_ThemeManager.ThemeManager(
332
+ {
333
+ componentName: "Spacer"
334
+ },
335
+ child
336
+ );
337
+ (0, import_vitest.expect)(child2).toBe(child);
338
+ });
339
+ (0, import_vitest.test)(`Doesn't find invalid parent when only passing component`, () => {
340
+ (0, import_vitest.expect)(!!conf.themes["dark_Card"]).toBeTruthy();
341
+ const parent = new import_ThemeManager.ThemeManager(
342
+ {
343
+ name: "dark_red"
344
+ },
345
+ "root"
346
+ );
347
+ const child = new import_ThemeManager.ThemeManager(
348
+ {
349
+ componentName: "Card"
350
+ },
351
+ parent
352
+ );
353
+ (0, import_vitest.expect)(child.state.name).toBe(parent.state.name);
354
+ });
355
+ (0, import_vitest.test)(`Finds sub-theme when componentName and name are passed but componentName doesn't exist`, () => {
356
+ const parent = new import_ThemeManager.ThemeManager(
357
+ {
358
+ name: "dark"
359
+ },
360
+ "root"
361
+ );
362
+ const child = new import_ThemeManager.ThemeManager(
363
+ {
364
+ name: "red",
365
+ componentName: "Missing"
366
+ },
367
+ parent
368
+ );
369
+ (0, import_vitest.expect)(child.state.name).toBe("dark_red");
370
+ });
371
+ (0, import_vitest.test)(`Uses the full className without the light/dark prefix`, () => {
372
+ const parent = new import_ThemeManager.ThemeManager(
373
+ {
374
+ name: "dark"
375
+ },
376
+ "root"
377
+ );
378
+ const child = new import_ThemeManager.ThemeManager(
379
+ {
380
+ name: "red_alt2"
381
+ },
382
+ parent
383
+ );
384
+ (0, import_vitest.expect)(child.state.className).toBe("t_red_alt2");
385
+ const child2 = new import_ThemeManager.ThemeManager(
386
+ {
387
+ name: "red"
388
+ },
389
+ parent
390
+ );
391
+ const child3 = new import_ThemeManager.ThemeManager(
392
+ {
393
+ name: "alt2"
394
+ },
395
+ child2
396
+ );
397
+ (0, import_vitest.expect)(child3.state.className).toBe("t_red_alt2");
398
+ });
399
+ (0, import_vitest.test)(`Finds component dark_red + Button`, () => {
400
+ const parent = new import_ThemeManager.ThemeManager(
401
+ {
402
+ name: "dark_red"
403
+ },
404
+ "root"
405
+ );
406
+ const child = new import_ThemeManager.ThemeManager(
407
+ {
408
+ name: "dark_red",
409
+ componentName: "Button"
410
+ },
411
+ parent
412
+ );
413
+ (0, import_vitest.expect)(child.state.className).toBe("t_red_Button");
414
+ (0, import_vitest.expect)(child.state.name).toBe("dark_red_Button");
415
+ });
416
+ (0, import_vitest.test)(`Drops componentName if only regular name found at stronger level`, () => {
417
+ const parent = new import_ThemeManager.ThemeManager(
418
+ {
419
+ name: "dark_red"
420
+ },
421
+ "root"
422
+ );
423
+ const child = new import_ThemeManager.ThemeManager(
424
+ {
425
+ name: "alt1",
426
+ componentName: "Button"
427
+ },
428
+ parent
429
+ );
430
+ (0, import_vitest.expect)(child.state.name).toBe("dark_red_alt1");
431
+ });
432
+ (0, import_vitest.test)(`Component name + theme change when nested already`, () => {
433
+ const parent = new import_ThemeManager.ThemeManager(
434
+ {
435
+ name: "dark_red"
436
+ },
437
+ "root"
438
+ );
439
+ const child = new import_ThemeManager.ThemeManager(
440
+ {
441
+ name: "yellow",
442
+ componentName: "Button"
443
+ },
444
+ parent
445
+ );
446
+ (0, import_vitest.expect)(child.state.name).toBe("dark_yellow_Button");
447
+ });
448
+ });
449
+ //# sourceMappingURL=ThemeManager.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/ThemeManager.test.tsx"],
4
+ "sourcesContent": ["import { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport { beforeAll, describe, expect, test } from 'vitest'\n\nimport { createTamagui } from '../createTamagui'\nimport { ThemeManager } from './ThemeManager'\n\nconst conf = getDefaultTamaguiConfig()\n\ndescribe('ThemeManager', () => {\n beforeAll(() => {\n createTamagui(conf)\n })\n\n test('Changes theme to dark', () => {\n const manager = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n expect(manager.state.name).toBe('dark')\n })\n\n test('Given parent theme \"dark\" and child theme \"red\" to return theme \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(parent.state.name).toBe('dark')\n expect(child.state.name).toBe('dark_red')\n })\n\n test('Given parent theme \"dark\", child theme \"red_alt2\" and component \"Button\" returns \"dark_red_alt2_Button\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n name: 'alt2',\n componentName: 'Button',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red_alt2_Button')\n })\n\n test('Given parent theme \"dark\", child theme \"red\" and component \"Button\" returns \"dark_red_Button\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n componentName: 'Button',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red_Button')\n })\n\n test('Given parent theme \"dark\", child theme \"red\" and missing component \"Card\" returns \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n componentName: 'Card',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red')\n })\n\n test('Changes \"light\" to \"dark\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n expect(parent.state.name).toBe('light')\n expect(child.state.name).toBe('dark')\n })\n\n test('Inverts \"light\" to \"dark\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n inverse: true,\n },\n parent\n )\n expect(child1.state.name).toBe('dark')\n })\n\n test('Inverts \"light_red\" to \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n inverse: true,\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n })\n\n test('Updates state', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const newState = parent.updateState({\n name: 'dark',\n })\n expect(newState).toMatchInlineSnapshot(`\n {\n \"className\": \"t_dark\",\n \"name\": \"dark\",\n \"parentName\": \"\",\n \"theme\": {\n \"background\": {\n \"isVar\": true,\n \"key\": \"color-2\",\n \"name\": \"background\",\n \"val\": \"#000\",\n \"variable\": \"\",\n },\n \"color\": {\n \"isVar\": true,\n \"key\": \"color-1\",\n \"name\": \"color\",\n \"val\": \"#fff\",\n \"variable\": \"\",\n },\n },\n }\n `)\n expect(parent.state.name).toBe('dark')\n })\n\n test('Returns parent on empty', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: null,\n },\n parent\n )\n expect(child).toBe(parent)\n })\n\n test('Resets theme', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n expect(child.state.name).toBe('dark')\n expect(child.parentManager).toBe(parent)\n const child2 = new ThemeManager(\n {\n reset: true,\n },\n child\n )\n expect(child2.parentManager).toBe(child)\n expect(child2.state.name).toBe('light')\n })\n\n test('Nested invert and reset', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n reset: true,\n },\n child\n )\n const child3 = new ThemeManager(\n {\n inverse: true,\n },\n child2\n )\n expect(child3.state.name).toBe('dark')\n })\n\n test('Updates from null the new theme nested 3 themes', () => {\n const a = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const b = new ThemeManager(\n {\n name: 'red',\n },\n a\n )\n expect(b.state.name).toBe('dark_red')\n const c = new ThemeManager(\n {\n name: 'alt2',\n },\n b\n )\n expect(c.state.name).toBe('dark_red_alt2')\n })\n\n test('Ignored dup themes', () => {\n const a = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const b = new ThemeManager(\n {\n name: 'dark',\n },\n a\n )\n expect(b === a).toBe(true)\n })\n\n test('Nested component themes fallback to grandparents', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Button',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n name: 'blue',\n },\n child\n )\n expect(child2.state.name).toBe('dark_blue')\n const child3 = new ThemeManager(\n {\n componentName: 'Button',\n },\n child2\n )\n expect(child3.state.name).toBe('dark_blue_Button')\n })\n\n test(`Component theme with sub component that doesn't exist keeps same theme`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Button',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n componentName: 'Spacer',\n },\n child\n )\n expect(child2).toBe(child)\n })\n\n test(`Doesn't find invalid parent when only passing component`, () => {\n expect(!!conf.themes['dark_Card']).toBeTruthy()\n\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n\n const child = new ThemeManager(\n {\n componentName: 'Card',\n },\n parent\n )\n\n // dont find dark_Card because dark_red is highest it should climb\n expect(child.state.name).toBe(parent.state.name)\n })\n\n test(`Finds sub-theme when componentName and name are passed but componentName doesn't exist`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Missing',\n },\n parent\n )\n\n // dont find dark_Card because dark_red is highest it should climb\n expect(child.state.name).toBe('dark_red')\n })\n\n test(`Uses the full className without the light/dark prefix`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red_alt2',\n },\n parent\n )\n expect(child.state.className).toBe('t_red_alt2')\n\n const child2 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n const child3 = new ThemeManager(\n {\n name: 'alt2',\n },\n child2\n )\n expect(child3.state.className).toBe('t_red_alt2')\n })\n\n test(`Finds component dark_red + Button`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark_red',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.className).toBe('t_red_Button')\n expect(child.state.name).toBe('dark_red_Button')\n })\n\n test(`Drops componentName if only regular name found at stronger level`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'alt1',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.name).toBe('dark_red_alt1')\n })\n\n test(`Component name + theme change when nested already`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'yellow',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.name).toBe('dark_yellow_Button')\n })\n})\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -16,15 +16,15 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var getTokens_exports = {};
20
- __export(getTokens_exports, {
21
- getTokens: () => getTokens
19
+ var ThemeManagerContext_exports = {};
20
+ __export(ThemeManagerContext_exports, {
21
+ ThemeManagerContext: () => ThemeManagerContext
22
22
  });
23
- module.exports = __toCommonJS(getTokens_exports);
24
- var import_config = require("../config");
25
- const getTokens = () => (0, import_config.getConfig)().tokensParsed;
23
+ module.exports = __toCommonJS(ThemeManagerContext_exports);
24
+ var import_react = require("react");
25
+ const ThemeManagerContext = (0, import_react.createContext)(null);
26
26
  // Annotate the CommonJS export names for ESM import in node:
27
27
  0 && (module.exports = {
28
- getTokens
28
+ ThemeManagerContext
29
29
  });
30
- //# sourceMappingURL=getTokens.js.map
30
+ //# sourceMappingURL=ThemeManagerContext.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/ThemeManagerContext.tsx"],
4
+ "sourcesContent": ["import { createContext } from 'react'\n\nimport { ThemeManager } from './ThemeManager'\n\nexport const ThemeManagerContext = createContext<ThemeManager | null>(null)\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA8B;AAIvB,MAAM,0BAAsB,4BAAmC,IAAI;",
6
+ "names": []
7
+ }
@@ -296,7 +296,7 @@ const getToken = (key, value, conf, theme, fontFamily = "$body", languageContext
296
296
  const fontsParsed = languageContext ? (0, import_getVariantExtras.getFontsForLanguage)(conf.fontsParsed, languageContext) : conf.fontsParsed;
297
297
  let valOrVar;
298
298
  let hasSet = false;
299
- if (theme[value]) {
299
+ if (value in theme) {
300
300
  valOrVar = theme[value];
301
301
  hasSet = true;
302
302
  } else {
@@ -332,14 +332,14 @@ const getToken = (key, value, conf, theme, fontFamily = "$body", languageContext
332
332
  }
333
333
  if (hasSet) {
334
334
  if (process.env.NODE_ENV === "development" && import_isDevTools.isDevTools && debug === "verbose") {
335
- console.log(` \uFE52 propMapper getToken`, key, valOrVar);
335
+ console.log(` \uFE52 propMapper getToken`, key, valOrVar, theme);
336
336
  }
337
337
  return resolveVariableValue(key, valOrVar, resolveAs);
338
338
  }
339
339
  if (process.env.NODE_ENV === "development") {
340
340
  if (value && value[0] === "$") {
341
- console.trace(
342
- `\u26A0\uFE0F You've passed the value "${value}" to the style property "${key}", but there's no theme or token with the key "${value}". Using theme "${theme.name}".
341
+ console.warn(
342
+ `\u26A0\uFE0F You passed the value "${value}" to the style property "${key}", but there's no theme or token with the key "${value}". Using theme "${theme.name}".
343
343
 
344
344
  Set the debug prop to true to see more detailed debug information.`
345
345
  );