@visactor/vchart
Version:
charts lib based @visactor/VGrammar
45 lines (29 loc) • 1.67 kB
JavaScript
export * from "./light";
export * from "./dark";
import { isString } from "@visactor/vutils";
import { mergeTheme } from "../../util/theme/merge-theme";
import { lightTheme } from "./light";
import { preprocessTheme } from "../../util/theme/preprocess";
export const builtinThemes = {
[lightTheme.name]: lightTheme
};
export const defaultThemeName = lightTheme.name;
export const themes = new Map(Object.keys(builtinThemes).map((key => [ key, builtinThemes[key] ])));
const transformedThemes = new Map(Object.keys(builtinThemes).map((key => [ key, preprocessTheme(builtinThemes[key]) ])));
export const hasThemeMerged = new Map(Object.keys(builtinThemes).map((key => [ key, key === defaultThemeName ])));
export const registerTheme = (name, theme) => {
if (!name) return;
const mergedTheme = getMergedTheme(theme);
themes.set(name, mergedTheme), transformedThemes.set(name, preprocessTheme(mergedTheme)),
hasThemeMerged.set(name, !0);
};
export const getTheme = (name = defaultThemeName, transformed = !1) => (hasThemeMerged.has(name) && !hasThemeMerged.get(name) && registerTheme(name, themes.get(name)),
transformed ? transformedThemes.get(name) : themes.get(name));
export const removeTheme = name => themes.delete(name) && transformedThemes.delete(name) && hasThemeMerged.delete(name);
export const themeExist = name => !!isString(name) && themes.has(name);
export const getMergedTheme = theme => {
var _a;
const baseThemeName = null !== (_a = theme.type) && void 0 !== _a ? _a : defaultThemeName, baseTheme = getTheme(baseThemeName);
return mergeTheme({}, baseTheme, theme);
};
//# sourceMappingURL=index.js.map