PageSourceSearch

https://vault80.com/assets/js/chroma.js

js vault80.com collected 2026-09-25 22:57:42 UTC 132,246 bytes, 3,984 lines download raw bytes

vendor: 7,378 bytes, lines 1-184
1/**
2 * chroma.js - JavaScript library for color conversions
3 * 
4 * Copyright (c) 2023, Regorxxx
5 * All rights reserved.
6 * 
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 * 
10 * 1. Redistributions of source code must retain the above copyright notice, this
11 * list of conditions and the following disclaimer.
12 * 
13 * 2. Redistributions in binary form must reproduce the above copyright notice,
14 * this list of conditions and the following disclaimer in the documentation
15 * and/or other materials provided with the distribution.
16 * 
17 * 3. The name Regorxxx may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
19 * 
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
24 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
29 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 * 
31 * -------------------------------------------------------
32 * Copyright (c) 2011-2019, Gregor Aisch
33 * All rights reserved.
34 * 
35 * Redistribution and use in source and binary forms, with or without
36 * modification, are permitted provided that the following conditions are met:
37 * 
38 * 1. Redistributions of source code must retain the above copyright notice, this
39 * list of conditions and the following disclaimer.
40 * 
41 * 2. Redistributions in binary form must reproduce the above copyright notice,
42 * this list of conditions and the following disclaimer in the documentation
43 * and/or other materials provided with the distribution.
44 * 
45 * 3. The name Gregor Aisch may not be used to endorse or promote products
46 * derived from this software without specific prior written permission.
47 * 
48 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
49 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
51 * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
52 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
53 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
54 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
55 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
56 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
57 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
58 * 
59 * -------------------------------------------------------
60 * 
61 * chroma.js includes colors from colorbrewer2.org, which are released under
62 * the following license:
63 * 
64 * Copyright (c) 2002 Cynthia Brewer, Mark Harrower,
65 * and The Pennsylvania State University.
66 * 
67 * Licensed under the Apache License, Version 2.0 (the "License");
68 * you may not use this file except in compliance with the License.
69 * You may obtain a copy of the License at
70 * http://www.apache.org/licenses/LICENSE-2.0
71 * 
72 * Unless required by applicable law or agreed to in writing,
73 * software distributed under the License is distributed on an
74 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
75 * either express or implied. See the License for the specific
76 * language governing permissions and limitations under the License.
77 * 
78 * ------------------------------------------------------
79 * 
80 * Named colors are taken from X11 Color Names.
81 * http://www.w3.org/TR/css3-color/#svg-color
82 * 
83 * @preserve
84 */
85
86(function (global, factory) {
87    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
88    typeof define === 'function' && define.amd ? define(factory) :
89    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.chroma = factory());
90})(this, (function () { 'use strict';
91
92    var limit$2 = function (x, min, max) {
93        if ( min === void 0 ) min=0;
94        if ( max === void 0 ) max=1;
95
96        return x < min ? min : x > max ? max : x;
97    };
98
99    var limit$1 = limit$2;
100
101    var clip_rgb$3 = function (rgb) {
102        rgb._clipped = false;
103        rgb._unclipped = rgb.slice(0);
104        for (var i=0; i<=3; i++) {
105            if (i < 3) {
106                if (rgb[i] < 0 || rgb[i] > 255) { rgb._clipped = true; }
107                rgb[i] = limit$1(rgb[i], 0, 255);
108            } else if (i === 3) {
109                rgb[i] = limit$1(rgb[i], 0, 1);
110            }
111        }
112        return rgb;
113    };
114
115    // ported from jQuery's $.type
116    var classToType = {};
117    for (var i$1 = 0, list$1 = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Undefined', 'Null']; i$1 < list$1.length; i$1 += 1) {
118        var name = list$1[i$1];
119
120        classToType[("[object " + name + "]")] = name.toLowerCase();
121    }
122    var type$r = function(obj) {
123        return classToType[Object.prototype.toString.call(obj)] || "object";
124    };
125
126    var type$q = type$r;
127
128    var unpack$G = function (args, keyOrder) {
129        if ( keyOrder === void 0 ) keyOrder=null;
130
131    	// if called with more than 3 arguments, we return the arguments
132        if (args.length >= 3) { return Array.prototype.slice.call(args); }
133        // with less than 3 args we check if first arg is object
134        // and use the keyOrder string to extract and sort properties
135    	if (type$q(args[0]) == 'object' && keyOrder) {
136    		return keyOrder.split('')
137    			.filter(function (k) { return args[0][k] !== undefined; })
138    			.map(function (k) { return args[0][k]; });
139    	}
140    	// otherwise we just return the first argument
141    	// (which we suppose is an array of args)
142        return args[0];
143    };
144
145    var type$p = type$r;
146
147    var last$9 = function (args) {
148        if (args.length < 2) { return null; }
149        var l = args.length-1;
150        if (type$p(args[l]) == 'string') { return args[l].toLowerCase(); }
151        return null;
152    };
153
154    var PI$2 = Math.PI;
155
156    var utils = {
157    	clip_rgb: clip_rgb$3,
158    	limit: limit$2,
159    	type: type$r,
160    	unpack: unpack$G,
161    	last: last$9,
162    	PI: PI$2,
163    	TWOPI: PI$2*2,
164    	PITHIRD: PI$2/3,
165    	DEG2RAD: PI$2 / 180,
166    	RAD2DEG: 180 / PI$2
167    };
168
169    var input$i = {
170    	format: {},
171    	autodetect: []
172    };
173
174    var last$8 = utils.last;
175    var clip_rgb$2 = utils.clip_rgb;
176    var type$o = utils.type;
177    var _input = input$i;
178
179    var Color$E = function Color() {
180        var args = [], len = arguments.length;
181        while ( len-- ) args[ len ] = arguments[ len ];
182
183        var me = this;
184        if (type$o(args[0]) === 'object' &&
185            args[0].constructor &&
186            args[0].constructor === this.constructor) {
187            // the argument is already a Color instance
188            return args[0];
189        }
190
191        // last argument could be the mode
192        var mode = last$8(args);
193        var autodetect = false;
194
195        if (!mode) {
196            autodetect = true;
197            if (!_input.sorted) {
198                _input.autodetect = _input.autodetect.sort(function (a,b) { return b.p - a.p; });
199                _input.sorted = true;
200            }
201            // auto-detect format
202            for (var i = 0, list = _input.autodetect; i < list.length; i += 1) {
203                var chk = list[i];
204
205                mode = chk.test.apply(chk, args);
206                if (mode) { break; }
207            }
208        }
209
210        if (_input.format[mode]) {
211            var rgb = _input.format[mode].apply(null, autodetect ? args : args.slice(0,-1));
212            me._rgb = clip_rgb$2(rgb);
213        } else {
214            throw new Error('unknown format: '+args);
215        }
216
217        // add alpha channel
218        if (me._rgb.length === 3) { me._rgb.push(1); }
219    };
220
221    Color$E.prototype.toString = function toString () {
222        if (type$o(this.hex) == 'function') { return this.hex(); }
223        return ("[" + (this._rgb.join(',')) + "]");
224    };
225
226    var Color_1 = Color$E;
227
228    var chroma$r = function () {
229    	var args = [], len = arguments.length;
230    	while ( len-- ) args[ len ] = arguments[ len ];
231
232    	return new (Function.prototype.bind.apply( chroma$r.Color, [ null ].concat( args) ));
233    };
234
235    chroma$r.Color = Color_1;
236    chroma$r.version = '2.7.0';
237    chroma$r.hueNaN = true; // Whether treat black/white as having NaN hue or zero on specific color spaces (LCH, ...)
238
239    var chroma_1 = chroma$r;
240
241    var unpack$F = utils.unpack;
242    var max$2 = Math.max;
243
244    var rgb2cmyk$1 = function () {
245        var args = [], len = arguments.length;
246        while ( len-- ) args[ len ] = arguments[ len ];
247
248        var ref = unpack$F(args, 'rgb');
249        var r = ref[0];
250        var g = ref[1];
251        var b = ref[2];
252        r = r / 255;
253        g = g / 255;
254        b = b / 255;
255        var k = 1 - max$2(r,max$2(g,b));
256        var f = k < 1 ? 1 / (1-k) : 0;
257        var c = (1-r-k) * f;
258        var m = (1-g-k) * f;
259        var y = (1-b-k) * f;
260        return [c,m,y,k];
261    };
262
263    var rgb2cmyk_1 = rgb2cmyk$1;
264
265    var unpack$E = utils.unpack;
266
267    var cmyk2rgb = function () {
268        var args = [], len = arguments.length;
269        while ( len-- ) args[ len ] = arguments[ len ];
270
271        args = unpack$E(args, 'cmyk');
272        var c = args[0];
273        var m = args[1];
274        var y = args[2];
275        var k = args[3];
276        var alpha = args.length > 4 ? args[4] : 1;
277        if (k === 1) { return [0,0,0,alpha]; }
278        return [
279            c >= 1 ? 0 : 255 * (1-c) * (1-k), // r
280            m >= 1 ? 0 : 255 * (1-m) * (1-k), // g
281            y >= 1 ? 0 : 255 * (1-y) * (1-k), // b
282            alpha
283        ];
284    };
285
286    var cmyk2rgb_1 = cmyk2rgb;
287
288    var chroma$q = chroma_1;
289    var Color$D = Color_1;
290    var input$h = input$i;
291    var unpack$D = utils.unpack;
292    var type$n = utils.type;
293
294    var rgb2cmyk = rgb2cmyk_1;
295
296    Color$D.prototype.cmyk = function() {
297        return rgb2cmyk(this._rgb);
298    };
299
300    chroma$q.cmyk = function () {
301        var args = [], len = arguments.length;
302        while ( len-- ) args[ len ] = arguments[ len ];
303
304        return new (Function.prototype.bind.apply( Color$D, [ null ].concat( args, ['cmyk']) ));
305    };
306
307    input$h.format.cmyk = cmyk2rgb_1;
308
309    input$h.autodetect.push({
310        p: 2,
311        test: function () {
312            var args = [], len = arguments.length;
313            while ( len-- ) args[ len ] = arguments[ len ];
314
315            args = unpack$D(args, 'cmyk');
316            if (type$n(args) === 'array' && args.length === 4) {
317                return 'cmyk';
318            }
319        }
320    });
321
322    var unpack$C = utils.unpack;
323    var last$7 = utils.last;
324    var rnd$4 = function (a) { return Math.round(a*100)/100; };
325
326    /*
327     * supported arguments:
328     * - hsl2css(h,s,l)
329     * - hsl2css(h,s,l,a)
330     * - hsl2css([h,s,l], mode)
331     * - hsl2css([h,s,l,a], mode)
332     * - hsl2css({h,s,l,a}, mode)
333     */
334    var hsl2css$1 = function () {
335        var args = [], len = arguments.length;
336        while ( len-- ) args[ len ] = arguments[ len ];
337
338        var hsla = unpack$C(args, 'hsla');
339        var mode = last$7(args) || 'lsa';
340        hsla[0] = rnd$4(hsla[0] || 0);
341        hsla[1] = rnd$4(hsla[1]*100) + '%';
342        hsla[2] = rnd$4(hsla[2]*100) + '%';
343        if (mode === 'hsla' || (hsla.length > 3 && hsla[3]<1)) {
344            hsla[3] = hsla.length > 3 ? hsla[3] : 1;
345            mode = 'hsla';
346        } else {
347            hsla.length = 3;
348        }
349        return (mode + "(" + (hsla.join(',')) + ")");
350    };
351
352    var hsl2css_1 = hsl2css$1;
353
354    var unpack$B = utils.unpack;
355    var chroma$p = chroma_1;
356
357    /*
358     * supported arguments:
359     * - rgb2hsl(r,g,b)
360     * - rgb2hsl(r,g,b,a)
361     * - rgb2hsl([r,g,b])
362     * - rgb2hsl([r,g,b,a])
363     * - rgb2hsl({r,g,b,a})
364     */
365    var rgb2hsl$3 = function () {
366        var args = [], len = arguments.length;
367        while ( len-- ) args[ len ] = arguments[ len ];
368
369        args = unpack$B(args, 'rgba');
370        var r = args[0];
371        var g = args[1];
372        var b = args[2];
373
374        r /= 255;
375        g /= 255;
376        b /= 255;
377
378        var min = Math.min(r, g, b);
379        var max = Math.max(r, g, b);
380
381        var l = (max + min) / 2;
382        var s, h;
383
384        if (max === min){
385            s = 0;
386            h = chroma$p.hueNaN ? Number.NaN : 0;
387        } else {
388            s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min);
389        }
390
391        if (r == max) { h = (g - b) / (max - min); }
392        else if (g == max) { h = 2 + (b - r) / (max - min); }
393        else if (b == max) { h = 4 + (r - g) / (max - min); }
394
395        h *= 60;
396        if (h < 0) { h += 360; }
397        else if (!chroma$p.hueNaN && isNaN(h)) {h = 0;}
398        if (args.length>3 && args[3]!==undefined) { return [h,s,l,args[3]]; }
399        return [h,s,l];
400    };
401
402    var rgb2hsl_1 = rgb2hsl$3;
403
404    var unpack$A = utils.unpack;
405    var last$6 = utils.last;
406    var rnd$3 = function (a) { return Math.round(a*100)/100; };
407
408    /*
409     * supported arguments:
410     * - lch2css(l,c,h)
411     * - lch2css(l,c,h,a)
412     * - lch2css([l,c,h], mode)
413     * - lch2css([l,c,h,a], mode)
414     * - lch2css({l,c,h,a}, mode)
415     */
416    var lch2css$1 = function () {
417        var args = [], len = arguments.length;
418        while ( len-- ) args[ len ] = arguments[ len ];
419
420        var lcha = unpack$A(args, 'lch');
421        var mode = last$6(args) || 'lch';
422        lcha[0] = rnd$3(lcha[0]) + '%';
423        lcha[1] = rnd$3(lcha[1]) + '%';
424        lcha[2] = rnd$3(lcha[2] || 0);
425        if (mode === 'lcha' || (lcha.length > 3 && lcha[3]<1)) {
426            lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);
427        } else {
428            lcha.length = 3;
429        }
430        return ("lch(" + (lcha.join(' ')) + ")");
431    };
432
433    var lch2css_1 = lch2css$1;
434
435    var labConstants = {
436        // Corresponds roughly to RGB brighter/darker
437        Kn: 18,
438
439        // D65 standard referent
440        Xn: 0.950470,
441        Yn: 1,
442        Zn: 1.088830,
443
444        t0: 0.137931034,  // 4 / 29
445        t1: 0.206896552,  // 6 / 29
446        t2: 0.12841855,   // 3 * t1 * t1
447        t3: 0.008856452,  // t1 * t1 * t1
448    };
449
450    var LAB_CONSTANTS$3 = labConstants;
451    var unpack$z = utils.unpack;
452    var pow$a = Math.pow;
453
454    var rgb2lab$3 = function () {
455        var args = [], len = arguments.length;
456        while ( len-- ) args[ len ] = arguments[ len ];
457
458        var ref = unpack$z(args, 'rgb');
459        var r = ref[0];
460        var g = ref[1];
461        var b = ref[2];
462        var ref$1 = rgb2xyz(r,g,b);
463        var x = ref$1[0];
464        var y = ref$1[1];
465        var z = ref$1[2];
466        var l = 116 * y - 16;
467        return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)];
468    };
469
470    var rgb_xyz = function (r) {
471        if ((r /= 255) <= 0.04045) { return r / 12.92; }
472        return pow$a((r + 0.055) / 1.055, 2.4);
473    };
474
475    var xyz_lab = function (t) {
476        if (t > LAB_CONSTANTS$3.t3) { return pow$a(t, 1 / 3); }
477        return t / LAB_CONSTANTS$3.t2 + LAB_CONSTANTS$3.t0;
478    };
479
480    var rgb2xyz = function (r,g,b) {
481        r = rgb_xyz(r);
482        g = rgb_xyz(g);
483        b = rgb_xyz(b);
484        var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS$3.Xn);
485        var y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / LAB_CONSTANTS$3.Yn);
486        var z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / LAB_CONSTANTS$3.Zn);
487        return [x,y,z];
488    };
489
490    var rgb2lab_1 = rgb2lab$3;
491
492    var unpack$y = utils.unpack;
493    var RAD2DEG = utils.RAD2DEG;
494    var sqrt$4 = Math.sqrt;
495    var atan2$2 = Math.atan2;
496    var round$7 = Math.round;
497    var chroma$o = chroma_1;
498
499    var lab2lch$2 = function () {
500        var args = [], len = arguments.length;
501        while ( len-- ) args[ len ] = arguments[ len ];
502
503        var ref = unpack$y(args, 'lab');
504        var l = ref[0];
505        var a = ref[1];
506        var b = ref[2];
507        var c = sqrt$4(a * a + b * b);
508        var h = (atan2$2(b, a) * RAD2DEG + 360) % 360;
509        if (round$7(c*10000) === 0) {h = chroma$o.hueNaN ? Number.NaN : 0;}
510        return [l, c, h];
511    };
512
513    var lab2lch_1 = lab2lch$2;
514
515    var unpack$x = utils.unpack;
516    var rgb2lab$2 = rgb2lab_1;
517    var lab2lch$1 = lab2lch_1;
518
519    var rgb2lch$2 = function () {
520        var args = [], len = arguments.length;
521        while ( len-- ) args[ len ] = arguments[ len ];
522
523        var ref = unpack$x(args, 'rgb');
524        var r = ref[0];
525        var g = ref[1];
526        var b = ref[2];
527        var ref$1 = rgb2lab$2(r,g,b);
528        var l = ref$1[0];
529        var a = ref$1[1];
530        var b_ = ref$1[2];
531        return lab2lch$1(l,a,b_);
532    };
533
534    var rgb2lch_1 = rgb2lch$2;
535
536    var unpack$w = utils.unpack;
537    var last$5 = utils.last;
538    var rnd$2 = function (a) { return Math.round(a*100)/100; };
539
540    /*
541     * supported arguments:
542     * - lab2css(l,c,h)
543     * - lab2css(l,c,h,a)
544     * - lab2css([l,c,h], mode)
545     * - lab2css([l,c,h,a], mode)
546     * - lab2css({l,c,h,a}, mode)
547     */
548    var lab2css$1 = function () {
549        var args = [], len = arguments.length;
550        while ( len-- ) args[ len ] = arguments[ len ];
551
552        var laba = unpack$w(args, 'lab');
553        var mode = last$5(args) || 'lab';
554        laba[0] = rnd$2(laba[0]) + '%';
555        laba[1] = rnd$2(laba[1]) + '%';
556        laba[2] = rnd$2(laba[2]) + '%';
557        if (mode === 'laba' || (laba.length > 3 && laba[3]<1)) {
558            laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);
559        } else {
560            laba.length = 3;
561        }
562        return ("lab(" + (laba.join(' ')) + ")");
563    };
564
565    var lab2css_1 = lab2css$1;
566
567    var unpack$v = utils.unpack;
568    var last$4 = utils.last;
569    var rnd$1 = function (a) { return Math.round(a*100)/100; };
570
571    /*
572     * supported arguments:
573     * - oklab2css(l,c,h)
574     * - oklab2css(l,c,h,a)
575     * - oklab2css([l,c,h], mode)
576     * - oklab2css([l,c,h,a], mode)
577     * - oklab2css({l,c,h,a}, mode)
578     */
579    var oklab2css$1 = function () {
580        var args = [], len = arguments.length;
581        while ( len-- ) args[ len ] = arguments[ len ];
582
583        var laba = unpack$v(args, 'lab');
584        var mode = last$4(args) || 'lab';
585        laba[0] = rnd$1(laba[0]*100) + '%';
586        laba[1] = rnd$1(laba[1]*100) + '%';
587        laba[2] = rnd$1(laba[2]*100) + '%';
588        if (mode === 'laba' || (laba.length > 3 && laba[3]<1)) {
589            laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);
590        } else {
591            laba.length = 3;
592        }
593        return ("oklab(" + (laba.join(' ')) + ")");
594    };
595
596    var oklab2css_1 = oklab2css$1;
597
598    var unpack$u = utils.unpack;
599    var cbrt = Math.cbrt;
600    var pow$9 = Math.pow;
601    var sign$1 = Math.sign;
602
603    var rgb2oklab$3 = function () {
604        var args = [], len = arguments.length;
605        while ( len-- ) args[ len ] = arguments[ len ];
606
607        // OKLab color space implementation taken from
608        // https://bottosson.github.io/posts/oklab/
609        var ref = unpack$u(args, 'rgb');
610        var r = ref[0];
611        var g = ref[1];
612        var b = ref[2];
613        var ref$1 = [rgb2lrgb(r / 255), rgb2lrgb(g / 255), rgb2lrgb(b / 255)];
614        var lr = ref$1[0];
615        var lg = ref$1[1];
616        var lb = ref$1[2];
617        var l = cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);
618        var m = cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);
619        var s = cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);
620
621        return [
622            0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
623            1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
624            0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s
625        ];
626    };
627
628    var rgb2oklab_1 = rgb2oklab$3;
629
630    function rgb2lrgb(c) {
631        var abs = Math.abs(c);
632        if (abs < 0.04045) {
633            return c / 12.92;
634        }
635        return (sign$1(c) || 1) * pow$9((abs + 0.055) / 1.055, 2.4);
636    }
637
638    var unpack$t = utils.unpack;
639    var last$3 = utils.last;
640    var rnd = function (a) { return Math.round(a*100)/100; };
641
642    /*
643     * supported arguments:
644     * - oklch2css(l,c,h)
645     * - oklch2css(l,c,h,a)
646     * - oklch2css([l,c,h], mode)
647     * - oklch2css([l,c,h,a], mode)
648     * - oklch2css({l,c,h,a}, mode)
649     */
650    var oklch2css$1 = function () {
651        var args = [], len = arguments.length;
652        while ( len-- ) args[ len ] = arguments[ len ];
653
654        var lcha = unpack$t(args, 'lch');
655        var mode = last$3(args) || 'lch';
656        lcha[0] = rnd(lcha[0]*100) + '%';
657        lcha[1] = rnd(lcha[1]*100) + '%';
658        lcha[2] = rnd(lcha[2] || 0);
659        if (mode === 'lcha' || (lcha.length > 3 && lcha[3]<1)) {
660            lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);
661        } else {
662            lcha.length = 3;
663        }
664        return ("oklch(" + (lcha.join(' ')) + ")");
665    };
666
667    var oklch2css_1 = oklch2css$1;
668
669    var unpack$s = utils.unpack;
670    var rgb2oklab$2 = rgb2oklab_1;
671    var lab2lch = lab2lch_1;
672
673    var rgb2oklch$2 = function () {
674        var args = [], len = arguments.length;
675        while ( len-- ) args[ len ] = arguments[ len ];
676
677        var ref = unpack$s(args, 'rgb');
678        var r = ref[0];
679        var g = ref[1];
680        var b = ref[2];
681        var ref$1 = rgb2oklab$2(r, g, b);
682        var l = ref$1[0];
683        var a = ref$1[1];
684        var b_ = ref$1[2];
685        return lab2lch(l, a, b_);
686    };
687
688    var rgb2oklch_1 = rgb2oklch$2;
689
690    var unpack$r = utils.unpack;
691    var last$2 = utils.last;
692    var hsl2css = hsl2css_1;
693    var rgb2hsl$2 = rgb2hsl_1;
694    var lch2css = lch2css_1;
695    var rgb2lch$1 = rgb2lch_1;
696    var lab2css = lab2css_1;
697    var rgb2lab$1 = rgb2lab_1;
698    var oklab2css = oklab2css_1;
699    var rgb2oklab$1 = rgb2oklab_1;
700    var oklch2css = oklch2css_1;
701    var rgb2oklch$1 = rgb2oklch_1;
702    var round$6 = Math.round;
703
704    /*
705     * supported arguments:
706     * - rgb2css(r,g,b)
707     * - rgb2css(r,g,b,a)
708     * - rgb2css([r,g,b], mode)
709     * - rgb2css([r,g,b,a], mode)
710     * - rgb2css({r,g,b,a}, mode)
711     */
712    var rgb2css$1 = function () {
713        var args = [], len = arguments.length;
714        while ( len-- ) args[ len ] = arguments[ len ];
715
716        var rgba = unpack$r(args, 'rgba');
717        var mode = last$2(args) || 'rgb';
718        if (mode.substring(0,3) == 'hsl') {
719            return hsl2css(rgb2hsl$2(rgba), mode);
720        } else if (mode.substring(0,3) == 'lch') {
721            return lch2css(rgb2lch$1(rgba), mode);
722        } else if (mode.substring(0,3) == 'lab') {
723            return lab2css(rgb2lab$1(rgba).concat( [rgba.length > 3 ? rgba[3] : 1]), mode);
724        }else if (mode.substring(0,5) == 'oklab') {
725            return oklab2css(rgb2oklab$1(rgba).concat( [rgba.length > 3 ? rgba[3] : 1]), 'lab');
726        } else if (mode.substring(0,5) == 'oklch') {
727            return oklch2css(rgb2oklch$1(rgba).concat( [rgba.length > 3 ? rgba[3] : 1]), 'lch');
728        }
729        rgba[0] = round$6(rgba[0]);
730        rgba[1] = round$6(rgba[1]);
731        rgba[2] = round$6(rgba[2]);
732        if (mode === 'rgba' || (rgba.length > 3 && rgba[3]<1)) {
733            rgba[3] = rgba.length > 3 ? rgba[3] : 1;
734            mode = 'rgba';
735        }
736        return (mode + "(" + (rgba.slice(0,mode==='rgb'?3:4).join(',')) + ")");
737    };
738
739    var rgb2css_1 = rgb2css$1;
740
741    var unpack$q = utils.unpack;
742    var round$5 = Math.round;
743
744    var hsl2rgb$1 = function () {
745        var assign;
746
747        var args = [], len = arguments.length;
748        while ( len-- ) args[ len ] = arguments[ len ];
749        args = unpack$q(args, 'hsl');
750        var h = args[0];
751        var s = args[1];
752        var l = args[2];
753        var r,g,b;
754        if (s === 0) {
755            r = g = b = l*255;
756        } else {
757            var t3 = [0,0,0];
758            var c = [0,0,0];
759            var t2 = l < 0.5 ? l * (1+s) : l+s-l*s;
760            var t1 = 2 * l - t2;
761            var h_ = h / 360;
762            t3[0] = h_ + 1/3;
763            t3[1] = h_;
764            t3[2] = h_ - 1/3;
765            for (var i=0; i<3; i++) {
766                if (t3[i] < 0) { t3[i] += 1; }
767                if (t3[i] > 1) { t3[i] -= 1; }
768                if (6 * t3[i] < 1)
769                    { c[i] = t1 + (t2 - t1) * 6 * t3[i]; }
770                else if (2 * t3[i] < 1)
771                    { c[i] = t2; }
772                else if (3 * t3[i] < 2)
773                    { c[i] = t1 + (t2 - t1) * ((2 / 3) - t3[i]) * 6; }
774                else
775                    { c[i] = t1; }
776            }
777            (assign = [round$5(c[0]*255),round$5(c[1]*255),round$5(c[2]*255
777)], r = assign[0], g = assign[1], b = assign[2]);
778        }
779        if (args.length > 3) {
780            // keep alpha channel
781            return [r,g,b,args[3]];
782        }
783        return [r,g,b,1];
784    };
785
786    var hsl2rgb_1 = hsl2rgb$1;
787
788    var LAB_CONSTANTS$2 = labConstants;
789    var unpack$p = utils.unpack;
790    var pow$8 = Math.pow;
791
792    /*
793     * L* [0..100]
794     * a [-100..100]
795     * b [-100..100]
796     */
797    var lab2rgb$2 = function () {
798        var args = [], len = arguments.length;
799        while ( len-- ) args[ len ] = arguments[ len ];
800
801        args = unpack$p(args, 'lab');
802        var l = args[0];
803        var a = args[1];
804        var b = args[2];
805        var x,y,z, r,g,b_;
806
807        y = (l + 16) / 116;
808        x = isNaN(a) ? y : y + a / 500;
809        z = isNaN(b) ? y : y - b / 200;
810
811        y = LAB_CONSTANTS$2.Yn * lab_xyz(y);
812        x = LAB_CONSTANTS$2.Xn * lab_xyz(x);
813        z = LAB_CONSTANTS$2.Zn * lab_xyz(z);
814
815        r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z);  // D65 -> sRGB
816        g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);
817        b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);
818
819        return [r,g,b_,args.length > 3 ? args[3] : 1];
820    };
821
822    var xyz_rgb = function (r) {
823        return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow$8(r, 1 / 2.4) - 0.055)
824    };
825
826    var lab_xyz = function (t) {
827        return t > LAB_CONSTANTS$2.t1 ? t * t * t : LAB_CONSTANTS$2.t2 * (t - LAB_CONSTANTS$2.t0)
828    };
829
830    var lab2rgb_1 = lab2rgb$2;
831
832    var unpack$o = utils.unpack;
833    var DEG2RAD = utils.DEG2RAD;
834    var sin$3 = Math.sin;
835    var cos$4 = Math.cos;
836
837    var lch2lab$2 = function () {
838        var args = [], len = arguments.length;
839        while ( len-- ) args[ len ] = arguments[ len ];
840
841        /*
842        Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.
843        These formulas were invented by David Dalrymple to obtain maximum contrast without going
844        out of gamut if the parameters are in the range 0-1.
845
846        A saturation multiplier was added by Gregor Aisch
847        */
848        var ref = unpack$o(args, 'lch');
849        var l = ref[0];
850        var c = ref[1];
851        var h = ref[2];
852        if (isNaN(h)) { h = 0; }
853        h = h * DEG2RAD;
854        return [l, cos$4(h) * c, sin$3(h) * c]
855    };
856
857    var lch2lab_1 = lch2lab$2;
858
859    var unpack$n = utils.unpack;
860    var lch2lab$1 = lch2lab_1;
861    var lab2rgb$1 = lab2rgb_1;
862
863    var lch2rgb$2 = function () {
864        var args = [], len = arguments.length;
865        while ( len-- ) args[ len ] = arguments[ len ];
866
867        args = unpack$n(args, 'lch');
868        var l = args[0];
869        var c = args[1];
870        var h = args[2];
871        var ref = lch2lab$1 (l,c,h);
872        var L = ref[0];
873        var a = ref[1];
874        var b_ = ref[2];
875        var ref$1 = lab2rgb$1 (L,a,b_);
876        var r = ref$1[0];
877        var g = ref$1[1];
878        var b = ref$1[2];
879        return [r, g, b, args.length > 3 ? args[3] : 1];
880    };
881
882    var lch2rgb_1 = lch2rgb$2;
883
884    var unpack$m = utils.unpack;
885    var pow$7 = Math.pow;
886    var sign = Math.sign;
887
888    /*
889     * L* [0..100]
890     * a [-100..100]
891     * b [-100..100]
892     */
893    var oklab2rgb$2 = function () {
894        var args = [], len = arguments.length;
895        while ( len-- ) args[ len ] = arguments[ len ];
896
897        args = unpack$m(args, 'lab');
898        var L = args[0];
899        var a = args[1];
900        var b = args[2];
901
902        var l = pow$7(L + 0.3963377774 * a + 0.2158037573 * b, 3);
903        var m = pow$7(L - 0.1055613458 * a - 0.0638541728 * b, 3);
904        var s = pow$7(L - 0.0894841775 * a - 1.291485548 * b, 3);
905
906        return [
907            255 * lrgb2rgb(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),
908            255 * lrgb2rgb(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),
909            255 * lrgb2rgb(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s),
910            args.length > 3 ? args[3] : 1
911        ];
912    };
913
914    var oklab2rgb_1 = oklab2rgb$2;
915
916    function lrgb2rgb(c) {
917        var abs = Math.abs(c);
918        if (abs > 0.0031308) {
919            return (sign(c) || 1) * (1.055 * pow$7(abs, 1 / 2.4) - 0.055);
920        }
921        return c * 12.92;
922    }
923
924    var unpack$l = utils.unpack;
925    var lch2lab = lch2lab_1;
926    var oklab2rgb$1 = oklab2rgb_1;
927
928    var oklch2rgb$1 = function () {
929        var args = [], len = arguments.length;
930        while ( len-- ) args[ len ] = arguments[ len ];
931
932        args = unpack$l(args, 'lch');
933        var l = args[0];
934        var c = args[1];
935        var h = args[2];
936        var ref = lch2lab(l, c, h);
937        var L = ref[0];
938        var a = ref[1];
939        var b_ = ref[2];
940        var ref$1 = oklab2rgb$1(L, a, b_);
941        var r = ref$1[0];
942        var g = ref$1[1];
943        var b = ref$1[2];
944        return [r, g, b, args.length > 3 ? args[3] : 1];
945    };
946
947    var oklch2rgb_1 = oklch2rgb$1;
948
949    var hsl2rgb = hsl2rgb_1;
950    var lab2rgb = lab2rgb_1;
951    var lch2rgb$1 = lch2rgb_1;
952    var oklab2rgb = oklab2rgb_1;
953    var oklch2rgb = oklch2rgb_1;
954    var input$g = input$i;
955
956    var RE_RGB = /^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/;
957    var RE_RGBA = /^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/;
958    var RE_RGB_PCT = /^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/;
959    var RE_RGBA_PCT = /^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/;
960    var RE_HSL = /^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/;
961    var RE_HSLA = /^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/;
962    var RE_LABA = /^lab\(\s*(\d+(?:\.\d+)?)%?\s* (-?\d+(?:\.\d+)?)%?\s* \s*(-?\d+(?:\.\d+)?)%?\s*(?:\/\s*([01]|[01]?\.\d+))?\)$/;
963    var RE_LCHA = /^lch\(\s*(\d+(?:\.\d+)?)%?\s* (\d+(?:\.\d+)?)%?\s* \s*(-?\d+(?:\.\d+)?)\s*(?:\/\s*([01]|[01]?\.\d+))?\)$/;
964    var RE_OKLABA = /^oklab\(\s*(\d+(?:\.\d+)?%?)\s* (-?\d+(?:\.\d+)?%?)\s* \s*(-?\d+(?:\.\d+)?%?)\s*(?:\/\s*([01]|[01]?\.\d+))?\)$/;
965    var RE_OKLCHA = /^oklch\(\s*(\d+(?:\.\d+)?%?)\s* (\d+(?:\.\d+)?%?)\s* \s*(-?\d+(?:\.\d+)?)\s*(?:\/\s*([01]|[01]?\.\d+))?\)$/;
966
967    var round$4 = Math.round;
968    var abs$2 = Math.abs;
969
970    var css2rgb$1 = function (css) {
971        css = css.toLowerCase().trim();
972        var m;
973
974        if (input$g.format.named) {
975            try {
976                return input$g.format.named(css);
977            } catch (e) {
978                // eslint-disable-next-line
979            }
980        }
981
982        // rgb(250,20,0)
983        if ((m = css.match(RE_RGB))) {
984            var rgb = m.slice(1,4);
985            for (var i=0; i<3; i++) {
986                rgb[i] = Number(rgb[i]);
987            }
988            rgb[3] = 1;  // default alpha
989            return rgb;
990        }
991
992        // rgba(250,20,0,0.4)
993        if ((m = css.match(RE_RGBA))) {
994            var rgb$1 = m.slice(1,5);
995            for (var i$1=0; i$1<4; i$1++) {
996                rgb$1[i$1] = Number(rgb$1[i$1]);
997            }
998            return rgb$1;
999        }
1000
1001        // rgb(100%,0%,0%)
1002        if ((m = css.match(RE_RGB_PCT))) {
1003            var rgb$2 = m.slice(1,4);
1004            for (var i$2=0; i$2<3; i$2++) {
1005                rgb$2[i$2] = round$4(Number(rgb$2[i$2]) * 2.55);
1006            }
1007            rgb$2[3] = 1;  // default alpha
1008            return rgb$2;
1009        }
1010
1011        // rgba(100%,0%,0%,0.4)
1012        if ((m = css.match(RE_RGBA_PCT))) {
1013            var rgb$3 = m.slice(1,5);
1014            for (var i$3=0; i$3<3; i$3++) {
1015                rgb$3[i$3] = round$4(Number(rgb$3[i$3]) * 2.55);
1016            }
1017            rgb$3[3] = Number(rgb$3[3]);
1018            return rgb$3;
1019        }
1020
1021        // hsl(0,100%,50%)
1022        if ((m = css.match(RE_HSL))) {
1023            var hsl = m.slice(1,4);
1024            for (var i$4 = 0; i$4 <= 2; i$4++) {hsl[i$4] = Number(hsl[i$4]);}
1025            hsl[1] *= 0.01;
1026            hsl[2] *= 0.01;
1027            var rgb$4 = hsl2rgb(hsl);
1028            rgb$4[3] = 1;
1029            return rgb$4;
1030        }
1031
1032        // hsla(0,100%,50%,0.5)
1033        if ((m = css.match(RE_HSLA))) {
1034            var hsl$1 = m.slice(1,4);
1035            for (var i$5 = 0; i$5 <= 2; i$5++) {hsl$1[i$5] = Number(hsl$1[i$5]);}
1036            hsl$1[1] *= 0.01;
1037            hsl$1[2] *= 0.01;
1038            var rgb$5 = hsl2rgb(hsl$1);
1039            rgb$5[3] = Number(m[4]);  // default alpha = 1
1040            return rgb$5;
1041        }
1042        
1043        // lab(48.25% -28.85% -8.48% / 1)
1044        if ((m = css.match(RE_LABA))) {
1045            var lab$1 = m.slice(1,4);
1046            for (var i$6 = 0; i$6 <= 2; i$6++) {lab$1[i$6] = Number(lab$1[i$6]);}
1047            var rgb$6 = lab2rgb(lab$1).map(function (i) { return abs$2(round$4(i)); });
1048            rgb$6[3] = Number(m[4]); // default alpha = 1
1049            if (!rgb$6[3] && rgb$6[3] !== 0) {rgb$6[3] = 1;}
1050            return rgb$6;
1051        }
1052        
1053        // lch(54.31% 9.27% 194.77 / 1)
1054        if ((m = css.match(RE_LCHA))) {
1055            var lch = m.slice(1,4);
1056            for (var i$7 = 0; i$7 <= 2; i$7++) {lch[i$7] = Number(lch[i$7]);}
1057            var rgb$7 = lch2rgb$1(lch).map(function (i) { return abs$2(round$4(i)); });
1058            rgb$7[3] = Number(m[4]); // default alpha = 1
1059            if (!rgb$7[3] && rgb$7[3] !== 0) {rgb$7[3] = 1;}
1060            return rgb$7;
1061        }
1062        
1063        // oklab(54.31% -8.96% -2.36% / 1)
1064        if ((m = css.match(RE_OKLABA))) {
1065            var lab$2 = m.slice(1,4);
1066            for (var i$8 = 0; i$8 <= 2; i$8++) {
1067                if (lab$2[i$8].endsWith('%')) {lab$2[i$8] = Number(lab$2[i$8].replace('%', '')) * 0.01;}
1068                else {lab$2[i$8] = Number(lab$2[i$8]);}
1069            }
1070            var rgb$8 = oklab2rgb(lab$2).map(function (i) { return abs$2(round$4(i)); });
1071            rgb$8[3] = Number(m[4]); // default alpha = 1
1072            if (!rgb$8[3] && rgb$8[3] !== 0) {rgb$8[3] = 1;}
1073            return rgb$8;
1074        }
1075        
1076        // oklch(54.31% 9.27% 194.77 / 1)
1077        if ((m = css.match(RE_OKLCHA))) {
1078            var lch$1 = m.slice(1,4);
1079            for (var i$9 = 0; i$9 <= 1; i$9++) {
1080                if (lch$1[i$9].endsWith('%')) {lch$1[i$9] = Number(lch$1[i$9].replace('%', '')) * 0.01;}
1081                else {lab[i$9] = Number(lab[i$9]);}
1082            }
1083            var rgb$9 = oklch2rgb(lch$1).map(function (i) { return abs$2(round$4(i)); });
1084            rgb$9[3] = Number(m[4]); // default alpha = 1
1085            if (!rgb$9[3] && rgb$9[3] !== 0) {rgb$9[3] = 1;}
1086            return rgb$9;
1087        }
1088    };
1089
1090    css2rgb$1.test = function (s) {
1091        return RE_RGB.test(s) ||
1092            RE_RGBA.test(s) ||
1093            RE_RGB_PCT.test(s) ||
1094            RE_RGBA_PCT.test(s) ||
1095            RE_HSL.test(s) ||
1096            RE_HSLA.test(s) ||
1097            RE_LABA.test(s) ||
1098            RE_LCHA.test(s) ||
1099            RE_OKLABA.test(s) ||
1100            RE_OKLCHA.test(s);
1101    };
1102
1103    var css2rgb_1 = css2rgb$1;
1104
1105    var chroma$n = chroma_1;
1106    var Color$C = Color_1;
1107    var input$f = input$i;
1108    var type$m = utils.type;
1109
1110    var rgb2css = rgb2css_1;
1111    var css2rgb = css2rgb_1;
1112
1113    Color$C.prototype.css = function(mode) {
1114        return rgb2css(this._rgb, mode);
1115    };
1116
1117    chroma$n.css = function () {
1118        var args = [], len = arguments.length;
1119        while ( len-- ) args[ len ] = arguments[ len ];
1120
1121        return new (Function.prototype.bind.apply( Color$C, [ null ].concat( args, ['css']) ));
1122    };
1123
1124    input$f.format.css = css2rgb;
1125
1126    input$f.autodetect.push({
1127        p: 5,
1128        test: function (h) {
1129            var rest = [], len = arguments.length - 1;
1130            while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];
1131
1132            if (!rest.length && type$m(h) === 'string' && css2rgb.test(h)) {
1133                return 'css';
1134            }
1135        }
1136    });
1137
1138    var Color$B = Color_1;
1139    var chroma$m = chroma_1;
1140    var input$e = input$i;
1141    var unpack$k = utils.unpack;
1142
1143    input$e.format.gl = function () {
1144        var args = [], len = arguments.length;
1145        while ( len-- ) args[ len ] = arguments[ len ];
1146
1147        var rgb = unpack$k(args, 'rgba');
1148        rgb[0] *= 255;
1149        rgb[1] *= 255;
1150        rgb[2] *= 255;
1151        return rgb;
1152    };
1153
1154    chroma$m.gl = function () {
1155        var args = [], len = arguments.length;
1156        while ( len-- ) args[ len ] = arguments[ len ];
1157
1158        return new (Function.prototype.bind.apply( Color$B, [ null ].concat( args, ['gl']) ));
1159    };
1160
1161    Color$B.prototype.gl = function() {
1162        var rgb = this._rgb;
1163        return [rgb[0]/255, rgb[1]/255, rgb[2]/255, rgb[3]];
1164    };
1165
1166    var unpack$j = utils.unpack;
1167    var chroma$l = chroma_1;
1168
1169    var rgb2hcg$1 = function () {
1170        var args = [], len = arguments.length;
1171        while ( len-- ) args[ len ] = arguments[ len ];
1172
1173        var ref = unpack$j(args, 'rgb');
1174        var r = ref[0];
1175        var g = ref[1];
1176        var b = ref[2];
1177        var min = Math.min(r, g, b);
1178        var max = Math.max(r, g, b);
1179        var delta = max - min;
1180        var c = delta * 100 / 255;
1181        var _g = min / (255 - delta) * 100;
1182        var h;
1183        if (delta === 0) {
1184            h = chroma$l.hueNaN ? Number.NaN : 0;
1185        } else {
1186            if (r === max) { h = (g - b) / delta; }
1187            if (g === max) { h = 2+(b - r) / delta; }
1188            if (b === max) { h = 4+(r - g) / delta; }
1189            h *= 60;
1190            if (h < 0) { h += 360; }
1191            else if (!chroma$l.hueNaN && isNaN(h)) {h = 0;}
1192        }
1193        return [h, c, _g];
1194    };
1195
1196    var rgb2hcg_1 = rgb2hcg$1;
1197
1198    var unpack$i = utils.unpack;
1199    var floor$3 = Math.floor;
1200
1201    /*
1202     * this is basically just HSV with some minor tweaks
1203     *
1204     * hue.. [0..360]
1205     * chroma .. [0..1]
1206     * grayness .. [0..1]
1207     */
1208
1209    var hcg2rgb = function () {
1210        var assign, assign$1, assign$2, assign$3, assign$4, assign$5;
1211
1212        var args = [], len = arguments.length;
1213        while ( len-- ) args[ len ] = arguments[ len ];
1214        args = unpack$i(args, 'hcg');
1215        var h = args[0];
1216        var c = args[1];
1217        var _g = args[2];
1218        var r,g,b;
1219        _g = _g * 255;
1220        var _c = c * 255;
1221        if (c === 0) {
1222            r = g = b = _g;
1223        } else {
1224            if (h === 360) { h = 0; }
1225            if (h > 360) { h -= 360; }
1226            if (h < 0) { h += 360; }
1227            h /= 60;
1228            var i = floor$3(h);
1229            var f = h - i;
1230            var p = _g * (1 - c);
1231            var q = p + _c * (1 - f);
1232            var t = p + _c * f;
1233            var v = p + _c;
1234            switch (i) {
1235                case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break
1236                case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break
1237                case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break
1238                case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break
1239                case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break
1240                case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break
1241            }
1242        }
1243        return [r, g, b, args.length > 3 ? args[3] : 1];
1244    };
1245
1246    var hcg2rgb_1 = hcg2rgb;
1247
1248    var unpack$h = utils.unpack;
1249    var type$l = utils.type;
1250    var chroma$k = chroma_1;
1251    var Color$A = Color_1;
1252    var input$d = input$i;
1253
1254    var rgb2hcg = rgb2hcg_1;
1255
1256    Color$A.prototype.hcg = function() {
1257        return rgb2hcg(this._rgb);
1258    };
1259
1260    chroma$k.hcg = function () {
1261        var args = [], len = arguments.length;
1262        while ( len-- ) args[ len ] = arguments[ len ];
1263
1264        return new (Function.prototype.bind.apply( Color$A, [ null ].concat( args, ['hcg']) ));
1265    };
1266
1267    input$d.format.hcg = hcg2rgb_1;
1268
1269    input$d.autodetect.push({
1270        p: 1,
1271        test: function () {
1272            var args = [], len = arguments.length;
1273            while ( len-- ) args[ len ] = arguments[ len ];
1274
1275            args = unpack$h(args, 'hcg');
1276            if (type$l(args) === 'array' && args.length === 3) {
1277                return 'hcg';
1278            }
1279        }
1280    });
1281
1282    var unpack$g = utils.unpack;
1283    var last$1 = utils.last;
1284    var round$3 = Math.round;
1285
1286    var rgb2hex$2 = function () {
1287        var args = [], len = arguments.length;
1288        while ( len-- ) args[ len ] = arguments[ len ];
1289
1290        var ref = unpack$g(args, 'rgba');
1291        var r = ref[0];
1292        var g = ref[1];
1293        var b = ref[2];
1294        var a = ref[3];
1295        var mode = last$1(args) || 'auto';
1296        if (a === undefined) { a = 1; }
1297        if (mode === 'auto') {
1298            mode = a < 1 ? 'rgba' : 'rgb';
1299        }
1300        r = round$3(r);
1301        g = round$3(g);
1302        b = round$3(b);
1303        var u = r << 16 | g << 8 | b;
1304        var str = "000000" + u.toString(16); //#.toUpperCase();
1305        str = str.substring(str.length - 6);
1306        var hxa = '0' + round$3(a * 255).toString(16);
1307        hxa = hxa.substring(hxa.length - 2);
1308        switch (mode.toLowerCase()) {
1309            case 'rgba': return ("#" + str + hxa);
1310            case 'argb': return ("#" + hxa + str);
1311            default: return ("#" + str);
1312        }
1313    };
1314
1315    var rgb2hex_1 = rgb2hex$2;
1316
1317    var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
1318    var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;
1319
1320    var hex2rgb$1 = function (hex) {
1321        if (hex.match(RE_HEX)) {
1322            // remove optional leading #
1323            if (hex.length === 4 || hex.length === 7) {
1324                hex = hex.substring(1);
1325            }
1326            // expand short-notation to full six-digit
1327            if (hex.length === 3) {
1328                hex = hex.split('');
1329                hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
1330            }
1331            var u = parseInt(hex, 16);
1332            var r = u >> 16;
1333            var g = u >> 8 & 0xFF;
1334            var b = u & 0xFF;
1335            return [r,g,b,1];
1336        }
1337
1338        // match rgba hex format, eg #FF000077
1339        if (hex.match(RE_HEXA)) {
1340            if (hex.length === 5 || hex.length === 9) {
1341                // remove optional leading #
1342                hex = hex.substring(1);
1343            }
1344            // expand short-notation to full eight-digit
1345            if (hex.length === 4) {
1346                hex = hex.split('');
1347                hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]+hex[3]+hex[3];
1348            }
1349            var u$1 = parseInt(hex, 16);
1350            var r$1 = u$1 >> 24 & 0xFF;
1351            var g$1 = u$1 >> 16 & 0xFF;
1352            var b$1 = u$1 >> 8 & 0xFF;
1353            var a = Math.round((u$1 & 0xFF) / 0xFF * 100) / 100;
1354            return [r$1,g$1,b$1,a];
1355        }
1356
1357        // we used to check for css colors here
1358        // if _input.css? and rgb = _input.css hex
1359        //     return rgb
1360
1361        throw new Error(("unknown hex color: " + hex));
1362    };
1363
1364    var hex2rgb_1 = hex2rgb$1;
1365
1366    var chroma$j = chroma_1;
1367    var Color$z = Color_1;
1368    var type$k = utils.type;
1369    var input$c = input$i;
1370
1371    var rgb2hex$1 = rgb2hex_1;
1372
1373    Color$z.prototype.hex = function(mode) {
1374        return rgb2hex$1(this._rgb, mode);
1375    };
1376
1377    chroma$j.hex = function () {
1378        var args = [], len = arguments.length;
1379        while ( len-- ) args[ len ] = arguments[ len ];
1380
1381        return new (Function.prototype.bind.apply( Color$z, [ null ].concat( args, ['hex']) ));
1382    };
1383
1384    input$c.format.hex = hex2rgb_1;
1385    input$c.autodetect.push({
1386        p: 4,
1387        test: function (h) {
1388            var rest = [], len = arguments.length - 1;
1389            while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];
1390
1391            if (!rest.length && type$k(h) === 'string' && [3,4,5,6,7,8,9].indexOf(h.length) >= 0) {
1392                return 'hex';
1393            }
1394        }
1395    });
1396
1397    var unpack$f = utils.unpack;
1398    var TWOPI$2 = utils.TWOPI;
1399    var min$2 = Math.min;
1400    var sqrt$3 = Math.sqrt;
1401    var acos = Math.acos;
1402    var chroma$i = chroma_1;
1403
1404    var rgb2hsi$1 = function () {
1405        var args = [], len = arguments.length;
1406        while ( len-- ) args[ len ] = arguments[ len ];
1407
1408        /*
1409        borrowed from here:
1410        http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp
1411        */
1412        var ref = unpack$f(args, 'rgb');
1413        var r = ref[0];
1414        var g = ref[1];
1415        var b = ref[2];
1416        r /= 255;
1417        g /= 255;
1418        b /= 255;
1419        var h;
1420        var min_ = min$2(r,g,b);
1421        var i = (r+g+b) / 3;
1422        var s = i > 0 ? 1 - min_/i : 0;
1423        if (s === 0) {
1424            h = chroma$i.hueNaN ? Number.NaN : 0;
1425        } else {
1426            h = ((r-g)+(r-b)) / 2;
1427            h /= sqrt$3((r-g)*(r-g) + (r-b)*(g-b));
1428            h = acos(h);
1429            if (b > g) {
1430                h = TWOPI$2 - h;
1431            }
1432            h /= TWOPI$2;
1433            if (!chroma$i.hueNaN && isNaN(h)) {h = 0;}
1434        }
1435        return [h*360,s,i];
1436    };
1437
1438    var rgb2hsi_1 = rgb2hsi$1;
1439
1440    var unpack$e = utils.unpack;
1441    var limit = utils.limit;
1442    var TWOPI$1 = utils.TWOPI;
1443    var PITHIRD = utils.PITHIRD;
1444    var cos$3 = Math.cos;
1445
1446    /*
1447     * hue [0..360]
1448     * saturation [0..1]
1449     * intensity [0..1]
1450     */
1451    var hsi2rgb = function () {
1452        var args = [], len = arguments.length;
1453        while ( len-- ) args[ len ] = arguments[ len ];
1454
1455        /*
1456        borrowed from here:
1457        http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp
1458        */
1459        args = unpack$e(args, 'hsi');
1460        var h = args[0];
1461        var s = args[1];
1462        var i = args[2];
1463        var r,g,b;
1464
1465        if (isNaN(h)) { h = 0; }
1466        if (isNaN(s)) { s = 0; }
1467        // normalize hue
1468        if (h > 360) { h -= 360; }
1469        if (h < 0) { h += 360; }
1470        h /= 360;
1471        if (h < 1/3) {
1472            b = (1-s)/3;
1473            r = (1+s*cos$3(TWOPI$1*h)/cos$3(PITHIRD-TWOPI$1*h))/3;
1474            g = 1 - (b+r);
1475        } else if (h < 2/3) {
1476            h -= 1/3;
1477            r = (1-s)/3;
1478            g = (1+s*cos$3(TWOPI$1*h)/cos$3(PITHIRD-TWOPI$1*h))/3;
1479            b = 1 - (r+g);
1480        } else {
1481            h -= 2/3;
1482            g = (1-s)/3;
1483            b = (1+s*cos$3(TWOPI$1*h)/cos$3(PITHIRD-TWOPI$1*h))/3;
1484            r = 1 - (g+b);
1485        }
1486        r = limit(i*r*3);
1487        g = limit(i*g*3);
1488        b = limit(i*b*3);
1489        return [r*255, g*255, b*255, args.length > 3 ? args[3] : 1];
1490    };
1491
1492    var hsi2rgb_1 = hsi2rgb;
1493
1494    var unpack$d = utils.unpack;
1495    var type$j = utils.type;
1496    var chroma$h = chroma_1;
1497    var Color$y = Color_1;
1498    var input$b = input$i;
1499
1500    var rgb2hsi = rgb2hsi_1;
1501
1502    Color$y.prototype.hsi = function() {
1503        return rgb2hsi(this._rgb);
1504    };
1505
1506    chroma$h.hsi = function () {
1507        var args = [], len = arguments.length;
1508        while ( len-- ) args[ len ] = arguments[ len ];
1509
1510        return new (Function.prototype.bind.apply( Color$y, [ null ].concat( args, ['hsi']) ));
1511    };
1512
1513    input$b.format.hsi = hsi2rgb_1;
1514
1515    input$b.autodetect.push({
1516        p: 2,
1517        test: function () {
1518            var args = [], len = arguments.length;
1519            while ( len-- ) args[ len ] = arguments[ len ];
1520
1521            args = unpack$d(args, 'hsi');
1522            if (type$j(args) === 'array' && args.length === 3) {
1523                return 'hsi';
1524            }
1525        }
1526    });
1527
1528    var unpack$c = utils.unpack;
1529    var type$i = utils.type;
1530    var chroma$g = chroma_1;
1531    var Color$x = Color_1;
1532    var input$a = input$i;
1533
1534    var rgb2hsl$1 = rgb2hsl_1;
1535
1536    Color$x.prototype.hsl = function() {
1537        return rgb2hsl$1(this._rgb);
1538    };
1539
1540    chroma$g.hsl = function () {
1541        var args = [], len = arguments.length;
1542        while ( len-- ) args[ len ] = arguments[ len ];
1543
1544        return new (Function.prototype.bind.apply( Color$x, [ null ].concat( args, ['hsl']) ));
1545    };
1546
1547    input$a.format.hsl = hsl2rgb_1;
1548
1549    input$a.autodetect.push({
1550        p: 2,
1551        test: function () {
1552            var args = [], len = arguments.length;
1553            while ( len-- ) args[ len ] = arguments[ len ];
1554
1555            args = unpack$c(args, 'hsl');
1556            if (type$i(args) === 'array' && args.length === 3) {
1557                return 'hsl';
1558            }
1559        }
1560    });
1561
1562    var unpack$b = utils.unpack;
1563    var min$1 = Math.min;
1564    var max$1 = Math.max;
1565    var chroma$f = chroma_1;
1566
1567    /*
1568     * supported arguments:
1569     * - rgb2hsv(r,g,b)
1570     * - rgb2hsv([r,g,b])
1571     * - rgb2hsv({r,g,b})
1572     */
1573    var rgb2hsl = function () {
1574        var args = [], len = arguments.length;
1575        while ( len-- ) args[ len ] = arguments[ len ];
1576
1577        args = unpack$b(args, 'rgb');
1578        var r = args[0];
1579        var g = args[1];
1580        var b = args[2];
1581        var min_ = min$1(r, g, b);
1582        var max_ = max$1(r, g, b);
1583        var delta = max_ - min_;
1584        var h,s,v;
1585        v = max_ / 255.0;
1586        if (max_ === 0) {
1587            h = chroma$f.hueNaN ? Number.NaN : 0;
1588            s = 0;
1589        } else {
1590            s = delta / max_;
1591            if (r === max_) { h = (g - b) / delta; }
1592            if (g === max_) { h = 2+(b - r) / delta; }
1593            if (b === max_) { h = 4+(r - g) / delta; }
1594            h *= 60;
1595            if (h < 0) { h += 360; }
1596            else if (!chroma$f.hueNaN && isNaN(h)) {h = 0;}
1597        }
1598        return [h, s, v]
1599    };
1600
1601    var rgb2hsv$1 = rgb2hsl;
1602
1603    var unpack$a = utils.unpack;
1604    var floor$2 = Math.floor;
1605
1606    var hsv2rgb = function () {
1607        var assign, assign$1, assign$2, assign$3, assign$4, assign$5;
1608
1609        var args = [], len = arguments.length;
1610        while ( len-- ) args[ len ] = arguments[ len ];
1611        args = unpack$a(args, 'hsv');
1612        var h = args[0];
1613        var s = args[1];
1614        var v = args[2];
1615        var r,g,b;
1616        v *= 255;
1617        if (s === 0) {
1618            r = g = b = v;
1619        } else {
1620            if (h === 360) { h = 0; }
1621            if (h > 360) { h -= 360; }
1622            if (h < 0) { h += 360; }
1623            h /= 60;
1624
1625            var i = floor$2(h);
1626            var f = h - i;
1627            var p = v * (1 - s);
1628            var q = v * (1 - s * f);
1629            var t = v * (1 - s * (1 - f));
1630
1631            switch (i) {
1632                case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break
1633                case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break
1634                case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break
1635                case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break
1636                case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break
1637                case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break
1638            }
1639        }
1640        return [r,g,b,args.length > 3?args[3]:1];
1641    };
1642
1643    var hsv2rgb_1 = hsv2rgb;
1644
1645    var unpack$9 = utils.unpack;
1646    var type$h = utils.type;
1647    var chroma$e = chroma_1;
1648    var Color$w = Color_1;
1649    var input$9 = input$i;
1650
1651    var rgb2hsv = rgb2hsv$1;
1652
1653    Color$w.prototype.hsv = function() {
1654        return rgb2hsv(this._rgb);
1655    };
1656
1657    chroma$e.hsv = function () {
1658        var args = [], len = arguments.length;
1659        while ( len-- ) args[ len ] = arguments[ len ];
1660
1661        return new (Function.prototype.bind.apply( Color$w, [ null ].concat( args, ['hsv']) ));
1662    };
1663
1664    input$9.format.hsv = hsv2rgb_1;
1665
1666    input$9.autodetect.push({
1667        p: 2,
1668        test: function () {
1669            var args = [], len = arguments.length;
1670            while ( len-- ) args[ len ] = arguments[ len ];
1671
1672            args = unpack$9(args, 'hsv');
1673            if (type$h(args) === 'array' && args.length === 3) {
1674                return 'hsv';
1675            }
1676        }
1677    });
vendor: 15,389 bytes, lines 1678-2195
1678
1679    var unpack$8 = utils.unpack;
1680    var type$g = utils.type;
1681    var chroma$d = chroma_1;
1682    var Color$v = Color_1;
1683    var input$8 = input$i;
1684
1685    var rgb2lab = rgb2lab_1;
1686
1687    Color$v.prototype.lab = function() {
1688        return rgb2lab(this._rgb);
1689    };
1690
1691    chroma$d.lab = function () {
1692        var args = [], len = arguments.length;
1693        while ( len-- ) args[ len ] = arguments[ len ];
1694
1695        return new (Function.prototype.bind.apply( Color$v, [ null ].concat( args, ['lab']) ));
1696    };
1697
1698    input$8.format.lab = lab2rgb_1;
1699
1700    input$8.autodetect.push({
1701        p: 2,
1702        test: function () {
1703            var args = [], len = arguments.length;
1704            while ( len-- ) args[ len ] = arguments[ len ];
1705
1706            args = unpack$8(args, 'lab');
1707            if (type$g(args) === 'array' && args.length === 3) {
1708                return 'lab';
1709            }
1710        }
1711    });
1712
1713    var unpack$7 = utils.unpack;
1714    var lch2rgb = lch2rgb_1;
1715
1716    var hcl2rgb = function () {
1717        var args = [], len = arguments.length;
1718        while ( len-- ) args[ len ] = arguments[ len ];
1719
1720        var hcl = unpack$7(args, 'hcl').reverse();
1721        return lch2rgb.apply(void 0, hcl);
1722    };
1723
1724    var hcl2rgb_1 = hcl2rgb;
1725
1726    var unpack$6 = utils.unpack;
1727    var type$f = utils.type;
1728    var chroma$c = chroma_1;
1729    var Color$u = Color_1;
1730    var input$7 = input$i;
1731
1732    var rgb2lch = rgb2lch_1;
1733
1734    Color$u.prototype.lch = function() { return rgb2lch(this._rgb); };
1735    Color$u.prototype.hcl = function() { return rgb2lch(this._rgb).reverse(); };
1736
1737    chroma$c.lch = function () {
1738        var args = [], len = arguments.length;
1739        while ( len-- ) args[ len ] = arguments[ len ];
1740
1741        return new (Function.prototype.bind.apply( Color$u, [ null ].concat( args, ['lch']) ));
1742    };
1743    chroma$c.hcl = function () {
1744        var args = [], len = arguments.length;
1745        while ( len-- ) args[ len ] = arguments[ len ];
1746
1747        return new (Function.prototype.bind.apply( Color$u, [ null ].concat( args, ['hcl']) ));
1748    };
1749
1750    input$7.format.lch = lch2rgb_1;
1751    input$7.format.hcl = hcl2rgb_1;
1752
1753    ['lch','hcl'].forEach(function (m) { return input$7.autodetect.push({
1754        p: 2,
1755        test: function () {
1756            var args = [], len = arguments.length;
1757            while ( len-- ) args[ len ] = arguments[ len ];
1758
1759            args = unpack$6(args, m);
1760            if (type$f(args) === 'array' && args.length === 3) {
1761                return m;
1762            }
1763        }
1764    }); });
1765
1766    /**
1767    	X11 color names
1768
1769    	http://www.w3.org/TR/css3-color/#svg-color
1770    */
1771
1772    var w3cx11$1 = {
1773        aliceblue: '#f0f8ff',
1774        antiquewhite: '#faebd7',
1775        aqua: '#00ffff',
1776        aquamarine: '#7fffd4',
1777        azure: '#f0ffff',
1778        beige: '#f5f5dc',
1779        bisque: '#ffe4c4',
1780        black: '#000000',
1781        blanchedalmond: '#ffebcd',
1782        blue: '#0000ff',
1783        blueviolet: '#8a2be2',
1784        brown: '#a52a2a',
1785        burlywood: '#deb887',
1786        cadetblue: '#5f9ea0',
1787        chartreuse: '#7fff00',
1788        chocolate: '#d2691e',
1789        coral: '#ff7f50',
1790        cornflower: '#6495ed',
1791        cornflowerblue: '#6495ed',
1792        cornsilk: '#fff8dc',
1793        crimson: '#dc143c',
1794        cyan: '#00ffff',
1795        darkblue: '#00008b',
1796        darkcyan: '#008b8b',
1797        darkgoldenrod: '#b8860b',
1798        darkgray: '#a9a9a9',
1799        darkgreen: '#006400',
1800        darkgrey: '#a9a9a9',
1801        darkkhaki: '#bdb76b',
1802        darkmagenta: '#8b008b',
1803        darkolivegreen: '#556b2f',
1804        darkorange: '#ff8c00',
1805        darkorchid: '#9932cc',
1806        darkred: '#8b0000',
1807        darksalmon: '#e9967a',
1808        darkseagreen: '#8fbc8f',
1809        darkslateblue: '#483d8b',
1810        darkslategray: '#2f4f4f',
1811        darkslategrey: '#2f4f4f',
1812        darkturquoise: '#00ced1',
1813        darkviolet: '#9400d3',
1814        deeppink: '#ff1493',
1815        deepskyblue: '#00bfff',
1816        dimgray: '#696969',
1817        dimgrey: '#696969',
1818        dodgerblue: '#1e90ff',
1819        firebrick: '#b22222',
1820        floralwhite: '#fffaf0',
1821        forestgreen: '#228b22',
1822        fuchsia: '#ff00ff',
1823        gainsboro: '#dcdcdc',
1824        ghostwhite: '#f8f8ff',
1825        gold: '#ffd700',
1826        goldenrod: '#daa520',
1827        gray: '#808080',
1828        green: '#008000',
1829        greenyellow: '#adff2f',
1830        grey: '#808080',
1831        honeydew: '#f0fff0',
1832        hotpink: '#ff69b4',
1833        indianred: '#cd5c5c',
1834        indigo: '#4b0082',
1835        ivory: '#fffff0',
1836        khaki: '#f0e68c',
1837        laserlemon: '#ffff54',
1838        lavender: '#e6e6fa',
1839        lavenderblush: '#fff0f5',
1840        lawngreen: '#7cfc00',
1841        lemonchiffon: '#fffacd',
1842        lightblue: '#add8e6',
1843        lightcoral: '#f08080',
1844        lightcyan: '#e0ffff',
1845        lightgoldenrod: '#fafad2',
1846        lightgoldenrodyellow: '#fafad2',
1847        lightgray: '#d3d3d3',
1848        lightgreen: '#90ee90',
1849        lightgrey: '#d3d3d3',
1850        lightpink: '#ffb6c1',
1851        lightsalmon: '#ffa07a',
1852        lightseagreen: '#20b2aa',
1853        lightskyblue: '#87cefa',
1854        lightslategray: '#778899',
1855        lightslategrey: '#778899',
1856        lightsteelblue: '#b0c4de',
1857        lightyellow: '#ffffe0',
1858        lime: '#00ff00',
1859        limegreen: '#32cd32',
1860        linen: '#faf0e6',
1861        magenta: '#ff00ff',
1862        maroon: '#800000',
1863        maroon2: '#7f0000',
1864        maroon3: '#b03060',
1865        mediumaquamarine: '#66cdaa',
1866        mediumblue: '#0000cd',
1867        mediumorchid: '#ba55d3',
1868        mediumpurple: '#9370db',
1869        mediumseagreen: '#3cb371',
1870        mediumslateblue: '#7b68ee',
1871        mediumspringgreen: '#00fa9a',
1872        mediumturquoise: '#48d1cc',
1873        mediumvioletred: '#c71585',
1874        midnightblue: '#191970',
1875        mintcream: '#f5fffa',
1876        mistyrose: '#ffe4e1',
1877        moccasin: '#ffe4b5',
1878        navajowhite: '#ffdead',
1879        navy: '#000080',
1880        oldlace: '#fdf5e6',
1881        olive: '#808000',
1882        olivedrab: '#6b8e23',
1883        orange: '#ffa500',
1884        orangered: '#ff4500',
1885        orchid: '#da70d6',
1886        palegoldenrod: '#eee8aa',
1887        palegreen: '#98fb98',
1888        paleturquoise: '#afeeee',
1889        palevioletred: '#db7093',
1890        papayawhip: '#ffefd5',
1891        peachpuff: '#ffdab9',
1892        peru: '#cd853f',
1893        pink: '#ffc0cb',
1894        plum: '#dda0dd',
1895        powderblue: '#b0e0e6',
1896        purple: '#800080',
1897        purple2: '#7f007f',
1898        purple3: '#a020f0',
1899        rebeccapurple: '#663399',
1900        red: '#ff0000',
1901        rosybrown: '#bc8f8f',
1902        royalblue: '#4169e1',
1903        saddlebrown: '#8b4513',
1904        salmon: '#fa8072',
1905        sandybrown: '#f4a460',
1906        seagreen: '#2e8b57',
1907        seashell: '#fff5ee',
1908        sienna: '#a0522d',
1909        silver: '#c0c0c0',
1910        skyblue: '#87ceeb',
1911        slateblue: '#6a5acd',
1912        slategray: '#708090',
1913        slategrey: '#708090',
1914        snow: '#fffafa',
1915        springgreen: '#00ff7f',
1916        steelblue: '#4682b4',
1917        tan: '#d2b48c',
1918        teal: '#008080',
1919        thistle: '#d8bfd8',
1920        tomato: '#ff6347',
1921        turquoise: '#40e0d0',
1922        violet: '#ee82ee',
1923        wheat: '#f5deb3',
1924        white: '#ffffff',
1925        whitesmoke: '#f5f5f5',
1926        yellow: '#ffff00',
1927        yellowgreen: '#9acd32'
1928    };
1929
1930    var w3cx11_1 = w3cx11$1;
1931
1932    var Color$t = Color_1;
1933    var input$6 = input$i;
1934    var type$e = utils.type;
1935
1936    var w3cx11 = w3cx11_1;
1937    var hex2rgb = hex2rgb_1;
1938    var rgb2hex = rgb2hex_1;
1939
1940    Color$t.prototype.name = function() {
1941        var hex = rgb2hex(this._rgb, 'rgb');
1942        for (var i = 0, list = Object.keys(w3cx11); i < list.length; i += 1) {
1943            var n = list[i];
1944
1945            if (w3cx11[n] === hex) { return n.toLowerCase(); }
1946        }
1947        return hex;
1948    };
1949
1950    input$6.format.named = function (name) {
1951        name = name.toLowerCase();
1952        if (w3cx11[name]) { return hex2rgb(w3cx11[name]); }
1953        throw new Error('unknown color name: '+name);
1954    };
1955
1956    input$6.autodetect.push({
1957        p: 5,
1958        test: function (h) {
1959            var rest = [], len = arguments.length - 1;
1960            while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];
1961
1962            if (!rest.length && type$e(h) === 'string' && w3cx11[h.toLowerCase()]) {
1963                return 'named';
1964            }
1965        }
1966    });
1967
1968    var unpack$5 = utils.unpack;
1969
1970    var rgb2num$1 = function () {
1971        var args = [], len = arguments.length;
1972        while ( len-- ) args[ len ] = arguments[ len ];
1973
1974        var ref = unpack$5(args, 'rgb');
1975        var r = ref[0];
1976        var g = ref[1];
1977        var b = ref[2];
1978        return (r << 16) + (g << 8) + b;
1979    };
1980
1981    var rgb2num_1 = rgb2num$1;
1982
1983    var type$d = utils.type;
1984
1985    var num2rgb = function (num) {
1986        if (type$d(num) == "number" && num >= 0 && num <= 0xFFFFFF) {
1987            var r = num >> 16;
1988            var g = (num >> 8) & 0xFF;
1989            var b = num & 0xFF;
1990            return [r,g,b,1];
1991        }
1992        throw new Error("unknown num color: "+num);
1993    };
1994
1995    var num2rgb_1 = num2rgb;
1996
1997    var chroma$b = chroma_1;
1998    var Color$s = Color_1;
1999    var input$5 = input$i;
2000    var type$c = utils.type;
2001
2002    var rgb2num = rgb2num_1;
2003
2004    Color$s.prototype.num = function() {
2005        return rgb2num(this._rgb);
2006    };
2007
2008    chroma$b.num = function () {
2009        var args = [], len = arguments.length;
2010        while ( len-- ) args[ len ] = arguments[ len ];
2011
2012        return new (Function.prototype.bind.apply( Color$s, [ null ].concat( args, ['num']) ));
2013    };
2014
2015    input$5.format.num = num2rgb_1;
2016
2017    input$5.autodetect.push({
2018        p: 5,
2019        test: function () {
2020            var args = [], len = arguments.length;
2021            while ( len-- ) args[ len ] = arguments[ len ];
2022
2023            if (args.length === 1 && type$c(args[0]) === 'number' && args[0] >= 0 && args[0] <= 0xFFFFFF) {
2024                return 'num';
2025            }
2026        }
2027    });
2028
2029    var chroma$a = chroma_1;
2030    var Color$r = Color_1;
2031    var input$4 = input$i;
2032    var unpack$4 = utils.unpack;
2033    var type$b = utils.type;
2034    var round$2 = Math.round;
2035
2036    Color$r.prototype.rgb = function(rnd) {
2037        if ( rnd === void 0 ) rnd=true;
2038
2039        if (rnd === false) { return this._rgb.slice(0,3); }
2040        return this._rgb.slice(0,3).map(round$2);
2041    };
2042
2043    Color$r.prototype.rgba = function(rnd) {
2044        if ( rnd === void 0 ) rnd=true;
2045
2046        return this._rgb.slice(0,4).map(function (v,i) {
2047            return i<3 ? (rnd === false ? v : round$2(v)) : v;
2048        });
2049    };
2050
2051    chroma$a.rgb = function () {
2052        var args = [], len = arguments.length;
2053        while ( len-- ) args[ len ] = arguments[ len ];
2054
2055        return new (Function.prototype.bind.apply( Color$r, [ null ].concat( args, ['rgb']) ));
2056    };
2057
2058    input$4.format.rgb = function () {
2059        var args = [], len = arguments.length;
2060        while ( len-- ) args[ len ] = arguments[ len ];
2061
2062        var rgba = unpack$4(args, 'rgba');
2063        if (rgba[3] === undefined) { rgba[3] = 1; }
2064        return rgba;
2065    };
2066
2067    input$4.autodetect.push({
2068        p: 3,
2069        test: function () {
2070            var args = [], len = arguments.length;
2071            while ( len-- ) args[ len ] = arguments[ len ];
2072
2073            args = unpack$4(args, 'rgba');
2074            if (type$b(args) === 'array' && (args.length === 3 ||
2075                args.length === 4 && type$b(args[3]) == 'number' && args[3] >= 0 && args[3] <= 1)) {
2076                return 'rgb';
2077            }
2078        }
2079    });
2080
2081    /*
2082     * Based on implementation by Neil Bartlett
2083     * https://github.com/neilbartlett/color-temperature
2084     */
2085
2086    var log$1 = Math.log;
2087
2088    var temperature2rgb$1 = function (kelvin) {
2089        var temp = kelvin / 100;
2090        var r,g,b;
2091        if (temp < 66) {
2092            r = 255;
2093            g = temp < 6 ? 0 : -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log$1(g);
2094            b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log$1(b);
2095        } else {
2096            r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log$1(r);
2097            g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log$1(g);
2098            b = 255;
2099        }
2100        return [r,g,b,1];
2101    };
2102
2103    var temperature2rgb_1 = temperature2rgb$1;
2104
2105    /*
2106     * Based on implementation by Neil Bartlett
2107     * https://github.com/neilbartlett/color-temperature
2108     **/
2109
2110    var temperature2rgb = temperature2rgb_1;
2111    var unpack$3 = utils.unpack;
2112    var round$1 = Math.round;
2113
2114    var rgb2temperature$1 = function () {
2115        var args = [], len = arguments.length;
2116        while ( len-- ) args[ len ] = arguments[ len ];
2117
2118        var rgb = unpack$3(args, 'rgb');
2119        var r = rgb[0], b = rgb[2];
2120        var minTemp = 1000;
2121        var maxTemp = 40000;
2122        var eps = 0.4;
2123        var temp;
2124        while (maxTemp - minTemp > eps) {
2125            temp = (maxTemp + minTemp) * 0.5;
2126            var rgb$1 = temperature2rgb(temp);
2127            if ((rgb$1[2] / rgb$1[0]) >= (b / r)) {
2128                maxTemp = temp;
2129            } else {
2130                minTemp = temp;
2131            }
2132        }
2133        return round$1(temp);
2134    };
2135
2136    var rgb2temperature_1 = rgb2temperature$1;
2137
2138    var chroma$9 = chroma_1;
2139    var Color$q = Color_1;
2140    var input$3 = input$i;
2141
2142    var rgb2temperature = rgb2temperature_1;
2143
2144    Color$q.prototype.temp =
2145    Color$q.prototype.kelvin =
2146    Color$q.prototype.temperature = function() {
2147        return rgb2temperature(this._rgb);
2148    };
2149
2150    chroma$9.temp =
2151    chroma$9.kelvin =
2152    chroma$9.temperature = function () {
2153        var args = [], len = arguments.length;
2154        while ( len-- ) args[ len ] = arguments[ len ];
2155
2156        return new (Function.prototype.bind.apply( Color$q, [ null ].concat( args, ['temp']) ));
2157    };
2158
2159    input$3.format.temp =
2160    input$3.format.kelvin =
2161    input$3.format.temperature = temperature2rgb_1;
2162
2163    var unpack$2 = utils.unpack;
2164    var type$a = utils.type;
2165    var chroma$8 = chroma_1;
2166    var Color$p = Color_1;
2167    var input$2 = input$i;
2168
2169    var rgb2oklab = rgb2oklab_1;
2170
2171    Color$p.prototype.oklab = function () {
2172        return rgb2oklab(this._rgb);
2173    };
2174
2175    chroma$8.oklab = function () {
2176        var args = [], len = arguments.length;
2177        while ( len-- ) args[ len ] = arguments[ len ];
2178
2179        return new (Function.prototype.bind.apply( Color$p, [ null ].concat( args, ['oklab']) ));
2180    };
2181
2182    input$2.format.oklab = oklab2rgb_1;
2183
2184    input$2.autodetect.push({
2185        p: 3,
2186        test: function () {
2187            var args = [], len = arguments.length;
2188            while ( len-- ) args[ len ] = arguments[ len ];
2189
2190            args = unpack$2(args, 'oklab');
2191            if (type$a(args) === 'array' && args.length === 3) {
2192                return 'oklab';
2193            }
2194        }
2195    });
2196
2197    var unpack$1 = utils.unpack;
2198    var type$9 = utils.type;
2199    var chroma$7 = chroma_1;
2200    var Color$o = Color_1;
2201    var input$1 = input$i;
2202
2203    var rgb2oklch = rgb2oklch_1;
2204
2205    Color$o.prototype.oklch = function () {
2206        return rgb2oklch(this._rgb);
2207    };
2208
2209    chroma$7.oklch = function () {
2210        var args = [], len = arguments.length;
2211        while ( len-- ) args[ len ] = arguments[ len ];
2212
2213        return new (Function.prototype.bind.apply( Color$o, [ null ].concat( args, ['oklch']) ));
2214    };
2215
2216    input$1.format.oklch = oklch2rgb_1;
2217
2218    input$1.autodetect.push({
2219        p: 3,
2220        test: function () {
2221            var args = [], len = arguments.length;
2222            while ( len-- ) args[ len ] = arguments[ len ];
2223
2224            args = unpack$1(args, 'oklch');
2225            if (type$9(args) === 'array' && args.length === 3) {
2226                return 'oklch';
2227            }
2228        }
2229    });
2230
2231    var unpack = utils.unpack;
2232    var last = utils.last;
2233    var round = Math.round;
2234
2235    var rgb2and$1 = function () {
2236        var args = [], len = arguments.length;
2237        while ( len-- ) args[ len ] = arguments[ len ];
2238
2239        var rgba = unpack(args, 'rgba');
2240        var mode = (rgba[3] !== 1 ? last(args) : 'rgb') || 'rgb';
2241        rgba[0] = round(rgba[0]);
2242        rgba[1] = round(rgba[1]);
2243        rgba[2] = round(rgba[2]);
2244        if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1 && last(args) !== 'rgb')) {
2245            rgba[3] = rgba.length > 3 ? rgba[3] : 1;
2246            mode = 'rgba';
2247        }
2248        return 	mode === 'rgba' 
2249    		? ((rgba[3] << 24) | (rgba[0] << 16) | (rgba[1] << 8) | (rgba[2])) 
2250    		: (0xff000000 | (rgba[0] << 16) | (rgba[1] << 8) | (rgba[2]));
2251    };
2252
2253    var rgb2and_1 = rgb2and$1;
2254
2255    var type$8 = utils.type;
2256
2257    var and2rgb = function (and) {
2258        if (type$8(and) == "number") {
2259            var alpha = (and >> 24 & 0xFF) / 255;
2260            if (alpha >= 0 && alpha <= 1) {
2261    			var a = and - 0xFF000000;
2262                var r = a >> 16 & 0xFF;
2263                var g = (a >> 8) & 0xFF;
2264                var b = a & 0xFF;
2265                return [r,g,b,alpha];
2266            }
2267        }
2268        throw new Error("unknown android color: "+and);
2269    };
2270
2271    var and2rgb_1 = and2rgb;
2272
2273    var chroma$6 = chroma_1;
2274    var Color$n = Color_1;
2275    var input = input$i;
2276    var type$7 = utils.type;
2277
2278    var rgb2and = rgb2and_1;
2279
2280    Color$n.prototype.android = function(mode) {
2281        return rgb2and(this._rgb, mode);
2282    };
2283
2284    chroma$6.android = function () {
2285        var args = [], len = arguments.length;
2286        while ( len-- ) args[ len ] = arguments[ len ];
2287
2288        return new (Function.prototype.bind.apply( Color$n, [ null ].concat( args, ['android']) ));
2289    };
2290
2291    input.format.android = and2rgb_1;
2292
2293    input.autodetect.push({
2294        p: 5,
2295        test: function () {
2296            var args = [], len = arguments.length;
2297            while ( len-- ) args[ len ] = arguments[ len ];
2298
2299            if (args.length === 1 && type$7(args[0]) === 'number') {
2300                var alpha = (args[0] >> 24 & 0xFF) / 255;
2301                if (alpha >= 0 && alpha <= 1) {
2302                    var a = args[0] - 0xFF000000;
2303                    var r = a >> 16 & 0xFF;
2304                    var g = (a >> 8) & 0xFF;
2305                    var b = a & 0xFF;
2306                    if ([r,g,b].every(function (val) { return val >= 0 && val <= 255; })) {
2307                        return 'android';
2308                    }
2309                }
2310            }
2311        }
2312    });
2313
2314    var Color$m = Color_1;
2315    var type$6 = utils.type;
2316
2317    Color$m.prototype.alpha = function(a, mutate) {
2318        if ( mutate === void 0 ) mutate=false;
2319
2320        if (a !== undefined && type$6(a) === 'number') {
2321            if (mutate) {
2322                this._rgb[3] = a;
2323                return this;
2324            }
2325            return new Color$m([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');
2326        }
2327        return this._rgb[3];
2328    };
2329
2330    var Color$l = Color_1;
2331
2332    Color$l.prototype.clipped = function() {
2333        return this._rgb._clipped || false;
2334    };
2335
2336    var Color$k = Color_1;
2337    var LAB_CONSTANTS$1 = labConstants;
2338
2339    Color$k.prototype.darken = function(amount) {
2340    	if ( amount === void 0 ) amount=1;
2341
2342    	var me = this;
2343    	var lab = me.lab();
2344    	lab[0] -= LAB_CONSTANTS$1.Kn * amount;
2345    	return new Color$k(lab, 'lab').alpha(me.alpha(), true);
2346    };
2347
2348    Color$k.prototype.brighten = function(amount) {
2349    	if ( amount === void 0 ) amount=1;
2350
2351    	return this.darken(-amount);
2352    };
2353
2354    Color$k.prototype.darker = Color$k.prototype.darken;
2355    Color$k.prototype.brighter = Color$k.prototype.brighten;
2356
2357    var Color$j = Color_1;
2358
2359    Color$j.prototype.get = function (mc) {
2360        var ref = mc.split('.');
2361        var mode = ref[0];
2362        var channel = ref[1];
2363        var src = this[mode]();
2364        if (channel) {
2365            var i = mode.indexOf(channel) - (mode.substring(0, 2) === 'ok' ? 2 : 0);
2366            if (i > -1) { return src[i]; }
2367            throw new Error(("unknown channel " + channel + " in mode " + mode));
2368        } else {
2369            return src;
2370        }
2371    };
2372
2373    var Color$i = Color_1;
2374    var type$5 = utils.type;
2375    var pow$6 = Math.pow;
2376
2377    var EPS = 1e-7;
2378    var MAX_ITER = 20;
2379
2380    Color$i.prototype.luminance = function(lum) {
2381        if (lum !== undefined && type$5(lum) === 'number') {
2382            if (lum === 0) {
2383                // return pure black
2384                return new Color$i([0,0,0,this._rgb[3]], 'rgb');
2385            }
2386            if (lum === 1) {
2387                // return pure white
2388                return new Color$i([255,255,255,this._rgb[3]], 'rgb');
2389            }
2390            // compute new color using...
2391            var cur_lum = this.luminance();
2392            var mode = 'rgb';
2393            var max_iter = MAX_ITER;
2394
2395            var test = function (low, high) {
2396                var mid = low.interpolate(high, 0.5, mode);
2397                var lm = mid.luminance();
2398                if (Math.abs(lum - lm) < EPS || !max_iter--) {
2399                    // close enough
2400                    return mid;
2401                }
2402                return lm > lum ? test(low, mid) : test(mid, high);
2403            };
2404
2405            var rgb = (cur_lum > lum ? test(new Color$i([0,0,0]), this) : test(this, new Color$i([255,255,255]))).rgb();
2406            return new Color$i(rgb.concat( [this._rgb[3]]));
2407        }
2408        return rgb2luminance.apply(void 0, (this._rgb).slice(0,3));
2409    };
2410
2411
2412    var rgb2luminance = function (r,g,b) {
2413        // relative luminance
2414        // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
2415        r = luminance_x(r);
2416        g = luminance_x(g);
2417        b = luminance_x(b);
2418        return 0.2126 * r + 0.7152 * g + 0.0722 * b;
2419    };
2420
2421    var luminance_x = function (x) {
2422        x /= 255;
2423        return x <= 0.03928 ? x/12.92 : pow$6((x+0.055)/1.055, 2.4);
2424    };
2425
2426    var interpolator$1 = {};
2427
2428    var Color$h = Color_1;
2429    var type$4 = utils.type;
2430    var interpolator = interpolator$1;
2431
2432    var mix$1 = function (col1, col2, f) {
2433        if ( f === void 0 ) f=0.5;
2434        var rest = [], len = arguments.length - 3;
2435        while ( len-- > 0 ) rest[ len ] = arguments[ len + 3 ];
2436
2437        var mode = rest[0] || 'lrgb';
2438        if (!interpolator[mode] && !rest.length) {
2439            // fall back to the first supported mode
2440            mode = Object.keys(interpolator)[0];
2441        }
2442        if (!interpolator[mode]) {
2443            throw new Error(("interpolation mode " + mode + " is not defined"));
2444        }
2445        if (type$4(col1) !== 'object') { col1 = new Color$h(col1); }
2446        if (type$4(col2) !== 'object') { col2 = new Color$h(col2); }
2447        return interpolator[mode](col1, col2, f)
2448            .alpha(col1.alpha() + f * (col2.alpha() - col1.alpha()));
2449    };
2450
2451    var Color$g = Color_1;
2452    var mix = mix$1;
2453
2454    Color$g.prototype.mix =
2455    Color$g.prototype.interpolate = function(col2, f) {
2456    	if ( f === void 0 ) f=0.5;
2457    	var rest = [], len = arguments.length - 2;
2458    	while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ];
2459
2460    	return mix.apply(void 0, [ this, col2, f ].concat( rest ));
2461    };
2462
2463    var Color$f = Color_1;
2464
2465    Color$f.prototype.premultiply = function(mutate) {
2466    	if ( mutate === void 0 ) mutate=false;
2467
2468    	var rgb = this._rgb;
2469    	var a = rgb[3];
2470    	if (mutate) {
2471    		this._rgb = [rgb[0]*a, rgb[1]*a, rgb[2]*a, a];
2472    		return this;
2473    	} else {
2474    		return new Color$f([rgb[0]*a, rgb[1]*a, rgb[2]*a, a], 'rgb');
2475    	}
2476    };
2477
2478    var Color$e = Color_1;
2479    var LAB_CONSTANTS = labConstants;
2480
2481    Color$e.prototype.saturate = function(amount) {
2482    	if ( amount === void 0 ) amount=1;
2483
2484    	var me = this;
2485    	var lch = me.lch();
2486    	lch[1] += LAB_CONSTANTS.Kn * amount;
2487    	if (lch[1] < 0) { lch[1] = 0; }
2488    	return new Color$e(lch, 'lch').alpha(me.alpha(), true);
2489    };
2490
2491    Color$e.prototype.desaturate = function(amount) {
2492    	if ( amount === void 0 ) amount=1;
2493
2494    	return this.saturate(-amount);
2495    };
2496
2497    var Color$d = Color_1;
2498    var type$3 = utils.type;
2499
2500    Color$d.prototype.set = function (mc, value, mutate) {
2501        if ( mutate === void 0 ) mutate = false;
2502
2503        var ref = mc.split('.');
2504        var mode = ref[0];
2505        var channel = ref[1];
2506        var src = this[mode]();
2507        if (channel) {
2508            var i = mode.indexOf(channel) - (mode.substring(0, 2) === 'ok' ? 2 : 0);
2509            if (i > -1) {
2510                if (type$3(value) == 'string') {
2511                    switch (value.charAt(0)) {
2512                        case '+':
2513                            src[i] += +value;
2514                            break;
2515                        case '-':
2516                            src[i] += +value;
2517                            break;
2518                        case '*':
2519                            src[i] *= +value.substring(1);
2520                            break;
2521                        case '/':
2522                            src[i] /= +value.substring(1);
2523                            break;
2524                        default:
2525                            src[i] = +value;
2526                    }
2527                } else if (type$3(value) === 'number') {
2528                    src[i] = value;
2529                } else {
2530                    throw new Error("unsupported value for Color.set");
2531                }
2532                var out = new Color$d(src, mode);
2533                if (mutate) {
2534                    this._rgb = out._rgb;
2535                    return this;
2536                }
2537                return out;
2538            }
2539            throw new Error(("unknown channel " + channel + " in mode " + mode));
2540        } else {
2541            return src;
2542        }
2543    };
2544
2545    var Color$c = Color_1;
2546
2547    var rgb = function (col1, col2, f) {
2548        var xyz0 = col1._rgb;
2549        var xyz1 = col2._rgb;
2550        return new Color$c(
2551            xyz0[0] + f * (xyz1[0]-xyz0[0]),
2552            xyz0[1] + f * (xyz1[1]-xyz0[1]),
2553            xyz0[2] + f * (xyz1[2]-xyz0[2]),
2554            'rgb'
2555        )
2556    };
2557
2558    // register interpolator
2559    interpolator$1.rgb = rgb;
2560
2561    var Color$b = Color_1;
2562    var sqrt$2 = Math.sqrt;
2563    var pow$5 = Math.pow;
2564
2565    var lrgb = function (col1, col2, f) {
2566        var ref = col1._rgb;
2567        var x1 = ref[0];
2568        var y1 = ref[1];
2569        var z1 = ref[2];
2570        var ref$1 = col2._rgb;
2571        var x2 = ref$1[0];
2572        var y2 = ref$1[1];
2573        var z2 = ref$1[2];
2574        return new Color$b(
2575            sqrt$2(pow$5(x1,2) * (1-f) + pow$5(x2,2) * f),
2576            sqrt$2(pow$5(y1,2) * (1-f) + pow$5(y2,2) * f),
2577            sqrt$2(pow$5(z1,2) * (1-f) + pow$5(z2,2) * f),
2578            'rgb'
2579        )
2580    };
2581
2582    // register interpolator
2583    interpolator$1.lrgb = lrgb;
2584
2585    var Color$a = Color_1;
2586
2587    var lab$1 = function (col1, col2, f) {
2588        var xyz0 = col1.lab();
2589        var xyz1 = col2.lab();
2590        return new Color$a(
2591            xyz0[0] + f * (xyz1[0]-xyz0[0]),
2592            xyz0[1] + f * (xyz1[1]-xyz0[1]),
2593            xyz0[2] + f * (xyz1[2]-xyz0[2]),
2594            'lab'
2595        )
2596    };
2597
2598    // register interpolator
2599    interpolator$1.lab = lab$1;
2600
2601    var Color$9 = Color_1;
2602
2603    var _hsx = function (col1, col2, f, m) {
2604        var assign, assign$1;
2605
2606        var xyz0, xyz1;
2607        if (m === 'hsl') {
2608            xyz0 = col1.hsl();
2609            xyz1 = col2.hsl();
2610        } else if (m === 'hsv') {
2611            xyz0 = col1.hsv();
2612            xyz1 = col2.hsv();
2613        } else if (m === 'hcg') {
2614            xyz0 = col1.hcg();
2615            xyz1 = col2.hcg();
2616        } else if (m === 'hsi') {
2617            xyz0 = col1.hsi();
2618            xyz1 = col2.hsi();
2619        } else if (m === 'lch' || m === 'hcl') {
2620            m = 'hcl';
2621            xyz0 = col1.hcl();
2622            xyz1 = col2.hcl();
2623        } else if (m === 'oklch') {
2624            xyz0 = col1.oklch().reverse();
2625            xyz1 = col2.oklch().reverse();
2626        }
2627
2628        var hue0, hue1, sat0, sat1, lbv0, lbv1;
2629        if (m.substring(0, 1) === 'h' || m === 'oklch') {
2630            (assign = xyz0, hue0 = assign[0], sat0 = assign[1], lbv0 = assign[2]);
2631            (assign$1 = xyz1, hue1 = assign$1[0], sat1 = assign$1[1], lbv1 = assign$1[2]);
2632        }
2633
2634        var sat, hue, lbv, dh;
2635
2636        if (!isNaN(hue0) && !isNaN(hue1)) {
2637            // both colors have hue
2638            if (hue1 > hue0 && hue1 - hue0 > 180) {
2639                dh = hue1 - (hue0 + 360);
2640            } else if (hue1 < hue0 && hue0 - hue1 > 180) {
2641                dh = hue1 + 360 - hue0;
2642            } else {
2643                dh = hue1 - hue0;
2644            }
2645            hue = hue0 + f * dh;
2646        } else if (!isNaN(hue0)) {
2647            hue = hue0;
2648            if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') { sat = sat0; }
2649        } else if (!isNaN(hue1)) {
2650            hue = hue1;
2651            if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') { sat = sat1; }
2652        } else {
2653            hue = Number.NaN;
2654        }
2655
2656        if (sat === undefined) { sat = sat0 + f * (sat1 - sat0); }
2657        lbv = lbv0 + f * (lbv1 - lbv0);
2658        return m === 'oklch' ? new Color$9([lbv, sat, hue], m) : new Color$9([hue, sat, lbv], m);
2659    };
2660
2661    var interpolate_hsx$5 = _hsx;
2662
2663    var lch = function (col1, col2, f) {
2664    	return interpolate_hsx$5(col1, col2, f, 'lch');
2665    };
2666
2667    // register interpolator
2668    interpolator$1.lch = lch;
2669    interpolator$1.hcl = lch;
2670
2671    var Color$8 = Color_1;
2672
2673    var num = function (col1, col2, f) {
2674        var c1 = col1.num();
2675        var c2 = col2.num();
2676        return new Color$8(c1 + f * (c2-c1), 'num')
2677    };
2678
2679    // register interpolator
2680    interpolator$1.num = num;
2681
2682    var interpolate_hsx$4 = _hsx;
2683
2684    var hcg = function (col1, col2, f) {
2685    	return interpolate_hsx$4(col1, col2, f, 'hcg');
2686    };
2687
2688    // register interpolator
2689    interpolator$1.hcg = hcg;
2690
2691    var interpolate_hsx$3 = _hsx;
2692
2693    var hsi = function (col1, col2, f) {
2694    	return interpolate_hsx$3(col1, col2, f, 'hsi');
2695    };
2696
2697    // register interpolator
2698    interpolator$1.hsi = hsi;
2699
2700    var interpolate_hsx$2 = _hsx;
2701
2702    var hsl = function (col1, col2, f) {
2703    	return interpolate_hsx$2(col1, col2, f, 'hsl');
2704    };
2705
2706    // register interpolator
2707    interpolator$1.hsl = hsl;
2708
2709    var interpolate_hsx$1 = _hsx;
2710
2711    var hsv = function (col1, col2, f) {
2712    	return interpolate_hsx$1(col1, col2, f, 'hsv');
2713    };
2714
2715    // register interpolator
2716    interpolator$1.hsv = hsv;
2717
2718    var Color$7 = Color_1;
2719
2720    var oklab = function (col1, col2, f) {
2721        var xyz0 = col1.oklab();
2722        var xyz1 = col2.oklab();
2723        return new Color$7(
2724            xyz0[0] + f * (xyz1[0] - xyz0[0]),
2725            xyz0[1] + f * (xyz1[1] - xyz0[1]),
2726            xyz0[2] + f * (xyz1[2] - xyz0[2]),
2727            'oklab'
2728        );
2729    };
2730
2731    // register interpolator
2732    interpolator$1.oklab = oklab;
2733
2734    var interpolate_hsx = _hsx;
2735
2736    var oklch = function (col1, col2, f) {
2737        return interpolate_hsx(col1, col2, f, 'oklch');
2738    };
2739
2740    // register interpolator
2741    interpolator$1.oklch = oklch;
2742
2743    var Color$6 = Color_1;
2744    var clip_rgb$1 = utils.clip_rgb;
2745    var pow$4 = Math.pow;
2746    var sqrt$1 = Math.sqrt;
2747    var PI$1 = Math.PI;
vendor: 14,291 bytes, lines 2748-3148
2748    var cos$2 = Math.cos;
2749    var sin$2 = Math.sin;
2750    var atan2$1 = Math.atan2;
2751
2752    var average = function (colors, mode, weights) {
2753        if ( mode === void 0 ) mode='lrgb';
2754        if ( weights === void 0 ) weights=null;
2755
2756        var l = colors.length;
2757        if (!weights) { weights = new Array(l).fill(1); }
2758        // normalize weights
2759        var k = l / weights.reduce(function(a, b) { return a + b; });
2760        weights.forEach(function (w,i) { weights[i] *= k; });
2761        // convert colors to Color objects
2762        colors = colors.map(function (c) { return new Color$6(c); });
2763        if (mode === 'lrgb') {
2764            return _average_lrgb(colors, weights)
2765        }
2766        var intMode = mode.replace(/(^ok)/gi, ''); // OKLCH behaves like LCH
2767        var first = colors.shift();
2768        var xyz = first.get(mode);
2769        var cnt = [];
2770        var dx = 0;
2771        var dy = 0;
2772        // initial color
2773        for (var i=0; i<xyz.length; i++) {
2774            xyz[i] = (xyz[i] || 0) * weights[0];
2775            cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);
2776            if (intMode.charAt(i) === 'h' && !isNaN(xyz[i])) {
2777                var A = xyz[i] / 180 * PI$1;
2778                dx += cos$2(A) * weights[0];
2779                dy += sin$2(A) * weights[0];
2780            }
2781        }
2782
2783        var alpha = first.alpha() * weights[0];
2784        colors.forEach(function (c,ci) {
2785            var xyz2 = c.get(mode);
2786            alpha += c.alpha() * weights[ci+1];
2787            for (var i=0; i<xyz.length; i++) {
2788                if (!isNaN(xyz2[i])) {
2789                    cnt[i] += weights[ci+1];
2790                    if (intMode.charAt(i) === 'h') {
2791                        var A = xyz2[i] / 180 * PI$1;
2792                        dx += cos$2(A) * weights[ci+1];
2793                        dy += sin$2(A) * weights[ci+1];
2794                    } else {
2795                        xyz[i] += xyz2[i] * weights[ci+1];
2796                    }
2797                }
2798            }
2799        });
2800
2801        for (var i$1=0; i$1<xyz.length; i$1++) {
2802            if (intMode.charAt(i$1) === 'h') {
2803                var A$1 = atan2$1(dy / cnt[i$1], dx / cnt[i$1]) / PI$1 * 180;
2804                while (A$1 < 0) { A$1 += 360; }
2805                while (A$1 >= 360) { A$1 -= 360; }
2806                xyz[i$1] = A$1;
2807            } else {
2808                xyz[i$1] = xyz[i$1]/cnt[i$1];
2809            }
2810        }
2811        alpha /= l;
2812        return (new Color$6(xyz, mode)).alpha(alpha > 0.99999 ? 1 : alpha, true);
2813    };
2814
2815
2816    var _average_lrgb = function (colors, weights) {
2817        var l = colors.length;
2818        var xyz = [0,0,0,0];
2819        for (var i=0; i < colors.length; i++) {
2820            var col = colors[i];
2821            var f = weights[i] / l;
2822            var rgb = col._rgb;
2823            xyz[0] += pow$4(rgb[0],2) * f;
2824            xyz[1] += pow$4(rgb[1],2) * f;
2825            xyz[2] += pow$4(rgb[2],2) * f;
2826            xyz[3] += rgb[3] * f;
2827        }
2828        xyz[0] = sqrt$1(xyz[0]);
2829        xyz[1] = sqrt$1(xyz[1]);
2830        xyz[2] = sqrt$1(xyz[2]);
2831        if (xyz[3] > 0.9999999) { xyz[3] = 1; }
2832        return new Color$6(clip_rgb$1(xyz));
2833    };
2834
2835    // minimal multi-purpose interface
2836
2837    // @requires utils color analyze
2838
2839    var chroma$5 = chroma_1;
2840    var type$2 = utils.type;
2841
2842    var pow$3 = Math.pow;
2843
2844    var scale$2 = function(colors) {
2845
2846        // constructor
2847        var _mode = 'rgb';
2848        var _nacol = chroma$5('#ccc');
2849        var _spread = 0;
2850        // const _fixed = false;
2851        var _domain = [0, 1];
2852        var _pos = [];
2853        var _padding = [0,0];
2854        var _classes = false;
2855        var _colors = [];
2856        var _out = false;
2857        var _min = 0;
2858        var _max = 1;
2859        var _correctLightness = false;
2860        var _colorCache = {};
2861        var _useCache = true;
2862        var _gamma = 1;
2863
2864        // private methods
2865
2866        var setColors = function(colors) {
2867            colors = colors || ['#fff', '#000'];
2868            if (colors && type$2(colors) === 'string' && chroma$5.brewer &&
2869                chroma$5.brewer.hasOwnProperty(colors.toLowerCase()) && colors !== 'palettes') {
2870                colors = chroma$5.brewer[colors.toLowerCase()];
2871            }
2872            if (type$2(colors) === 'array') {
2873                // handle single color
2874                if (colors.length === 1) {
2875                    colors = [colors[0], colors[0]];
2876                }
2877                // make a copy of the colors
2878                colors = colors.slice(0);
2879                // convert to chroma classes
2880                for (var c=0; c<colors.length; c++) {
2881                    colors[c] = chroma$5(colors[c]);
2882                }
2883                // auto-fill color position
2884                _pos.length = 0;
2885                for (var c$1=0; c$1<colors.length; c$1++) {
2886                    _pos.push(c$1/(colors.length-1));
2887                }
2888            }
2889            resetCache();
2890            return _colors = colors;
2891        };
2892
2893        var getClass = function(value) {
2894            if (_classes != null) {
2895                var n = _classes.length-1;
2896                var i = 0;
2897                while (i < n && value >= _classes[i]) {
2898                    i++;
2899                }
2900                return i-1;
2901            }
2902            return 0;
2903        };
2904
2905        var tMapLightness = function (t) { return t; };
2906        var tMapDomain = function (t) { return t; };
2907
2908        // const classifyValue = function(value) {
2909        //     let val = value;
2910        //     if (_classes.length > 2) {
2911        //         const n = _classes.length-1;
2912        //         const i = getClass(value);
2913        //         const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5)));  // center of 1st class
2914        //         const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5)));  // center of last class
2915        //         val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));
2916        //     }
2917        //     return val;
2918        // };
2919
2920        var getColor = function(val, bypassMap) {
2921            var col, t;
2922            if (bypassMap == null) { bypassMap = false; }
2923            if (isNaN(val) || (val === null)) { return _nacol; }
2924            if (!bypassMap) {
2925                if (_classes && (_classes.length > 2)) {
2926                    // find the class
2927                    var c = getClass(val);
2928                    t = c / (_classes.length-2);
2929                } else if (_max !== _min) {
2930                    // just interpolate between min/max
2931                    t = (val - _min) / (_max - _min);
2932                } else {
2933                    t = 1;
2934                }
2935            } else {
2936                t = val;
2937            }
2938
2939            // domain map
2940            t = tMapDomain(t);
2941
2942            if (!bypassMap) {
2943                t = tMapLightness(t);  // lightness correction
2944            }
2945
2946            if (_gamma !== 1) { t = pow$3(t, _gamma); }
2947
2948            t = _padding[0] + (t * (1 - _padding[0] - _padding[1]));
2949
2950            t = Math.min(1, Math.max(0, t));
2951
2952            var k = Math.floor(t * 10000);
2953
2954            if (_useCache && _colorCache[k]) {
2955                col = _colorCache[k];
2956            } else {
2957                if (type$2(_colors) === 'array') {
2958                    //for i in [0.._pos.length-1]
2959                    for (var i=0; i<_pos.length; i++) {
2960                        var p = _pos[i];
2961                        if (t <= p) {
2962                            col = _colors[i];
2963                            break;
2964                        }
2965                        if ((t >= p) && (i === (_pos.length-1))) {
2966                            col = _colors[i];
2967                            break;
2968                        }
2969                        if (t > p && t < _pos[i+1]) {
2970                            t = (t-p)/(_pos[i+1]-p);
2971                            col = chroma$5.interpolate(_colors[i], _colors[i+1], t, _mode);
2972                            break;
2973                        }
2974                    }
2975                } else if (type$2(_colors) === 'function') {
2976                    col = _colors(t);
2977                }
2978                if (_useCache) { _colorCache[k] = col; }
2979            }
2980            return col;
2981        };
2982
2983        var resetCache = function () { return _colorCache = {}; };
2984
2985        setColors(colors);
2986
2987        // public interface
2988
2989        var f = function(v) {
2990            var c = chroma$5(getColor(v));
2991            if (_out && c[_out]) { return c[_out](); } else { return c; }
2992        };
2993
2994        f.classes = function(classes) {
2995            if (classes != null) {
2996                if (type$2(classes) === 'array') {
2997                    _classes = classes;
2998                    _domain = [classes[0], classes[classes.length-1]];
2999                } else {
3000                    var d = chroma$5.analyze(_domain);
3001                    if (classes === 0) {
3002                        _classes = [d.min, d.max];
3003                    } else {
3004                        _classes = chroma$5.limits(d, 'e', classes);
3005                    }
3006                }
3007                return f;
3008            }
3009            return _classes;
3010        };
3011
3012
3013        f.domain = function(domain) {
3014            if (!arguments.length) {
3015                return _domain;
3016            }
3017            _min = domain[0];
3018            _max = domain[domain.length-1];
3019            _pos = [];
3020            var k = _colors.length;
3021            if ((domain.length === k) && (_min !== _max)) {
3022                // update positions
3023                for (var i = 0, list = Array.from(domain); i < list.length; i += 1) {
3024                    var d = list[i];
3025
3026                  _pos.push((d-_min) / (_max-_min));
3027                }
3028            } else {
3029                for (var c=0; c<k; c++) {
3030                    _pos.push(c/(k-1));
3031                }
3032                if (domain.length > 2) {
3033                    // set domain map
3034                    var tOut = domain.map(function (d,i) { return i/(domain.length-1); });
3035                    var tBreaks = domain.map(function (d) { return (d - _min) / (_max - _min); });
3036                    if (!tBreaks.every(function (val, i) { return tOut[i] === val; })) {
3037                        tMapDomain = function (t) {
3038                            if (t <= 0 || t >= 1) { return t; }
3039                            var i = 0;
3040                            while (t >= tBreaks[i+1]) { i++; }
3041                            var f = (t - tBreaks[i]) / (tBreaks[i+1] - tBreaks[i]);
3042                            var out = tOut[i] + f * (tOut[i+1] - tOut[i]);
3043                            return out;
3044                        };
3045                    }
3046
3047                }
3048            }
3049            _domain = [_min, _max];
3050            return f;
3051        };
3052
3053        f.mode = function(_m) {
3054            if (!arguments.length) {
3055                return _mode;
3056            }
3057            _mode = _m;
3058            resetCache();
3059            return f;
3060        };
3061
3062        f.range = function(colors, _pos) {
3063            setColors(colors);
3064            return f;
3065        };
3066
3067        f.out = function(_o) {
3068            _out = _o;
3069            return f;
3070        };
3071
3072        f.spread = function(val) {
3073            if (!arguments.length) {
3074                return _spread;
3075            }
3076            _spread = val;
3077            return f;
3078        };
3079
3080        f.correctLightness = function(v) {
3081            if (v == null) { v = true; }
3082            _correctLightness = v;
3083            resetCache();
3084            if (_correctLightness) {
3085                tMapLightness = function(t) {
3086                    var L0 = getColor(0, true).lab()[0];
3087                    var L1 = getColor(1, true).lab()[0];
3088                    var pol = L0 > L1;
3089                    var L_actual = getColor(t, true).lab()[0];
3090                    var L_ideal = L0 + ((L1 - L0) * t);
3091                    var L_diff = L_actual - L_ideal;
3092                    var t0 = 0;
3093                    var t1 = 1;
3094                    var max_iter = 20;
3095                    while ((Math.abs(L_diff) > 1e-2) && (max_iter-- > 0)) {
3096                        (function() {
3097                            if (pol) { L_diff *= -1; }
3098                            if (L_diff < 0) {
3099                                t0 = t;
3100                                t += (t1 - t) * 0.5;
3101                            } else {
3102                                t1 = t;
3103                                t += (t0 - t) * 0.5;
3104                            }
3105                            L_actual = getColor(t, true).lab()[0];
3106                            return L_diff = L_actual - L_ideal;
3107                        })();
3108                    }
3109                    return t;
3110                };
3111            } else {
3112                tMapLightness = function (t) { return t; };
3113            }
3114            return f;
3115        };
3116
3117        f.padding = function(p) {
3118            if (p != null) {
3119                if (type$2(p) === 'number') {
3120                    p = [p,p];
3121                }
3122                _padding = p;
3123                return f;
3124            } else {
3125                return _padding;
3126            }
3127        };
3128
3129        f.colors = function(numColors, out) {
3130            // If no arguments are given, return the original colors that were provided
3131            if (arguments.length < 2) { out = 'hex'; }
3132            var result = [];
3133
3134            if (arguments.length === 0) {
3135                result = _colors.slice(0);
3136
3137            } else if (numColors === 1) {
3138                result = [f(0.5)];
3139
3140            } else if (numColors > 1) {
3141                var dm = _domain[0];
3142                var dd = _domain[1] - dm;
3143                result = __range__(0, numColors, false).map(function (i) { return f( dm + ((i/(numColors-1)) * dd) ); });
3144
3145            } else { // returns all colors based on the defined classes
3146                colors = [];
3147                var samples = [];
3148                if (_classes && (_classes.length > 2)) {
3149                    for (var i = 1, end = _classes.length, asc = 1 <= end; asc ? i < end : i > end; asc ? i++ : i--) {
3150                        samples.push((_classes[i-1]+_classes[i])*0.5);
3151                    }
3152                } else {
3153                    samples = _domain;
3154                }
3155                result = samples.map(function (v) { return f(v); });
3156            }
3157
3158            if (chroma$5[out]) {
3159                result = result.map(function (c) { return c[out](); });
3160            }
3161            return result;
3162        };
3163
3164        f.cache = function(c) {
3165            if (c != null) {
3166                _useCache = c;
3167                return f;
3168            } else {
3169                return _useCache;
3170            }
3171        };
3172
3173        f.gamma = function(g) {
3174            if (g != null) {
3175                _gamma = g;
3176                return f;
3177            } else {
3178                return _gamma;
3179            }
3180        };
3181
3182        f.nodata = function(d) {
3183            if (d != null) {
3184                _nacol = chroma$5(d);
3185                return f;
3186            } else {
3187                return _nacol;
3188            }
3189        };
3190
3191        return f;
3192    };
3193
3194    function __range__(left, right, inclusive) {
3195      var range = [];
3196      var ascending = left < right;
3197      var end = !inclusive ? right : ascending ? right + 1 : right - 1;
3198      for (var i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {
3199        range.push(i);
3200      }
3201      return range;
3202    }
3203
3204    //
3205    // interpolates between a set of colors uzing a bezier spline
3206    //
3207
3208    // @requires utils lab
3209    var Color$5 = Color_1;
3210
3211    var scale$1 = scale$2;
3212
3213    // nth row of the pascal triangle
3214    var binom_row = function(n) {
3215        var row = [1, 1];
3216        for (var i = 1; i < n; i++) {
3217            var newrow = [1];
3218            for (var j = 1; j <= row.length; j++) {
3219                newrow[j] = (row[j] || 0) + row[j - 1];
3220            }
3221            row = newrow;
3222        }
3223        return row;
3224    };
3225
3226    var bezier = function(colors) {
3227        var assign, assign$1, assign$2;
3228
3229        var I, lab0, lab1, lab2;
3230        colors = colors.map(function (c) { return new Color$5(c); });
3231        if (colors.length === 2) {
3232            // linear interpolation
3233            (assign = colors.map(function (c) { return c.lab(); }), lab0 = assign[0], lab1 = assign[1]);
3234            I = function(t) {
3235                var linearInterpolation = function (x0, x1) { return x0 + (t * (x1 - x0)); };
3236                var lab = ([0, 1, 2].map(function (i) { return linearInterpolation(lab0[i], lab1[i]); }));
3237                var alpha = linearInterpolation(colors[0].alpha(), colors[1].alpha());
3238                return new Color$5(lab, 'lab').alpha(alpha);
3239            };
3240        } else if (colors.length === 3) {
3241            // quadratic bezier interpolation
3242            (assign$1 = colors.map(function (c) { return c.lab(); }), lab0 = assign$1[0], lab1 = assign$1[1], lab2 = assign$1[2]);
3243            I = function(t) {
3244                var quadraticInterpolation = function (x0, x1, x2) { return ((1-t)*(1-t) * x0) + (2 * (1-t) * t * x1) + (t * t * x2); };
3245                var lab = ([0, 1, 2].map(function (i) { return quadraticInterpolation(lab0[i], lab1[i], lab2[i]); }));
3246                var alpha = quadraticInterpolation(colors[0].alpha(), colors[1].alpha(), colors[2].alpha());
3247                return new Color$5(lab, 'lab').alpha( alpha );
3248            };
3249        } else if (colors.length === 4) {
3250            // cubic bezier interpolation
3251            var lab3;
3252            (assign$2 = colors.map(function (c) { return c.lab(); }), lab0 = assign$2[0], lab1 = assign$2[1], lab2 = assign$2[2], lab3 = assign$2[3]);
3253            I = function(t) {
3254                var cubicInterpolation = function (x0, x1, x2, x3) { return ((1-t)*(1-t)*(1-t) * x0) + (3 * (1-t) * (1-t) * t * x1) + (3 * (1-t) * t * t * x2) + (t*t*t * x3); };
3255                var lab = ([0, 1, 2].map(function (i) { return cubicInterpolation(lab0[i], lab1[i], lab2[i], lab3[i]); }));
3256                var alpha = cubicInterpolation(colors[0].alpha(), colors[1].alpha(), colors[2].alpha(), colors[3].alpha());
3257                return new Color$5(lab, 'lab').alpha(alpha);
3258            };
3259        } else if (colors.length >= 5) {
3260            // general case (degree n bezier)
3261            var labs, row, n;
3262            labs = colors.map(function (c) { return c.lab(); });
3263            n = colors.length - 1;
3264            row = binom_row(n);
3265            I = function (t) {
3266                var u = 1 - t;
3267                var nInterpolation = function (i, labs) { return labs.reduce(function (sum, el, j) { return (sum + row[j] * Math.pow( u, (n - j) ) * Math.pow( t, j ) * el[i]); }, 0); };
3268                var lab = ([0, 1, 2].map(function (i) { return nInterpolation(i, labs); }));
3269                var alpha = nInterpolation(0, colors.map(function (c) { return [c.alpha()]; }));
3270                return new Color$5(lab, 'lab').alpha(alpha);
3271            };
3272        } else {
3273            throw new RangeError("No point in running bezier with only one color.")
3274        }
3275        return I;
3276    };
3277
3278    var bezier_1 = function (colors) {
3279        var f = bezier(colors);
3280        f.scale = function () { return scale$1(f); };
3281        return f;
3282    };
3283
3284    /*
3285     * interpolates between a set of colors uzing a bezier spline
3286     * blend mode formulas taken from
3287     * https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/
3288     */
3289
3290    var chroma$4 = chroma_1;
3291
3292    var blend = function (bottom, top, mode) {
3293        if (!blend[mode]) {
3294            throw new Error('unknown blend mode ' + mode);
3295        }
3296        return blend[mode](bottom, top);
3297    };
3298
3299    var blend_f = function (f) { return function (bottom,top) {
3300            var c0 = chroma$4(top).rgb();
3301            var c1 = chroma$4(bottom).rgb();
3302            return chroma$4.rgb(f(c0, c1));
3303        }; };
3304
3305    var each = function (f) { return function (c0, c1) {
3306            var out = [];
3307            out[0] = f(c0[0], c1[0]);
3308            out[1] = f(c0[1], c1[1]);
3309            out[2] = f(c0[2], c1[2]);
3310            return out;
3311        }; };
3312
3313    var normal = function (a) { return a; };
3314    var multiply = function (a,b) { return a * b / 255; };
3315    var darken = function (a,b) { return a > b ? b : a; };
3316    var lighten = function (a,b) { return a > b ? a : b; };
3317    var screen = function (a,b) { return 255 * (1 - (1-a/255) * (1-b/255)); };
3318    var overlay = function (a,b) { return b < 128 ? 2 * a * b / 255 : 255 * (1 - 2 * (1 - a / 255 ) * ( 1 - b / 255 )); };
3319    var burn = function (a,b) { return 255 * (1 - (1 - b / 255) / (a/255)); };
3320    var dodge = function (a,b) {
3321        if (a === 255) { return 255; }
3322        a = 255 * (b / 255) / (1 - a / 255);
3323        return a > 255 ? 255 : a
3324    };
3325
3326    // # add = (a,b) ->
3327    // #     if (a + b > 255) then 255 else a + b
3328
3329    blend.normal = blend_f(each(normal));
3330    blend.multiply = blend_f(each(multiply));
3331    blend.screen = blend_f(each(screen));
3332    blend.overlay = blend_f(each(overlay));
3333    blend.darken = blend_f(each(darken));
3334    blend.lighten = blend_f(each(lighten));
3335    blend.dodge = blend_f(each(dodge));
3336    blend.burn = blend_f(each(burn));
3337    // blend.add = blend_f(each(add));
3338
3339    var blend_1 = blend;
3340
3341    // cubehelix interpolation
3342    // based on D.A. Green "A colour scheme for the display of astronomical intensity images"
3343    // http://astron-soc.in/bulletin/11June/289392011.pdf
3344
3345    var type$1 = utils.type;
3346    var clip_rgb = utils.clip_rgb;
3347    var TWOPI = utils.TWOPI;
3348    var pow$2 = Math.pow;
3349    var sin$1 = Math.sin;
3350    var cos$1 = Math.cos;
3351    var chroma$3 = chroma_1;
3352
3353    var cubehelix = function(start, rotations, hue, gamma, lightness) {
3354        if ( start === void 0 ) start=300;
3355        if ( rotations === void 0 ) rotations=-1.5;
3356        if ( hue === void 0 ) hue=1;
3357        if ( gamma === void 0 ) gamma=1;
3358        if ( lightness === void 0 ) lightness=[0,1];
3359
3360        var dh = 0, dl;
3361        if (type$1(lightness) === 'array') {
3362            dl = lightness[1] - lightness[0];
3363        } else {
3364            dl = 0;
3365            lightness = [lightness, lightness];
3366        }
3367
3368        var f = function(fract) {
3369            var a = TWOPI * (((start+120)/360) + (rotations * fract));
3370            var l = pow$2(lightness[0] + (dl * fract), gamma);
3371            var h = dh !== 0 ? hue[0] + (fract * dh) : hue;
3372            var amp = (h * l * (1-l)) / 2;
3373            var cos_a = cos$1(a);
3374            var sin_a = sin$1(a);
3375            var r = l + (amp * ((-0.14861 * cos_a) + (1.78277* sin_a)));
3376            var g = l + (amp * ((-0.29227 * cos_a) - (0.90649* sin_a)));
3377            var b = l + (amp * (+1.97294 * cos_a));
3378            return chroma$3(clip_rgb([r*255,g*255,b*255,1]));
3379        };
3380
3381        f.start = function(s) {
3382            if ((s == null)) { return start; }
3383            start = s;
3384            return f;
3385        };
3386
3387        f.rotations = function(r) {
3388            if ((r == null)) { return rotations; }
3389            rotations = r;
3390            return f;
3391        };
3392
3393        f.gamma = function(g) {
3394            if ((g == null)) { return gamma; }
3395            gamma = g;
3396            return f;
3397        };
3398
3399        f.hue = function(h) {
3400            if ((h == null)) { return hue; }
3401            hue = h;
3402            if (type$1(hue) === 'array') {
3403                dh = hue[1] - hue[0];
3404                if (dh === 0) { hue = hue[1]; }
3405            } else {
3406                dh = 0;
3407            }
3408            return f;
3409        };
3410
3411        f.lightness = function(h) {
3412            if ((h == null)) { return lightness; }
3413            if (type$1(h) === 'array') {
3414                lightness = h;
3415                dl = h[1] - h[0];
3416            } else {
3417                lightness = [h,h];
3418                dl = 0;
3419            }
3420            return f;
3421        };
3422
3423        f.scale = function () { return chroma$3.scale(f); };
3424
3425        f.hue(hue);
3426
3427        return f;
3428    };
3429
3430    var Color$4 = Color_1;
3431    var digits = '0123456789abcdef';
3432
3433    var floor$1 = Math.floor;
3434    var random = Math.random;
3435
3436    var random_1 = function () {
3437        var code = '#';
3438        for (var i=0; i<6; i++) {
3439            code += digits.charAt(floor$1(random() * 16));
3440        }
3441        return new Color$4(code, 'hex');
3442    };
3443
3444    var type = type$r;
3445    var log = Math.log;
3446    var pow$1 = Math.pow;
3447    var floor = Math.floor;
3448    var abs$1 = Math.abs;
3449
3450
3451    var analyze = function (data, key) {
3452        if ( key === void 0 ) key=null;
3453
3454        var r = {
3455            min: Number.MAX_VALUE,
3456            max: Number.MAX_VALUE*-1,
3457            sum: 0,
3458            values: [],
3459            count: 0
3460        };
3461        if (type(data) === 'object') {
3462            data = Object.values(data);
3463        }
3464        data.forEach(function (val) {
3465            if (key && type(val) === 'object') { val = val[key]; }
3466            if (val !== undefined && val !== null && !isNaN(val)) {
3467                r.values.push(val);
3468                r.sum += val;
3469                if (val < r.min) { r.min = val; }
3470                if (val > r.max) { r.max = val; }
3471                r.count += 1;
3472            }
3473        });
3474
3475        r.domain = [r.min, r.max];
3476
3477        r.limits = function (mode, num) { return limits(r, mode, num); };
3478
3479        return r;
3480    };
3481
3482
3483    var limits = function (data, mode, num) {
3484        if ( mode === void 0 ) mode='equal';
3485        if ( num === void 0 ) num=7;
3486
3487        if (type(data) == 'array') {
3488            data = analyze(data);
3489        }
3490        var min = data.min;
3491        var max = data.max;
3492        var values = data.values.sort(function (a,b) { return a-b; });
3493
3494        if (num === 1) { return [min,max]; }
3495
3496        var limits = [];
3497
3498        if (mode.substring(0,1) === 'c') { // continuous
3499            limits.push(min);
3500            limits.push(max);
3501        }
3502
3503        if (mode.substring(0,1) === 'e') { // equal interval
3504            limits.push(min);
3505            for (var i=1; i<num; i++) {
3506                limits.push(min+((i/num)*(max-min)));
3507            }
3508            limits.push(max);
3509        }
3510
3511        else if (mode.substring(0,1) === 'l') { // log scale
3512            if (min <= 0) {
3513                throw new Error('Logarithmic scales are only possible for values > 0');
3514            }
3515            var min_log = Math.LOG10E * log(min);
3516            var max_log = Math.LOG10E * log(max);
3517            limits.push(min);
3518            for (var i$1=1; i$1<num; i$1++) {
3519                limits.push(pow$1(10, min_log + ((i$1/num) * (max_log - min_log))));
3520            }
3521            limits.push(max);
3522        }
3523
3524        else if (mode.substring(0,1) === 'q') { // quantile scale
3525            limits.push(min);
3526            for (var i$2=1; i$2<num; i$2++) {
3527                var p = ((values.length-1) * i$2)/num;
3528                var pb = floor(p);
3529                if (pb === p) {
3530                    limits.push(values[pb]);
3531                } else { // p > pb
3532                    var pr = p - pb;
3533                    limits.push((values[pb]*(1-pr)) + (values[pb+1]*pr));
3534                }
3535            }
3536            limits.push(max);
3537
3538        }
3539
3540        else if (mode.substring(0,1) === 'k') { // k-means clustering
3541            /*
3542            implementation based on
3543            http://code.google.com/p/figue/source/browse/trunk/figue.js#336
3544            simplified for 1-d input values
3545            */
3546            var cluster;
3547            var n = values.length;
3548            var assignments = new Array(n);
3549            var clusterSizes = new Array(num);
3550            var repeat = true;
3551            var nb_iters = 0;
3552            var centroids = null;
3553
3554            // get seed values
3555            centroids = [];
3556            centroids.push(min);
3557            for (var i$3=1; i$3<num; i$3++) {
3558                centroids.push(min + ((i$3/num) * (max-min)));
3559            }
3560            centroids.push(max);
3561
3562            while (repeat) {
3563                // assignment step
3564                for (var j=0; j<num; j++) {
3565                    clusterSizes[j] = 0;
3566                }
3567                for (var i$4=0; i$4<n; i$4++) {
3568                    var value = values[i$4];
3569                    var mindist = Number.MAX_VALUE;
3570                    var best = (void 0);
3571                    for (var j$1=0; j$1<num; j$1++) {
3572                        var dist = abs$1(centroids[j$1]-value);
3573                        if (dist < mindist) {
3574                            mindist = dist;
3575                            best = j$1;
3576                        }
3577                        clusterSizes[best]++;
3578                        assignments[i$4] = best;
3579                    }
3580                }
3581
3582                // update centroids step
3583                var newCentroids = new Array(num);
3584                for (var j$2=0; j$2<num; j$2++) {
3585                    newCentroids[j$2] = null;
3586                }
3587                for (var i$5=0; i$5<n; i$5++) {
3588                    cluster = assignments[i$5];
3589                    if (newCentroids[cluster] === null) {
3590                        newCentroids[cluster] = values[i$5];
3591                    } else {
3592                        newCentroids[cluster] += values[i$5];
3593                    }
3594                }
3595                for (var j$3=0; j$3<num; j$3++) {
3596                    newCentroids[j$3] *= 1/clusterSizes[j$3];
3597                }
3598
3599                // check convergence
3600                repeat = false;
3601                for (var j$4=0; j$4<num; j$4++) {
3602                    if (newCentroids[j$4] !== centroids[j$4]) {
3603                        repeat = true;
3604                        break;
3605                    }
3606                }
3607
3608                centroids = newCentroids;
3609                nb_iters++;
3610
3611                if (nb_iters > 200) {
3612                    repeat = false;
3613                }
3614            }
3615
3616            // finished k-means clustering
3617            // the next part is borrowed from gabrielflor.it
3618            var kClusters = {};
3619            for (var j$5=0; j$5<num; j$5++) {
3620                kClusters[j$5] = [];
3621            }
3622            for (var i$6=0; i$6<n; i$6++) {
3623                cluster = assignments[i$6];
3624                kClusters[cluster].push(values[i$6]);
3625            }
3626            var tmpKMeansBreaks = [];
3627            for (var j$6=0; j$6<num; j$6++) {
3628                tmpKMeansBreaks.push(kClusters[j$6][0]);
3629                tmpKMeansBreaks.push(kClusters[j$6][kClusters[j$6].length-1]);
3630            }
3631            tmpKMeansBreaks = tmpKMeansBreaks.sort(function (a,b){ return a-b; });
3632            limits.push(tmpKMeansBreaks[0]);
3633            for (var i$7=1; i$7 < tmpKMeansBreaks.length; i$7+= 2) {
3634                var v = tmpKMeansBreaks[i$7];
3635                if (!isNaN(v) && (limits.indexOf(v) === -1)) {
3636                    limits.push(v);
3637                }
3638            }
3639        }
3640        return limits;
3641    };
3642
3643    var analyze_1 = {analyze: analyze, limits: limits};
3644
3645    var Color$3 = Color_1;
3646
3647
3648    var contrast = function (a, b) {
3649        // WCAG contrast ratio
3650        // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef
3651        a = new Color$3(a);
3652        b = new Color$3(b);
3653        var l1 = a.luminance();
3654        var l2 = b.luminance();
3655        return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);
3656    };
3657
3658    var Color$2 = Color_1;
3659    var sqrt = Math.sqrt;
3660    var pow = Math.pow;
3661    var min = Math.min;
3662    var max = Math.max;
3663    var atan2 = Math.atan2;
3664    var abs = Math.abs;
3665    var cos = Math.cos;
3666    var sin = Math.sin;
3667    var exp = Math.exp;
3668    var PI = Math.PI;
3669
3670    var deltaE = function(a, b, Kl, Kc, Kh) {
3671        if ( Kl === void 0 ) Kl=1;
3672        if ( Kc === void 0 ) Kc=1;
3673        if ( Kh === void 0 ) Kh=1;
3674
3675        // Delta E (CIE 2000)
3676        // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html
3677        var rad2deg = function(rad) {
3678            return 360 * rad / (2 * PI);
3679        };
3680        var deg2rad = function(deg) {
3681            return (2 * PI * deg) / 360;
3682        };
3683        a = new Color$2(a);
3684        b = new Color$2(b);
3685        var ref = Array.from(a.lab());
3686        var L1 = ref[0];
3687        var a1 = ref[1];
3688        var b1 = ref[2];
3689        var ref$1 = Array.from(b.lab());
3690        var L2 = ref$1[0];
3691        var a2 = ref$1[1];
3692        var b2 = ref$1[2];
3693        var avgL = (L1 + L2)/2;
3694        var C1 = sqrt(pow(a1, 2) + pow(b1, 2));
3695        var C2 = sqrt(pow(a2, 2) + pow(b2, 2));
3696        var avgC = (C1 + C2)/2;
3697        var G = 0.5*(1-sqrt(pow(avgC, 7)/(pow(avgC, 7) + pow(25, 7))));
3698        var a1p = a1*(1+G);
3699        var a2p = a2*(1+G);
3700        var C1p = sqrt(pow(a1p, 2) + pow(b1, 2));
3701        var C2p = sqrt(pow(a2p, 2) + pow(b2, 2));
3702        var avgCp = (C1p + C2p)/2;
3703        var arctan1 = rad2deg(atan2(b1, a1p));
3704        var arctan2 = rad2deg(atan2(b2, a2p));
3705        var h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;
3706        var h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;
3707        var avgHp = abs(h1p - h2p) > 180 ? (h1p + h2p + 360)/2 : (h1p + h2p)/2;
3708        var T = 1 - 0.17*cos(deg2rad(avgHp - 30)) + 0.24*cos(deg2rad(2*avgHp)) + 0.32*cos(deg2rad(3*avgHp + 6)) - 0.2*cos(deg2rad(4*avgHp - 63));
3709        var deltaHp = h2p - h1p;
3710        deltaHp = abs(deltaHp) <= 180 ? deltaHp : h2p <= h1p ? deltaHp + 360 : deltaHp - 360;
3711        deltaHp = 2*sqrt(C1p*C2p)*sin(deg2rad(deltaHp)/2);
3712        var deltaL = L2 - L1;
3713        var deltaCp = C2p - C1p;    
3714        var sl = 1 + (0.015*pow(avgL - 50, 2))/sqrt(20 + pow(avgL - 50, 2));
3715        var sc = 1 + 0.045*avgCp;
3716        var sh = 1 + 0.015*avgCp*T;
3717        var deltaTheta = 30*exp(-pow((avgHp - 275)/25, 2));
3718        var Rc = 2*sqrt(pow(avgCp, 7)/(pow(avgCp, 7) + pow(25, 7)));
3719        var Rt = -Rc*sin(2*deg2rad(deltaTheta));
3720        var result = sqrt(pow(deltaL/(Kl*sl), 2) + pow(deltaCp/(Kc*sc), 2) + pow(deltaHp/(Kh*sh), 2) + Rt*(deltaCp/(Kc*sc))*(deltaHp/(Kh*sh)));
3721        return max(0, min(100, result));
3722    };
3723
3724    var Color$1 = Color_1;
3725
3726    // simple Euclidean distance
3727    var distance = function(a, b, mode, weights) {
3728        if ( mode === void 0 ) mode='lab';
3729        if ( weights === void 0 ) weights=null;
3730
3731        if (weights) { //needs 4 color weights for CMYK color space
3732            var inputWeights = weights;
3733            weights = new Array(4).fill(1);
3734            inputWeights.slice(0,4).forEach(function (w, i) {
3735                if (!isNaN(w)) {weights[i] = w;}
3736            });
3737        } else {weights = Array(4).fill(1);}
3738        // Delta E (CIE 1976)
3739        // see http://www.brucelindbloom.com/index.html?Equations.html
3740        a = new Color$1(a);
3741        b = new Color$1(b);
3742        var l1 = a.get(mode);
3743        var l2 = b.get(mode);
3744        var intMode = mode.replace(/(^ok)/gi, ''); // OKLCH behaves like LCH
3745        var sum_sq = 0;
3746        var d;
3747        for (var i in l1) {
3748            if (intMode.charAt(i) === 'h') {
3749                var hueDifference = (l1[i] || 0) - (l2[i] || 0);
3750                d = Math.abs(hueDifference + 180) % 360 - 180;
3751            }
3752            else {
3753                d = (l1[i] || 0) - (l2[i] || 0);
3754            }
3755            sum_sq += d*d*weights[i]*weights[i];
3756        }
3757        return Math.sqrt(sum_sq);
3758    };
3759
3760    var Color = Color_1;
3761
3762    var valid = function () {
3763        var args = [], len = arguments.length;
3764        while ( len-- ) args[ len ] = arguments[ len ];
3765
3766        try {
3767            new (Function.prototype.bind.apply( Color, [ null ].concat( args) ));
3768            return true;
3769        } catch (e) {
3770            return false;
3771        }
3772    };
3773
3774    var chroma$2 = chroma_1;
3775
3776    var nohueaszero = function (bNoHueAsZero) {
3777        if ( bNoHueAsZero === void 0 ) bNoHueAsZero=false;
3778
3779        chroma$2.hueNaN = !bNoHueAsZero; // Whether treat black/white/gray as having NaN hue or Zero on specific color spaces (LCH, ...)
3780        return !chroma$2.hueNaN;
3781    };
3782
3783    // some pre-defined color scales:
3784    var chroma$1 = chroma_1;
3785
3786    var scale = scale$2;
3787
3788    var scales = {
3789    	cool: function cool() { return scale([chroma$1.hsl(180,1,.9), chroma$1.hsl(250,.7,.4)]) },
3790    	hot: function hot() { return scale(['#000','#f00','#ff0','#fff']).mode('rgb') }
3791    };
3792
3793    /**
3794        ColorBrewer colors for chroma.js
3795
3796        Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The
3797        Pennsylvania State University.
3798
3799        Licensed under the Apache License, Version 2.0 (the "License");
3800        you may not use this file except in compliance with the License.
3801        You may obtain a copy of the License at
3802        http://www.apache.org/licenses/LICENSE-2.0
3803
3804        Unless required by applicable law or agreed to in writing, software distributed
3805        under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
3806        CONDITIONS OF ANY KIND, either express or implied. See the License for the
3807        specific language governing permissions and limitations under the License.
3808    */
3809
3810    var colorbrewer = {
3811        // sequential
3812        OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],
3813        PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],
3814        BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],
3815        Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],
3816        BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],
3817        YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],
3818        YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],
3819        Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],
3820        RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],
3821        Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],
3822        YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],
3823        Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],
3824        GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],
3825        Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],
3826        YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],
3827        PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],
3828        Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],
3829        PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],
3830        Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],
3831
3832        // diverging
3833
3834        Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],
3835        RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],
3836        RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],
3837        PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],
3838        PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],
3839        RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],
3840        BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],
3841        RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],
3842        PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],
3843
3844        // qualitative
3845
3846        Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],
3847        Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],
3848        Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],
3849        Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],
3850        Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],
3851        Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],
3852        Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],
3853        Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2'],
3854    };
3855
3856    // add lowercase aliases for case-insensitive matches
3857    for (var i = 0, list = Object.keys(colorbrewer); i < list.length; i += 1) {
3858        var key = list[i];
3859
3860        Object.freeze(colorbrewer[key]);
3861        colorbrewer[key.toLowerCase()] = colorbrewer[key];
3862    }
3863
3864    // these are only available on camelCase and thus will never be matched by constructing a scale
3865    Object.defineProperty(colorbrewer, 'palettes', {
3866        configurable: false,
3867        enumerable: true,
3868        get: function get() {
3869            return ['Sequential', 'Diverging', 'Qualitative'];
3870        }
3871    });
3872
3873    Object.defineProperty(colorbrewer, 'getPalette', {
3874        configurable: false,
3875        enumerable: true,
3876        writable: false,
3877        value: function(key) {
3878            if (typeof key !== 'string') {throw new Error('key is not a string');}
3879            switch ((key || '').toLowerCase()) {
3880                case 'sequential':
3881                    return ['OrRd', 'PuBu', 'Oranges', 'BuPu', 'BuGn', 'YlOrBr', 'YlGn', 'Reds', 'RdPu', 'Greens', 'YlGnBu', 'Purples', 'GnBu', 'Greys', 'YlOrRd', 'PuRd', 'Blues', 'PuBuGn', 'Viridis'];
3882                case 'diverging':
3883                    return ['Spectral', 'RdYlGn', 'Set1', 'RdBu', 'PiYG', 'PRGn', 'RdYlBu', 'BrBG', 'RdGy', 'PuOr'];
3884                case 'qualitative':
3885                    return ['Set2', 'Accent', 'Set1', 'Set3', 'Dark2', 'Paired', 'Pastel2', 'Pastel1'];
3886                default:
3887                    return null;
3888            }
3889        }
3890    });
3891
3892    ['diverging', 'Diverging', 'qualitative', 'Qualitative', 'sequential' , 'Sequential'].forEach(function (key) {
3893        Object.defineProperty(colorbrewer, key, {
3894            configurable: false,
3895            enumerable: true,
3896            get: function get() {
3897                var palette = this.getPalette(key);
3898                return this[palette[Math.floor(Math.random() * palette.length)]];
3899            }
3900        });
3901    });
3902
3903    Object.freeze(colorbrewer);
3904
3905    var colorbrewer_1 = colorbrewer;
3906
3907    var chroma = chroma_1;
3908
3909    // feel free to comment out anything to rollup
3910    // a smaller chroma.js built
3911
3912    // io --> convert colors
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931    // operators --> modify existing Colors
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942    // interpolators
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955    // generators -- > create new colors
3956    chroma.average = average;
3957    chroma.bezier = bezier_1;
3958    chroma.blend = blend_1;
3959    chroma.cubehelix = cubehelix;
3960    chroma.mix = chroma.interpolate = mix$1;
3961    chroma.random = random_1;
3962    chroma.scale = scale$2;
3963
3964    // other utility methods
3965    chroma.analyze = analyze_1.analyze;
3966    chroma.contrast = contrast;
3967    chroma.deltaE = deltaE;
3968    chroma.distance = distance;
3969    chroma.limits = analyze_1.limits;
3970    chroma.valid = valid;
3971    chroma.noHueAsZero = nohueaszero;
3972
3973    // scale
3974    chroma.scales = scales;
3975
3976    // colors
3977    chroma.colors = w3cx11_1;
3978    chroma.brewer = colorbrewer_1;
3979
3980    var chroma_js = chroma;
3981
3982    return chroma_js;
3983
3984}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.