UNPKG

smiles-drawer

Version:

A SMILES drawer and parser. Generate molecular structure depictions in pure JavaScript.

1,424 lines (1,423 loc) 515 kB
(() => { 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