diginext-utils
Version:
README.md
86 lines (85 loc) • 3.67 kB
JavaScript
export const random = (hex = false) => {
return (hex ? "#" : "") + Math.floor(Math.random() * 16777215).toString(16);
};
// This function (pSBC) will take a HEX or RGB web color.
// pSBC can shade it darker or lighter, or blend it with a second color, and can also pass it right thru but convert from Hex to RGB (Hex2RGB) or RGB to Hex (RGB2Hex).
// All without you even knowing what color format you are using.
// Version 4.0 (pref: https://github.com/PimpTrizkit/PJs/wiki/12.-Shade,-Blend-and-Convert-a-Web-Color-(pSBC.js));
export const pSBC = (p, c0, c1, l) => {
let r, g, b, P, f, t, h, i = parseInt, m = Math.round, a = typeof c1 == "string";
if (typeof p != "number" || p < -1 || p > 1 || typeof c0 != "string" || (c0[0] != "r" && c0[0] != "#") || (c1 && !a))
return null;
const pSBCr = (d) => {
let n = d.length, x = { r: 0, g: 0, b: 0, a: 1 };
if (n > 9) {
([r, g, b, a] = d = d.split(",")), (n = d.length);
if (n < 3 || n > 4)
return null;
(x.r = i(r[3] == "a" ? r.slice(5) : r.slice(4))), (x.g = i(g)), (x.b = i(b)), (x.a = a ? parseFloat(a.toString()) : -1);
}
else {
if (n == 8 || n == 6 || n < 4)
return null;
if (n < 6)
d = "#" + d[1] + d[1] + d[2] + d[2] + d[3] + d[3] + (n > 4 ? d[4] + d[4] : "");
d = i(d.slice(1), 16);
if (n == 9 || n == 5)
(x.r = (d >> 24) & 255), (x.g = (d >> 16) & 255), (x.b = (d >> 8) & 255), (x.a = m((d & 255) / 0.255) / 1000);
else
(x.r = d >> 16), (x.g = (d >> 8) & 255), (x.b = d & 255), (x.a = -1);
}
return x;
};
(h = c0.length > 9),
(h = a ? (c1.length > 9 ? true : c1 == "c" ? !h : false) : h),
(f = pSBCr(c0)),
(P = p < 0),
(t = c1 && c1 != "c" ? pSBCr(c1) : P ? { r: 0, g: 0, b: 0, a: -1 } : { r: 255, g: 255, b: 255, a: -1 }),
(p = P ? p * -1 : p),
(P = 1 - p);
if (!f || !t || typeof f == "undefined")
return null;
else if (l)
(r = m(P * f.r + p * t.r)), (g = m(P * f.g + p * t.g)), (b = m(P * f.b + p * t.b));
else
(r = m((P * f.r ** 2 + p * t.r ** 2) ** 0.5)), (g = m((P * f.g ** 2 + p * t.g ** 2) ** 0.5)), (b = m((P * f.b ** 2 + p * t.b ** 2) ** 0.5));
(a = f.a), (t = t.a), (f = a >= 0 || t >= 0), (a = f ? (a < 0 ? t : t < 0 ? a : a * P + t * p) : 0);
if (h)
return "rgb" + (f ? "a(" : "(") + r + "," + g + "," + b + (f ? "," + m(a * 1000) / 1000 : "") + ")";
else
return "#" + (4294967296 + r * 16777216 + g * 65536 + b * 256 + (f ? m(a * 255) : 0)).toString(16).slice(1, f ? undefined : -2);
};
export const hexToRgb = (hex) => {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result
? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16),
}
: null;
};
export const hexDarken = (hex, amount) => {
return pSBC(-amount, hex);
};
export const hexLighten = (hex, amount) => {
return pSBC(amount, hex);
};
export const RGBToHex = (rgb) => {
return pSBC(0, rgb, "c", true);
};
export const hexToVBColor = (rrggbb) => {
rrggbb = rrggbb.replace("#", "");
const bbggrr = rrggbb.substring(4, 2) + rrggbb.substring(2, 2) + rrggbb.substring(0, 2);
return parseInt(bbggrr, 16);
};
const color = {
random,
pSBC,
hexToRgb,
hexDarken,
hexLighten,
RGBToHex,
hexToVBColor,
};
export default color;