unocss-catppuccin
Version:
🌸 Soothing pastel theme preset for UnoCSS!
56 lines (52 loc) • 1.53 kB
JavaScript
import { flavors, flavorEntries } from '@catppuccin/palette';
const _extendTheme = (options = {}) => {
const { themeKey = "colors", prefix = "ctp", defaultFlavour } = options;
return (theme) => {
theme[themeKey] ??= {};
const targetObject = prefix ? theme[themeKey][prefix] ??= {} : theme[themeKey];
if (defaultFlavour && flavors[defaultFlavour]) {
addColoursToTarget(
targetObject,
flavors[defaultFlavour].colorEntries,
prefix
);
} else {
for (const [flavourName, flavour] of flavorEntries) {
targetObject[flavourName] ??= {};
addColoursToTarget(
targetObject[flavourName],
flavour.colorEntries,
prefix
);
}
}
};
};
function addColoursToTarget(targetObject, colourEntries, prefix) {
for (const [colourName, colour] of colourEntries) {
if (!prefix && targetObject[colourName]) {
targetObject["ctp"] ??= {};
targetObject["ctp"][colourName] = colour.hex;
} else {
targetObject[colourName] = colour.hex;
}
}
}
const presetCatppuccin = (options = {}) => {
const preset = { name: "unocss-catppuccin" };
const {
mode = "extend",
themeKey = "colors",
prefix = "ctp",
defaultFlavour
} = options;
switch (mode) {
case "extend":
preset.extendTheme = _extendTheme({ prefix, themeKey, defaultFlavour });
break;
default:
throw new Error(`Unsupported mode provided: '${mode}'`);
}
return preset;
};
export { presetCatppuccin };