dk-plus
Version:
62 lines (61 loc) • 2.98 kB
JavaScript
const r = (t, o, c) => Math.min(c, Math.max(o, t)), m = (t) => Math.round(t), $ = (t) => r(m(t), 0, 255).toString(16).padStart(2, "0").toUpperCase(), C = (t) => {
const o = (t.h % 360 + 360) % 360, c = r(t.s, 0, 100) / 100, n = r(t.v, 0, 100) / 100, a = r(t.a, 0, 1), s = n * c, i = s * (1 - Math.abs(o / 60 % 2 - 1)), l = n - s;
let e = 0, u = 0, f = 0;
return o < 60 ? (e = s, u = i, f = 0) : o < 120 ? (e = i, u = s, f = 0) : o < 180 ? (e = 0, u = s, f = i) : o < 240 ? (e = 0, u = i, f = s) : o < 300 ? (e = i, u = 0, f = s) : (e = s, u = 0, f = i), {
r: m((e + l) * 255),
g: m((u + l) * 255),
b: m((f + l) * 255),
a
};
}, I = (t) => {
const o = r(t.r, 0, 255) / 255, c = r(t.g, 0, 255) / 255, n = r(t.b, 0, 255) / 255, a = r(t.a, 0, 1), s = Math.max(o, c, n), i = Math.min(o, c, n), l = s - i;
let e = 0;
l !== 0 && (s === o ? e = 60 * ((c - n) / l % 6) : s === c ? e = 60 * ((n - o) / l + 2) : e = 60 * ((o - c) / l + 4)), e < 0 && (e += 360);
const u = s === 0 ? 0 : l / s, f = s;
return {
h: e,
s: u * 100,
v: f * 100,
a
};
}, d = (t) => {
const o = r(m(t.r), 0, 255), c = r(m(t.g), 0, 255), n = r(m(t.b), 0, 255), a = r(t.a, 0, 1);
return `rgba(${o}, ${c}, ${n}, ${Number(a.toFixed(3))})`;
}, T = (t) => `#${$(t.r)}${$(t.g)}${$(t.b)}`, F = (t) => {
const o = t.trim(), c = /^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.exec(o);
if (!c)
return null;
let n = c[1];
n.length === 3 && (n = n.split("").map((l) => l + l).join(""));
const a = parseInt(n.slice(0, 2), 16), s = parseInt(n.slice(2, 4), 16), i = parseInt(n.slice(4, 6), 16);
return { r: a, g: s, b: i, a: 1 };
}, H = (t) => {
const o = t.trim(), c = /^rgba?\(([^)]+)\)$/.exec(o);
if (!c)
return null;
const n = c[1].split(",").map((e) => e.trim()).filter(Boolean);
if (n.length < 3)
return null;
const a = Number(n[0]), s = Number(n[1]), i = Number(n[2]), l = n.length >= 4 ? Number(n[3]) : 1;
return [a, s, i, l].some((e) => Number.isNaN(e)) ? null : { r: r(a, 0, 255), g: r(s, 0, 255), b: r(i, 0, 255), a: r(l, 0, 1) };
}, R = (t) => t ? F(t) || H(t) : null, S = (t, o, c) => {
if (o === "hex" && !c)
return T(t);
if (o === "rgb") {
const g = r(m(t.r), 0, 255), M = r(m(t.g), 0, 255), N = r(m(t.b), 0, 255);
return c ? d(t) : `rgb(${g}, ${M}, ${N})`;
}
const n = r(m(t.r), 0, 255) / 255, a = r(m(t.g), 0, 255) / 255, s = r(m(t.b), 0, 255) / 255, i = Math.max(n, a, s), l = Math.min(n, a, s), e = i - l;
let u = 0;
e !== 0 && (i === n ? u = 60 * ((a - s) / e % 6) : i === a ? u = 60 * ((s - n) / e + 2) : u = 60 * ((n - a) / e + 4)), u < 0 && (u += 360);
const f = (i + l) / 2, h = e === 0 ? 0 : e / (1 - Math.abs(2 * f - 1)), b = m(u), p = m(h * 100), x = m(f * 100);
return c ? `hsla(${b}, ${p}%, ${x}%, ${Number(r(t.a, 0, 1).toFixed(3))})` : `hsl(${b}, ${p}%, ${x}%)`;
};
export {
S as formatColor,
C as hsvaToRgba,
R as parseToRgba,
d as rgbaToCss,
T as rgbaToHex,
I as rgbaToHsva
};