@visactor/vchart
Version:
charts lib based @visactor/VGrammar
46 lines (29 loc) • 1.48 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 { getFunnelTheme } from "./common/series/funnel";
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;
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), hasThemeMerged.set(name, !0);
};
export const getTheme = (name = defaultThemeName) => (hasThemeMerged.has(name) && !hasThemeMerged.get(name) && registerTheme(name, themes.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);
};
export { getFunnelTheme };
//# sourceMappingURL=index.js.map