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.