@kurkle/color
Advanced tools
Comparing version 0.1.9 to 0.2.0
/*! | ||
* @kurkle/color v0.1.9 | ||
* @kurkle/color v0.2.0 | ||
* https://github.com/kurkle/color#readme | ||
* (c) 2020 Jukka Kurkela | ||
* (c) 2022 Jukka Kurkela | ||
* Released under the MIT License | ||
*/ | ||
const map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15}; | ||
const hex = '0123456789ABCDEF'; | ||
const h1 = (b) => hex[b & 0xF]; | ||
const h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF]; | ||
const eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF)); | ||
function isShort(v) { | ||
return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); | ||
} | ||
function hexParse(str) { | ||
var len = str.length; | ||
var ret; | ||
if (str[0] === '#') { | ||
if (len === 4 || len === 5) { | ||
ret = { | ||
r: 255 & map[str[1]] * 17, | ||
g: 255 & map[str[2]] * 17, | ||
b: 255 & map[str[3]] * 17, | ||
a: len === 5 ? map[str[4]] * 17 : 255 | ||
}; | ||
} else if (len === 7 || len === 9) { | ||
ret = { | ||
r: map[str[1]] << 4 | map[str[2]], | ||
g: map[str[3]] << 4 | map[str[4]], | ||
b: map[str[5]] << 4 | map[str[6]], | ||
a: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255 | ||
}; | ||
} | ||
} | ||
return ret; | ||
} | ||
function hexString(v) { | ||
var f = isShort(v) ? h1 : h2; | ||
return v | ||
? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '') | ||
: v; | ||
} | ||
function round(v) { | ||
return v + 0.5 | 0; | ||
return v + 0.5 | 0; | ||
} | ||
const lim = (v, l, h) => Math.max(Math.min(v, h), l); | ||
function p2b(v) { | ||
return lim(round(v * 2.55), 0, 255); | ||
return lim(round(v * 2.55), 0, 255); | ||
} | ||
function b2p(v) { | ||
return lim(round(v / 2.55), 0, 100); | ||
return lim(round(v / 2.55), 0, 100); | ||
} | ||
function n2b(v) { | ||
return lim(round(v * 255), 0, 255); | ||
return lim(round(v * 255), 0, 255); | ||
} | ||
function b2n(v) { | ||
return lim(round(v / 2.55) / 100, 0, 1); | ||
return lim(round(v / 2.55) / 100, 0, 1); | ||
} | ||
function n2p(v) { | ||
return lim(round(v * 100), 0, 100); | ||
return lim(round(v * 100), 0, 100); | ||
} | ||
const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; | ||
function rgbParse(str) { | ||
const m = RGB_RE.exec(str); | ||
let a = 255; | ||
let r, g, b; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[7] !== r) { | ||
const v = +m[7]; | ||
a = 255 & (m[8] ? p2b(v) : v * 255); | ||
} | ||
r = +m[1]; | ||
g = +m[3]; | ||
b = +m[5]; | ||
r = 255 & (m[2] ? p2b(r) : r); | ||
g = 255 & (m[4] ? p2b(g) : g); | ||
b = 255 & (m[6] ? p2b(b) : b); | ||
return { | ||
r: r, | ||
g: g, | ||
b: b, | ||
a: a | ||
}; | ||
const map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15}; | ||
const hex = [...'0123456789ABCDEF']; | ||
const h1 = b => hex[b & 0xF]; | ||
const h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF]; | ||
const eq = b => ((b & 0xF0) >> 4) === (b & 0xF); | ||
const isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); | ||
function hexParse(str) { | ||
var len = str.length; | ||
var ret; | ||
if (str[0] === '#') { | ||
if (len === 4 || len === 5) { | ||
ret = { | ||
r: 255 & map$1[str[1]] * 17, | ||
g: 255 & map$1[str[2]] * 17, | ||
b: 255 & map$1[str[3]] * 17, | ||
a: len === 5 ? map$1[str[4]] * 17 : 255 | ||
}; | ||
} else if (len === 7 || len === 9) { | ||
ret = { | ||
r: map$1[str[1]] << 4 | map$1[str[2]], | ||
g: map$1[str[3]] << 4 | map$1[str[4]], | ||
b: map$1[str[5]] << 4 | map$1[str[6]], | ||
a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255 | ||
}; | ||
} | ||
} | ||
return ret; | ||
} | ||
function rgbString(v) { | ||
return v && ( | ||
v.a < 255 | ||
? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` | ||
: `rgb(${v.r}, ${v.g}, ${v.b})` | ||
); | ||
const alpha = (a, f) => a < 255 ? f(a) : ''; | ||
function hexString(v) { | ||
var f = isShort(v) ? h1 : h2; | ||
return v | ||
? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) | ||
: undefined; | ||
} | ||
@@ -99,470 +65,521 @@ | ||
function hsl2rgbn(h, s, l) { | ||
const a = s * Math.min(l, 1 - l); | ||
const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); | ||
return [f(0), f(8), f(4)]; | ||
const a = s * Math.min(l, 1 - l); | ||
const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); | ||
return [f(0), f(8), f(4)]; | ||
} | ||
function hsv2rgbn(h, s, v) { | ||
const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); | ||
return [f(5), f(3), f(1)]; | ||
const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); | ||
return [f(5), f(3), f(1)]; | ||
} | ||
function hwb2rgbn(h, w, b) { | ||
const rgb = hsl2rgbn(h, 1, 0.5); | ||
let i; | ||
if (w + b > 1) { | ||
i = 1 / (w + b); | ||
w *= i; | ||
b *= i; | ||
} | ||
for (i = 0; i < 3; i++) { | ||
rgb[i] *= 1 - w - b; | ||
rgb[i] += w; | ||
} | ||
return rgb; | ||
const rgb = hsl2rgbn(h, 1, 0.5); | ||
let i; | ||
if (w + b > 1) { | ||
i = 1 / (w + b); | ||
w *= i; | ||
b *= i; | ||
} | ||
for (i = 0; i < 3; i++) { | ||
rgb[i] *= 1 - w - b; | ||
rgb[i] += w; | ||
} | ||
return rgb; | ||
} | ||
function hueValue(r, g, b, d, max) { | ||
if (r === max) { | ||
return ((g - b) / d) + (g < b ? 6 : 0); | ||
} | ||
if (g === max) { | ||
return (b - r) / d + 2; | ||
} | ||
return (r - g) / d + 4; | ||
} | ||
function rgb2hsl(v) { | ||
const range = 255; | ||
const r = v.r / range; | ||
const g = v.g / range; | ||
const b = v.b / range; | ||
const max = Math.max(r, g, b); | ||
const min = Math.min(r, g, b); | ||
const l = (max + min) / 2; | ||
let h, s, d; | ||
if (max !== min) { | ||
d = max - min; | ||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | ||
h = max === r | ||
? ((g - b) / d) + (g < b ? 6 : 0) | ||
: max === g | ||
? (b - r) / d + 2 | ||
: (r - g) / d + 4; | ||
h = h * 60 + 0.5; | ||
} | ||
return [h | 0, s || 0, l]; | ||
const range = 255; | ||
const r = v.r / range; | ||
const g = v.g / range; | ||
const b = v.b / range; | ||
const max = Math.max(r, g, b); | ||
const min = Math.min(r, g, b); | ||
const l = (max + min) / 2; | ||
let h, s, d; | ||
if (max !== min) { | ||
d = max - min; | ||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | ||
h = hueValue(r, g, b, d, max); | ||
h = h * 60 + 0.5; | ||
} | ||
return [h | 0, s || 0, l]; | ||
} | ||
function calln(f, a, b, c) { | ||
return ( | ||
Array.isArray(a) | ||
? f(a[0], a[1], a[2]) | ||
: f(a, b, c) | ||
).map(n2b); | ||
return ( | ||
Array.isArray(a) | ||
? f(a[0], a[1], a[2]) | ||
: f(a, b, c) | ||
).map(n2b); | ||
} | ||
function hsl2rgb(h, s, l) { | ||
return calln(hsl2rgbn, h, s, l); | ||
return calln(hsl2rgbn, h, s, l); | ||
} | ||
function hwb2rgb(h, w, b) { | ||
return calln(hwb2rgbn, h, w, b); | ||
return calln(hwb2rgbn, h, w, b); | ||
} | ||
function hsv2rgb(h, s, v) { | ||
return calln(hsv2rgbn, h, s, v); | ||
return calln(hsv2rgbn, h, s, v); | ||
} | ||
function hue(h) { | ||
return (h % 360 + 360) % 360; | ||
return (h % 360 + 360) % 360; | ||
} | ||
function hueParse(str) { | ||
const m = HUE_RE.exec(str); | ||
let a = 255; | ||
let v; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[5] !== v) { | ||
a = m[6] ? p2b(+m[5]) : n2b(+m[5]); | ||
} | ||
const h = hue(+m[2]); | ||
const p1 = +m[3] / 100; | ||
const p2 = +m[4] / 100; | ||
if (m[1] === 'hwb') { | ||
v = hwb2rgb(h, p1, p2); | ||
} else if (m[1] === 'hsv') { | ||
v = hsv2rgb(h, p1, p2); | ||
} else { | ||
v = hsl2rgb(h, p1, p2); | ||
} | ||
return { | ||
r: v[0], | ||
g: v[1], | ||
b: v[2], | ||
a: a | ||
}; | ||
const m = HUE_RE.exec(str); | ||
let a = 255; | ||
let v; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[5] !== v) { | ||
a = m[6] ? p2b(+m[5]) : n2b(+m[5]); | ||
} | ||
const h = hue(+m[2]); | ||
const p1 = +m[3] / 100; | ||
const p2 = +m[4] / 100; | ||
if (m[1] === 'hwb') { | ||
v = hwb2rgb(h, p1, p2); | ||
} else if (m[1] === 'hsv') { | ||
v = hsv2rgb(h, p1, p2); | ||
} else { | ||
v = hsl2rgb(h, p1, p2); | ||
} | ||
return { | ||
r: v[0], | ||
g: v[1], | ||
b: v[2], | ||
a: a | ||
}; | ||
} | ||
function rotate(v, deg) { | ||
var h = rgb2hsl(v); | ||
h[0] = hue(h[0] + deg); | ||
h = hsl2rgb(h); | ||
v.r = h[0]; | ||
v.g = h[1]; | ||
v.b = h[2]; | ||
var h = rgb2hsl(v); | ||
h[0] = hue(h[0] + deg); | ||
h = hsl2rgb(h); | ||
v.r = h[0]; | ||
v.g = h[1]; | ||
v.b = h[2]; | ||
} | ||
function hslString(v) { | ||
if (!v) { | ||
return; | ||
} | ||
const a = rgb2hsl(v); | ||
const h = a[0]; | ||
const s = n2p(a[1]); | ||
const l = n2p(a[2]); | ||
return v.a < 255 | ||
? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` | ||
: `hsl(${h}, ${s}%, ${l}%)`; | ||
if (!v) { | ||
return; | ||
} | ||
const a = rgb2hsl(v); | ||
const h = a[0]; | ||
const s = n2p(a[1]); | ||
const l = n2p(a[2]); | ||
return v.a < 255 | ||
? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` | ||
: `hsl(${h}, ${s}%, ${l}%)`; | ||
} | ||
const map$1 = { | ||
x: 'dark', | ||
Z: 'light', | ||
Y: 're', | ||
X: 'blu', | ||
W: 'gr', | ||
V: 'medium', | ||
U: 'slate', | ||
A: 'ee', | ||
T: 'ol', | ||
S: 'or', | ||
B: 'ra', | ||
C: 'lateg', | ||
D: 'ights', | ||
R: 'in', | ||
Q: 'turquois', | ||
E: 'hi', | ||
P: 'ro', | ||
O: 'al', | ||
N: 'le', | ||
M: 'de', | ||
L: 'yello', | ||
F: 'en', | ||
K: 'ch', | ||
G: 'arks', | ||
H: 'ea', | ||
I: 'ightg', | ||
J: 'wh' | ||
const map = { | ||
x: 'dark', | ||
Z: 'light', | ||
Y: 're', | ||
X: 'blu', | ||
W: 'gr', | ||
V: 'medium', | ||
U: 'slate', | ||
A: 'ee', | ||
T: 'ol', | ||
S: 'or', | ||
B: 'ra', | ||
C: 'lateg', | ||
D: 'ights', | ||
R: 'in', | ||
Q: 'turquois', | ||
E: 'hi', | ||
P: 'ro', | ||
O: 'al', | ||
N: 'le', | ||
M: 'de', | ||
L: 'yello', | ||
F: 'en', | ||
K: 'ch', | ||
G: 'arks', | ||
H: 'ea', | ||
I: 'ightg', | ||
J: 'wh' | ||
}; | ||
const names = { | ||
OiceXe: 'f0f8ff', | ||
antiquewEte: 'faebd7', | ||
aqua: 'ffff', | ||
aquamarRe: '7fffd4', | ||
azuY: 'f0ffff', | ||
beige: 'f5f5dc', | ||
bisque: 'ffe4c4', | ||
black: '0', | ||
blanKedOmond: 'ffebcd', | ||
Xe: 'ff', | ||
XeviTet: '8a2be2', | ||
bPwn: 'a52a2a', | ||
burlywood: 'deb887', | ||
caMtXe: '5f9ea0', | ||
KartYuse: '7fff00', | ||
KocTate: 'd2691e', | ||
cSO: 'ff7f50', | ||
cSnflowerXe: '6495ed', | ||
cSnsilk: 'fff8dc', | ||
crimson: 'dc143c', | ||
cyan: 'ffff', | ||
xXe: '8b', | ||
xcyan: '8b8b', | ||
xgTMnPd: 'b8860b', | ||
xWay: 'a9a9a9', | ||
xgYF: '6400', | ||
xgYy: 'a9a9a9', | ||
xkhaki: 'bdb76b', | ||
xmagFta: '8b008b', | ||
xTivegYF: '556b2f', | ||
xSange: 'ff8c00', | ||
xScEd: '9932cc', | ||
xYd: '8b0000', | ||
xsOmon: 'e9967a', | ||
xsHgYF: '8fbc8f', | ||
xUXe: '483d8b', | ||
xUWay: '2f4f4f', | ||
xUgYy: '2f4f4f', | ||
xQe: 'ced1', | ||
xviTet: '9400d3', | ||
dAppRk: 'ff1493', | ||
dApskyXe: 'bfff', | ||
dimWay: '696969', | ||
dimgYy: '696969', | ||
dodgerXe: '1e90ff', | ||
fiYbrick: 'b22222', | ||
flSOwEte: 'fffaf0', | ||
foYstWAn: '228b22', | ||
fuKsia: 'ff00ff', | ||
gaRsbSo: 'dcdcdc', | ||
ghostwEte: 'f8f8ff', | ||
gTd: 'ffd700', | ||
gTMnPd: 'daa520', | ||
Way: '808080', | ||
gYF: '8000', | ||
gYFLw: 'adff2f', | ||
gYy: '808080', | ||
honeyMw: 'f0fff0', | ||
hotpRk: 'ff69b4', | ||
RdianYd: 'cd5c5c', | ||
Rdigo: '4b0082', | ||
ivSy: 'fffff0', | ||
khaki: 'f0e68c', | ||
lavFMr: 'e6e6fa', | ||
lavFMrXsh: 'fff0f5', | ||
lawngYF: '7cfc00', | ||
NmoncEffon: 'fffacd', | ||
ZXe: 'add8e6', | ||
ZcSO: 'f08080', | ||
Zcyan: 'e0ffff', | ||
ZgTMnPdLw: 'fafad2', | ||
ZWay: 'd3d3d3', | ||
ZgYF: '90ee90', | ||
ZgYy: 'd3d3d3', | ||
ZpRk: 'ffb6c1', | ||
ZsOmon: 'ffa07a', | ||
ZsHgYF: '20b2aa', | ||
ZskyXe: '87cefa', | ||
ZUWay: '778899', | ||
ZUgYy: '778899', | ||
ZstAlXe: 'b0c4de', | ||
ZLw: 'ffffe0', | ||
lime: 'ff00', | ||
limegYF: '32cd32', | ||
lRF: 'faf0e6', | ||
magFta: 'ff00ff', | ||
maPon: '800000', | ||
VaquamarRe: '66cdaa', | ||
VXe: 'cd', | ||
VScEd: 'ba55d3', | ||
VpurpN: '9370db', | ||
VsHgYF: '3cb371', | ||
VUXe: '7b68ee', | ||
VsprRggYF: 'fa9a', | ||
VQe: '48d1cc', | ||
VviTetYd: 'c71585', | ||
midnightXe: '191970', | ||
mRtcYam: 'f5fffa', | ||
mistyPse: 'ffe4e1', | ||
moccasR: 'ffe4b5', | ||
navajowEte: 'ffdead', | ||
navy: '80', | ||
Tdlace: 'fdf5e6', | ||
Tive: '808000', | ||
TivedBb: '6b8e23', | ||
Sange: 'ffa500', | ||
SangeYd: 'ff4500', | ||
ScEd: 'da70d6', | ||
pOegTMnPd: 'eee8aa', | ||
pOegYF: '98fb98', | ||
pOeQe: 'afeeee', | ||
pOeviTetYd: 'db7093', | ||
papayawEp: 'ffefd5', | ||
pHKpuff: 'ffdab9', | ||
peru: 'cd853f', | ||
pRk: 'ffc0cb', | ||
plum: 'dda0dd', | ||
powMrXe: 'b0e0e6', | ||
purpN: '800080', | ||
YbeccapurpN: '663399', | ||
Yd: 'ff0000', | ||
Psybrown: 'bc8f8f', | ||
PyOXe: '4169e1', | ||
saddNbPwn: '8b4513', | ||
sOmon: 'fa8072', | ||
sandybPwn: 'f4a460', | ||
sHgYF: '2e8b57', | ||
sHshell: 'fff5ee', | ||
siFna: 'a0522d', | ||
silver: 'c0c0c0', | ||
skyXe: '87ceeb', | ||
UXe: '6a5acd', | ||
UWay: '708090', | ||
UgYy: '708090', | ||
snow: 'fffafa', | ||
sprRggYF: 'ff7f', | ||
stAlXe: '4682b4', | ||
tan: 'd2b48c', | ||
teO: '8080', | ||
tEstN: 'd8bfd8', | ||
tomato: 'ff6347', | ||
Qe: '40e0d0', | ||
viTet: 'ee82ee', | ||
JHt: 'f5deb3', | ||
wEte: 'ffffff', | ||
wEtesmoke: 'f5f5f5', | ||
Lw: 'ffff00', | ||
LwgYF: '9acd32' | ||
const names$1 = { | ||
OiceXe: 'f0f8ff', | ||
antiquewEte: 'faebd7', | ||
aqua: 'ffff', | ||
aquamarRe: '7fffd4', | ||
azuY: 'f0ffff', | ||
beige: 'f5f5dc', | ||
bisque: 'ffe4c4', | ||
black: '0', | ||
blanKedOmond: 'ffebcd', | ||
Xe: 'ff', | ||
XeviTet: '8a2be2', | ||
bPwn: 'a52a2a', | ||
burlywood: 'deb887', | ||
caMtXe: '5f9ea0', | ||
KartYuse: '7fff00', | ||
KocTate: 'd2691e', | ||
cSO: 'ff7f50', | ||
cSnflowerXe: '6495ed', | ||
cSnsilk: 'fff8dc', | ||
crimson: 'dc143c', | ||
cyan: 'ffff', | ||
xXe: '8b', | ||
xcyan: '8b8b', | ||
xgTMnPd: 'b8860b', | ||
xWay: 'a9a9a9', | ||
xgYF: '6400', | ||
xgYy: 'a9a9a9', | ||
xkhaki: 'bdb76b', | ||
xmagFta: '8b008b', | ||
xTivegYF: '556b2f', | ||
xSange: 'ff8c00', | ||
xScEd: '9932cc', | ||
xYd: '8b0000', | ||
xsOmon: 'e9967a', | ||
xsHgYF: '8fbc8f', | ||
xUXe: '483d8b', | ||
xUWay: '2f4f4f', | ||
xUgYy: '2f4f4f', | ||
xQe: 'ced1', | ||
xviTet: '9400d3', | ||
dAppRk: 'ff1493', | ||
dApskyXe: 'bfff', | ||
dimWay: '696969', | ||
dimgYy: '696969', | ||
dodgerXe: '1e90ff', | ||
fiYbrick: 'b22222', | ||
flSOwEte: 'fffaf0', | ||
foYstWAn: '228b22', | ||
fuKsia: 'ff00ff', | ||
gaRsbSo: 'dcdcdc', | ||
ghostwEte: 'f8f8ff', | ||
gTd: 'ffd700', | ||
gTMnPd: 'daa520', | ||
Way: '808080', | ||
gYF: '8000', | ||
gYFLw: 'adff2f', | ||
gYy: '808080', | ||
honeyMw: 'f0fff0', | ||
hotpRk: 'ff69b4', | ||
RdianYd: 'cd5c5c', | ||
Rdigo: '4b0082', | ||
ivSy: 'fffff0', | ||
khaki: 'f0e68c', | ||
lavFMr: 'e6e6fa', | ||
lavFMrXsh: 'fff0f5', | ||
lawngYF: '7cfc00', | ||
NmoncEffon: 'fffacd', | ||
ZXe: 'add8e6', | ||
ZcSO: 'f08080', | ||
Zcyan: 'e0ffff', | ||
ZgTMnPdLw: 'fafad2', | ||
ZWay: 'd3d3d3', | ||
ZgYF: '90ee90', | ||
ZgYy: 'd3d3d3', | ||
ZpRk: 'ffb6c1', | ||
ZsOmon: 'ffa07a', | ||
ZsHgYF: '20b2aa', | ||
ZskyXe: '87cefa', | ||
ZUWay: '778899', | ||
ZUgYy: '778899', | ||
ZstAlXe: 'b0c4de', | ||
ZLw: 'ffffe0', | ||
lime: 'ff00', | ||
limegYF: '32cd32', | ||
lRF: 'faf0e6', | ||
magFta: 'ff00ff', | ||
maPon: '800000', | ||
VaquamarRe: '66cdaa', | ||
VXe: 'cd', | ||
VScEd: 'ba55d3', | ||
VpurpN: '9370db', | ||
VsHgYF: '3cb371', | ||
VUXe: '7b68ee', | ||
VsprRggYF: 'fa9a', | ||
VQe: '48d1cc', | ||
VviTetYd: 'c71585', | ||
midnightXe: '191970', | ||
mRtcYam: 'f5fffa', | ||
mistyPse: 'ffe4e1', | ||
moccasR: 'ffe4b5', | ||
navajowEte: 'ffdead', | ||
navy: '80', | ||
Tdlace: 'fdf5e6', | ||
Tive: '808000', | ||
TivedBb: '6b8e23', | ||
Sange: 'ffa500', | ||
SangeYd: 'ff4500', | ||
ScEd: 'da70d6', | ||
pOegTMnPd: 'eee8aa', | ||
pOegYF: '98fb98', | ||
pOeQe: 'afeeee', | ||
pOeviTetYd: 'db7093', | ||
papayawEp: 'ffefd5', | ||
pHKpuff: 'ffdab9', | ||
peru: 'cd853f', | ||
pRk: 'ffc0cb', | ||
plum: 'dda0dd', | ||
powMrXe: 'b0e0e6', | ||
purpN: '800080', | ||
YbeccapurpN: '663399', | ||
Yd: 'ff0000', | ||
Psybrown: 'bc8f8f', | ||
PyOXe: '4169e1', | ||
saddNbPwn: '8b4513', | ||
sOmon: 'fa8072', | ||
sandybPwn: 'f4a460', | ||
sHgYF: '2e8b57', | ||
sHshell: 'fff5ee', | ||
siFna: 'a0522d', | ||
silver: 'c0c0c0', | ||
skyXe: '87ceeb', | ||
UXe: '6a5acd', | ||
UWay: '708090', | ||
UgYy: '708090', | ||
snow: 'fffafa', | ||
sprRggYF: 'ff7f', | ||
stAlXe: '4682b4', | ||
tan: 'd2b48c', | ||
teO: '8080', | ||
tEstN: 'd8bfd8', | ||
tomato: 'ff6347', | ||
Qe: '40e0d0', | ||
viTet: 'ee82ee', | ||
JHt: 'f5deb3', | ||
wEte: 'ffffff', | ||
wEtesmoke: 'f5f5f5', | ||
Lw: 'ffff00', | ||
LwgYF: '9acd32' | ||
}; | ||
function unpack() { | ||
const unpacked = {}; | ||
const keys = Object.keys(names); | ||
const tkeys = Object.keys(map$1); | ||
let i, j, k, ok, nk; | ||
for (i = 0; i < keys.length; i++) { | ||
ok = nk = keys[i]; | ||
for (j = 0; j < tkeys.length; j++) { | ||
k = tkeys[j]; | ||
nk = nk.replace(k, map$1[k]); | ||
} | ||
k = parseInt(names[ok], 16); | ||
unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF]; | ||
} | ||
return unpacked; | ||
const unpacked = {}; | ||
const keys = Object.keys(names$1); | ||
const tkeys = Object.keys(map); | ||
let i, j, k, ok, nk; | ||
for (i = 0; i < keys.length; i++) { | ||
ok = nk = keys[i]; | ||
for (j = 0; j < tkeys.length; j++) { | ||
k = tkeys[j]; | ||
nk = nk.replace(k, map[k]); | ||
} | ||
k = parseInt(names$1[ok], 16); | ||
unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF]; | ||
} | ||
return unpacked; | ||
} | ||
let names$1; | ||
let names; | ||
function nameParse(str) { | ||
if (!names$1) { | ||
names$1 = unpack(); | ||
names$1.transparent = [0, 0, 0, 0]; | ||
} | ||
const a = names$1[str.toLowerCase()]; | ||
return a && { | ||
r: a[0], | ||
g: a[1], | ||
b: a[2], | ||
a: a.length === 4 ? a[3] : 255 | ||
}; | ||
if (!names) { | ||
names = unpack(); | ||
names.transparent = [0, 0, 0, 0]; | ||
} | ||
const a = names[str.toLowerCase()]; | ||
return a && { | ||
r: a[0], | ||
g: a[1], | ||
b: a[2], | ||
a: a.length === 4 ? a[3] : 255 | ||
}; | ||
} | ||
const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; | ||
function rgbParse(str) { | ||
const m = RGB_RE.exec(str); | ||
let a = 255; | ||
let r, g, b; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[7] !== r) { | ||
const v = +m[7]; | ||
a = m[8] ? p2b(v) : lim(v * 255, 0, 255); | ||
} | ||
r = +m[1]; | ||
g = +m[3]; | ||
b = +m[5]; | ||
r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255)); | ||
g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255)); | ||
b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255)); | ||
return { | ||
r: r, | ||
g: g, | ||
b: b, | ||
a: a | ||
}; | ||
} | ||
function rgbString(v) { | ||
return v && ( | ||
v.a < 255 | ||
? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` | ||
: `rgb(${v.r}, ${v.g}, ${v.b})` | ||
); | ||
} | ||
function rgbMix(rgb1, rgb2, t = 0.5) { | ||
t = 1 - t; | ||
rgb1.r = 0xFF & rgb1.r + t * (rgb2.r - rgb1.r) + 0.5; | ||
rgb1.g = 0xFF & rgb1.g + t * (rgb2.g - rgb1.g) + 0.5; | ||
rgb1.b = 0xFF & rgb1.b + t * (rgb2.b - rgb1.b) + 0.5; | ||
rgb1.a = rgb1.a + t * (rgb2.a - rgb1.a); | ||
} | ||
const to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055; | ||
const from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); | ||
function interpolate(rgb1, rgb2, t) { | ||
const r = from(b2n(rgb1.r)); | ||
const g = from(b2n(rgb1.g)); | ||
const b = from(b2n(rgb1.b)); | ||
return { | ||
r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))), | ||
g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))), | ||
b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))), | ||
a: rgb1.a + t * (rgb2.a - rgb1.a) | ||
}; | ||
} | ||
function modHSL(v, i, ratio) { | ||
if (v) { | ||
let tmp = rgb2hsl(v); | ||
tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); | ||
tmp = hsl2rgb(tmp); | ||
v.r = tmp[0]; | ||
v.g = tmp[1]; | ||
v.b = tmp[2]; | ||
} | ||
if (v) { | ||
let tmp = rgb2hsl(v); | ||
tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); | ||
tmp = hsl2rgb(tmp); | ||
v.r = tmp[0]; | ||
v.g = tmp[1]; | ||
v.b = tmp[2]; | ||
} | ||
} | ||
function clone(v, proto) { | ||
return v ? Object.assign(proto || {}, v) : v; | ||
return v ? Object.assign(proto || {}, v) : v; | ||
} | ||
function fromObject(input) { | ||
var v = {r: 0, g: 0, b: 0, a: 255}; | ||
if (Array.isArray(input)) { | ||
if (input.length >= 3) { | ||
v = {r: input[0], g: input[1], b: input[2], a: 255}; | ||
if (input.length > 3) { | ||
v.a = n2b(input[3]); | ||
} | ||
} | ||
} else { | ||
v = clone(input, {r: 0, g: 0, b: 0, a: 1}); | ||
v.a = n2b(v.a); | ||
} | ||
return v; | ||
var v = {r: 0, g: 0, b: 0, a: 255}; | ||
if (Array.isArray(input)) { | ||
if (input.length >= 3) { | ||
v = {r: input[0], g: input[1], b: input[2], a: 255}; | ||
if (input.length > 3) { | ||
v.a = n2b(input[3]); | ||
} | ||
} | ||
} else { | ||
v = clone(input, {r: 0, g: 0, b: 0, a: 1}); | ||
v.a = n2b(v.a); | ||
} | ||
return v; | ||
} | ||
function functionParse(str) { | ||
if (str.charAt(0) === 'r') { | ||
return rgbParse(str); | ||
} | ||
return hueParse(str); | ||
if (str.charAt(0) === 'r') { | ||
return rgbParse(str); | ||
} | ||
return hueParse(str); | ||
} | ||
class Color { | ||
constructor(input) { | ||
if (input instanceof Color) { | ||
return input; | ||
} | ||
const type = typeof input; | ||
let v; | ||
if (type === 'object') { | ||
v = fromObject(input); | ||
} else if (type === 'string') { | ||
v = hexParse(input) || nameParse(input) || functionParse(input); | ||
} | ||
this._rgb = v; | ||
this._valid = !!v; | ||
} | ||
get valid() { | ||
return this._valid; | ||
} | ||
get rgb() { | ||
var v = clone(this._rgb); | ||
if (v) { | ||
v.a = b2n(v.a); | ||
} | ||
return v; | ||
} | ||
set rgb(obj) { | ||
this._rgb = fromObject(obj); | ||
} | ||
rgbString() { | ||
return this._valid ? rgbString(this._rgb) : this._rgb; | ||
} | ||
hexString() { | ||
return this._valid ? hexString(this._rgb) : this._rgb; | ||
} | ||
hslString() { | ||
return this._valid ? hslString(this._rgb) : this._rgb; | ||
} | ||
mix(color, weight) { | ||
const me = this; | ||
if (color) { | ||
const c1 = me.rgb; | ||
const c2 = color.rgb; | ||
let w2; | ||
const p = weight === w2 ? 0.5 : weight; | ||
const w = 2 * p - 1; | ||
const a = c1.a - c2.a; | ||
const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0; | ||
w2 = 1 - w1; | ||
c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5; | ||
c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5; | ||
c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5; | ||
c1.a = p * c1.a + (1 - p) * c2.a; | ||
me.rgb = c1; | ||
} | ||
return me; | ||
} | ||
clone() { | ||
return new Color(this.rgb); | ||
} | ||
alpha(a) { | ||
this._rgb.a = n2b(a); | ||
return this; | ||
} | ||
clearer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 - ratio; | ||
return this; | ||
} | ||
greyscale() { | ||
const rgb = this._rgb; | ||
const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); | ||
rgb.r = rgb.g = rgb.b = val; | ||
return this; | ||
} | ||
opaquer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 + ratio; | ||
return this; | ||
} | ||
negate() { | ||
const v = this._rgb; | ||
v.r = 255 - v.r; | ||
v.g = 255 - v.g; | ||
v.b = 255 - v.b; | ||
return this; | ||
} | ||
lighten(ratio) { | ||
modHSL(this._rgb, 2, ratio); | ||
return this; | ||
} | ||
darken(ratio) { | ||
modHSL(this._rgb, 2, -ratio); | ||
return this; | ||
} | ||
saturate(ratio) { | ||
modHSL(this._rgb, 1, ratio); | ||
return this; | ||
} | ||
desaturate(ratio) { | ||
modHSL(this._rgb, 1, -ratio); | ||
return this; | ||
} | ||
rotate(deg) { | ||
rotate(this._rgb, deg); | ||
return this; | ||
} | ||
constructor(input) { | ||
if (input instanceof Color) { | ||
return input; | ||
} | ||
const type = typeof input; | ||
let v; | ||
if (type === 'object') { | ||
v = fromObject(input); | ||
} else if (type === 'string') { | ||
v = hexParse(input) || nameParse(input) || functionParse(input); | ||
} | ||
this._rgb = v; | ||
this._valid = !!v; | ||
} | ||
get valid() { | ||
return this._valid; | ||
} | ||
get rgb() { | ||
var v = clone(this._rgb); | ||
if (v) { | ||
v.a = b2n(v.a); | ||
} | ||
return v; | ||
} | ||
set rgb(obj) { | ||
this._rgb = fromObject(obj); | ||
} | ||
rgbString() { | ||
return this._valid ? rgbString(this._rgb) : undefined; | ||
} | ||
hexString() { | ||
return this._valid ? hexString(this._rgb) : undefined; | ||
} | ||
hslString() { | ||
return this._valid ? hslString(this._rgb) : undefined; | ||
} | ||
mix(color, weight) { | ||
if (color) { | ||
rgbMix(this._rgb, color._rgb, weight); | ||
} | ||
return this; | ||
} | ||
interpolate(color, t) { | ||
if (color) { | ||
this._rgb = interpolate(this._rgb, color._rgb, t); | ||
} | ||
return this; | ||
} | ||
clone() { | ||
return new Color(this.rgb); | ||
} | ||
alpha(a) { | ||
this._rgb.a = n2b(a); | ||
return this; | ||
} | ||
clearer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 - ratio; | ||
return this; | ||
} | ||
greyscale() { | ||
const rgb = this._rgb; | ||
const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); | ||
rgb.r = rgb.g = rgb.b = val; | ||
return this; | ||
} | ||
opaquer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 + ratio; | ||
return this; | ||
} | ||
negate() { | ||
const v = this._rgb; | ||
v.r = 255 - v.r; | ||
v.g = 255 - v.g; | ||
v.b = 255 - v.b; | ||
return this; | ||
} | ||
lighten(ratio) { | ||
modHSL(this._rgb, 2, ratio); | ||
return this; | ||
} | ||
darken(ratio) { | ||
modHSL(this._rgb, 2, -ratio); | ||
return this; | ||
} | ||
saturate(ratio) { | ||
modHSL(this._rgb, 1, ratio); | ||
return this; | ||
} | ||
desaturate(ratio) { | ||
modHSL(this._rgb, 1, -ratio); | ||
return this; | ||
} | ||
rotate(deg) { | ||
rotate(this._rgb, deg); | ||
return this; | ||
} | ||
} | ||
function index_esm(input) { | ||
return new Color(input); | ||
return new Color(input); | ||
} | ||
export default index_esm; | ||
export { Color, b2n, b2p, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round }; | ||
export { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbMix, rgbParse, rgbString, rotate, round }; |
1014
dist/color.js
/*! | ||
* @kurkle/color v0.1.9 | ||
* @kurkle/color v0.2.0 | ||
* https://github.com/kurkle/color#readme | ||
* (c) 2020 Jukka Kurkela | ||
* (c) 2022 Jukka Kurkela | ||
* Released under the MIT License | ||
@@ -10,90 +10,56 @@ */ | ||
typeof define === 'function' && define.amd ? define(factory) : | ||
(global = global || self, global['@kurkle/color'] = factory()); | ||
}(this, (function () { 'use strict'; | ||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["@kurkle/color"] = factory()); | ||
})(this, (function () { 'use strict'; | ||
const map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15}; | ||
const hex = '0123456789ABCDEF'; | ||
const h1 = (b) => hex[b & 0xF]; | ||
const h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF]; | ||
const eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF)); | ||
function isShort(v) { | ||
return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); | ||
} | ||
function hexParse(str) { | ||
var len = str.length; | ||
var ret; | ||
if (str[0] === '#') { | ||
if (len === 4 || len === 5) { | ||
ret = { | ||
r: 255 & map[str[1]] * 17, | ||
g: 255 & map[str[2]] * 17, | ||
b: 255 & map[str[3]] * 17, | ||
a: len === 5 ? map[str[4]] * 17 : 255 | ||
}; | ||
} else if (len === 7 || len === 9) { | ||
ret = { | ||
r: map[str[1]] << 4 | map[str[2]], | ||
g: map[str[3]] << 4 | map[str[4]], | ||
b: map[str[5]] << 4 | map[str[6]], | ||
a: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255 | ||
}; | ||
} | ||
} | ||
return ret; | ||
} | ||
function hexString(v) { | ||
var f = isShort(v) ? h1 : h2; | ||
return v | ||
? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '') | ||
: v; | ||
} | ||
function round(v) { | ||
return v + 0.5 | 0; | ||
return v + 0.5 | 0; | ||
} | ||
const lim = (v, l, h) => Math.max(Math.min(v, h), l); | ||
function p2b(v) { | ||
return lim(round(v * 2.55), 0, 255); | ||
return lim(round(v * 2.55), 0, 255); | ||
} | ||
function n2b(v) { | ||
return lim(round(v * 255), 0, 255); | ||
return lim(round(v * 255), 0, 255); | ||
} | ||
function b2n(v) { | ||
return lim(round(v / 2.55) / 100, 0, 1); | ||
return lim(round(v / 2.55) / 100, 0, 1); | ||
} | ||
function n2p(v) { | ||
return lim(round(v * 100), 0, 100); | ||
return lim(round(v * 100), 0, 100); | ||
} | ||
const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; | ||
function rgbParse(str) { | ||
const m = RGB_RE.exec(str); | ||
let a = 255; | ||
let r, g, b; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[7] !== r) { | ||
const v = +m[7]; | ||
a = 255 & (m[8] ? p2b(v) : v * 255); | ||
} | ||
r = +m[1]; | ||
g = +m[3]; | ||
b = +m[5]; | ||
r = 255 & (m[2] ? p2b(r) : r); | ||
g = 255 & (m[4] ? p2b(g) : g); | ||
b = 255 & (m[6] ? p2b(b) : b); | ||
return { | ||
r: r, | ||
g: g, | ||
b: b, | ||
a: a | ||
}; | ||
const map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15}; | ||
const hex = [...'0123456789ABCDEF']; | ||
const h1 = b => hex[b & 0xF]; | ||
const h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF]; | ||
const eq = b => ((b & 0xF0) >> 4) === (b & 0xF); | ||
const isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); | ||
function hexParse(str) { | ||
var len = str.length; | ||
var ret; | ||
if (str[0] === '#') { | ||
if (len === 4 || len === 5) { | ||
ret = { | ||
r: 255 & map$1[str[1]] * 17, | ||
g: 255 & map$1[str[2]] * 17, | ||
b: 255 & map$1[str[3]] * 17, | ||
a: len === 5 ? map$1[str[4]] * 17 : 255 | ||
}; | ||
} else if (len === 7 || len === 9) { | ||
ret = { | ||
r: map$1[str[1]] << 4 | map$1[str[2]], | ||
g: map$1[str[3]] << 4 | map$1[str[4]], | ||
b: map$1[str[5]] << 4 | map$1[str[6]], | ||
a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255 | ||
}; | ||
} | ||
} | ||
return ret; | ||
} | ||
function rgbString(v) { | ||
return v && ( | ||
v.a < 255 | ||
? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` | ||
: `rgb(${v.r}, ${v.g}, ${v.b})` | ||
); | ||
const alpha = (a, f) => a < 255 ? f(a) : ''; | ||
function hexString(v) { | ||
var f = isShort(v) ? h1 : h2; | ||
return v | ||
? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) | ||
: undefined; | ||
} | ||
@@ -103,467 +69,519 @@ | ||
function hsl2rgbn(h, s, l) { | ||
const a = s * Math.min(l, 1 - l); | ||
const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); | ||
return [f(0), f(8), f(4)]; | ||
const a = s * Math.min(l, 1 - l); | ||
const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); | ||
return [f(0), f(8), f(4)]; | ||
} | ||
function hsv2rgbn(h, s, v) { | ||
const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); | ||
return [f(5), f(3), f(1)]; | ||
const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); | ||
return [f(5), f(3), f(1)]; | ||
} | ||
function hwb2rgbn(h, w, b) { | ||
const rgb = hsl2rgbn(h, 1, 0.5); | ||
let i; | ||
if (w + b > 1) { | ||
i = 1 / (w + b); | ||
w *= i; | ||
b *= i; | ||
} | ||
for (i = 0; i < 3; i++) { | ||
rgb[i] *= 1 - w - b; | ||
rgb[i] += w; | ||
} | ||
return rgb; | ||
const rgb = hsl2rgbn(h, 1, 0.5); | ||
let i; | ||
if (w + b > 1) { | ||
i = 1 / (w + b); | ||
w *= i; | ||
b *= i; | ||
} | ||
for (i = 0; i < 3; i++) { | ||
rgb[i] *= 1 - w - b; | ||
rgb[i] += w; | ||
} | ||
return rgb; | ||
} | ||
function hueValue(r, g, b, d, max) { | ||
if (r === max) { | ||
return ((g - b) / d) + (g < b ? 6 : 0); | ||
} | ||
if (g === max) { | ||
return (b - r) / d + 2; | ||
} | ||
return (r - g) / d + 4; | ||
} | ||
function rgb2hsl(v) { | ||
const range = 255; | ||
const r = v.r / range; | ||
const g = v.g / range; | ||
const b = v.b / range; | ||
const max = Math.max(r, g, b); | ||
const min = Math.min(r, g, b); | ||
const l = (max + min) / 2; | ||
let h, s, d; | ||
if (max !== min) { | ||
d = max - min; | ||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | ||
h = max === r | ||
? ((g - b) / d) + (g < b ? 6 : 0) | ||
: max === g | ||
? (b - r) / d + 2 | ||
: (r - g) / d + 4; | ||
h = h * 60 + 0.5; | ||
} | ||
return [h | 0, s || 0, l]; | ||
const range = 255; | ||
const r = v.r / range; | ||
const g = v.g / range; | ||
const b = v.b / range; | ||
const max = Math.max(r, g, b); | ||
const min = Math.min(r, g, b); | ||
const l = (max + min) / 2; | ||
let h, s, d; | ||
if (max !== min) { | ||
d = max - min; | ||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | ||
h = hueValue(r, g, b, d, max); | ||
h = h * 60 + 0.5; | ||
} | ||
return [h | 0, s || 0, l]; | ||
} | ||
function calln(f, a, b, c) { | ||
return ( | ||
Array.isArray(a) | ||
? f(a[0], a[1], a[2]) | ||
: f(a, b, c) | ||
).map(n2b); | ||
return ( | ||
Array.isArray(a) | ||
? f(a[0], a[1], a[2]) | ||
: f(a, b, c) | ||
).map(n2b); | ||
} | ||
function hsl2rgb(h, s, l) { | ||
return calln(hsl2rgbn, h, s, l); | ||
return calln(hsl2rgbn, h, s, l); | ||
} | ||
function hwb2rgb(h, w, b) { | ||
return calln(hwb2rgbn, h, w, b); | ||
return calln(hwb2rgbn, h, w, b); | ||
} | ||
function hsv2rgb(h, s, v) { | ||
return calln(hsv2rgbn, h, s, v); | ||
return calln(hsv2rgbn, h, s, v); | ||
} | ||
function hue(h) { | ||
return (h % 360 + 360) % 360; | ||
return (h % 360 + 360) % 360; | ||
} | ||
function hueParse(str) { | ||
const m = HUE_RE.exec(str); | ||
let a = 255; | ||
let v; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[5] !== v) { | ||
a = m[6] ? p2b(+m[5]) : n2b(+m[5]); | ||
} | ||
const h = hue(+m[2]); | ||
const p1 = +m[3] / 100; | ||
const p2 = +m[4] / 100; | ||
if (m[1] === 'hwb') { | ||
v = hwb2rgb(h, p1, p2); | ||
} else if (m[1] === 'hsv') { | ||
v = hsv2rgb(h, p1, p2); | ||
} else { | ||
v = hsl2rgb(h, p1, p2); | ||
} | ||
return { | ||
r: v[0], | ||
g: v[1], | ||
b: v[2], | ||
a: a | ||
}; | ||
const m = HUE_RE.exec(str); | ||
let a = 255; | ||
let v; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[5] !== v) { | ||
a = m[6] ? p2b(+m[5]) : n2b(+m[5]); | ||
} | ||
const h = hue(+m[2]); | ||
const p1 = +m[3] / 100; | ||
const p2 = +m[4] / 100; | ||
if (m[1] === 'hwb') { | ||
v = hwb2rgb(h, p1, p2); | ||
} else if (m[1] === 'hsv') { | ||
v = hsv2rgb(h, p1, p2); | ||
} else { | ||
v = hsl2rgb(h, p1, p2); | ||
} | ||
return { | ||
r: v[0], | ||
g: v[1], | ||
b: v[2], | ||
a: a | ||
}; | ||
} | ||
function rotate(v, deg) { | ||
var h = rgb2hsl(v); | ||
h[0] = hue(h[0] + deg); | ||
h = hsl2rgb(h); | ||
v.r = h[0]; | ||
v.g = h[1]; | ||
v.b = h[2]; | ||
var h = rgb2hsl(v); | ||
h[0] = hue(h[0] + deg); | ||
h = hsl2rgb(h); | ||
v.r = h[0]; | ||
v.g = h[1]; | ||
v.b = h[2]; | ||
} | ||
function hslString(v) { | ||
if (!v) { | ||
return; | ||
} | ||
const a = rgb2hsl(v); | ||
const h = a[0]; | ||
const s = n2p(a[1]); | ||
const l = n2p(a[2]); | ||
return v.a < 255 | ||
? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` | ||
: `hsl(${h}, ${s}%, ${l}%)`; | ||
if (!v) { | ||
return; | ||
} | ||
const a = rgb2hsl(v); | ||
const h = a[0]; | ||
const s = n2p(a[1]); | ||
const l = n2p(a[2]); | ||
return v.a < 255 | ||
? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` | ||
: `hsl(${h}, ${s}%, ${l}%)`; | ||
} | ||
const map$1 = { | ||
x: 'dark', | ||
Z: 'light', | ||
Y: 're', | ||
X: 'blu', | ||
W: 'gr', | ||
V: 'medium', | ||
U: 'slate', | ||
A: 'ee', | ||
T: 'ol', | ||
S: 'or', | ||
B: 'ra', | ||
C: 'lateg', | ||
D: 'ights', | ||
R: 'in', | ||
Q: 'turquois', | ||
E: 'hi', | ||
P: 'ro', | ||
O: 'al', | ||
N: 'le', | ||
M: 'de', | ||
L: 'yello', | ||
F: 'en', | ||
K: 'ch', | ||
G: 'arks', | ||
H: 'ea', | ||
I: 'ightg', | ||
J: 'wh' | ||
const map = { | ||
x: 'dark', | ||
Z: 'light', | ||
Y: 're', | ||
X: 'blu', | ||
W: 'gr', | ||
V: 'medium', | ||
U: 'slate', | ||
A: 'ee', | ||
T: 'ol', | ||
S: 'or', | ||
B: 'ra', | ||
C: 'lateg', | ||
D: 'ights', | ||
R: 'in', | ||
Q: 'turquois', | ||
E: 'hi', | ||
P: 'ro', | ||
O: 'al', | ||
N: 'le', | ||
M: 'de', | ||
L: 'yello', | ||
F: 'en', | ||
K: 'ch', | ||
G: 'arks', | ||
H: 'ea', | ||
I: 'ightg', | ||
J: 'wh' | ||
}; | ||
const names = { | ||
OiceXe: 'f0f8ff', | ||
antiquewEte: 'faebd7', | ||
aqua: 'ffff', | ||
aquamarRe: '7fffd4', | ||
azuY: 'f0ffff', | ||
beige: 'f5f5dc', | ||
bisque: 'ffe4c4', | ||
black: '0', | ||
blanKedOmond: 'ffebcd', | ||
Xe: 'ff', | ||
XeviTet: '8a2be2', | ||
bPwn: 'a52a2a', | ||
burlywood: 'deb887', | ||
caMtXe: '5f9ea0', | ||
KartYuse: '7fff00', | ||
KocTate: 'd2691e', | ||
cSO: 'ff7f50', | ||
cSnflowerXe: '6495ed', | ||
cSnsilk: 'fff8dc', | ||
crimson: 'dc143c', | ||
cyan: 'ffff', | ||
xXe: '8b', | ||
xcyan: '8b8b', | ||
xgTMnPd: 'b8860b', | ||
xWay: 'a9a9a9', | ||
xgYF: '6400', | ||
xgYy: 'a9a9a9', | ||
xkhaki: 'bdb76b', | ||
xmagFta: '8b008b', | ||
xTivegYF: '556b2f', | ||
xSange: 'ff8c00', | ||
xScEd: '9932cc', | ||
xYd: '8b0000', | ||
xsOmon: 'e9967a', | ||
xsHgYF: '8fbc8f', | ||
xUXe: '483d8b', | ||
xUWay: '2f4f4f', | ||
xUgYy: '2f4f4f', | ||
xQe: 'ced1', | ||
xviTet: '9400d3', | ||
dAppRk: 'ff1493', | ||
dApskyXe: 'bfff', | ||
dimWay: '696969', | ||
dimgYy: '696969', | ||
dodgerXe: '1e90ff', | ||
fiYbrick: 'b22222', | ||
flSOwEte: 'fffaf0', | ||
foYstWAn: '228b22', | ||
fuKsia: 'ff00ff', | ||
gaRsbSo: 'dcdcdc', | ||
ghostwEte: 'f8f8ff', | ||
gTd: 'ffd700', | ||
gTMnPd: 'daa520', | ||
Way: '808080', | ||
gYF: '8000', | ||
gYFLw: 'adff2f', | ||
gYy: '808080', | ||
honeyMw: 'f0fff0', | ||
hotpRk: 'ff69b4', | ||
RdianYd: 'cd5c5c', | ||
Rdigo: '4b0082', | ||
ivSy: 'fffff0', | ||
khaki: 'f0e68c', | ||
lavFMr: 'e6e6fa', | ||
lavFMrXsh: 'fff0f5', | ||
lawngYF: '7cfc00', | ||
NmoncEffon: 'fffacd', | ||
ZXe: 'add8e6', | ||
ZcSO: 'f08080', | ||
Zcyan: 'e0ffff', | ||
ZgTMnPdLw: 'fafad2', | ||
ZWay: 'd3d3d3', | ||
ZgYF: '90ee90', | ||
ZgYy: 'd3d3d3', | ||
ZpRk: 'ffb6c1', | ||
ZsOmon: 'ffa07a', | ||
ZsHgYF: '20b2aa', | ||
ZskyXe: '87cefa', | ||
ZUWay: '778899', | ||
ZUgYy: '778899', | ||
ZstAlXe: 'b0c4de', | ||
ZLw: 'ffffe0', | ||
lime: 'ff00', | ||
limegYF: '32cd32', | ||
lRF: 'faf0e6', | ||
magFta: 'ff00ff', | ||
maPon: '800000', | ||
VaquamarRe: '66cdaa', | ||
VXe: 'cd', | ||
VScEd: 'ba55d3', | ||
VpurpN: '9370db', | ||
VsHgYF: '3cb371', | ||
VUXe: '7b68ee', | ||
VsprRggYF: 'fa9a', | ||
VQe: '48d1cc', | ||
VviTetYd: 'c71585', | ||
midnightXe: '191970', | ||
mRtcYam: 'f5fffa', | ||
mistyPse: 'ffe4e1', | ||
moccasR: 'ffe4b5', | ||
navajowEte: 'ffdead', | ||
navy: '80', | ||
Tdlace: 'fdf5e6', | ||
Tive: '808000', | ||
TivedBb: '6b8e23', | ||
Sange: 'ffa500', | ||
SangeYd: 'ff4500', | ||
ScEd: 'da70d6', | ||
pOegTMnPd: 'eee8aa', | ||
pOegYF: '98fb98', | ||
pOeQe: 'afeeee', | ||
pOeviTetYd: 'db7093', | ||
papayawEp: 'ffefd5', | ||
pHKpuff: 'ffdab9', | ||
peru: 'cd853f', | ||
pRk: 'ffc0cb', | ||
plum: 'dda0dd', | ||
powMrXe: 'b0e0e6', | ||
purpN: '800080', | ||
YbeccapurpN: '663399', | ||
Yd: 'ff0000', | ||
Psybrown: 'bc8f8f', | ||
PyOXe: '4169e1', | ||
saddNbPwn: '8b4513', | ||
sOmon: 'fa8072', | ||
sandybPwn: 'f4a460', | ||
sHgYF: '2e8b57', | ||
sHshell: 'fff5ee', | ||
siFna: 'a0522d', | ||
silver: 'c0c0c0', | ||
skyXe: '87ceeb', | ||
UXe: '6a5acd', | ||
UWay: '708090', | ||
UgYy: '708090', | ||
snow: 'fffafa', | ||
sprRggYF: 'ff7f', | ||
stAlXe: '4682b4', | ||
tan: 'd2b48c', | ||
teO: '8080', | ||
tEstN: 'd8bfd8', | ||
tomato: 'ff6347', | ||
Qe: '40e0d0', | ||
viTet: 'ee82ee', | ||
JHt: 'f5deb3', | ||
wEte: 'ffffff', | ||
wEtesmoke: 'f5f5f5', | ||
Lw: 'ffff00', | ||
LwgYF: '9acd32' | ||
const names$1 = { | ||
OiceXe: 'f0f8ff', | ||
antiquewEte: 'faebd7', | ||
aqua: 'ffff', | ||
aquamarRe: '7fffd4', | ||
azuY: 'f0ffff', | ||
beige: 'f5f5dc', | ||
bisque: 'ffe4c4', | ||
black: '0', | ||
blanKedOmond: 'ffebcd', | ||
Xe: 'ff', | ||
XeviTet: '8a2be2', | ||
bPwn: 'a52a2a', | ||
burlywood: 'deb887', | ||
caMtXe: '5f9ea0', | ||
KartYuse: '7fff00', | ||
KocTate: 'd2691e', | ||
cSO: 'ff7f50', | ||
cSnflowerXe: '6495ed', | ||
cSnsilk: 'fff8dc', | ||
crimson: 'dc143c', | ||
cyan: 'ffff', | ||
xXe: '8b', | ||
xcyan: '8b8b', | ||
xgTMnPd: 'b8860b', | ||
xWay: 'a9a9a9', | ||
xgYF: '6400', | ||
xgYy: 'a9a9a9', | ||
xkhaki: 'bdb76b', | ||
xmagFta: '8b008b', | ||
xTivegYF: '556b2f', | ||
xSange: 'ff8c00', | ||
xScEd: '9932cc', | ||
xYd: '8b0000', | ||
xsOmon: 'e9967a', | ||
xsHgYF: '8fbc8f', | ||
xUXe: '483d8b', | ||
xUWay: '2f4f4f', | ||
xUgYy: '2f4f4f', | ||
xQe: 'ced1', | ||
xviTet: '9400d3', | ||
dAppRk: 'ff1493', | ||
dApskyXe: 'bfff', | ||
dimWay: '696969', | ||
dimgYy: '696969', | ||
dodgerXe: '1e90ff', | ||
fiYbrick: 'b22222', | ||
flSOwEte: 'fffaf0', | ||
foYstWAn: '228b22', | ||
fuKsia: 'ff00ff', | ||
gaRsbSo: 'dcdcdc', | ||
ghostwEte: 'f8f8ff', | ||
gTd: 'ffd700', | ||
gTMnPd: 'daa520', | ||
Way: '808080', | ||
gYF: '8000', | ||
gYFLw: 'adff2f', | ||
gYy: '808080', | ||
honeyMw: 'f0fff0', | ||
hotpRk: 'ff69b4', | ||
RdianYd: 'cd5c5c', | ||
Rdigo: '4b0082', | ||
ivSy: 'fffff0', | ||
khaki: 'f0e68c', | ||
lavFMr: 'e6e6fa', | ||
lavFMrXsh: 'fff0f5', | ||
lawngYF: '7cfc00', | ||
NmoncEffon: 'fffacd', | ||
ZXe: 'add8e6', | ||
ZcSO: 'f08080', | ||
Zcyan: 'e0ffff', | ||
ZgTMnPdLw: 'fafad2', | ||
ZWay: 'd3d3d3', | ||
ZgYF: '90ee90', | ||
ZgYy: 'd3d3d3', | ||
ZpRk: 'ffb6c1', | ||
ZsOmon: 'ffa07a', | ||
ZsHgYF: '20b2aa', | ||
ZskyXe: '87cefa', | ||
ZUWay: '778899', | ||
ZUgYy: '778899', | ||
ZstAlXe: 'b0c4de', | ||
ZLw: 'ffffe0', | ||
lime: 'ff00', | ||
limegYF: '32cd32', | ||
lRF: 'faf0e6', | ||
magFta: 'ff00ff', | ||
maPon: '800000', | ||
VaquamarRe: '66cdaa', | ||
VXe: 'cd', | ||
VScEd: 'ba55d3', | ||
VpurpN: '9370db', | ||
VsHgYF: '3cb371', | ||
VUXe: '7b68ee', | ||
VsprRggYF: 'fa9a', | ||
VQe: '48d1cc', | ||
VviTetYd: 'c71585', | ||
midnightXe: '191970', | ||
mRtcYam: 'f5fffa', | ||
mistyPse: 'ffe4e1', | ||
moccasR: 'ffe4b5', | ||
navajowEte: 'ffdead', | ||
navy: '80', | ||
Tdlace: 'fdf5e6', | ||
Tive: '808000', | ||
TivedBb: '6b8e23', | ||
Sange: 'ffa500', | ||
SangeYd: 'ff4500', | ||
ScEd: 'da70d6', | ||
pOegTMnPd: 'eee8aa', | ||
pOegYF: '98fb98', | ||
pOeQe: 'afeeee', | ||
pOeviTetYd: 'db7093', | ||
papayawEp: 'ffefd5', | ||
pHKpuff: 'ffdab9', | ||
peru: 'cd853f', | ||
pRk: 'ffc0cb', | ||
plum: 'dda0dd', | ||
powMrXe: 'b0e0e6', | ||
purpN: '800080', | ||
YbeccapurpN: '663399', | ||
Yd: 'ff0000', | ||
Psybrown: 'bc8f8f', | ||
PyOXe: '4169e1', | ||
saddNbPwn: '8b4513', | ||
sOmon: 'fa8072', | ||
sandybPwn: 'f4a460', | ||
sHgYF: '2e8b57', | ||
sHshell: 'fff5ee', | ||
siFna: 'a0522d', | ||
silver: 'c0c0c0', | ||
skyXe: '87ceeb', | ||
UXe: '6a5acd', | ||
UWay: '708090', | ||
UgYy: '708090', | ||
snow: 'fffafa', | ||
sprRggYF: 'ff7f', | ||
stAlXe: '4682b4', | ||
tan: 'd2b48c', | ||
teO: '8080', | ||
tEstN: 'd8bfd8', | ||
tomato: 'ff6347', | ||
Qe: '40e0d0', | ||
viTet: 'ee82ee', | ||
JHt: 'f5deb3', | ||
wEte: 'ffffff', | ||
wEtesmoke: 'f5f5f5', | ||
Lw: 'ffff00', | ||
LwgYF: '9acd32' | ||
}; | ||
function unpack() { | ||
const unpacked = {}; | ||
const keys = Object.keys(names); | ||
const tkeys = Object.keys(map$1); | ||
let i, j, k, ok, nk; | ||
for (i = 0; i < keys.length; i++) { | ||
ok = nk = keys[i]; | ||
for (j = 0; j < tkeys.length; j++) { | ||
k = tkeys[j]; | ||
nk = nk.replace(k, map$1[k]); | ||
} | ||
k = parseInt(names[ok], 16); | ||
unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF]; | ||
} | ||
return unpacked; | ||
const unpacked = {}; | ||
const keys = Object.keys(names$1); | ||
const tkeys = Object.keys(map); | ||
let i, j, k, ok, nk; | ||
for (i = 0; i < keys.length; i++) { | ||
ok = nk = keys[i]; | ||
for (j = 0; j < tkeys.length; j++) { | ||
k = tkeys[j]; | ||
nk = nk.replace(k, map[k]); | ||
} | ||
k = parseInt(names$1[ok], 16); | ||
unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF]; | ||
} | ||
return unpacked; | ||
} | ||
let names$1; | ||
let names; | ||
function nameParse(str) { | ||
if (!names$1) { | ||
names$1 = unpack(); | ||
names$1.transparent = [0, 0, 0, 0]; | ||
} | ||
const a = names$1[str.toLowerCase()]; | ||
return a && { | ||
r: a[0], | ||
g: a[1], | ||
b: a[2], | ||
a: a.length === 4 ? a[3] : 255 | ||
}; | ||
if (!names) { | ||
names = unpack(); | ||
names.transparent = [0, 0, 0, 0]; | ||
} | ||
const a = names[str.toLowerCase()]; | ||
return a && { | ||
r: a[0], | ||
g: a[1], | ||
b: a[2], | ||
a: a.length === 4 ? a[3] : 255 | ||
}; | ||
} | ||
const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; | ||
function rgbParse(str) { | ||
const m = RGB_RE.exec(str); | ||
let a = 255; | ||
let r, g, b; | ||
if (!m) { | ||
return; | ||
} | ||
if (m[7] !== r) { | ||
const v = +m[7]; | ||
a = m[8] ? p2b(v) : lim(v * 255, 0, 255); | ||
} | ||
r = +m[1]; | ||
g = +m[3]; | ||
b = +m[5]; | ||
r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255)); | ||
g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255)); | ||
b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255)); | ||
return { | ||
r: r, | ||
g: g, | ||
b: b, | ||
a: a | ||
}; | ||
} | ||
function rgbString(v) { | ||
return v && ( | ||
v.a < 255 | ||
? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` | ||
: `rgb(${v.r}, ${v.g}, ${v.b})` | ||
); | ||
} | ||
function rgbMix(rgb1, rgb2, t = 0.5) { | ||
t = 1 - t; | ||
rgb1.r = 0xFF & rgb1.r + t * (rgb2.r - rgb1.r) + 0.5; | ||
rgb1.g = 0xFF & rgb1.g + t * (rgb2.g - rgb1.g) + 0.5; | ||
rgb1.b = 0xFF & rgb1.b + t * (rgb2.b - rgb1.b) + 0.5; | ||
rgb1.a = rgb1.a + t * (rgb2.a - rgb1.a); | ||
} | ||
const to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055; | ||
const from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); | ||
function interpolate(rgb1, rgb2, t) { | ||
const r = from(b2n(rgb1.r)); | ||
const g = from(b2n(rgb1.g)); | ||
const b = from(b2n(rgb1.b)); | ||
return { | ||
r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))), | ||
g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))), | ||
b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))), | ||
a: rgb1.a + t * (rgb2.a - rgb1.a) | ||
}; | ||
} | ||
function modHSL(v, i, ratio) { | ||
if (v) { | ||
let tmp = rgb2hsl(v); | ||
tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); | ||
tmp = hsl2rgb(tmp); | ||
v.r = tmp[0]; | ||
v.g = tmp[1]; | ||
v.b = tmp[2]; | ||
} | ||
if (v) { | ||
let tmp = rgb2hsl(v); | ||
tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); | ||
tmp = hsl2rgb(tmp); | ||
v.r = tmp[0]; | ||
v.g = tmp[1]; | ||
v.b = tmp[2]; | ||
} | ||
} | ||
function clone(v, proto) { | ||
return v ? Object.assign(proto || {}, v) : v; | ||
return v ? Object.assign(proto || {}, v) : v; | ||
} | ||
function fromObject(input) { | ||
var v = {r: 0, g: 0, b: 0, a: 255}; | ||
if (Array.isArray(input)) { | ||
if (input.length >= 3) { | ||
v = {r: input[0], g: input[1], b: input[2], a: 255}; | ||
if (input.length > 3) { | ||
v.a = n2b(input[3]); | ||
} | ||
} | ||
} else { | ||
v = clone(input, {r: 0, g: 0, b: 0, a: 1}); | ||
v.a = n2b(v.a); | ||
} | ||
return v; | ||
var v = {r: 0, g: 0, b: 0, a: 255}; | ||
if (Array.isArray(input)) { | ||
if (input.length >= 3) { | ||
v = {r: input[0], g: input[1], b: input[2], a: 255}; | ||
if (input.length > 3) { | ||
v.a = n2b(input[3]); | ||
} | ||
} | ||
} else { | ||
v = clone(input, {r: 0, g: 0, b: 0, a: 1}); | ||
v.a = n2b(v.a); | ||
} | ||
return v; | ||
} | ||
function functionParse(str) { | ||
if (str.charAt(0) === 'r') { | ||
return rgbParse(str); | ||
} | ||
return hueParse(str); | ||
if (str.charAt(0) === 'r') { | ||
return rgbParse(str); | ||
} | ||
return hueParse(str); | ||
} | ||
class Color { | ||
constructor(input) { | ||
if (input instanceof Color) { | ||
return input; | ||
} | ||
const type = typeof input; | ||
let v; | ||
if (type === 'object') { | ||
v = fromObject(input); | ||
} else if (type === 'string') { | ||
v = hexParse(input) || nameParse(input) || functionParse(input); | ||
} | ||
this._rgb = v; | ||
this._valid = !!v; | ||
} | ||
get valid() { | ||
return this._valid; | ||
} | ||
get rgb() { | ||
var v = clone(this._rgb); | ||
if (v) { | ||
v.a = b2n(v.a); | ||
} | ||
return v; | ||
} | ||
set rgb(obj) { | ||
this._rgb = fromObject(obj); | ||
} | ||
rgbString() { | ||
return this._valid ? rgbString(this._rgb) : this._rgb; | ||
} | ||
hexString() { | ||
return this._valid ? hexString(this._rgb) : this._rgb; | ||
} | ||
hslString() { | ||
return this._valid ? hslString(this._rgb) : this._rgb; | ||
} | ||
mix(color, weight) { | ||
const me = this; | ||
if (color) { | ||
const c1 = me.rgb; | ||
const c2 = color.rgb; | ||
let w2; | ||
const p = weight === w2 ? 0.5 : weight; | ||
const w = 2 * p - 1; | ||
const a = c1.a - c2.a; | ||
const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0; | ||
w2 = 1 - w1; | ||
c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5; | ||
c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5; | ||
c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5; | ||
c1.a = p * c1.a + (1 - p) * c2.a; | ||
me.rgb = c1; | ||
} | ||
return me; | ||
} | ||
clone() { | ||
return new Color(this.rgb); | ||
} | ||
alpha(a) { | ||
this._rgb.a = n2b(a); | ||
return this; | ||
} | ||
clearer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 - ratio; | ||
return this; | ||
} | ||
greyscale() { | ||
const rgb = this._rgb; | ||
const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); | ||
rgb.r = rgb.g = rgb.b = val; | ||
return this; | ||
} | ||
opaquer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 + ratio; | ||
return this; | ||
} | ||
negate() { | ||
const v = this._rgb; | ||
v.r = 255 - v.r; | ||
v.g = 255 - v.g; | ||
v.b = 255 - v.b; | ||
return this; | ||
} | ||
lighten(ratio) { | ||
modHSL(this._rgb, 2, ratio); | ||
return this; | ||
} | ||
darken(ratio) { | ||
modHSL(this._rgb, 2, -ratio); | ||
return this; | ||
} | ||
saturate(ratio) { | ||
modHSL(this._rgb, 1, ratio); | ||
return this; | ||
} | ||
desaturate(ratio) { | ||
modHSL(this._rgb, 1, -ratio); | ||
return this; | ||
} | ||
rotate(deg) { | ||
rotate(this._rgb, deg); | ||
return this; | ||
} | ||
constructor(input) { | ||
if (input instanceof Color) { | ||
return input; | ||
} | ||
const type = typeof input; | ||
let v; | ||
if (type === 'object') { | ||
v = fromObject(input); | ||
} else if (type === 'string') { | ||
v = hexParse(input) || nameParse(input) || functionParse(input); | ||
} | ||
this._rgb = v; | ||
this._valid = !!v; | ||
} | ||
get valid() { | ||
return this._valid; | ||
} | ||
get rgb() { | ||
var v = clone(this._rgb); | ||
if (v) { | ||
v.a = b2n(v.a); | ||
} | ||
return v; | ||
} | ||
set rgb(obj) { | ||
this._rgb = fromObject(obj); | ||
} | ||
rgbString() { | ||
return this._valid ? rgbString(this._rgb) : undefined; | ||
} | ||
hexString() { | ||
return this._valid ? hexString(this._rgb) : undefined; | ||
} | ||
hslString() { | ||
return this._valid ? hslString(this._rgb) : undefined; | ||
} | ||
mix(color, weight) { | ||
if (color) { | ||
rgbMix(this._rgb, color._rgb, weight); | ||
} | ||
return this; | ||
} | ||
interpolate(color, t) { | ||
if (color) { | ||
this._rgb = interpolate(this._rgb, color._rgb, t); | ||
} | ||
return this; | ||
} | ||
clone() { | ||
return new Color(this.rgb); | ||
} | ||
alpha(a) { | ||
this._rgb.a = n2b(a); | ||
return this; | ||
} | ||
clearer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 - ratio; | ||
return this; | ||
} | ||
greyscale() { | ||
const rgb = this._rgb; | ||
const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); | ||
rgb.r = rgb.g = rgb.b = val; | ||
return this; | ||
} | ||
opaquer(ratio) { | ||
const rgb = this._rgb; | ||
rgb.a *= 1 + ratio; | ||
return this; | ||
} | ||
negate() { | ||
const v = this._rgb; | ||
v.r = 255 - v.r; | ||
v.g = 255 - v.g; | ||
v.b = 255 - v.b; | ||
return this; | ||
} | ||
lighten(ratio) { | ||
modHSL(this._rgb, 2, ratio); | ||
return this; | ||
} | ||
darken(ratio) { | ||
modHSL(this._rgb, 2, -ratio); | ||
return this; | ||
} | ||
saturate(ratio) { | ||
modHSL(this._rgb, 1, ratio); | ||
return this; | ||
} | ||
desaturate(ratio) { | ||
modHSL(this._rgb, 1, -ratio); | ||
return this; | ||
} | ||
rotate(deg) { | ||
rotate(this._rgb, deg); | ||
return this; | ||
} | ||
} | ||
function index(input) { | ||
return new Color(input); | ||
return new Color(input); | ||
} | ||
@@ -573,2 +591,2 @@ | ||
}))); | ||
})); |
/*! | ||
* @kurkle/color v0.1.9 | ||
* @kurkle/color v0.2.0 | ||
* https://github.com/kurkle/color#readme | ||
* (c) 2020 Jukka Kurkela | ||
* (c) 2022 Jukka Kurkela | ||
* Released under the MIT License | ||
*/ | ||
!function(e,f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define(f):(e=e||self)["@kurkle/color"]=f()}(this,(function(){"use strict";const e={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},f="0123456789ABCDEF",t=e=>f[15&e],r=e=>f[(240&e)>>4]+f[15&e],a=e=>(240&e)>>4==(15&e);function n(e){var f=function(e){return a(e.r)&&a(e.g)&&a(e.b)&&a(e.a)}(e)?t:r;return e?"#"+f(e.r)+f(e.g)+f(e.b)+(e.a<255?f(e.a):""):e}function i(e){return e+.5|0}const s=(e,f,t)=>Math.max(Math.min(e,t),f);function c(e){return s(i(2.55*e),0,255)}function b(e){return s(i(255*e),0,255)}function d(e){return s(i(e/2.55)/100,0,1)}function g(e){return s(i(100*e),0,100)}const o=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const u=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function h(e,f,t){const r=f*Math.min(t,1-t),a=(f,a=(f+e/30)%12)=>t-r*Math.max(Math.min(a-3,9-a,1),-1);return[a(0),a(8),a(4)]}function l(e,f,t){const r=(r,a=(r+e/60)%6)=>t-t*f*Math.max(Math.min(a,4-a,1),0);return[r(5),r(3),r(1)]}function m(e,f,t){const r=h(e,1,.5);let a;for(f+t>1&&(a=1/(f+t),f*=a,t*=a),a=0;a<3;a++)r[a]*=1-f-t,r[a]+=f;return r}function y(e){const f=e.r/255,t=e.g/255,r=e.b/255,a=Math.max(f,t,r),n=Math.min(f,t,r),i=(a+n)/2;let s,c,b;return a!==n&&(b=a-n,c=i>.5?b/(2-a-n):b/(a+n),s=a===f?(t-r)/b+(t<r?6:0):a===t?(r-f)/b+2:(f-t)/b+4,s=60*s+.5),[0|s,c||0,i]}function p(e,f,t,r){return(Array.isArray(f)?e(f[0],f[1],f[2]):e(f,t,r)).map(b)}function Y(e,f,t){return p(h,e,f,t)}function x(e){return(e%360+360)%360}function v(e){const f=u.exec(e);let t,r=255;if(!f)return;f[5]!==t&&(r=f[6]?c(+f[5]):b(+f[5]));const a=x(+f[2]),n=+f[3]/100,i=+f[4]/100;return t="hwb"===f[1]?function(e,f,t){return p(m,e,f,t)}(a,n,i):"hsv"===f[1]?function(e,f,t){return p(l,e,f,t)}(a,n,i):Y(a,n,i),{r:t[0],g:t[1],b:t[2],a:r}}const w={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},F={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let _;function k(e){_||(_=function(){const e={},f=Object.keys(F),t=Object.keys(w);let r,a,n,i,s;for(r=0;r<f.length;r++){for(i=s=f[r],a=0;a<t.length;a++)n=t[a],s=s.replace(n,w[n]);n=parseInt(F[i],16),e[s]=[n>>16&255,n>>8&255,255&n]}return e}(),_.transparent=[0,0,0,0]);const f=_[e.toLowerCase()];return f&&{r:f[0],g:f[1],b:f[2],a:4===f.length?f[3]:255}}function X(e,f,t){if(e){let r=y(e);r[f]=Math.max(0,Math.min(r[f]+r[f]*t,0===f?360:1)),r=Y(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function M(e,f){return e?Object.assign(f||{},e):e}function O(e){var f={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(f={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(f.a=b(e[3]))):(f=M(e,{r:0,g:0,b:0,a:1})).a=b(f.a),f}function S(e){return"r"===e.charAt(0)?function(e){const f=o.exec(e);let t,r,a,n=255;if(f){if(f[7]!==t){const e=+f[7];n=255&(f[8]?c(e):255*e)}return t=+f[1],r=+f[3],a=+f[5],t=255&(f[2]?c(t):t),r=255&(f[4]?c(r):r),a=255&(f[6]?c(a):a),{r:t,g:r,b:a,a:n}}}(e):v(e)}class T{constructor(f){if(f instanceof T)return f;const t=typeof f;let r;var a,n,i;"object"===t?r=O(f):"string"===t&&(i=(a=f).length,"#"===a[0]&&(4===i||5===i?n={r:255&17*e[a[1]],g:255&17*e[a[2]],b:255&17*e[a[3]],a:5===i?17*e[a[4]]:255}:7!==i&&9!==i||(n={r:e[a[1]]<<4|e[a[2]],g:e[a[3]]<<4|e[a[4]],b:e[a[5]]<<4|e[a[6]],a:9===i?e[a[7]]<<4|e[a[8]]:255})),r=n||k(f)||S(f)),this._rgb=r,this._valid=!!r}get valid(){return this._valid}get rgb(){var e=M(this._rgb);return e&&(e.a=d(e.a)),e}set rgb(e){this._rgb=O(e)}rgbString(){return this._valid?(e=this._rgb)&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${d(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`):this._rgb;var e}hexString(){return this._valid?n(this._rgb):this._rgb}hslString(){return this._valid?function(e){if(!e)return;const f=y(e),t=f[0],r=g(f[1]),a=g(f[2]);return e.a<255?`hsla(${t}, ${r}%, ${a}%, ${d(e.a)})`:`hsl(${t}, ${r}%, ${a}%)`}(this._rgb):this._rgb}mix(e,f){const t=this;if(e){const r=t.rgb,a=e.rgb;let n;const i=f===n?.5:f,s=2*i-1,c=r.a-a.a,b=((s*c==-1?s:(s+c)/(1+s*c))+1)/2;n=1-b,r.r=255&b*r.r+n*a.r+.5,r.g=255&b*r.g+n*a.g+.5,r.b=255&b*r.b+n*a.b+.5,r.a=i*r.a+(1-i)*a.a,t.rgb=r}return t}clone(){return new T(this.rgb)}alpha(e){return this._rgb.a=b(e),this}clearer(e){return this._rgb.a*=1-e,this}greyscale(){const e=this._rgb,f=i(.3*e.r+.59*e.g+.11*e.b);return e.r=e.g=e.b=f,this}opaquer(e){return this._rgb.a*=1+e,this}negate(){const e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return X(this._rgb,2,e),this}darken(e){return X(this._rgb,2,-e),this}saturate(e){return X(this._rgb,1,e),this}desaturate(e){return X(this._rgb,1,-e),this}rotate(e){return function(e,f){var t=y(e);t[0]=x(t[0]+f),t=Y(t),e.r=t[0],e.g=t[1],e.b=t[2]}(this._rgb,e),this}}return function(e){return new T(e)}})); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self)["@kurkle/color"]=t()}(this,(function(){"use strict";function e(e){return e+.5|0}const t=(e,t,f)=>Math.max(Math.min(e,f),t);function f(f){return t(e(2.55*f),0,255)}function r(f){return t(e(255*f),0,255)}function n(f){return t(e(f/2.55)/100,0,1)}function a(f){return t(e(100*f),0,100)}const i={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},s=[..."0123456789ABCDEF"],c=e=>s[15&e],d=e=>s[(240&e)>>4]+s[15&e],b=e=>(240&e)>>4==(15&e);function g(e){var t=(e=>b(e.r)&&b(e.g)&&b(e.b)&&b(e.a))(e)?c:d;return e?"#"+t(e.r)+t(e.g)+t(e.b)+((e,t)=>e<255?t(e):"")(e.a,t):void 0}const o=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function u(e,t,f){const r=t*Math.min(f,1-f),n=(t,n=(t+e/30)%12)=>f-r*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function h(e,t,f){const r=(r,n=(r+e/60)%6)=>f-f*t*Math.max(Math.min(n,4-n,1),0);return[r(5),r(3),r(1)]}function l(e,t,f){const r=u(e,1,.5);let n;for(t+f>1&&(n=1/(t+f),t*=n,f*=n),n=0;n<3;n++)r[n]*=1-t-f,r[n]+=t;return r}function p(e){const t=e.r/255,f=e.g/255,r=e.b/255,n=Math.max(t,f,r),a=Math.min(t,f,r),i=(n+a)/2;let s,c,d;return n!==a&&(d=n-a,c=i>.5?d/(2-n-a):d/(n+a),s=function(e,t,f,r,n){return e===n?(t-f)/r+(t<f?6:0):t===n?(f-e)/r+2:(e-t)/r+4}(t,f,r,d,n),s=60*s+.5),[0|s,c||0,i]}function y(e,t,f,n){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,f,n)).map(r)}function m(e,t,f){return y(u,e,t,f)}function Y(e){return(e%360+360)%360}function v(e){const t=o.exec(e);let n,a=255;if(!t)return;t[5]!==n&&(a=t[6]?f(+t[5]):r(+t[5]));const i=Y(+t[2]),s=+t[3]/100,c=+t[4]/100;return n="hwb"===t[1]?function(e,t,f){return y(l,e,t,f)}(i,s,c):"hsv"===t[1]?function(e,t,f){return y(h,e,t,f)}(i,s,c):m(i,s,c),{r:n[0],g:n[1],b:n[2],a:a}}const x={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},w={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let _;function F(e){_||(_=function(){const e={},t=Object.keys(w),f=Object.keys(x);let r,n,a,i,s;for(r=0;r<t.length;r++){for(i=s=t[r],n=0;n<f.length;n++)a=f[n],s=s.replace(a,x[a]);a=parseInt(w[i],16),e[s]=[a>>16&255,a>>8&255,255&a]}return e}(),_.transparent=[0,0,0,0]);const t=_[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:4===t.length?t[3]:255}}const M=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const k=e=>e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055,X=e=>e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4);function O(e,t,f){if(e){let r=p(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*f,0===t?360:1)),r=m(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function T(e,t){return e?Object.assign(t||{},e):e}function S(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(t={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(t.a=r(e[3]))):(t=T(e,{r:0,g:0,b:0,a:1})).a=r(t.a),t}function Z(e){return"r"===e.charAt(0)?function(e){const r=M.exec(e);let n,a,i,s=255;if(r){if(r[7]!==n){const e=+r[7];s=r[8]?f(e):t(255*e,0,255)}return n=+r[1],a=+r[3],i=+r[5],n=255&(r[2]?f(n):t(n,0,255)),a=255&(r[4]?f(a):t(a,0,255)),i=255&(r[6]?f(i):t(i,0,255)),{r:n,g:a,b:i,a:s}}}(e):v(e)}class ${constructor(e){if(e instanceof $)return e;const t=typeof e;let f;var r,n,a;"object"===t?f=S(e):"string"===t&&(a=(r=e).length,"#"===r[0]&&(4===a||5===a?n={r:255&17*i[r[1]],g:255&17*i[r[2]],b:255&17*i[r[3]],a:5===a?17*i[r[4]]:255}:7!==a&&9!==a||(n={r:i[r[1]]<<4|i[r[2]],g:i[r[3]]<<4|i[r[4]],b:i[r[5]]<<4|i[r[6]],a:9===a?i[r[7]]<<4|i[r[8]]:255})),f=n||F(e)||Z(e)),this._rgb=f,this._valid=!!f}get valid(){return this._valid}get rgb(){var e=T(this._rgb);return e&&(e.a=n(e.a)),e}set rgb(e){this._rgb=S(e)}rgbString(){return this._valid?(e=this._rgb)&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${n(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`):void 0;var e}hexString(){return this._valid?g(this._rgb):void 0}hslString(){return this._valid?function(e){if(!e)return;const t=p(e),f=t[0],r=a(t[1]),i=a(t[2]);return e.a<255?`hsla(${f}, ${r}%, ${i}%, ${n(e.a)})`:`hsl(${f}, ${r}%, ${i}%)`}(this._rgb):void 0}mix(e,t){return e&&function(e,t,f=.5){f=1-f,e.r=255&e.r+f*(t.r-e.r)+.5,e.g=255&e.g+f*(t.g-e.g)+.5,e.b=255&e.b+f*(t.b-e.b)+.5,e.a=e.a+f*(t.a-e.a)}(this._rgb,e._rgb,t),this}interpolate(e,t){return e&&(this._rgb=function(e,t,f){const a=X(n(e.r)),i=X(n(e.g)),s=X(n(e.b));return{r:r(k(a+f*(X(n(t.r))-a))),g:r(k(i+f*(X(n(t.g))-i))),b:r(k(s+f*(X(n(t.b))-s))),a:e.a+f*(t.a-e.a)}}(this._rgb,e._rgb,t)),this}clone(){return new $(this.rgb)}alpha(e){return this._rgb.a=r(e),this}clearer(e){return this._rgb.a*=1-e,this}greyscale(){const t=this._rgb,f=e(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=f,this}opaquer(e){return this._rgb.a*=1+e,this}negate(){const e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return O(this._rgb,2,e),this}darken(e){return O(this._rgb,2,-e),this}saturate(e){return O(this._rgb,1,e),this}desaturate(e){return O(this._rgb,1,-e),this}rotate(e){return function(e,t){var f=p(e);f[0]=Y(f[0]+t),f=m(f),e.r=f[0],e.g=f[1],e.b=f[2]}(this._rgb,e),this}}return function(e){return new $(e)}})); | ||
//# sourceMappingURL=color.min.js.map |
The MIT License (MIT) | ||
Copyright (c) 2018 Chart.js Contributors | ||
Copyright (c) 2018-2021 Jukka Kurkela | ||
@@ -5,0 +5,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: |
{ | ||
"name": "@kurkle/color", | ||
"version": "0.1.9", | ||
"version": "0.2.0", | ||
"description": "css color parsing, manupulation and conversion", | ||
@@ -39,3 +39,2 @@ "main": "dist/color.js", | ||
"homepage": "https://github.com/kurkle/color#readme", | ||
"dependencies": {}, | ||
"devDependencies": { | ||
@@ -47,27 +46,27 @@ "assert": "^2.0.0", | ||
"child_process": "^1.0.2", | ||
"chroma-js": "^2.0.4", | ||
"chroma-js": "^2.1.1", | ||
"color-name": "^1.1.4", | ||
"color-names": "^2.0.0", | ||
"color-parse": "^1.3.8", | ||
"color-parse": "^1.4.2", | ||
"color-parser": "^0.1.0", | ||
"color-string": "^1.5.3", | ||
"color-string": "^1.5.5", | ||
"csscolorparser": "^1.0.3", | ||
"eslint": "^7.2.0", | ||
"eslint-config-chartjs": "^0.2.0", | ||
"eslint": "^8.12.0", | ||
"eslint-config-chartjs": "^0.3.0", | ||
"eslint-config-defaults": "^9.0.0", | ||
"eslint-plugin-import": "^2.21.1", | ||
"eslint-plugin-react": "^7.20.0", | ||
"eslint-plugin-import": "^2.22.1", | ||
"eslint-plugin-react": "^7.22.0", | ||
"fs": "0.0.1-security", | ||
"perf_hooks": "0.0.1", | ||
"rollup": "^2.15.0", | ||
"rollup-plugin-cleanup": "^3.1.1", | ||
"rollup-plugin-istanbul": "^2.0.1", | ||
"rollup-plugin-terser": "^6.1.0", | ||
"rollup-plugin-visualizer": "^4.0.4", | ||
"tinycolor2": "^1.4.1", | ||
"typedoc": "^0.17.7", | ||
"typedoc-plugin-external-module-name": "^4.0.3", | ||
"typescript": "^3.9.5", | ||
"rollup": "^2.41.2", | ||
"rollup-plugin-analyzer": "^4.0.0", | ||
"rollup-plugin-cleanup": "^3.2.1", | ||
"rollup-plugin-istanbul": "^3.0.0", | ||
"rollup-plugin-terser": "^7.0.2", | ||
"rollup-plugin-visualizer": "^5.5.0", | ||
"tinycolor2": "^1.4.2", | ||
"typedoc": "^0.22.13", | ||
"typescript": "^4.6.3", | ||
"util": "^0.12.3" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
43031
1424