vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
129 lines (128 loc) • 3.85 kB
JavaScript
import { colorKeywords as d } from "./data.mjs";
const p = (n) => {
const t = n.toString(16).toUpperCase();
return t.length == 1 ? "0" + t : t;
}, g = (n) => n.length < 0 || n.length > 1 ? "0" : isNaN(Number(n)) ? ["A", "B", "C", "D", "E", "F"].includes(n.toUpperCase()) ? n.toUpperCase() : "0" : n, b = (n) => {
if (!n || n.length < 3)
return "#000000FF";
let t = n.toUpperCase();
if (t.startsWith("#") && (t = t.substring(1)), t.length < 3)
return "#000000FF";
let e, s, r, o;
if (e = s = r = "00", o = "FF", t.length === 3) {
const a = t.repeat(2).split("").map((i) => g(i));
e = a[0] + a[1], s = a[2] + a[3], r = a[4] + a[5];
} else if (t.length >= 6) {
const c = t.split("").map((a) => g(a));
e = c[0] + c[1], s = c[2] + c[3], r = c[4] + c[5], c.length === 8 && (o = c[6] + c[7]);
}
return `#${e}${s}${r}${o}`;
}, f = (n) => {
const t = /rgba?\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})(?:,\s*([\d.]+))?\)/, e = n.match(t);
if (e) {
const s = e[1], r = e[2], o = e[3], c = e[4] || 1;
return {
r: Number(s),
g: Number(r),
b: Number(o),
a: Number(c)
};
} else
return { r: 0, g: 0, b: 0, a: 1 };
}, M = (n) => {
const t = (c) => c > 255 ? 255 : c < 0 ? 0 : Math.round(c), e = n / 60 * 255, s = t(Math.abs(e - 765) - 255), r = t(510 - Math.abs(e - 510)), o = t(510 - Math.abs(e - 1020));
return { r: s, g: r, b: o };
}, m = (n) => {
const { r: t, g: e, b: s } = n, r = p(Math.round(t)), o = p(Math.round(e)), c = p(Math.round(s));
return `#${r}${o}${c}`;
}, C = (n) => {
const t = (i, l) => {
let h = "";
for (let u = 0; u < l; u++)
h += i;
return h;
}, e = (i, l) => {
let h = "";
for (const u of i)
h += t(u, l);
return h;
}, s = n.substring(1), r = +("0x" + (s.length < 6 ? e(s, 2) : s)), o = r >> 16, c = r >> 8 & 255, a = r & 255;
return { r: o, g: c, b: a };
}, F = ({ r: n, g: t, b: e }) => {
n = n / 255, t = t / 255, e = e / 255;
const s = Math.max(n, t, e), r = Math.min(n, t, e), o = s - r, c = s, a = s === 0 ? 0 : o / s;
let i = 0;
if (o !== 0) {
switch (s) {
case n:
i = (t - e) / o + (t < e ? 6 : 0);
break;
case t:
i = (e - n) / o + 2;
break;
case e:
i = (n - t) / o + 4;
break;
}
i = i / 6;
}
return { h: i * 360, s: a, v: c };
}, k = ({ h: n, s: t, v: e }) => {
let s = 0, r = 0, o = 0;
t < 0 && (t = 0), t > 1 && (t = 1), e < 0 && (e = 0), e > 1 && (e = 1), n %= 360, n < 0 && (n += 360);
const c = n / 60, a = Math.floor(c), i = c - a, l = e * (1 - t), h = e * (1 - t * i), u = e * (1 - t * (1 - i));
switch (a) {
case 0:
s = e, r = u, o = l;
break;
case 1:
s = h, r = e, o = l;
break;
case 2:
s = l, r = e, o = u;
break;
case 3:
s = l, r = h, o = e;
break;
case 4:
s = u, r = l, o = e;
break;
case 5:
s = e, r = l, o = h;
break;
}
return {
r: Math.round(s * 255),
g: Math.round(r * 255),
b: Math.round(o * 255)
};
}, B = (n) => {
let t = [];
if (t = b(n).slice(1).split(""), n.startsWith("#"))
t = b(n).slice(1).split("");
else if (n.startsWith("rgb") || n.startsWith("rgba")) {
const h = f(n), u = m(h) + p(Math.round(h.a * 255));
t = b(u).slice(1).split("");
} else {
const h = d?.[n] ?? "#000000FF";
t = b(h).slice(1).split("");
}
const e = t[0] + t[1], s = t[2] + t[3], r = t[4] + t[5], o = t[6] + t[7], c = parseInt(e, 16), a = parseInt(s, 16), i = parseInt(r, 16), l = parseInt(o, 16) / 255;
return {
hex: "#" + e + s + r,
hexa: "#" + e + s + r + o,
r: c,
g: a,
b: i,
a: l
};
};
export {
C as HEXtoRGB,
k as HSVtoRGB,
M as HUEtoRGB,
m as RGBtoHEX,
F as RGBtoHSV,
p as componentToHex,
B as parseColor
};