@spellix/magic-color-transformer
Version:
Magic color transform library
79 lines (74 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const rgb = require('./rgb.js');
const hexRegex = /^#?([\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i;
function isHex(color) {
return hexRegex.test(color);
}
function parseHex(color) {
let value;
let alpha = 1;
const match = hexRegex.exec(color);
if (!match) throw new Error("Invalid HEX color format.");
if (match[1].length === 3) {
value = match[1].split("").map((c) => c + c).join("");
} else if (match[1].length === 6) {
value = match[1];
} else {
value = match[1].slice(0, 6);
alpha = Number.parseInt(match[1].slice(6, 8), 16) / 255;
}
return { values: `#${value}`, alpha };
}
function hexToRgb(color) {
color = color.slice(1);
const r = Number.parseInt(color.slice(0, 2), 16);
const g = Number.parseInt(color.slice(2, 4), 16);
const b = Number.parseInt(color.slice(4, 6), 16);
return [r, g, b];
}
function hexToHsl(color) {
const [r, g, b] = hexToRgb(color).map((i) => i / 255);
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
let h = 0;
let s = 0;
const l = (max + min) / 2;
if (max !== min) {
const delta = max - min;
s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
switch (max) {
case r: {
h = (g - b) / delta + (g < b ? 6 : 0);
break;
}
case g: {
h = (b - r) / delta + 2;
break;
}
case b: {
h = (r - g) / delta + 4;
break;
}
}
h *= 60;
}
return [h, s * 100, l * 100];
}
function hexToHsb(color) {
return rgb.rgbToHsb(hexToRgb(color));
}
function hexToLab(color) {
return rgb.rgbToLab(hexToRgb(color));
}
function toHex(c) {
const hex = Math.round(c).toString(16);
return hex.length === 1 ? `0${hex}` : hex;
}
exports.hexToHsb = hexToHsb;
exports.hexToHsl = hexToHsl;
exports.hexToLab = hexToLab;
exports.hexToRgb = hexToRgb;
exports.isHex = isHex;
exports.parseHex = parseHex;
exports.toHex = toHex;