@sil/sass-utils
Version:
Sass Utilities
67 lines (58 loc) • 2.03 kB
text/typescript
import { COLOR, ColorType, HSLA, RGBA, CMYK, toType, HSVA } from "@sil/color";
import { ColorData } from "./types";
interface SplitColorsArgs {
data: ColorData;
type?: ColorType;
filters?: string[];
}
const defaultSplitColorsArgs = {
data: {},
type: ColorType.HSLA,
filters: [],
} as SplitColorsArgs;
export const splitColors = (args: SplitColorsArgs): ColorData => {
const config = { ...defaultSplitColorsArgs, ...args };
let splitData: ColorData = {};
Object.keys(config.data).forEach((key) => {
const filtered = config.filters.some((filter) => key.endsWith(filter));
if (!filtered) {
const c = toType(config.data[key] as COLOR, config.type);
switch (config.type) {
case ColorType.HSLA:
splitData[`${key}-h`] = (c as HSLA).h;
splitData[`${key}-s`] = (c as HSLA).s;
splitData[`${key}-l`] = (c as HSLA).l;
if ((c as HSLA).a) splitData[`${key}-a`] = (c as HSLA).a;
break;
case ColorType.RGBA:
splitData[`${key}-r`] = (c as RGBA).r;
splitData[`${key}-g`] = (c as RGBA).g;
splitData[`${key}-b`] = (c as RGBA).b;
if ((c as RGBA).a) splitData[`${key}-a`] = (c as RGBA).a;
break;
case ColorType.CMYK:
splitData[`${key}-c`] = (c as CMYK).c;
splitData[`${key}-m`] = (c as CMYK).m;
splitData[`${key}-y`] = (c as CMYK).y;
splitData[`${key}-k`] = (c as CMYK).k;
break;
case ColorType.HSVA:
splitData[`${key}-h`] = (c as HSVA).h;
splitData[`${key}-s`] = (c as HSVA).s;
splitData[`${key}-v`] = (c as HSVA).v;
if ((c as HSVA).a) splitData[`${key}-a`] = (c as HSVA).a;
break;
default:
console.log(`${config.type} is not supported to be split`);
break;
}
}
});
return splitData;
};
export const asyncSplitColors = async (
args: SplitColorsArgs
): Promise<ColorData> => {
const data = splitColors(args);
return data;
};