vuestic-ui
Version:
Vue 3 UI Framework
151 lines (150 loc) • 5.13 kB
JavaScript
import { computed, capitalize } from "vue";
import { w as warn } from "../utils/console.js";
import { u as useCache } from "./useCache.js";
import { u as useReactiveComputed } from "./useReactiveComputed.js";
import { a as getBoxShadowColor, f as getBoxShadowColorFromBg, c as getHoverColor, b as getFocusColor, g as getGradientBackground, s as shiftHSLAColor, h as setHSLAColor, d as colorToRgba, i as getStateMaskGradientBackground, n as normalizeColorName, j as cssVariableName, k as isCSSVariable, l as getColorLightness } from "../services/color/utils.js";
import { c as camelCaseToKebabCase } from "../utils/text-case.js";
import { u as useGlobalConfig } from "./useGlobalConfig.js";
import { i as isColor } from "../utils/color.js";
const useColorProps = {
color: {
type: String,
default: ""
}
};
const useColors = () => {
const gc = useGlobalConfig();
if (!gc) {
throw new Error("useColors must be used in setup function or Vuestic GlobalConfigPlugin is not registered!");
}
const { globalConfig } = gc;
const colors = useReactiveComputed({
get: () => globalConfig.value.colors.presets[globalConfig.value.colors.currentPresetName],
set: (v) => {
setColors(v);
}
});
const setColors = (colors2) => {
globalConfig.value.colors.presets[globalConfig.value.colors.currentPresetName] = {
...globalConfig.value.colors.variables,
...colors2
};
};
const getColors = () => {
return colors;
};
const getColor = (prop, defaultColor, preferVariables) => {
if (!defaultColor) {
defaultColor = colors.primary;
}
if (prop === "transparent") {
return "#ffffff00";
}
if (prop === "currentColor") {
return prop;
}
if (prop == null ? void 0 : prop.startsWith("on")) {
const colorName = prop.slice(2);
if (colors[normalizeColorName(colorName)]) {
return getColor(getTextColor(getColor(colorName)), void 0, preferVariables);
}
}
if (!prop) {
prop = getColor(defaultColor);
}
const colorValue = colors[prop] || colors[normalizeColorName(prop)];
if (colorValue) {
return preferVariables ? `var(${cssVariableName(prop)})` : colorValue;
}
if (isColor(prop)) {
return prop;
}
if (preferVariables && isCSSVariable(prop)) {
return prop;
}
warn(`'${prop}' is not a proper color! Use HEX or default color themes
names (https://vuestic.dev/en/styles/colors#default-color-themes)`);
return getColor(defaultColor);
};
const getComputedColor = (color) => {
return computed({
get() {
return getColor(color);
},
set(v) {
setColors({ [color]: v });
}
});
};
const colorsToCSSVariable = (colors2, prefix = "va") => {
return Object.keys(colors2).filter((key) => colors2[key] !== void 0).reduce((acc, colorName) => {
acc[`--${prefix}-${camelCaseToKebabCase(colorName)}`] = getColor(colors2[colorName], void 0, true);
acc[`--${prefix}-on-${camelCaseToKebabCase(colorName)}`] = getColor(getTextColor(getColor(colors2[colorName])), void 0, true);
return acc;
}, {});
};
const cache = useCache();
const getColorLightnessFromCache = (color) => {
if (typeof color !== "string") {
return getColorLightness(color);
}
if (!cache.colorContrast[color]) {
cache.colorContrast[color] = getColorLightness(color);
}
return cache.colorContrast[color];
};
const computedDarkColor = computed(() => {
return getColorLightnessFromCache(getColor("textPrimary")) > 255 / 2 ? "textInverted" : "textPrimary";
});
const computedLightColor = computed(() => {
return getColorLightnessFromCache(getColor("textPrimary")) > 255 / 2 ? "textPrimary" : "textInverted";
});
const getTextColor = (color, darkColor, lightColor) => {
const onColorName = `on${capitalize(String(color))}`;
if (colors[onColorName]) {
return colors[onColorName];
}
darkColor = darkColor || computedDarkColor.value;
lightColor = lightColor || computedLightColor.value;
return getColorLightnessFromCache(color) > globalConfig.value.colors.threshold ? darkColor : lightColor;
};
const currentPresetName = computed({
get: () => globalConfig.value.colors.currentPresetName,
set: (v) => {
applyPreset(v);
}
});
const presets = computed(() => globalConfig.value.colors.presets);
const applyPreset = (presetName) => {
globalConfig.value.colors.currentPresetName = presetName;
if (!globalConfig.value.colors.presets[presetName]) {
return warn(`Preset ${presetName} does not exist`);
}
};
return {
colors,
currentPresetName,
presets,
applyPreset,
setColors,
getColors,
getColor,
getComputedColor,
getBoxShadowColor,
getBoxShadowColorFromBg,
getHoverColor,
getFocusColor,
getGradientBackground,
getTextColor,
shiftHSLAColor,
setHSLAColor,
colorsToCSSVariable,
colorToRgba,
getStateMaskGradientBackground
};
};
export {
useColorProps as a,
useColors as u
};
//# sourceMappingURL=useColors.js.map