huexjs
Version:
huexjs is a lightweight and efficient JavaScript library for seamless color conversions. Convert colors between HEX, RGB, HSL, CMYK, and more with ease. Designed for developers who need a reliable and fast solution for color transformations in web applica
97 lines (96 loc) • 3.03 kB
JavaScript
function i(e) {
let n = e.replace(/^#/, "");
return n.length === 3 && (n = n.split("").map((r) => r + r).join("")), /^([0-9A-F]{6})$/i.test(n) ? {
r: parseInt(n.substring(0, 2), 16),
g: parseInt(n.substring(2, 4), 16),
b: parseInt(n.substring(4, 6), 16)
} : null;
}
function h({ r: e, g: n, b: r }) {
return `#${(1 << 24 | e << 16 | n << 8 | r).toString(16).slice(1).toUpperCase()}`;
}
function M({ r: e, g: n, b: r }) {
e /= 255, n /= 255, r /= 255;
let t = Math.max(e, n, r), s = Math.min(e, n, r), u = 0, a, o = (t + s) / 2;
if (t === s)
u = a = 0;
else {
let l = t - s;
switch (a = o > 0.5 ? l / (2 - t - s) : l / (t + s), t) {
case e:
u = (n - r) / l + (n < r ? 6 : 0);
break;
case n:
u = (r - e) / l + 2;
break;
case r:
u = (e - n) / l + 4;
break;
}
u *= 60;
}
return { h: Math.round(u), s: Math.round(a * 100), l: Math.round(o * 100) };
}
function c({ h: e, s: n, l: r }) {
n /= 100, r /= 100;
let t = (1 - Math.abs(2 * r - 1)) * n, s = t * (1 - Math.abs(e / 60 % 2 - 1)), u = r - t / 2, a = 0, o = 0, l = 0;
return e < 60 ? (a = t, o = s) : e < 120 ? (a = s, o = t) : e < 180 ? (o = t, l = s) : e < 240 ? (o = s, l = t) : e < 300 ? (a = s, l = t) : (a = t, l = s), {
r: Math.round((a + u) * 255),
g: Math.round((o + u) * 255),
b: Math.round((l + u) * 255)
};
}
function f({ r: e, g: n, b: r }) {
let t = 1 - e / 255, s = 1 - n / 255, u = 1 - r / 255, a = Math.min(t, s, u);
return a === 1 ? { c: 0, m: 0, y: 0, k: 1 } : {
c: Math.round((t - a) / (1 - a) * 100),
m: Math.round((s - a) / (1 - a) * 100),
y: Math.round((u - a) / (1 - a) * 100),
k: Math.round(a * 100)
};
}
function d({ c: e, m: n, y: r, k: t }) {
return {
r: Math.round(255 * (1 - e / 100) * (1 - t / 100)),
g: Math.round(255 * (1 - n / 100) * (1 - t / 100)),
b: Math.round(255 * (1 - r / 100) * (1 - t / 100))
};
}
function m({ r: e, g: n, b: r }) {
e /= 255, n /= 255, r /= 255;
let t = Math.max(e, n, r), s = Math.min(e, n, r), u = 0, a, o = t, l = t - s;
if (a = t === 0 ? 0 : l / t, t !== s) {
switch (t) {
case e:
u = (n - r) / l + (n < r ? 6 : 0);
break;
case n:
u = (r - e) / l + 2;
break;
case r:
u = (e - n) / l + 4;
break;
}
u *= 60;
}
return { h: Math.round(u), s: Math.round(a * 100), v: Math.round(o * 100) };
}
function b({ h: e, s: n, v: r }) {
n /= 100, r /= 100;
let t = r * n, s = t * (1 - Math.abs(e / 60 % 2 - 1)), u = r - t, a = 0, o = 0, l = 0;
return e < 60 ? (a = t, o = s) : e < 120 ? (a = s, o = t) : e < 180 ? (o = t, l = s) : e < 240 ? (o = s, l = t) : e < 300 ? (a = s, l = t) : (a = t, l = s), {
r: Math.round((a + u) * 255),
g: Math.round((o + u) * 255),
b: Math.round((l + u) * 255)
};
}
export {
d as cmykToRgb,
i as hexToRgb,
c as hslToRgb,
b as hsvToRgb,
f as rgbToCmyk,
h as rgbToHex,
M as rgbToHsl,
m as rgbToHsv
};