mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-06 01:59:13 +08:00
310 lines
No EOL
10 KiB
Text
310 lines
No EOL
10 KiB
Text
const Color = require("color");
|
|
const colorNames = require("./colorNames");
|
|
|
|
module.exports = {
|
|
|
|
generateForegorundColorFrom: function (input, percentage = 0.8) {
|
|
if (Color(input).isDark()) {
|
|
let arr = Color(input).mix(Color("white"), percentage).saturate(10).hsl().round().array()
|
|
return arr[0] + " " + arr[1] + "%" + " " + arr[2] + "%";
|
|
} else {
|
|
let arr = Color(input).mix(Color("black"), percentage).saturate(10).hsl().round().array()
|
|
return arr[0] + " " + arr[1] + "%" + " " + arr[2] + "%";
|
|
}
|
|
},
|
|
|
|
convertToHsl: function (input) {
|
|
let resultObj = {};
|
|
if (typeof input === "object" && input !== null) {
|
|
Object.entries(input).forEach(([rule, value]) => {
|
|
if (colorNames.hasOwnProperty(rule)) {
|
|
const hslArray = Color(value).hsl().round().array();
|
|
resultObj[colorNames[rule]] = hslArray[0] + " " + hslArray[1] + "%" + " " + hslArray[2] + "%";
|
|
} else {
|
|
resultObj[rule] = value;
|
|
}
|
|
|
|
// auto generate focus colors
|
|
if (!input.hasOwnProperty("primary-focus")) {
|
|
const darkerHslArray = Color(input["primary"]).darken(0.2).hsl().round().array();
|
|
resultObj["--pf"] = darkerHslArray[0] + " " + darkerHslArray[1] + "%" + " " + darkerHslArray[2] + "%";
|
|
}
|
|
|
|
if (!input.hasOwnProperty("secondary-focus")) {
|
|
const darkerHslArray = Color(input["secondary"]).darken(0.2).hsl().round().array();
|
|
resultObj["--sf"] = darkerHslArray[0] + " " + darkerHslArray[1] + "%" + " " + darkerHslArray[2] + "%";
|
|
}
|
|
|
|
if (!input.hasOwnProperty("accent-focus")) {
|
|
const darkerHslArray = Color(input["accent"]).darken(0.2).hsl().round().array();
|
|
resultObj["--af"] = darkerHslArray[0] + " " + darkerHslArray[1] + "%" + " " + darkerHslArray[2] + "%";
|
|
}
|
|
|
|
if (!input.hasOwnProperty("neutral-focus")) {
|
|
const darkerHslArray = Color(input["neutral"]).darken(0.2).hsl().round().array();
|
|
resultObj["--nf"] = darkerHslArray[0] + " " + darkerHslArray[1] + "%" + " " + darkerHslArray[2] + "%";
|
|
}
|
|
|
|
// auto generate base colors
|
|
if (!input.hasOwnProperty("base-100")) {
|
|
resultObj["--b1"] = 0 + " " + 0 + "%" + " " + 100 + "%";
|
|
}
|
|
|
|
if (!input.hasOwnProperty("base-200")) {
|
|
const darkerHslArray = Color(input["base-100"]).darken(0.1).hsl().round().array();
|
|
resultObj["--b2"] = darkerHslArray[0] + " " + darkerHslArray[1] + "%" + " " + darkerHslArray[2] + "%";
|
|
}
|
|
|
|
if (!input.hasOwnProperty("base-300")) {
|
|
if (input.hasOwnProperty("base-200")) {
|
|
const darkerHslArray = Color(input["base-200"]).darken(0.1).hsl().round().array();
|
|
resultObj["--b3"] = darkerHslArray[0] + " " + darkerHslArray[1] + "%" + " " + darkerHslArray[2] + "%";
|
|
} else {
|
|
const darkerHslArray = Color(input["base-100"]).darken(0.1).darken(0.1).hsl().round().array();
|
|
resultObj["--b3"] = darkerHslArray[0] + " " + darkerHslArray[1] + "%" + " " + darkerHslArray[2] + "%";
|
|
}
|
|
}
|
|
|
|
// auto generate state colors
|
|
if (!input.hasOwnProperty("info")) {
|
|
resultObj["--in"] = 198 + " " + 93 + "%" + " " + 60 + "%";
|
|
}
|
|
if (!input.hasOwnProperty("success")) {
|
|
resultObj["--su"] = 158 + " " + 64 + "%" + " " + 52 + "%";
|
|
}
|
|
if (!input.hasOwnProperty("warning")) {
|
|
resultObj["--wa"] = 43 + " " + 96 + "%" + " " + 56 + "%";
|
|
}
|
|
if (!input.hasOwnProperty("error")) {
|
|
resultObj["--er"] = 0 + " " + 91 + "%" + " " + 71 + "%";
|
|
}
|
|
|
|
// auto generate content colors
|
|
if (!input.hasOwnProperty("base-content")) {
|
|
resultObj["--bc"] = this.generateForegorundColorFrom(input["base-100"])
|
|
}
|
|
if (!input.hasOwnProperty("primary-content")) {
|
|
resultObj["--pc"] = this.generateForegorundColorFrom(input["primary"])
|
|
}
|
|
|
|
if (!input.hasOwnProperty("secondary-content")) {
|
|
resultObj["--sc"] = this.generateForegorundColorFrom(input["secondary"])
|
|
}
|
|
|
|
if (!input.hasOwnProperty("accent-content")) {
|
|
resultObj["--ac"] = this.generateForegorundColorFrom(input["accent"])
|
|
}
|
|
|
|
if (!input.hasOwnProperty("neutral-content")) {
|
|
resultObj["--nc"] = this.generateForegorundColorFrom(input["neutral"])
|
|
}
|
|
|
|
if (!input.hasOwnProperty("info-content")) {
|
|
if (input.hasOwnProperty("info")) {
|
|
resultObj["--inc"] = this.generateForegorundColorFrom(input["info"])
|
|
} else {
|
|
resultObj["--inc"] = 198 + " " + 100 + "%" + " " + 12 + "%";
|
|
}
|
|
}
|
|
|
|
if (!input.hasOwnProperty("success-content")) {
|
|
if (input.hasOwnProperty("success")) {
|
|
resultObj["--suc"] = this.generateForegorundColorFrom(input["success"])
|
|
} else {
|
|
resultObj["--suc"] = 158 + " " + 100 + "%" + " " + 10 + "%";
|
|
}
|
|
}
|
|
|
|
if (!input.hasOwnProperty("warning-content")) {
|
|
if (input.hasOwnProperty("warning")) {
|
|
resultObj["--wac"] = this.generateForegorundColorFrom(input["warning"])
|
|
} else {
|
|
resultObj["--wac"] = 43 + " " + 100 + "%" + " " + 11 + "%";
|
|
}
|
|
}
|
|
|
|
if (!input.hasOwnProperty("error-content")) {
|
|
if (input.hasOwnProperty("error")) {
|
|
resultObj["--erc"] = this.generateForegorundColorFrom(input["error"])
|
|
} else {
|
|
resultObj["--erc"] = 0 + " " + 100 + "%" + " " + 14 + "%";
|
|
}
|
|
}
|
|
|
|
// auto generate css variables
|
|
if (!input.hasOwnProperty("--rounded-box")) {
|
|
resultObj["--rounded-box"] = "1rem";
|
|
}
|
|
if (!input.hasOwnProperty("--rounded-btn")) {
|
|
resultObj["--rounded-btn"] = "0.5rem";
|
|
}
|
|
if (!input.hasOwnProperty("--rounded-badge")) {
|
|
resultObj["--rounded-badge"] = "1.9rem";
|
|
}
|
|
if (!input.hasOwnProperty("--animation-btn")) {
|
|
resultObj["--animation-btn"] = "0.25s";
|
|
}
|
|
if (!input.hasOwnProperty("--animation-input")) {
|
|
resultObj["--animation-input"] = ".2s";
|
|
}
|
|
if (!input.hasOwnProperty("--btn-text-case")) {
|
|
resultObj["--btn-text-case"] = "uppercase";
|
|
}
|
|
if (!input.hasOwnProperty("--btn-focus-scale")) {
|
|
resultObj["--btn-focus-scale"] = "0.95";
|
|
}
|
|
if (!input.hasOwnProperty("--border-btn")) {
|
|
resultObj["--border-btn"] = "1px";
|
|
}
|
|
if (!input.hasOwnProperty("--tab-border")) {
|
|
resultObj["--tab-border"] = "1px";
|
|
}
|
|
if (!input.hasOwnProperty("--tab-radius")) {
|
|
resultObj["--tab-radius"] = "0.5rem";
|
|
}
|
|
|
|
});
|
|
return resultObj;
|
|
}
|
|
return input;
|
|
},
|
|
|
|
injectThemes: function (addBase, config, themes) {
|
|
let includedThemesObj = new Object();
|
|
|
|
// add light themes
|
|
if (config("daisyui.themes") == false) {
|
|
Object.entries(themes).forEach(([theme, index]) => {
|
|
includedThemesObj[theme] = this.convertToHsl(themes[theme]);
|
|
});
|
|
}
|
|
|
|
// add default themes
|
|
if (config("daisyui.themes") != false) {
|
|
Object.entries(themes).forEach(([theme, index]) => {
|
|
includedThemesObj[theme] = this.convertToHsl(themes[theme]);
|
|
});
|
|
}
|
|
|
|
// add custom themes
|
|
if (Array.isArray(config("daisyui.themes"))) {
|
|
config("daisyui.themes").forEach((item, index) => {
|
|
if (typeof item === "object" && item !== null) {
|
|
Object.entries(item).forEach(([customThemeName, customThemevalue]) => {
|
|
includedThemesObj["[data-theme=" + customThemeName + "]"] =
|
|
this.convertToHsl(customThemevalue);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
|
|
let themeOrder = [];
|
|
if (Array.isArray(config("daisyui.themes"))) {
|
|
config("daisyui.themes").forEach((theme, index) => {
|
|
if (typeof theme === "object" && theme !== null) {
|
|
Object.entries(theme).forEach(([customThemeName, customThemevalue]) => {
|
|
themeOrder.push(customThemeName);
|
|
});
|
|
} else if (
|
|
includedThemesObj.hasOwnProperty("[data-theme=" + theme + "]")
|
|
) {
|
|
themeOrder.push(theme);
|
|
}
|
|
});
|
|
} else if (config("daisyui.themes") != false) {
|
|
themeOrder = [
|
|
"light",
|
|
"dark",
|
|
"cupcake",
|
|
"bumblebee",
|
|
"emerald",
|
|
"corporate",
|
|
"synthwave",
|
|
"retro",
|
|
"cyberpunk",
|
|
"valentine",
|
|
"halloween",
|
|
"garden",
|
|
"forest",
|
|
"aqua",
|
|
"lofi",
|
|
"pastel",
|
|
"fantasy",
|
|
"wireframe",
|
|
"black",
|
|
"luxury",
|
|
"dracula",
|
|
"cmyk",
|
|
"autumn",
|
|
"business",
|
|
"acid",
|
|
"lemonade",
|
|
"night",
|
|
"coffee",
|
|
"winter",
|
|
];
|
|
} else if (config("daisyui.themes") == false) {
|
|
themeOrder.push("light");
|
|
}
|
|
|
|
// inject themes in order
|
|
themeOrder.forEach((themeName, index) => {
|
|
if (index === 0) {
|
|
// first theme as root
|
|
addBase({
|
|
[":root"]: includedThemesObj["[data-theme=" + themeName + "]"],
|
|
});
|
|
} else if (index === 1) {
|
|
// auto dark
|
|
if (config("daisyui.darkTheme")) {
|
|
if (
|
|
themeOrder[0] != config("daisyui.darkTheme") &&
|
|
themeOrder.includes(config("daisyui.darkTheme"))
|
|
) {
|
|
addBase({
|
|
["@media (prefers-color-scheme: dark)"]: {
|
|
[":root"]:
|
|
includedThemesObj[
|
|
`[data-theme=${config("daisyui.darkTheme")}]`
|
|
],
|
|
},
|
|
});
|
|
}
|
|
} else {
|
|
if (themeOrder[0] != "dark" && themeOrder.includes("dark")) {
|
|
addBase({
|
|
["@media (prefers-color-scheme: dark)"]: {
|
|
[":root"]: includedThemesObj["[data-theme=dark]"],
|
|
},
|
|
});
|
|
}
|
|
}
|
|
// theme 0 with name
|
|
addBase({
|
|
["[data-theme=" + themeOrder[0] + "]"]:
|
|
includedThemesObj["[data-theme=" + themeOrder[0] + "]"],
|
|
});
|
|
// theme 1 with name
|
|
addBase({
|
|
["[data-theme=" + themeOrder[1] + "]"]:
|
|
includedThemesObj["[data-theme=" + themeOrder[1] + "]"],
|
|
});
|
|
} else {
|
|
addBase({
|
|
["[data-theme=" + themeName + "]"]:
|
|
includedThemesObj["[data-theme=" + themeName + "]"],
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
|
|
return {
|
|
includedThemesObj: includedThemesObj,
|
|
themeOrder: themeOrder,
|
|
};
|
|
}
|
|
|
|
} |