UNPKG

@tbela99/css-parser

Version:

CSS parser for node and the browser

103 lines (100 loc) 2.92 kB
import { hsl2hsv } from './hsv.js'; import './utils/constants.js'; import { getComponents } from './utils/components.js'; import { getAngle, getNumber } from './color.js'; import { EnumToken } from '../../ast/types.js'; import '../../ast/minify.js'; import '../../ast/walk.js'; import '../../parser/parse.js'; import { lch2srgb, lab2srgb, oklch2srgb, oklab2srgb } from './srgb.js'; import '../sourcemap/lib/encode.js'; import '../../parser/utils/config.js'; function rgb2hwb(token) { // @ts-ignore return srgb2hwb(...getComponents(token).map((t, index) => { if (index == 3 && t.typ == EnumToken.IdenTokenType && t.val == 'none') { return 1; } return getNumber(t) / 255; })); } function hsl2hwb(token) { // @ts-ignore return hsl2hwbvalues(...getComponents(token).map((t, index) => { if (index == 3 && (t.typ == EnumToken.IdenTokenType && t.val == 'none')) { return 1; } if (index == 0) { return getAngle(t); } return getNumber(t); })); } function lab2hwb(token) { // @ts-ignore return srgb2hwb(...lab2srgb(token)); } function lch2hwb(token) { // @ts-ignore return srgb2hwb(...lch2srgb(token)); } function oklab2hwb(token) { // @ts-ignore return srgb2hwb(...oklab2srgb(token)); } function oklch2hwb(token) { // @ts-ignore return srgb2hwb(...oklch2srgb(token)); } function rgb2hue(r, g, b, fallback = 0) { let value = rgb2value(r, g, b); let whiteness = rgb2whiteness(r, g, b); let delta = value - whiteness; if (delta > 0) { // calculate segment let segment = value === r ? (g - b) / delta : (value === g ? (b - r) / delta : (r - g) / delta); // calculate shift let shift = value === r ? segment < 0 ? 360 / 60 : 0 / 60 : (value === g ? 120 / 60 : 240 / 60); // calculate hue return (segment + shift) * 60; } return fallback; } function rgb2value(r, g, b) { return Math.max(r, g, b); } function rgb2whiteness(r, g, b) { return Math.min(r, g, b); } function srgb2hwb(r, g, b, a = null, fallback = 0) { r *= 100; g *= 100; b *= 100; let hue = rgb2hue(r, g, b, fallback); let whiteness = rgb2whiteness(r, g, b); let value = Math.round(rgb2value(r, g, b)); let blackness = 100 - value; const result = [hue / 360, whiteness / 100, blackness / 100]; if (a != null) { result.push(a); } return result; } function hsv2hwb(h, s, v, a = null) { const result = [h, (1 - s) * v, 1 - v]; if (a != null) { result.push(a); } return result; } function hsl2hwbvalues(h, s, l, a = null) { // @ts-ignore return hsv2hwb(...hsl2hsv(h, s, l, a)); } export { hsl2hwb, hsl2hwbvalues, hsv2hwb, lab2hwb, lch2hwb, oklab2hwb, oklch2hwb, rgb2hwb, srgb2hwb };