smiles-drawer
Version:
A SMILES drawer and parser. Generate molecular structure depictions in pure JavaScript.
1,424 lines (1,423 loc) • 515 kB
JavaScript
(() => {
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
// node_modules/chroma-js/chroma.js
var require_chroma = __commonJS({
"node_modules/chroma-js/chroma.js"(exports, module) {
(function(global, factory) {
typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, global.chroma = factory());
})(exports, function() {
"use strict";
var limit$2 = function(x, min2, max2) {
if (min2 === void 0) min2 = 0;
if (max2 === void 0) max2 = 1;
return x < min2 ? min2 : x > max2 ? max2 : x;
};
var limit$1 = limit$2;
var clip_rgb$3 = function(rgb2) {
rgb2._clipped = false;
rgb2._unclipped = rgb2.slice(0);
for (var i2 = 0; i2 <= 3; i2++) {
if (i2 < 3) {
if (rgb2[i2] < 0 || rgb2[i2] > 255) {
rgb2._clipped = true;
}
rgb2[i2] = limit$1(rgb2[i2], 0, 255);
} else if (i2 === 3) {
rgb2[i2] = limit$1(rgb2[i2], 0, 1);
}
}
return rgb2;
};
var classToType = {};
for (var i$1 = 0, list$1 = ["Boolean", "Number", "String", "Function", "Array", "Date", "RegExp", "Undefined", "Null"]; i$1 < list$1.length; i$1 += 1) {
var name = list$1[i$1];
classToType["[object " + name + "]"] = name.toLowerCase();
}
var type$p = function(obj) {
return classToType[Object.prototype.toString.call(obj)] || "object";
};
var type$o = type$p;
var unpack$B = function(args, keyOrder) {
if (keyOrder === void 0) keyOrder = null;
if (args.length >= 3) {
return Array.prototype.slice.call(args);
}
if (type$o(args[0]) == "object" && keyOrder) {
return keyOrder.split("").filter(function(k) {
return args[0][k] !== void 0;
}).map(function(k) {
return args[0][k];
});
}
return args[0];
};
var type$n = type$p;
var last$4 = function(args) {
if (args.length < 2) {
return null;
}
var l = args.length - 1;
if (type$n(args[l]) == "string") {
return args[l].toLowerCase();
}
return null;
};
var PI$2 = Math.PI;
var utils = {
clip_rgb: clip_rgb$3,
limit: limit$2,
type: type$p,
unpack: unpack$B,
last: last$4,
PI: PI$2,
TWOPI: PI$2 * 2,
PITHIRD: PI$2 / 3,
DEG2RAD: PI$2 / 180,
RAD2DEG: 180 / PI$2
};
var input$h = {
format: {},
autodetect: []
};
var last$3 = utils.last;
var clip_rgb$2 = utils.clip_rgb;
var type$m = utils.type;
var _input = input$h;
var Color$D = function Color2() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var me = this;
if (type$m(args[0]) === "object" && args[0].constructor && args[0].constructor === this.constructor) {
return args[0];
}
var mode = last$3(args);
var autodetect = false;
if (!mode) {
autodetect = true;
if (!_input.sorted) {
_input.autodetect = _input.autodetect.sort(function(a, b) {
return b.p - a.p;
});
_input.sorted = true;
}
for (var i2 = 0, list2 = _input.autodetect; i2 < list2.length; i2 += 1) {
var chk = list2[i2];
mode = chk.test.apply(chk, args);
if (mode) {
break;
}
}
}
if (_input.format[mode]) {
var rgb2 = _input.format[mode].apply(null, autodetect ? args : args.slice(0, -1));
me._rgb = clip_rgb$2(rgb2);
} else {
throw new Error("unknown format: " + args);
}
if (me._rgb.length === 3) {
me._rgb.push(1);
}
};
Color$D.prototype.toString = function toString() {
if (type$m(this.hex) == "function") {
return this.hex();
}
return "[" + this._rgb.join(",") + "]";
};
var Color_1 = Color$D;
var chroma$k = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(chroma$k.Color, [null].concat(args)))();
};
chroma$k.Color = Color_1;
chroma$k.version = "2.4.2";
var chroma_1 = chroma$k;
var unpack$A = utils.unpack;
var max$2 = Math.max;
var rgb2cmyk$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$A(args, "rgb");
var r = ref[0];
var g = ref[1];
var b = ref[2];
r = r / 255;
g = g / 255;
b = b / 255;
var k = 1 - max$2(r, max$2(g, b));
var f = k < 1 ? 1 / (1 - k) : 0;
var c = (1 - r - k) * f;
var m = (1 - g - k) * f;
var y = (1 - b - k) * f;
return [c, m, y, k];
};
var rgb2cmyk_1 = rgb2cmyk$1;
var unpack$z = utils.unpack;
var cmyk2rgb = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$z(args, "cmyk");
var c = args[0];
var m = args[1];
var y = args[2];
var k = args[3];
var alpha = args.length > 4 ? args[4] : 1;
if (k === 1) {
return [0, 0, 0, alpha];
}
return [
c >= 1 ? 0 : 255 * (1 - c) * (1 - k),
// r
m >= 1 ? 0 : 255 * (1 - m) * (1 - k),
// g
y >= 1 ? 0 : 255 * (1 - y) * (1 - k),
// b
alpha
];
};
var cmyk2rgb_1 = cmyk2rgb;
var chroma$j = chroma_1;
var Color$C = Color_1;
var input$g = input$h;
var unpack$y = utils.unpack;
var type$l = utils.type;
var rgb2cmyk = rgb2cmyk_1;
Color$C.prototype.cmyk = function() {
return rgb2cmyk(this._rgb);
};
chroma$j.cmyk = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$C, [null].concat(args, ["cmyk"])))();
};
input$g.format.cmyk = cmyk2rgb_1;
input$g.autodetect.push({
p: 2,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$y(args, "cmyk");
if (type$l(args) === "array" && args.length === 4) {
return "cmyk";
}
}
});
var unpack$x = utils.unpack;
var last$2 = utils.last;
var rnd = function(a) {
return Math.round(a * 100) / 100;
};
var hsl2css$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var hsla = unpack$x(args, "hsla");
var mode = last$2(args) || "lsa";
hsla[0] = rnd(hsla[0] || 0);
hsla[1] = rnd(hsla[1] * 100) + "%";
hsla[2] = rnd(hsla[2] * 100) + "%";
if (mode === "hsla" || hsla.length > 3 && hsla[3] < 1) {
hsla[3] = hsla.length > 3 ? hsla[3] : 1;
mode = "hsla";
} else {
hsla.length = 3;
}
return mode + "(" + hsla.join(",") + ")";
};
var hsl2css_1 = hsl2css$1;
var unpack$w = utils.unpack;
var rgb2hsl$3 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$w(args, "rgba");
var r = args[0];
var g = args[1];
var b = args[2];
r /= 255;
g /= 255;
b /= 255;
var min2 = Math.min(r, g, b);
var max2 = Math.max(r, g, b);
var l = (max2 + min2) / 2;
var s, h;
if (max2 === min2) {
s = 0;
h = Number.NaN;
} else {
s = l < 0.5 ? (max2 - min2) / (max2 + min2) : (max2 - min2) / (2 - max2 - min2);
}
if (r == max2) {
h = (g - b) / (max2 - min2);
} else if (g == max2) {
h = 2 + (b - r) / (max2 - min2);
} else if (b == max2) {
h = 4 + (r - g) / (max2 - min2);
}
h *= 60;
if (h < 0) {
h += 360;
}
if (args.length > 3 && args[3] !== void 0) {
return [h, s, l, args[3]];
}
return [h, s, l];
};
var rgb2hsl_1 = rgb2hsl$3;
var unpack$v = utils.unpack;
var last$1 = utils.last;
var hsl2css = hsl2css_1;
var rgb2hsl$2 = rgb2hsl_1;
var round$6 = Math.round;
var rgb2css$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var rgba = unpack$v(args, "rgba");
var mode = last$1(args) || "rgb";
if (mode.substr(0, 3) == "hsl") {
return hsl2css(rgb2hsl$2(rgba), mode);
}
rgba[0] = round$6(rgba[0]);
rgba[1] = round$6(rgba[1]);
rgba[2] = round$6(rgba[2]);
if (mode === "rgba" || rgba.length > 3 && rgba[3] < 1) {
rgba[3] = rgba.length > 3 ? rgba[3] : 1;
mode = "rgba";
}
return mode + "(" + rgba.slice(0, mode === "rgb" ? 3 : 4).join(",") + ")";
};
var rgb2css_1 = rgb2css$1;
var unpack$u = utils.unpack;
var round$5 = Math.round;
var hsl2rgb$1 = function() {
var assign;
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$u(args, "hsl");
var h = args[0];
var s = args[1];
var l = args[2];
var r, g, b;
if (s === 0) {
r = g = b = l * 255;
} else {
var t3 = [0, 0, 0];
var c = [0, 0, 0];
var t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;
var t1 = 2 * l - t2;
var h_ = h / 360;
t3[0] = h_ + 1 / 3;
t3[1] = h_;
t3[2] = h_ - 1 / 3;
for (var i2 = 0; i2 < 3; i2++) {
if (t3[i2] < 0) {
t3[i2] += 1;
}
if (t3[i2] > 1) {
t3[i2] -= 1;
}
if (6 * t3[i2] < 1) {
c[i2] = t1 + (t2 - t1) * 6 * t3[i2];
} else if (2 * t3[i2] < 1) {
c[i2] = t2;
} else if (3 * t3[i2] < 2) {
c[i2] = t1 + (t2 - t1) * (2 / 3 - t3[i2]) * 6;
} else {
c[i2] = t1;
}
}
assign = [round$5(c[0] * 255), round$5(c[1] * 255), round$5(c[2] * 255)], r = assign[0], g = assign[1], b = assign[2];
}
if (args.length > 3) {
return [r, g, b, args[3]];
}
return [r, g, b, 1];
};
var hsl2rgb_1 = hsl2rgb$1;
var hsl2rgb = hsl2rgb_1;
var input$f = input$h;
var RE_RGB = /^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/;
var RE_RGBA = /^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/;
var RE_RGB_PCT = /^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/;
var RE_RGBA_PCT = /^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/;
var RE_HSL = /^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/;
var RE_HSLA = /^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/;
var round$4 = Math.round;
var css2rgb$1 = function(css) {
css = css.toLowerCase().trim();
var m;
if (input$f.format.named) {
try {
return input$f.format.named(css);
} catch (e) {
}
}
if (m = css.match(RE_RGB)) {
var rgb2 = m.slice(1, 4);
for (var i2 = 0; i2 < 3; i2++) {
rgb2[i2] = +rgb2[i2];
}
rgb2[3] = 1;
return rgb2;
}
if (m = css.match(RE_RGBA)) {
var rgb$1 = m.slice(1, 5);
for (var i$12 = 0; i$12 < 4; i$12++) {
rgb$1[i$12] = +rgb$1[i$12];
}
return rgb$1;
}
if (m = css.match(RE_RGB_PCT)) {
var rgb$2 = m.slice(1, 4);
for (var i$2 = 0; i$2 < 3; i$2++) {
rgb$2[i$2] = round$4(rgb$2[i$2] * 2.55);
}
rgb$2[3] = 1;
return rgb$2;
}
if (m = css.match(RE_RGBA_PCT)) {
var rgb$3 = m.slice(1, 5);
for (var i$3 = 0; i$3 < 3; i$3++) {
rgb$3[i$3] = round$4(rgb$3[i$3] * 2.55);
}
rgb$3[3] = +rgb$3[3];
return rgb$3;
}
if (m = css.match(RE_HSL)) {
var hsl2 = m.slice(1, 4);
hsl2[1] *= 0.01;
hsl2[2] *= 0.01;
var rgb$4 = hsl2rgb(hsl2);
rgb$4[3] = 1;
return rgb$4;
}
if (m = css.match(RE_HSLA)) {
var hsl$1 = m.slice(1, 4);
hsl$1[1] *= 0.01;
hsl$1[2] *= 0.01;
var rgb$5 = hsl2rgb(hsl$1);
rgb$5[3] = +m[4];
return rgb$5;
}
};
css2rgb$1.test = function(s) {
return RE_RGB.test(s) || RE_RGBA.test(s) || RE_RGB_PCT.test(s) || RE_RGBA_PCT.test(s) || RE_HSL.test(s) || RE_HSLA.test(s);
};
var css2rgb_1 = css2rgb$1;
var chroma$i = chroma_1;
var Color$B = Color_1;
var input$e = input$h;
var type$k = utils.type;
var rgb2css = rgb2css_1;
var css2rgb = css2rgb_1;
Color$B.prototype.css = function(mode) {
return rgb2css(this._rgb, mode);
};
chroma$i.css = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$B, [null].concat(args, ["css"])))();
};
input$e.format.css = css2rgb;
input$e.autodetect.push({
p: 5,
test: function(h) {
var rest = [], len = arguments.length - 1;
while (len-- > 0) rest[len] = arguments[len + 1];
if (!rest.length && type$k(h) === "string" && css2rgb.test(h)) {
return "css";
}
}
});
var Color$A = Color_1;
var chroma$h = chroma_1;
var input$d = input$h;
var unpack$t = utils.unpack;
input$d.format.gl = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var rgb2 = unpack$t(args, "rgba");
rgb2[0] *= 255;
rgb2[1] *= 255;
rgb2[2] *= 255;
return rgb2;
};
chroma$h.gl = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$A, [null].concat(args, ["gl"])))();
};
Color$A.prototype.gl = function() {
var rgb2 = this._rgb;
return [rgb2[0] / 255, rgb2[1] / 255, rgb2[2] / 255, rgb2[3]];
};
var unpack$s = utils.unpack;
var rgb2hcg$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$s(args, "rgb");
var r = ref[0];
var g = ref[1];
var b = ref[2];
var min2 = Math.min(r, g, b);
var max2 = Math.max(r, g, b);
var delta = max2 - min2;
var c = delta * 100 / 255;
var _g = min2 / (255 - delta) * 100;
var h;
if (delta === 0) {
h = Number.NaN;
} else {
if (r === max2) {
h = (g - b) / delta;
}
if (g === max2) {
h = 2 + (b - r) / delta;
}
if (b === max2) {
h = 4 + (r - g) / delta;
}
h *= 60;
if (h < 0) {
h += 360;
}
}
return [h, c, _g];
};
var rgb2hcg_1 = rgb2hcg$1;
var unpack$r = utils.unpack;
var floor$3 = Math.floor;
var hcg2rgb = function() {
var assign, assign$1, assign$2, assign$3, assign$4, assign$5;
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$r(args, "hcg");
var h = args[0];
var c = args[1];
var _g = args[2];
var r, g, b;
_g = _g * 255;
var _c = c * 255;
if (c === 0) {
r = g = b = _g;
} else {
if (h === 360) {
h = 0;
}
if (h > 360) {
h -= 360;
}
if (h < 0) {
h += 360;
}
h /= 60;
var i2 = floor$3(h);
var f = h - i2;
var p = _g * (1 - c);
var q = p + _c * (1 - f);
var t = p + _c * f;
var v = p + _c;
switch (i2) {
case 0:
assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2];
break;
case 1:
assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2];
break;
case 2:
assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2];
break;
case 3:
assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2];
break;
case 4:
assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2];
break;
case 5:
assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2];
break;
}
}
return [r, g, b, args.length > 3 ? args[3] : 1];
};
var hcg2rgb_1 = hcg2rgb;
var unpack$q = utils.unpack;
var type$j = utils.type;
var chroma$g = chroma_1;
var Color$z = Color_1;
var input$c = input$h;
var rgb2hcg = rgb2hcg_1;
Color$z.prototype.hcg = function() {
return rgb2hcg(this._rgb);
};
chroma$g.hcg = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$z, [null].concat(args, ["hcg"])))();
};
input$c.format.hcg = hcg2rgb_1;
input$c.autodetect.push({
p: 1,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$q(args, "hcg");
if (type$j(args) === "array" && args.length === 3) {
return "hcg";
}
}
});
var unpack$p = utils.unpack;
var last = utils.last;
var round$3 = Math.round;
var rgb2hex$2 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$p(args, "rgba");
var r = ref[0];
var g = ref[1];
var b = ref[2];
var a = ref[3];
var mode = last(args) || "auto";
if (a === void 0) {
a = 1;
}
if (mode === "auto") {
mode = a < 1 ? "rgba" : "rgb";
}
r = round$3(r);
g = round$3(g);
b = round$3(b);
var u = r << 16 | g << 8 | b;
var str = "000000" + u.toString(16);
str = str.substr(str.length - 6);
var hxa = "0" + round$3(a * 255).toString(16);
hxa = hxa.substr(hxa.length - 2);
switch (mode.toLowerCase()) {
case "rgba":
return "#" + str + hxa;
case "argb":
return "#" + hxa + str;
default:
return "#" + str;
}
};
var rgb2hex_1 = rgb2hex$2;
var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;
var hex2rgb$1 = function(hex) {
if (hex.match(RE_HEX)) {
if (hex.length === 4 || hex.length === 7) {
hex = hex.substr(1);
}
if (hex.length === 3) {
hex = hex.split("");
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
}
var u = parseInt(hex, 16);
var r = u >> 16;
var g = u >> 8 & 255;
var b = u & 255;
return [r, g, b, 1];
}
if (hex.match(RE_HEXA)) {
if (hex.length === 5 || hex.length === 9) {
hex = hex.substr(1);
}
if (hex.length === 4) {
hex = hex.split("");
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3];
}
var u$1 = parseInt(hex, 16);
var r$1 = u$1 >> 24 & 255;
var g$1 = u$1 >> 16 & 255;
var b$1 = u$1 >> 8 & 255;
var a = Math.round((u$1 & 255) / 255 * 100) / 100;
return [r$1, g$1, b$1, a];
}
throw new Error("unknown hex color: " + hex);
};
var hex2rgb_1 = hex2rgb$1;
var chroma$f = chroma_1;
var Color$y = Color_1;
var type$i = utils.type;
var input$b = input$h;
var rgb2hex$1 = rgb2hex_1;
Color$y.prototype.hex = function(mode) {
return rgb2hex$1(this._rgb, mode);
};
chroma$f.hex = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$y, [null].concat(args, ["hex"])))();
};
input$b.format.hex = hex2rgb_1;
input$b.autodetect.push({
p: 4,
test: function(h) {
var rest = [], len = arguments.length - 1;
while (len-- > 0) rest[len] = arguments[len + 1];
if (!rest.length && type$i(h) === "string" && [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0) {
return "hex";
}
}
});
var unpack$o = utils.unpack;
var TWOPI$2 = utils.TWOPI;
var min$2 = Math.min;
var sqrt$4 = Math.sqrt;
var acos = Math.acos;
var rgb2hsi$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$o(args, "rgb");
var r = ref[0];
var g = ref[1];
var b = ref[2];
r /= 255;
g /= 255;
b /= 255;
var h;
var min_ = min$2(r, g, b);
var i2 = (r + g + b) / 3;
var s = i2 > 0 ? 1 - min_ / i2 : 0;
if (s === 0) {
h = NaN;
} else {
h = (r - g + (r - b)) / 2;
h /= sqrt$4((r - g) * (r - g) + (r - b) * (g - b));
h = acos(h);
if (b > g) {
h = TWOPI$2 - h;
}
h /= TWOPI$2;
}
return [h * 360, s, i2];
};
var rgb2hsi_1 = rgb2hsi$1;
var unpack$n = utils.unpack;
var limit = utils.limit;
var TWOPI$1 = utils.TWOPI;
var PITHIRD = utils.PITHIRD;
var cos$4 = Math.cos;
var hsi2rgb = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$n(args, "hsi");
var h = args[0];
var s = args[1];
var i2 = args[2];
var r, g, b;
if (isNaN(h)) {
h = 0;
}
if (isNaN(s)) {
s = 0;
}
if (h > 360) {
h -= 360;
}
if (h < 0) {
h += 360;
}
h /= 360;
if (h < 1 / 3) {
b = (1 - s) / 3;
r = (1 + s * cos$4(TWOPI$1 * h) / cos$4(PITHIRD - TWOPI$1 * h)) / 3;
g = 1 - (b + r);
} else if (h < 2 / 3) {
h -= 1 / 3;
r = (1 - s) / 3;
g = (1 + s * cos$4(TWOPI$1 * h) / cos$4(PITHIRD - TWOPI$1 * h)) / 3;
b = 1 - (r + g);
} else {
h -= 2 / 3;
g = (1 - s) / 3;
b = (1 + s * cos$4(TWOPI$1 * h) / cos$4(PITHIRD - TWOPI$1 * h)) / 3;
r = 1 - (g + b);
}
r = limit(i2 * r * 3);
g = limit(i2 * g * 3);
b = limit(i2 * b * 3);
return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];
};
var hsi2rgb_1 = hsi2rgb;
var unpack$m = utils.unpack;
var type$h = utils.type;
var chroma$e = chroma_1;
var Color$x = Color_1;
var input$a = input$h;
var rgb2hsi = rgb2hsi_1;
Color$x.prototype.hsi = function() {
return rgb2hsi(this._rgb);
};
chroma$e.hsi = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$x, [null].concat(args, ["hsi"])))();
};
input$a.format.hsi = hsi2rgb_1;
input$a.autodetect.push({
p: 2,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$m(args, "hsi");
if (type$h(args) === "array" && args.length === 3) {
return "hsi";
}
}
});
var unpack$l = utils.unpack;
var type$g = utils.type;
var chroma$d = chroma_1;
var Color$w = Color_1;
var input$9 = input$h;
var rgb2hsl$1 = rgb2hsl_1;
Color$w.prototype.hsl = function() {
return rgb2hsl$1(this._rgb);
};
chroma$d.hsl = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$w, [null].concat(args, ["hsl"])))();
};
input$9.format.hsl = hsl2rgb_1;
input$9.autodetect.push({
p: 2,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$l(args, "hsl");
if (type$g(args) === "array" && args.length === 3) {
return "hsl";
}
}
});
var unpack$k = utils.unpack;
var min$1 = Math.min;
var max$1 = Math.max;
var rgb2hsl = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$k(args, "rgb");
var r = args[0];
var g = args[1];
var b = args[2];
var min_ = min$1(r, g, b);
var max_ = max$1(r, g, b);
var delta = max_ - min_;
var h, s, v;
v = max_ / 255;
if (max_ === 0) {
h = Number.NaN;
s = 0;
} else {
s = delta / max_;
if (r === max_) {
h = (g - b) / delta;
}
if (g === max_) {
h = 2 + (b - r) / delta;
}
if (b === max_) {
h = 4 + (r - g) / delta;
}
h *= 60;
if (h < 0) {
h += 360;
}
}
return [h, s, v];
};
var rgb2hsv$1 = rgb2hsl;
var unpack$j = utils.unpack;
var floor$2 = Math.floor;
var hsv2rgb = function() {
var assign, assign$1, assign$2, assign$3, assign$4, assign$5;
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$j(args, "hsv");
var h = args[0];
var s = args[1];
var v = args[2];
var r, g, b;
v *= 255;
if (s === 0) {
r = g = b = v;
} else {
if (h === 360) {
h = 0;
}
if (h > 360) {
h -= 360;
}
if (h < 0) {
h += 360;
}
h /= 60;
var i2 = floor$2(h);
var f = h - i2;
var p = v * (1 - s);
var q = v * (1 - s * f);
var t = v * (1 - s * (1 - f));
switch (i2) {
case 0:
assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2];
break;
case 1:
assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2];
break;
case 2:
assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2];
break;
case 3:
assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2];
break;
case 4:
assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2];
break;
case 5:
assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2];
break;
}
}
return [r, g, b, args.length > 3 ? args[3] : 1];
};
var hsv2rgb_1 = hsv2rgb;
var unpack$i = utils.unpack;
var type$f = utils.type;
var chroma$c = chroma_1;
var Color$v = Color_1;
var input$8 = input$h;
var rgb2hsv = rgb2hsv$1;
Color$v.prototype.hsv = function() {
return rgb2hsv(this._rgb);
};
chroma$c.hsv = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$v, [null].concat(args, ["hsv"])))();
};
input$8.format.hsv = hsv2rgb_1;
input$8.autodetect.push({
p: 2,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$i(args, "hsv");
if (type$f(args) === "array" && args.length === 3) {
return "hsv";
}
}
});
var labConstants = {
// Corresponds roughly to RGB brighter/darker
Kn: 18,
// D65 standard referent
Xn: 0.95047,
Yn: 1,
Zn: 1.08883,
t0: 0.137931034,
// 4 / 29
t1: 0.206896552,
// 6 / 29
t2: 0.12841855,
// 3 * t1 * t1
t3: 8856452e-9
// t1 * t1 * t1
};
var LAB_CONSTANTS$3 = labConstants;
var unpack$h = utils.unpack;
var pow$a = Math.pow;
var rgb2lab$2 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$h(args, "rgb");
var r = ref[0];
var g = ref[1];
var b = ref[2];
var ref$1 = rgb2xyz(r, g, b);
var x = ref$1[0];
var y = ref$1[1];
var z = ref$1[2];
var l = 116 * y - 16;
return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)];
};
var rgb_xyz = function(r) {
if ((r /= 255) <= 0.04045) {
return r / 12.92;
}
return pow$a((r + 0.055) / 1.055, 2.4);
};
var xyz_lab = function(t) {
if (t > LAB_CONSTANTS$3.t3) {
return pow$a(t, 1 / 3);
}
return t / LAB_CONSTANTS$3.t2 + LAB_CONSTANTS$3.t0;
};
var rgb2xyz = function(r, g, b) {
r = rgb_xyz(r);
g = rgb_xyz(g);
b = rgb_xyz(b);
var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS$3.Xn);
var y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.072175 * b) / LAB_CONSTANTS$3.Yn);
var z = xyz_lab((0.0193339 * r + 0.119192 * g + 0.9503041 * b) / LAB_CONSTANTS$3.Zn);
return [x, y, z];
};
var rgb2lab_1 = rgb2lab$2;
var LAB_CONSTANTS$2 = labConstants;
var unpack$g = utils.unpack;
var pow$9 = Math.pow;
var lab2rgb$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$g(args, "lab");
var l = args[0];
var a = args[1];
var b = args[2];
var x, y, z, r, g, b_;
y = (l + 16) / 116;
x = isNaN(a) ? y : y + a / 500;
z = isNaN(b) ? y : y - b / 200;
y = LAB_CONSTANTS$2.Yn * lab_xyz(y);
x = LAB_CONSTANTS$2.Xn * lab_xyz(x);
z = LAB_CONSTANTS$2.Zn * lab_xyz(z);
r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z);
g = xyz_rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z);
b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);
return [r, g, b_, args.length > 3 ? args[3] : 1];
};
var xyz_rgb = function(r) {
return 255 * (r <= 304e-5 ? 12.92 * r : 1.055 * pow$9(r, 1 / 2.4) - 0.055);
};
var lab_xyz = function(t) {
return t > LAB_CONSTANTS$2.t1 ? t * t * t : LAB_CONSTANTS$2.t2 * (t - LAB_CONSTANTS$2.t0);
};
var lab2rgb_1 = lab2rgb$1;
var unpack$f = utils.unpack;
var type$e = utils.type;
var chroma$b = chroma_1;
var Color$u = Color_1;
var input$7 = input$h;
var rgb2lab$1 = rgb2lab_1;
Color$u.prototype.lab = function() {
return rgb2lab$1(this._rgb);
};
chroma$b.lab = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$u, [null].concat(args, ["lab"])))();
};
input$7.format.lab = lab2rgb_1;
input$7.autodetect.push({
p: 2,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$f(args, "lab");
if (type$e(args) === "array" && args.length === 3) {
return "lab";
}
}
});
var unpack$e = utils.unpack;
var RAD2DEG = utils.RAD2DEG;
var sqrt$3 = Math.sqrt;
var atan2$2 = Math.atan2;
var round$2 = Math.round;
var lab2lch$2 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$e(args, "lab");
var l = ref[0];
var a = ref[1];
var b = ref[2];
var c = sqrt$3(a * a + b * b);
var h = (atan2$2(b, a) * RAD2DEG + 360) % 360;
if (round$2(c * 1e4) === 0) {
h = Number.NaN;
}
return [l, c, h];
};
var lab2lch_1 = lab2lch$2;
var unpack$d = utils.unpack;
var rgb2lab = rgb2lab_1;
var lab2lch$1 = lab2lch_1;
var rgb2lch$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$d(args, "rgb");
var r = ref[0];
var g = ref[1];
var b = ref[2];
var ref$1 = rgb2lab(r, g, b);
var l = ref$1[0];
var a = ref$1[1];
var b_ = ref$1[2];
return lab2lch$1(l, a, b_);
};
var rgb2lch_1 = rgb2lch$1;
var unpack$c = utils.unpack;
var DEG2RAD = utils.DEG2RAD;
var sin$3 = Math.sin;
var cos$3 = Math.cos;
var lch2lab$2 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$c(args, "lch");
var l = ref[0];
var c = ref[1];
var h = ref[2];
if (isNaN(h)) {
h = 0;
}
h = h * DEG2RAD;
return [l, cos$3(h) * c, sin$3(h) * c];
};
var lch2lab_1 = lch2lab$2;
var unpack$b = utils.unpack;
var lch2lab$1 = lch2lab_1;
var lab2rgb = lab2rgb_1;
var lch2rgb$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$b(args, "lch");
var l = args[0];
var c = args[1];
var h = args[2];
var ref = lch2lab$1(l, c, h);
var L = ref[0];
var a = ref[1];
var b_ = ref[2];
var ref$1 = lab2rgb(L, a, b_);
var r = ref$1[0];
var g = ref$1[1];
var b = ref$1[2];
return [r, g, b, args.length > 3 ? args[3] : 1];
};
var lch2rgb_1 = lch2rgb$1;
var unpack$a = utils.unpack;
var lch2rgb = lch2rgb_1;
var hcl2rgb = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var hcl = unpack$a(args, "hcl").reverse();
return lch2rgb.apply(void 0, hcl);
};
var hcl2rgb_1 = hcl2rgb;
var unpack$9 = utils.unpack;
var type$d = utils.type;
var chroma$a = chroma_1;
var Color$t = Color_1;
var input$6 = input$h;
var rgb2lch = rgb2lch_1;
Color$t.prototype.lch = function() {
return rgb2lch(this._rgb);
};
Color$t.prototype.hcl = function() {
return rgb2lch(this._rgb).reverse();
};
chroma$a.lch = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$t, [null].concat(args, ["lch"])))();
};
chroma$a.hcl = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$t, [null].concat(args, ["hcl"])))();
};
input$6.format.lch = lch2rgb_1;
input$6.format.hcl = hcl2rgb_1;
["lch", "hcl"].forEach(function(m) {
return input$6.autodetect.push({
p: 2,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
args = unpack$9(args, m);
if (type$d(args) === "array" && args.length === 3) {
return m;
}
}
});
});
var w3cx11$1 = {
aliceblue: "#f0f8ff",
antiquewhite: "#faebd7",
aqua: "#00ffff",
aquamarine: "#7fffd4",
azure: "#f0ffff",
beige: "#f5f5dc",
bisque: "#ffe4c4",
black: "#000000",
blanchedalmond: "#ffebcd",
blue: "#0000ff",
blueviolet: "#8a2be2",
brown: "#a52a2a",
burlywood: "#deb887",
cadetblue: "#5f9ea0",
chartreuse: "#7fff00",
chocolate: "#d2691e",
coral: "#ff7f50",
cornflower: "#6495ed",
cornflowerblue: "#6495ed",
cornsilk: "#fff8dc",
crimson: "#dc143c",
cyan: "#00ffff",
darkblue: "#00008b",
darkcyan: "#008b8b",
darkgoldenrod: "#b8860b",
darkgray: "#a9a9a9",
darkgreen: "#006400",
darkgrey: "#a9a9a9",
darkkhaki: "#bdb76b",
darkmagenta: "#8b008b",
darkolivegreen: "#556b2f",
darkorange: "#ff8c00",
darkorchid: "#9932cc",
darkred: "#8b0000",
darksalmon: "#e9967a",
darkseagreen: "#8fbc8f",
darkslateblue: "#483d8b",
darkslategray: "#2f4f4f",
darkslategrey: "#2f4f4f",
darkturquoise: "#00ced1",
darkviolet: "#9400d3",
deeppink: "#ff1493",
deepskyblue: "#00bfff",
dimgray: "#696969",
dimgrey: "#696969",
dodgerblue: "#1e90ff",
firebrick: "#b22222",
floralwhite: "#fffaf0",
forestgreen: "#228b22",
fuchsia: "#ff00ff",
gainsboro: "#dcdcdc",
ghostwhite: "#f8f8ff",
gold: "#ffd700",
goldenrod: "#daa520",
gray: "#808080",
green: "#008000",
greenyellow: "#adff2f",
grey: "#808080",
honeydew: "#f0fff0",
hotpink: "#ff69b4",
indianred: "#cd5c5c",
indigo: "#4b0082",
ivory: "#fffff0",
khaki: "#f0e68c",
laserlemon: "#ffff54",
lavender: "#e6e6fa",
lavenderblush: "#fff0f5",
lawngreen: "#7cfc00",
lemonchiffon: "#fffacd",
lightblue: "#add8e6",
lightcoral: "#f08080",
lightcyan: "#e0ffff",
lightgoldenrod: "#fafad2",
lightgoldenrodyellow: "#fafad2",
lightgray: "#d3d3d3",
lightgreen: "#90ee90",
lightgrey: "#d3d3d3",
lightpink: "#ffb6c1",
lightsalmon: "#ffa07a",
lightseagreen: "#20b2aa",
lightskyblue: "#87cefa",
lightslategray: "#778899",
lightslategrey: "#778899",
lightsteelblue: "#b0c4de",
lightyellow: "#ffffe0",
lime: "#00ff00",
limegreen: "#32cd32",
linen: "#faf0e6",
magenta: "#ff00ff",
maroon: "#800000",
maroon2: "#7f0000",
maroon3: "#b03060",
mediumaquamarine: "#66cdaa",
mediumblue: "#0000cd",
mediumorchid: "#ba55d3",
mediumpurple: "#9370db",
mediumseagreen: "#3cb371",
mediumslateblue: "#7b68ee",
mediumspringgreen: "#00fa9a",
mediumturquoise: "#48d1cc",
mediumvioletred: "#c71585",
midnightblue: "#191970",
mintcream: "#f5fffa",
mistyrose: "#ffe4e1",
moccasin: "#ffe4b5",
navajowhite: "#ffdead",
navy: "#000080",
oldlace: "#fdf5e6",
olive: "#808000",
olivedrab: "#6b8e23",
orange: "#ffa500",
orangered: "#ff4500",
orchid: "#da70d6",
palegoldenrod: "#eee8aa",
palegreen: "#98fb98",
paleturquoise: "#afeeee",
palevioletred: "#db7093",
papayawhip: "#ffefd5",
peachpuff: "#ffdab9",
peru: "#cd853f",
pink: "#ffc0cb",
plum: "#dda0dd",
powderblue: "#b0e0e6",
purple: "#800080",
purple2: "#7f007f",
purple3: "#a020f0",
rebeccapurple: "#663399",
red: "#ff0000",
rosybrown: "#bc8f8f",
royalblue: "#4169e1",
saddlebrown: "#8b4513",
salmon: "#fa8072",
sandybrown: "#f4a460",
seagreen: "#2e8b57",
seashell: "#fff5ee",
sienna: "#a0522d",
silver: "#c0c0c0",
skyblue: "#87ceeb",
slateblue: "#6a5acd",
slategray: "#708090",
slategrey: "#708090",
snow: "#fffafa",
springgreen: "#00ff7f",
steelblue: "#4682b4",
tan: "#d2b48c",
teal: "#008080",
thistle: "#d8bfd8",
tomato: "#ff6347",
turquoise: "#40e0d0",
violet: "#ee82ee",
wheat: "#f5deb3",
white: "#ffffff",
whitesmoke: "#f5f5f5",
yellow: "#ffff00",
yellowgreen: "#9acd32"
};
var w3cx11_1 = w3cx11$1;
var Color$s = Color_1;
var input$5 = input$h;
var type$c = utils.type;
var w3cx11 = w3cx11_1;
var hex2rgb = hex2rgb_1;
var rgb2hex = rgb2hex_1;
Color$s.prototype.name = function() {
var hex = rgb2hex(this._rgb, "rgb");
for (var i2 = 0, list2 = Object.keys(w3cx11); i2 < list2.length; i2 += 1) {
var n = list2[i2];
if (w3cx11[n] === hex) {
return n.toLowerCase();
}
}
return hex;
};
input$5.format.named = function(name2) {
name2 = name2.toLowerCase();
if (w3cx11[name2]) {
return hex2rgb(w3cx11[name2]);
}
throw new Error("unknown color name: " + name2);
};
input$5.autodetect.push({
p: 5,
test: function(h) {
var rest = [], len = arguments.length - 1;
while (len-- > 0) rest[len] = arguments[len + 1];
if (!rest.length && type$c(h) === "string" && w3cx11[h.toLowerCase()]) {
return "named";
}
}
});
var unpack$8 = utils.unpack;
var rgb2num$1 = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
var ref = unpack$8(args, "rgb");
var r = ref[0];
var g = ref[1];
var b = ref[2];
return (r << 16) + (g << 8) + b;
};
var rgb2num_1 = rgb2num$1;
var type$b = utils.type;
var num2rgb = function(num2) {
if (type$b(num2) == "number" && num2 >= 0 && num2 <= 16777215) {
var r = num2 >> 16;
var g = num2 >> 8 & 255;
var b = num2 & 255;
return [r, g, b, 1];
}
throw new Error("unknown num color: " + num2);
};
var num2rgb_1 = num2rgb;
var chroma$9 = chroma_1;
var Color$r = Color_1;
var input$4 = input$h;
var type$a = utils.type;
var rgb2num = rgb2num_1;
Color$r.prototype.num = function() {
return rgb2num(this._rgb);
};
chroma$9.num = function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
return new (Function.prototype.bind.apply(Color$r, [null].concat(args, ["num"])))();
};
input$4.format.num = num2rgb_1;
input$4.autodetect.push({
p: 5,
test: function() {
var args = [], len = arguments.length;
while (len--) args[len] = arguments[len];
if (args.length === 1 && type$a(args[0]) === "number" && args[0] >= 0 && args[0] <= 16777215) {
return "num";
}
}
});
var chroma$8 = chroma_1;
var Color$q = Color_1;
var input$3 = input$h;
var unpack$7 = utils.unpack;
var type$9 = utils.type;
var round$1 = Math.round;
Color$q.prototype.rgb = function(rnd2) {
if (rnd2 === void 0) rnd2 = true;
if (rnd2 === false) {
return this._rgb.slice(0, 3);
}
return this._rgb.slice(0, 3).map(round$1);
};
Color$q.prototype.rgba = function(rnd2) {
if (rnd2 === void 0) rnd2 = true;
return this._rgb.slice(0, 4).map(fun