diff --git a/scripts/build.mjs b/scripts/build.mjs index 9f42232..845da3c 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -74,7 +74,7 @@ const config = { constModules: { globals: { "bunny-build-info": { - version: `"v1.4.1"` + version: `"v1.4.2"` } } }, diff --git a/src/lib/addons/themes/colors/patches/resolver.ts b/src/lib/addons/themes/colors/patches/resolver.ts index c6411f2..e577f9c 100644 --- a/src/lib/addons/themes/colors/patches/resolver.ts +++ b/src/lib/addons/themes/colors/patches/resolver.ts @@ -2,12 +2,14 @@ import { _colorRef } from "@lib/addons/themes/colors/updater"; import { NativeThemeModule } from "@lib/api/native/modules"; import { before, instead } from "@lib/api/patcher"; import { findByProps } from "@metro"; -import { byMutableProp } from "@metro/filters"; -import { createLazyModule } from "@metro/lazy"; import chroma from "chroma-js"; const tokenReference = findByProps("SemanticColor"); -const isThemeModule = createLazyModule(byMutableProp("isThemeDark")); +const themeTypes = findByProps("ThemeTypes")?.ThemeTypes; + +const origRawColor = { ...tokenReference.RawColor }; +const origDarker = themeTypes.DARKER as string; +const origLight = themeTypes.LIGHT as string; const SEMANTIC_FALLBACK_MAP: Record = { "BG_BACKDROP": "BACKGROUND_FLOATING", @@ -22,11 +24,20 @@ const SEMANTIC_FALLBACK_MAP: Record = { "BG_SURFACE_RAISED": "BACKGROUND_MOBILE_PRIMARY" }; -const origRawColor = { ...tokenReference.RawColor }; - export default function patchDefinitionAndResolver() { const callback = ([theme]: any[]) => theme === _colorRef.key ? [_colorRef.current!.reference] : void 0; + Object.defineProperty(themeTypes, "DARKER", { + configurable: true, + enumerable: true, + get: () => _colorRef.current?.reference === "darker" ? _colorRef.key : origDarker, + }); + Object.defineProperty(themeTypes, "LIGHT", { + configurable: true, + enumerable: true, + get: () => _colorRef.current?.reference === "light" ? _colorRef.key : origLight, + }); + Object.keys(tokenReference.RawColor).forEach(key => { Object.defineProperty(tokenReference.RawColor, key, { configurable: true, @@ -34,15 +45,12 @@ export default function patchDefinitionAndResolver() { get: () => { const ret = _colorRef.current?.raw[key]; if (ret) return ret; - return origRawColor[key]; } }); }); const unpatches = [ - before("isThemeDark", isThemeModule, callback), - before("isThemeLight", isThemeModule, callback), before("updateTheme", NativeThemeModule, callback), instead("resolveSemanticColor", tokenReference.default.meta ?? tokenReference.default.internal, (args: any[], orig: any) => { if (!_colorRef.current) return orig(...args); @@ -58,8 +66,9 @@ export default function patchDefinitionAndResolver() { } if (semanticDef?.value) { - if (semanticDef.opacity === 1) return semanticDef.value; - return chroma(semanticDef.value).alpha(semanticDef.opacity).hex(); + return semanticDef.opacity === 1 + ? semanticDef.value + : chroma(semanticDef.value).alpha(semanticDef.opacity).hex(); } const rawValue = _colorRef.current.raw[colorDef.raw]; @@ -72,6 +81,12 @@ export default function patchDefinitionAndResolver() { return orig(...args); }), () => { + Object.defineProperty(themeTypes, "DARKER", { + configurable: true, writable: true, value: origDarker + }); + Object.defineProperty(themeTypes, "LIGHT", { + configurable: true, writable: true, value: origLight + }); Object.defineProperty(tokenReference, "RawColor", { configurable: true, writable: true, @@ -89,4 +104,4 @@ function extractInfo(themeName: string, colorObj: any): [name: string, colorDef: const colorDef = tokenReference.SemanticColor[propName]; return [propName, colorDef[themeName]]; -} \ No newline at end of file +}