stylelint
Version:
A mighty CSS linter that helps you avoid errors and enforce conventions.
114 lines (89 loc) • 2.92 kB
JavaScript
// NOTICE: This file is generated by Rollup. To modify it,
// please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
;
const colord$1 = require('colord');
const valueParser = require('postcss-value-parser');
const namesPlugin = require('colord/plugins/names');
const hwbPlugin = require('colord/plugins/hwb');
const labPlugin = require('colord/plugins/lab');
const lchPlugin = require('colord/plugins/lch');
colord$1.extend([
// Type definitions are not compatible with commonjs.
/** @type {any} */ (namesPlugin),
/** @type {any} */ (hwbPlugin),
/** @type {any} */ (labPlugin),
/** @type {any} */ (lchPlugin),
/* Syntaxes that is removed in Color Module Level 4 specification. */
// hwb() with comma
(_colordClass, parsers) => {
parsers.string.push([parseHwbWithCommaString, /** @type {any} */ ('hwb-with-comma')]);
},
// gray()
(_colordClass, parsers) => {
parsers.string.push([parseGrayString, /** @type {any} */ ('gray')]);
},
]);
const colord = colord$1.colord;
/**
* Parses a valid hwb with comma CSS color function
* https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hwb()#syntax
* @param {string} input
* @returns {import('colord').RgbaColor | null}
*/
function parseHwbWithCommaString(input) {
input = input.toLowerCase();
if (!input.startsWith('hwb(') || !input.endsWith(')') || input.includes('/')) {
return null;
}
const [hue, whiteness = '', blackness = '', alpha, ...extraArgs] = input.slice(4, -1).split(',');
if (!hue || !hue.trim() || !whiteness.trim() || !blackness.trim() || extraArgs.length > 0) {
return null;
}
// Change the delimiter and parse with colord.
const colordInstance = colord(
`hwb(${hue} ${whiteness} ${blackness}${alpha ? ` / ${alpha}` : ''})`,
);
if (!colordInstance.isValid()) {
return null;
}
return colordInstance.rgba;
}
/**
* Parses a valid gray() CSS color function
* @param {string} input
* @returns {import('colord').RgbaColor | null}
*/
function parseGrayString(input) {
input = input.toLowerCase();
if (!input.startsWith('gray(') || !input.endsWith(')')) {
return null;
}
const [lightness, alpha, ...extraArgs] = input.slice(5, -1).split(',');
if (!lightness || extraArgs.length > 0) {
return null;
}
const lightnessWithUnit = valueParser.unit(lightness.trim());
if (!lightnessWithUnit || !['', '%'].includes(lightnessWithUnit.unit)) {
return null;
}
/**
* @type {import('colord').LabColor | import('colord').LabaColor}
*/
let colorObject = {
l: Number(lightnessWithUnit.number),
a: 0,
b: 0,
};
if (alpha) {
const alphaWithUnit = valueParser.unit(alpha.trim());
if (!alphaWithUnit || !['', '%'].includes(alphaWithUnit.unit)) {
return null;
}
colorObject = {
...colorObject,
alpha: Number(alphaWithUnit.number) / (alphaWithUnit.unit ? 100 : 1),
};
}
return colord(colorObject).rgba;
}
exports.colord = colord;