@thi.ng/color
Version:
Array-based color types, CSS parsing, conversions, transformations, declarative theme generation, gradients, presets
51 lines (50 loc) • 1.76 kB
JavaScript
import { isNumber } from "@thi.ng/checks/is-number";
import { isString } from "@thi.ng/checks/is-string";
import { convert } from "../convert.js";
import { hslCss } from "../hsl/hsl-css.js";
import { hsvCss } from "../hsv/hsv-css.js";
import { intArgb32Css } from "../int/int-css.js";
import { intAbgr32Argb32 } from "../int/int-int.js";
import { labCss } from "../lab/lab-css.js";
import { labLabD65_50 } from "../lab/lab-lab.js";
import { lchLab } from "../lab/lab-lch.js";
import { labRgb, labRgbD65 } from "../lab/lab-rgb.js";
import { lchCss } from "../lch/lch-css.js";
import { oklabCss } from "../oklab/oklab-css.js";
import { oklchCss } from "../oklch/oklch-css.js";
import { rgbCss } from "../rgb/rgb-css.js";
import { rgbSrgb } from "../rgb/rgb-srgb.js";
import { srgbCss } from "../srgb/srgb-css.js";
const CSS_LEVEL3 = {
abgr32: (x) => intArgb32Css(intAbgr32Argb32(x[0])),
argb32: (x) => intArgb32Css(x[0]),
hsl: hslCss,
hsv: hsvCss,
lab50: (src) => srgbCss(rgbSrgb(null, labRgb([], src))),
lab65: (src) => srgbCss(rgbSrgb(null, labRgbD65([], src))),
lch: (src) => srgbCss(rgbSrgb(null, labRgb(null, lchLab([], src)))),
rgb: rgbCss,
srgb: srgbCss
};
const CSS_LEVEL4 = {
...CSS_LEVEL3,
lab50: labCss,
lab65: (x) => labCss(labLabD65_50([], x)),
lch: lchCss,
oklab: oklabCss,
oklch: oklchCss
};
let CSS_DEFAULT = CSS_LEVEL3;
const setDefaultCSSConversions = (fns) => CSS_DEFAULT = fns;
const css = (src, cssTarget = CSS_DEFAULT) => {
let asCss;
return isString(src) ? src : isNumber(src) ? intArgb32Css(src) : src.mode ? (asCss = cssTarget[src.mode]) ? asCss(src) : cssTarget.rgb(
convert([], src, "rgb", src.mode)
) : srgbCss(src);
};
export {
CSS_LEVEL3,
CSS_LEVEL4,
css,
setDefaultCSSConversions
};