UNPKG

@tbela99/css-parser

Version:

CSS parser, minifier and validator for node and the browser

177 lines (174 loc) 5.28 kB
import { getColorComponents } from './utils/components.js'; import { color2srgbvalues, toPrecisionAngle, toPrecisionValue, getNumber, getAngle } from './color.js'; import { EnumToken, ColorType } from '../../ast/types.js'; import { labvalues2lchvalues } from './lch.js'; import { srgb2oklab, lch2oklabvalues, getOKLABComponents, lab2oklabvalues, hwb2oklabvalues, hsl2oklabvalues, rgb2oklabvalues, hex2oklabvalues } from './oklab.js'; import { cmyk2srgbvalues } from './srgb.js'; function hex2oklchToken(token) { const values = hex2oklchvalues(token); return oklchToken(values); } function rgb2oklchToken(token) { const values = rgb2oklchvalues(token); if (values == null) { return null; } return oklchToken(values); } function hsl2oklchToken(token) { const values = hsl2oklchvalues(token); if (values == null) { return null; } return oklchToken(values); } function hwb2oklchToken(token) { const values = hwb2oklchvalues(token); if (values == null) { return null; } return oklchToken(values); } function cmyk2oklchToken(token) { const values = cmyk2oklchvalues(token); if (values == null) { return null; } return oklchToken(values); } function lab2oklchToken(token) { const values = lab2oklchvalues(token); if (values == null) { return null; } return oklchToken(values); } function oklab2oklchToken(token) { const values = oklab2oklchvalues(token); if (values == null) { return null; } return oklchToken(values); } function lch2oklchToken(token) { const values = lch2oklchvalues(token); if (values == null) { return null; } return oklchToken(values); } function color2oklchToken(token) { const values = color2srgbvalues(token); if (values == null) { return null; } // @ts-ignore return oklchToken(srgb2oklch(...values)); } function oklchToken(values) { values[2] = toPrecisionAngle(values[2]); const chi = [ { typ: EnumToken.NumberTokenType, val: toPrecisionValue(values[0]) }, { typ: EnumToken.NumberTokenType, val: toPrecisionValue(values[1]) }, { typ: EnumToken.NumberTokenType, val: values[2] }, ]; if (values.length == 4) { chi.push({ typ: EnumToken.LiteralTokenType, val: "/" }, { typ: EnumToken.PercentageTokenType, val: toPrecisionValue(values[3], 2) * 100, }); } return { typ: EnumToken.ColorTokenType, val: "oklch", chi, kin: ColorType.OKLCH, }; } function hex2oklchvalues(token) { // @ts-ignore return labvalues2lchvalues(...hex2oklabvalues(token)); } function rgb2oklchvalues(token) { const values = rgb2oklabvalues(token); if (values == null) { return null; } // @ts-ignore return labvalues2lchvalues(...values); } function hsl2oklchvalues(token) { // @ts-ignore return labvalues2lchvalues(...hsl2oklabvalues(token)); } function hwb2oklchvalues(token) { // @ts-ignore return labvalues2lchvalues(...hwb2oklabvalues(token)); } function cmyk2oklchvalues(token) { const values = cmyk2srgbvalues(token); // @ts-ignore return values == null ? null : srgb2oklch(...values); } function lab2oklchvalues(token) { const values = lab2oklabvalues(token); if (values == null) { return null; } // @ts-ignore return labvalues2lchvalues(...values); } function lch2oklchvalues(token) { const values = lch2oklabvalues(token); if (values == null) { return null; } // @ts-ignore return labvalues2lchvalues(...values); } function oklab2oklchvalues(token) { const values = getOKLABComponents(token); if (values == null) { return null; } // @ts-ignore return labvalues2lchvalues(...values); } function srgb2oklch(r, g, blue, alpha) { // @ts-ignore return labvalues2lchvalues(...srgb2oklab(r, g, blue, alpha)); } function getOKLCHComponents(token) { const components = getColorComponents(token); if (components == null) { return null; } for (let i = 0; i < components.length; i++) { if (![ EnumToken.NumberTokenType, EnumToken.PercentageTokenType, EnumToken.AngleTokenType, EnumToken.IdenTokenType, ].includes(components[i].typ)) { return []; } } // @ts-ignore let t = components[0]; // @ts-ignore const l = getNumber(t); // @ts-ignore t = components[1]; // @ts-ignore const c = getNumber(t) * (t.typ == EnumToken.PercentageTokenType ? 0.4 : 1); // @ts-ignore t = components[2]; // @ts-ignore const h = getAngle(t) * 360; // @ts-ignore t = components[3]; // @ts-ignore const alpha = t == null || (t.typ == EnumToken.IdenTokenType && t.val == "none") ? 1 : getNumber(t); return [l, c, h, alpha]; } export { cmyk2oklchToken, cmyk2oklchvalues, color2oklchToken, getOKLCHComponents, hex2oklchToken, hex2oklchvalues, hsl2oklchToken, hsl2oklchvalues, hwb2oklchToken, hwb2oklchvalues, lab2oklchToken, lab2oklchvalues, lch2oklchToken, lch2oklchvalues, oklab2oklchToken, oklab2oklchvalues, rgb2oklchToken, rgb2oklchvalues, srgb2oklch };