⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact ae6ac77c94632eb94a1fef13991c7ef449206419c8419a61767b55e970bb9a17:


0000: 2f 2a 2a 0a 20 2a 20 43 6f 6c 6f 72 20 6d 61 6e  /**. * Color man
0010: 69 70 75 6c 61 74 69 6f 6e 20 63 6c 61 73 73 2c  ipulation class,
0020: 20 73 70 65 63 69 66 69 63 20 66 6f 72 20 42 6f   specific for Bo
0030: 6f 74 73 74 72 61 70 20 43 6f 6c 6f 72 70 69 63  otstrap Colorpic
0040: 6b 65 72 0a 20 2a 2f 0a 69 6d 70 6f 72 74 20 51  ker. */.import Q
0050: 69 78 43 6f 6c 6f 72 20 66 72 6f 6d 20 27 63 6f  ixColor from 'co
0060: 6c 6f 72 27 3b 0a 0a 2f 2a 2a 0a 20 2a 20 48 53  lor';../**. * HS
0070: 56 41 20 63 6f 6c 6f 72 20 64 61 74 61 20 63 6c  VA color data cl
0080: 61 73 73 2c 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ass, containing 
0090: 74 68 65 20 68 75 65 2c 20 73 61 74 75 72 61 74  the hue, saturat
00a0: 69 6f 6e 2c 20 76 61 6c 75 65 20 61 6e 64 20 61  ion, value and a
00b0: 6c 70 68 61 0a 20 2a 20 69 6e 66 6f 72 6d 61 74  lpha. * informat
00c0: 69 6f 6e 2e 0a 20 2a 2f 0a 63 6c 61 73 73 20 48  ion.. */.class H
00d0: 53 56 41 43 6f 6c 6f 72 20 7b 0a 20 20 2f 2a 2a  SVAColor {.  /**
00e0: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 6e 75  .   * @param {nu
00f0: 6d 62 65 72 7c 69 6e 74 7d 20 68 0a 20 20 20 2a  mber|int} h.   *
0100: 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7c   @param {number|
0110: 69 6e 74 7d 20 73 0a 20 20 20 2a 20 40 70 61 72  int} s.   * @par
0120: 61 6d 20 7b 6e 75 6d 62 65 72 7c 69 6e 74 7d 20  am {number|int} 
0130: 76 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 6e  v.   * @param {n
0140: 75 6d 62 65 72 7c 69 6e 74 7d 20 61 0a 20 20 20  umber|int} a.   
0150: 2a 2f 0a 20 20 63 6f 6e 73 74 72 75 63 74 6f 72  */.  constructor
0160: 28 68 2c 20 73 2c 20 76 2c 20 61 29 20 7b 0a 20  (h, s, v, a) {. 
0170: 20 20 20 74 68 69 73 2e 68 20 3d 20 69 73 4e 61     this.h = isNa
0180: 4e 28 68 29 20 3f 20 30 20 3a 20 68 3b 0a 20 20  N(h) ? 0 : h;.  
0190: 20 20 74 68 69 73 2e 73 20 3d 20 69 73 4e 61 4e    this.s = isNaN
01a0: 28 73 29 20 3f 20 30 20 3a 20 73 3b 0a 20 20 20  (s) ? 0 : s;.   
01b0: 20 74 68 69 73 2e 76 20 3d 20 69 73 4e 61 4e 28   this.v = isNaN(
01c0: 76 29 20 3f 20 30 20 3a 20 76 3b 0a 20 20 20 20  v) ? 0 : v;.    
01d0: 74 68 69 73 2e 61 20 3d 20 69 73 4e 61 4e 28 68  this.a = isNaN(h
01e0: 29 20 3f 20 31 20 3a 20 61 3b 0a 20 20 7d 0a 0a  ) ? 1 : a;.  }..
01f0: 20 20 74 6f 53 74 72 69 6e 67 28 29 20 7b 0a 20    toString() {. 
0200: 20 20 20 72 65 74 75 72 6e 20 60 24 7b 74 68 69     return `${thi
0210: 73 2e 68 7d 2c 20 24 7b 74 68 69 73 2e 73 7d 25  s.h}, ${this.s}%
0220: 2c 20 24 7b 74 68 69 73 2e 76 7d 25 2c 20 24 7b  , ${this.v}%, ${
0230: 74 68 69 73 2e 61 7d 60 3b 0a 20 20 7d 0a 7d 0a  this.a}`;.  }.}.
0240: 0a 2f 2a 2a 0a 20 2a 20 48 53 56 41 20 63 6f 6c  ./**. * HSVA col
0250: 6f 72 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 0a  or manipulation.
0260: 20 2a 2f 0a 63 6c 61 73 73 20 43 6f 6c 6f 72 49   */.class ColorI
0270: 74 65 6d 20 7b 0a 0a 20 20 2f 2a 2a 0a 20 20 20  tem {..  /**.   
0280: 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 48 53  * Returns the HS
0290: 56 41 43 6f 6c 6f 72 20 63 6c 61 73 73 0a 20 20  VAColor class.  
02a0: 20 2a 0a 20 20 20 2a 20 40 73 74 61 74 69 63 0a   *.   * @static.
02b0: 20 20 20 2a 20 40 65 78 61 6d 70 6c 65 20 6c 65     * @example le
02c0: 74 20 63 6f 6c 6f 72 44 61 74 61 20 3d 20 6e 65  t colorData = ne
02d0: 77 20 43 6f 6c 6f 72 49 74 65 6d 2e 48 53 56 41  w ColorItem.HSVA
02e0: 43 6f 6c 6f 72 28 33 36 30 2c 20 31 30 30 2c 20  Color(360, 100, 
02f0: 31 30 30 2c 20 31 29 3b 0a 20 20 20 2a 20 40 72  100, 1);.   * @r
0300: 65 74 75 72 6e 73 20 7b 48 53 56 41 43 6f 6c 6f  eturns {HSVAColo
0310: 72 7d 0a 20 20 20 2a 2f 0a 20 20 73 74 61 74 69  r}.   */.  stati
0320: 63 20 67 65 74 20 48 53 56 41 43 6f 6c 6f 72 28  c get HSVAColor(
0330: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 48  ) {.    return H
0340: 53 56 41 43 6f 6c 6f 72 3b 0a 20 20 7d 0a 0a 20  SVAColor;.  }.. 
0350: 20 2f 2a 2a 0a 20 20 20 2a 20 41 70 70 6c 69 65   /**.   * Applie
0360: 73 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  s a method of th
0370: 65 20 51 69 78 43 6f 6c 6f 72 20 41 50 49 20 61  e QixColor API a
0380: 6e 64 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  nd returns a new
0390: 20 43 6f 6c 6f 72 20 6f 62 6a 65 63 74 20 6f 72   Color object or
03a0: 0a 20 20 20 2a 20 74 68 65 20 72 65 74 75 72 6e  .   * the return
03b0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6d 65   value of the me
03c0: 74 68 6f 64 20 63 61 6c 6c 2e 0a 20 20 20 2a 0a  thod call..   *.
03d0: 20 20 20 2a 20 49 66 20 6e 6f 20 61 72 67 75 6d     * If no argum
03e0: 65 6e 74 20 69 73 20 70 72 6f 76 69 64 65 64 2c  ent is provided,
03f0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 51 69   the internal Qi
0400: 78 43 6f 6c 6f 72 20 6f 62 6a 65 63 74 20 69 73  xColor object is
0410: 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 20 2a 0a   returned..   *.
0420: 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 53 74 72     * @param {Str
0430: 69 6e 67 7d 20 66 6e 20 51 69 78 43 6f 6c 6f 72  ing} fn QixColor
0440: 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 0a 20   function name. 
0450: 20 20 2a 20 40 70 61 72 61 6d 20 61 72 67 73 20    * @param args 
0460: 51 69 78 43 6f 6c 6f 72 20 66 75 6e 63 74 69 6f  QixColor functio
0470: 6e 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 20 2a  n arguments.   *
0480: 20 40 65 78 61 6d 70 6c 65 20 6c 65 74 20 64 61   @example let da
0490: 72 6b 65 72 43 6f 6c 6f 72 20 3d 20 63 6f 6c 6f  rkerColor = colo
04a0: 72 2e 61 70 69 28 27 64 61 72 6b 65 6e 27 2c 20  r.api('darken', 
04b0: 30 2e 32 35 29 3b 0a 20 20 20 2a 20 40 65 78 61  0.25);.   * @exa
04c0: 6d 70 6c 65 20 6c 65 74 20 6c 75 6d 69 6e 6f 73  mple let luminos
04d0: 69 74 79 20 3d 20 63 6f 6c 6f 72 2e 61 70 69 28  ity = color.api(
04e0: 27 6c 75 6d 69 6e 6f 73 69 74 79 27 29 3b 0a 20  'luminosity');. 
04f0: 20 20 2a 20 40 65 78 61 6d 70 6c 65 20 63 6f 6c    * @example col
0500: 6f 72 20 3d 20 63 6f 6c 6f 72 2e 61 70 69 28 27  or = color.api('
0510: 6e 65 67 61 74 65 27 29 3b 0a 20 20 20 2a 20 40  negate');.   * @
0520: 65 78 61 6d 70 6c 65 20 6c 65 74 20 71 43 6f 6c  example let qCol
0530: 6f 72 20 3d 20 63 6f 6c 6f 72 2e 61 70 69 28 29  or = color.api()
0540: 2e 6e 65 67 61 74 65 28 29 3b 0a 20 20 20 2a 20  .negate();.   * 
0550: 40 72 65 74 75 72 6e 73 20 7b 43 6f 6c 6f 72 49  @returns {ColorI
0560: 74 65 6d 7c 51 69 78 43 6f 6c 6f 72 7c 2a 7d 0a  tem|QixColor|*}.
0570: 20 20 20 2a 2f 0a 20 20 61 70 69 28 66 6e 2c 20     */.  api(fn, 
0580: 2e 2e 2e 61 72 67 73 29 20 7b 0a 20 20 20 20 69  ...args) {.    i
0590: 66 20 28 61 72 67 75 6d 65 6e 74 73 2e 6c 65 6e  f (arguments.len
05a0: 67 74 68 20 3d 3d 3d 20 30 29 20 7b 0a 20 20 20  gth === 0) {.   
05b0: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
05c0: 63 6f 6c 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  color;.    }..  
05d0: 20 20 6c 65 74 20 72 65 73 75 6c 74 20 3d 20 74    let result = t
05e0: 68 69 73 2e 5f 63 6f 6c 6f 72 5b 66 6e 5d 2e 61  his._color[fn].a
05f0: 70 70 6c 79 28 74 68 69 73 2e 5f 63 6f 6c 6f 72  pply(this._color
0600: 2c 20 61 72 67 73 29 3b 0a 0a 20 20 20 20 69 66  , args);..    if
0610: 20 28 21 28 72 65 73 75 6c 74 20 69 6e 73 74 61   (!(result insta
0620: 6e 63 65 6f 66 20 51 69 78 43 6f 6c 6f 72 29 29  nceof QixColor))
0630: 20 7b 0a 20 20 20 20 20 20 2f 2f 20 72 65 74 75   {.      // retu
0640: 72 6e 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  rn result of the
0650: 20 6d 65 74 68 6f 64 20 63 61 6c 6c 0a 20 20 20   method call.   
0660: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
0670: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74  ;.    }..    ret
0680: 75 72 6e 20 6e 65 77 20 43 6f 6c 6f 72 49 74 65  urn new ColorIte
0690: 6d 28 72 65 73 75 6c 74 2c 20 74 68 69 73 2e 66  m(result, this.f
06a0: 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 0a 20 20 2f  ormat);.  }..  /
06b0: 2a 2a 0a 20 20 20 2a 20 52 65 74 75 72 6e 73 20  **.   * Returns 
06c0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 43 6f 6c  the original Col
06d0: 6f 72 49 74 65 6d 20 63 6f 6e 73 74 72 75 63 74  orItem construct
06e0: 6f 72 20 64 61 74 61 2c 0a 20 20 20 2a 20 70 6c  or data,.   * pl
06f0: 75 73 20 61 20 27 76 61 6c 69 64 27 20 66 6c 61  us a 'valid' fla
0700: 67 20 74 6f 20 6b 6e 6f 77 20 69 66 20 69 74 27  g to know if it'
0710: 73 20 76 61 6c 69 64 20 6f 72 20 6e 6f 74 2e 0a  s valid or not..
0720: 20 20 20 2a 0a 20 20 20 2a 20 40 72 65 74 75 72     *.   * @retur
0730: 6e 73 20 7b 7b 63 6f 6c 6f 72 3a 20 2a 2c 20 66  ns {{color: *, f
0740: 6f 72 6d 61 74 3a 20 53 74 72 69 6e 67 2c 20 76  ormat: String, v
0750: 61 6c 69 64 3a 20 62 6f 6f 6c 65 61 6e 7d 7d 0a  alid: boolean}}.
0760: 20 20 20 2a 2f 0a 20 20 67 65 74 20 6f 72 69 67     */.  get orig
0770: 69 6e 61 6c 28 29 20 7b 0a 20 20 20 20 72 65 74  inal() {.    ret
0780: 75 72 6e 20 74 68 69 73 2e 5f 6f 72 69 67 69 6e  urn this._origin
0790: 61 6c 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  al;.  }..  /**. 
07a0: 20 20 2a 20 40 70 61 72 61 6d 20 7b 43 6f 6c 6f    * @param {Colo
07b0: 72 49 74 65 6d 7c 48 53 56 41 43 6f 6c 6f 72 7c  rItem|HSVAColor|
07c0: 51 69 78 43 6f 6c 6f 72 7c 53 74 72 69 6e 67 7c  QixColor|String|
07d0: 2a 7c 6e 75 6c 6c 7d 20 63 6f 6c 6f 72 20 43 6f  *|null} color Co
07e0: 6c 6f 72 20 64 61 74 61 0a 20 20 20 2a 20 40 70  lor data.   * @p
07f0: 61 72 61 6d 20 7b 53 74 72 69 6e 67 7c 6e 75 6c  aram {String|nul
0800: 6c 7d 20 66 6f 72 6d 61 74 20 43 6f 6c 6f 72 20  l} format Color 
0810: 6d 6f 64 65 6c 20 74 6f 20 63 6f 6e 76 65 72 74  model to convert
0820: 20 74 6f 20 62 79 20 64 65 66 61 75 6c 74 2e 20   to by default. 
0830: 53 75 70 70 6f 72 74 65 64 3a 20 27 72 67 62 27  Supported: 'rgb'
0840: 2c 20 27 68 73 6c 27 2c 20 27 68 65 78 27 2e 0a  , 'hsl', 'hex'..
0850: 20 20 20 2a 2f 0a 20 20 63 6f 6e 73 74 72 75 63     */.  construc
0860: 74 6f 72 28 63 6f 6c 6f 72 20 3d 20 6e 75 6c 6c  tor(color = null
0870: 2c 20 66 6f 72 6d 61 74 20 3d 20 6e 75 6c 6c 29  , format = null)
0880: 20 7b 0a 20 20 20 20 74 68 69 73 2e 72 65 70 6c   {.    this.repl
0890: 61 63 65 28 63 6f 6c 6f 72 2c 20 66 6f 72 6d 61  ace(color, forma
08a0: 74 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  t);.  }..  /**. 
08b0: 20 20 2a 20 52 65 70 6c 61 63 65 73 20 74 68 65    * Replaces the
08c0: 20 69 6e 74 65 72 6e 61 6c 20 51 69 78 43 6f 6c   internal QixCol
08d0: 6f 72 20 6f 62 6a 65 63 74 20 77 69 74 68 20 61  or object with a
08e0: 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 20 2a 20 54   new one..   * T
08f0: 68 69 73 20 61 6c 73 6f 20 72 65 70 6c 61 63 65  his also replace
0900: 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 6f  s the internal o
0910: 72 69 67 69 6e 61 6c 20 63 6f 6c 6f 72 20 64 61  riginal color da
0920: 74 61 2e 0a 20 20 20 2a 0a 20 20 20 2a 20 40 70  ta..   *.   * @p
0930: 61 72 61 6d 20 7b 43 6f 6c 6f 72 49 74 65 6d 7c  aram {ColorItem|
0940: 48 53 56 41 43 6f 6c 6f 72 7c 51 69 78 43 6f 6c  HSVAColor|QixCol
0950: 6f 72 7c 53 74 72 69 6e 67 7c 2a 7c 6e 75 6c 6c  or|String|*|null
0960: 7d 20 63 6f 6c 6f 72 20 43 6f 6c 6f 72 20 64 61  } color Color da
0970: 74 61 20 74 6f 20 62 65 20 70 61 72 73 65 64 20  ta to be parsed 
0980: 28 69 66 20 6e 65 65 64 65 64 29 0a 20 20 20 2a  (if needed).   *
0990: 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e 67 7c   @param {String|
09a0: 6e 75 6c 6c 7d 20 66 6f 72 6d 61 74 20 43 6f 6c  null} format Col
09b0: 6f 72 20 6d 6f 64 65 6c 20 74 6f 20 63 6f 6e 76  or model to conv
09c0: 65 72 74 20 74 6f 20 62 79 20 64 65 66 61 75 6c  ert to by defaul
09d0: 74 2e 20 53 75 70 70 6f 72 74 65 64 3a 20 27 72  t. Supported: 'r
09e0: 67 62 27 2c 20 27 68 73 6c 27 2c 20 27 68 65 78  gb', 'hsl', 'hex
09f0: 27 2e 0a 20 20 20 2a 20 40 65 78 61 6d 70 6c 65  '..   * @example
0a00: 20 63 6f 6c 6f 72 2e 72 65 70 6c 61 63 65 28 27   color.replace('
0a10: 72 67 62 28 32 35 35 2c 30 2c 30 29 27 2c 20 27  rgb(255,0,0)', '
0a20: 68 73 6c 27 29 3b 0a 20 20 20 2a 20 40 65 78 61  hsl');.   * @exa
0a30: 6d 70 6c 65 20 63 6f 6c 6f 72 2e 72 65 70 6c 61  mple color.repla
0a40: 63 65 28 68 73 76 61 43 6f 6c 6f 72 44 61 74 61  ce(hsvaColorData
0a50: 29 3b 0a 20 20 20 2a 2f 0a 20 20 72 65 70 6c 61  );.   */.  repla
0a60: 63 65 28 63 6f 6c 6f 72 2c 20 66 6f 72 6d 61 74  ce(color, format
0a70: 20 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 66   = null) {.    f
0a80: 6f 72 6d 61 74 20 3d 20 43 6f 6c 6f 72 49 74 65  ormat = ColorIte
0a90: 6d 2e 73 61 6e 69 74 69 7a 65 46 6f 72 6d 61 74  m.sanitizeFormat
0aa0: 28 66 6f 72 6d 61 74 29 3b 0a 0a 20 20 20 20 2f  (format);..    /
0ab0: 2a 2a 0a 20 20 20 20 20 2a 20 40 74 79 70 65 20  **.     * @type 
0ac0: 7b 7b 63 6f 6c 6f 72 3a 20 2a 2c 20 66 6f 72 6d  {{color: *, form
0ad0: 61 74 3a 20 53 74 72 69 6e 67 7d 7d 0a 20 20 20  at: String}}.   
0ae0: 20 20 2a 20 40 70 72 69 76 61 74 65 0a 20 20 20    * @private.   
0af0: 20 20 2a 2f 0a 20 20 20 20 74 68 69 73 2e 5f 6f    */.    this._o
0b00: 72 69 67 69 6e 61 6c 20 3d 20 7b 0a 20 20 20 20  riginal = {.    
0b10: 20 20 63 6f 6c 6f 72 3a 20 63 6f 6c 6f 72 2c 0a    color: color,.
0b20: 20 20 20 20 20 20 66 6f 72 6d 61 74 3a 20 66 6f        format: fo
0b30: 72 6d 61 74 2c 0a 20 20 20 20 20 20 76 61 6c 69  rmat,.      vali
0b40: 64 3a 20 74 72 75 65 0a 20 20 20 20 7d 3b 0a 20  d: true.    };. 
0b50: 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 40 74     /**.     * @t
0b60: 79 70 65 20 7b 51 69 78 43 6f 6c 6f 72 7d 0a 20  ype {QixColor}. 
0b70: 20 20 20 20 2a 20 40 70 72 69 76 61 74 65 0a 20      * @private. 
0b80: 20 20 20 20 2a 2f 0a 20 20 20 20 74 68 69 73 2e      */.    this.
0b90: 5f 63 6f 6c 6f 72 20 3d 20 43 6f 6c 6f 72 49 74  _color = ColorIt
0ba0: 65 6d 2e 70 61 72 73 65 28 63 6f 6c 6f 72 29 3b  em.parse(color);
0bb0: 0a 0a 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f  ..    if (this._
0bc0: 63 6f 6c 6f 72 20 3d 3d 3d 20 6e 75 6c 6c 29 20  color === null) 
0bd0: 7b 0a 20 20 20 20 20 20 74 68 69 73 2e 5f 63 6f  {.      this._co
0be0: 6c 6f 72 20 3d 20 51 69 78 43 6f 6c 6f 72 28 29  lor = QixColor()
0bf0: 3b 0a 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 72  ;.      this._or
0c00: 69 67 69 6e 61 6c 2e 76 61 6c 69 64 20 3d 20 66  iginal.valid = f
0c10: 61 6c 73 65 3b 0a 20 20 20 20 20 20 72 65 74 75  alse;.      retu
0c20: 72 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  rn;.    }..    /
0c30: 2a 2a 0a 20 20 20 20 20 2a 20 40 74 79 70 65 20  **.     * @type 
0c40: 7b 2a 7c 73 74 72 69 6e 67 7d 0a 20 20 20 20 20  {*|string}.     
0c50: 2a 20 40 70 72 69 76 61 74 65 0a 20 20 20 20 20  * @private.     
0c60: 2a 2f 0a 20 20 20 20 74 68 69 73 2e 5f 66 6f 72  */.    this._for
0c70: 6d 61 74 20 3d 20 66 6f 72 6d 61 74 20 3f 20 66  mat = format ? f
0c80: 6f 72 6d 61 74 20 3a 0a 20 20 20 20 20 20 28 43  ormat :.      (C
0c90: 6f 6c 6f 72 49 74 65 6d 2e 69 73 48 65 78 28 63  olorItem.isHex(c
0ca0: 6f 6c 6f 72 29 20 3f 20 27 68 65 78 27 20 3a 20  olor) ? 'hex' : 
0cb0: 74 68 69 73 2e 5f 63 6f 6c 6f 72 2e 6d 6f 64 65  this._color.mode
0cc0: 6c 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  l);.  }..  /**. 
0cd0: 20 20 2a 20 50 61 72 73 65 73 20 74 68 65 20 63    * Parses the c
0ce0: 6f 6c 6f 72 20 72 65 74 75 72 6e 69 6e 67 20 61  olor returning a
0cf0: 20 51 69 78 20 43 6f 6c 6f 72 20 6f 62 6a 65 63   Qix Color objec
0d00: 74 20 6f 72 20 6e 75 6c 6c 20 69 66 20 63 61 6e  t or null if can
0d10: 6e 6f 74 20 62 65 0a 20 20 20 2a 20 70 61 72 73  not be.   * pars
0d20: 65 64 2e 0a 20 20 20 2a 0a 20 20 20 2a 20 40 70  ed..   *.   * @p
0d30: 61 72 61 6d 20 7b 43 6f 6c 6f 72 49 74 65 6d 7c  aram {ColorItem|
0d40: 48 53 56 41 43 6f 6c 6f 72 7c 51 69 78 43 6f 6c  HSVAColor|QixCol
0d50: 6f 72 7c 53 74 72 69 6e 67 7c 2a 7c 6e 75 6c 6c  or|String|*|null
0d60: 7d 20 63 6f 6c 6f 72 20 43 6f 6c 6f 72 20 64 61  } color Color da
0d70: 74 61 0a 20 20 20 2a 20 40 65 78 61 6d 70 6c 65  ta.   * @example
0d80: 20 6c 65 74 20 71 43 6f 6c 6f 72 20 3d 20 43 6f   let qColor = Co
0d90: 6c 6f 72 49 74 65 6d 2e 70 61 72 73 65 28 27 72  lorItem.parse('r
0da0: 67 62 28 32 35 35 2c 30 2c 30 29 27 29 3b 0a 20  gb(255,0,0)');. 
0db0: 20 20 2a 20 40 73 74 61 74 69 63 0a 20 20 20 2a    * @static.   *
0dc0: 20 40 72 65 74 75 72 6e 73 20 7b 51 69 78 43 6f   @returns {QixCo
0dd0: 6c 6f 72 7c 6e 75 6c 6c 7d 0a 20 20 20 2a 2f 0a  lor|null}.   */.
0de0: 20 20 73 74 61 74 69 63 20 70 61 72 73 65 28 63    static parse(c
0df0: 6f 6c 6f 72 29 20 7b 0a 20 20 20 20 69 66 20 28  olor) {.    if (
0e00: 63 6f 6c 6f 72 20 69 6e 73 74 61 6e 63 65 6f 66  color instanceof
0e10: 20 51 69 78 43 6f 6c 6f 72 29 20 7b 0a 20 20 20   QixColor) {.   
0e20: 20 20 20 72 65 74 75 72 6e 20 63 6f 6c 6f 72 3b     return color;
0e30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28  .    }..    if (
0e40: 63 6f 6c 6f 72 20 69 6e 73 74 61 6e 63 65 6f 66  color instanceof
0e50: 20 43 6f 6c 6f 72 49 74 65 6d 29 20 7b 0a 20 20   ColorItem) {.  
0e60: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6c 6f 72      return color
0e70: 2e 5f 63 6f 6c 6f 72 3b 0a 20 20 20 20 7d 0a 0a  ._color;.    }..
0e80: 20 20 20 20 6c 65 74 20 66 6f 72 6d 61 74 20 3d      let format =
0e90: 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 69 66 20 28   null;..    if (
0ea0: 63 6f 6c 6f 72 20 69 6e 73 74 61 6e 63 65 6f 66  color instanceof
0eb0: 20 48 53 56 41 43 6f 6c 6f 72 29 20 7b 0a 20 20   HSVAColor) {.  
0ec0: 20 20 20 20 63 6f 6c 6f 72 20 3d 20 5b 63 6f 6c      color = [col
0ed0: 6f 72 2e 68 2c 20 63 6f 6c 6f 72 2e 73 2c 20 63  or.h, color.s, c
0ee0: 6f 6c 6f 72 2e 76 2c 20 69 73 4e 61 4e 28 63 6f  olor.v, isNaN(co
0ef0: 6c 6f 72 2e 61 29 20 3f 20 31 20 3a 20 63 6f 6c  lor.a) ? 1 : col
0f00: 6f 72 2e 61 5d 3b 0a 20 20 20 20 7d 20 65 6c 73  or.a];.    } els
0f10: 65 20 7b 0a 20 20 20 20 20 20 63 6f 6c 6f 72 20  e {.      color 
0f20: 3d 20 43 6f 6c 6f 72 49 74 65 6d 2e 73 61 6e 69  = ColorItem.sani
0f30: 74 69 7a 65 53 74 72 69 6e 67 28 63 6f 6c 6f 72  tizeString(color
0f40: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  );.    }..    if
0f50: 20 28 63 6f 6c 6f 72 20 3d 3d 3d 20 6e 75 6c 6c   (color === null
0f60: 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ) {.      return
0f70: 20 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20   null;.    }..  
0f80: 20 20 69 66 20 28 41 72 72 61 79 2e 69 73 41 72    if (Array.isAr
0f90: 72 61 79 28 63 6f 6c 6f 72 29 29 20 7b 0a 20 20  ray(color)) {.  
0fa0: 20 20 20 20 66 6f 72 6d 61 74 20 3d 20 27 68 73      format = 'hs
0fb0: 76 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74  v';.    }..    t
0fc0: 72 79 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  ry {.      retur
0fd0: 6e 20 51 69 78 43 6f 6c 6f 72 28 63 6f 6c 6f 72  n QixColor(color
0fe0: 2c 20 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 7d  , format);.    }
0ff0: 20 63 61 74 63 68 20 28 65 29 20 7b 0a 20 20 20   catch (e) {.   
1000: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0a     return null;.
1010: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a      }.  }..  /**
1020: 0a 20 20 20 2a 20 53 61 6e 69 74 69 7a 65 73 20  .   * Sanitizes 
1030: 61 20 63 6f 6c 6f 72 20 73 74 72 69 6e 67 2c 20  a color string, 
1040: 61 64 64 69 6e 67 20 6d 69 73 73 69 6e 67 20 68  adding missing h
1050: 61 73 68 20 74 6f 20 68 65 78 61 64 65 63 69 6d  ash to hexadecim
1060: 61 6c 20 63 6f 6c 6f 72 73 0a 20 20 20 2a 20 61  al colors.   * a
1070: 6e 64 20 63 6f 6e 76 65 72 74 69 6e 67 20 27 74  nd converting 't
1080: 72 61 6e 73 70 61 72 65 6e 74 27 20 74 6f 20 61  ransparent' to a
1090: 20 63 6f 6c 6f 72 20 63 6f 64 65 2e 0a 20 20 20   color code..   
10a0: 2a 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 53  *.   * @param {S
10b0: 74 72 69 6e 67 7c 2a 7d 20 73 74 72 20 43 6f 6c  tring|*} str Col
10c0: 6f 72 20 73 74 72 69 6e 67 0a 20 20 20 2a 20 40  or string.   * @
10d0: 65 78 61 6d 70 6c 65 20 6c 65 74 20 63 6f 6c 6f  example let colo
10e0: 72 53 74 72 20 3d 20 43 6f 6c 6f 72 49 74 65 6d  rStr = ColorItem
10f0: 2e 73 61 6e 69 74 69 7a 65 53 74 72 69 6e 67 28  .sanitizeString(
1100: 27 66 66 61 61 30 30 27 29 3b 0a 20 20 20 2a 20  'ffaa00');.   * 
1110: 40 73 74 61 74 69 63 0a 20 20 20 2a 20 40 72 65  @static.   * @re
1120: 74 75 72 6e 73 20 7b 53 74 72 69 6e 67 7c 2a 7d  turns {String|*}
1130: 0a 20 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20  .   */.  static 
1140: 73 61 6e 69 74 69 7a 65 53 74 72 69 6e 67 28 73  sanitizeString(s
1150: 74 72 29 20 7b 0a 20 20 20 20 69 66 20 28 21 28  tr) {.    if (!(
1160: 74 79 70 65 6f 66 20 73 74 72 20 3d 3d 3d 20 27  typeof str === '
1170: 73 74 72 69 6e 67 27 20 7c 7c 20 73 74 72 20 69  string' || str i
1180: 6e 73 74 61 6e 63 65 6f 66 20 53 74 72 69 6e 67  nstanceof String
1190: 29 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  )) {.      retur
11a0: 6e 20 73 74 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  n str;.    }..  
11b0: 20 20 69 66 20 28 73 74 72 2e 6d 61 74 63 68 28    if (str.match(
11c0: 2f 5e 5b 30 2d 39 61 2d 66 5d 7b 32 2c 7d 24 2f  /^[0-9a-f]{2,}$/
11d0: 69 29 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75  i)) {.      retu
11e0: 72 6e 20 60 23 24 7b 73 74 72 7d 60 3b 0a 20 20  rn `#${str}`;.  
11f0: 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 73 74 72    }..    if (str
1200: 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28 29 20 3d  .toLowerCase() =
1210: 3d 3d 20 27 74 72 61 6e 73 70 61 72 65 6e 74 27  == 'transparent'
1220: 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ) {.      return
1230: 20 27 23 46 46 46 46 46 46 30 30 27 3b 0a 20 20   '#FFFFFF00';.  
1240: 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20    }..    return 
1250: 73 74 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a  str;.  }..  /**.
1260: 20 20 20 2a 20 44 65 74 65 63 74 73 20 69 66 20     * Detects if 
1270: 61 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  a value is a str
1280: 69 6e 67 20 61 6e 64 20 61 20 63 6f 6c 6f 72 20  ing and a color 
1290: 69 6e 20 68 65 78 61 64 65 63 69 6d 61 6c 20 66  in hexadecimal f
12a0: 6f 72 6d 61 74 20 28 69 6e 20 61 6e 79 20 76 61  ormat (in any va
12b0: 72 69 61 6e 74 29 2e 0a 20 20 20 2a 0a 20 20 20  riant)..   *.   
12c0: 2a 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e 67  * @param {String
12d0: 7d 20 73 74 72 0a 20 20 20 2a 20 40 65 78 61 6d  } str.   * @exam
12e0: 70 6c 65 20 43 6f 6c 6f 72 49 74 65 6d 2e 69 73  ple ColorItem.is
12f0: 48 65 78 28 27 72 67 62 61 28 30 2c 30 2c 30 29  Hex('rgba(0,0,0)
1300: 27 29 3b 20 2f 2f 20 66 61 6c 73 65 0a 20 20 20  '); // false.   
1310: 2a 20 40 65 78 61 6d 70 6c 65 20 43 6f 6c 6f 72  * @example Color
1320: 49 74 65 6d 2e 69 73 48 65 78 28 27 66 66 61 61  Item.isHex('ffaa
1330: 30 30 27 29 3b 20 2f 2f 20 74 72 75 65 0a 20 20  00'); // true.  
1340: 20 2a 20 40 65 78 61 6d 70 6c 65 20 43 6f 6c 6f   * @example Colo
1350: 72 49 74 65 6d 2e 69 73 48 65 78 28 27 23 66 66  rItem.isHex('#ff
1360: 61 61 30 30 27 29 3b 20 2f 2f 20 74 72 75 65 0a  aa00'); // true.
1370: 20 20 20 2a 20 40 73 74 61 74 69 63 0a 20 20 20     * @static.   
1380: 2a 20 40 72 65 74 75 72 6e 73 20 7b 62 6f 6f 6c  * @returns {bool
1390: 65 61 6e 7d 0a 20 20 20 2a 2f 0a 20 20 73 74 61  ean}.   */.  sta
13a0: 74 69 63 20 69 73 48 65 78 28 73 74 72 29 20 7b  tic isHex(str) {
13b0: 0a 20 20 20 20 69 66 20 28 21 28 74 79 70 65 6f  .    if (!(typeo
13c0: 66 20 73 74 72 20 3d 3d 3d 20 27 73 74 72 69 6e  f str === 'strin
13d0: 67 27 20 7c 7c 20 73 74 72 20 69 6e 73 74 61 6e  g' || str instan
13e0: 63 65 6f 66 20 53 74 72 69 6e 67 29 29 20 7b 0a  ceof String)) {.
13f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1400: 73 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72  se;.    }..    r
1410: 65 74 75 72 6e 20 21 21 73 74 72 2e 6d 61 74 63  eturn !!str.matc
1420: 68 28 2f 5e 23 3f 5b 30 2d 39 61 2d 66 5d 7b 32  h(/^#?[0-9a-f]{2
1430: 2c 7d 24 2f 69 29 3b 0a 20 20 7d 0a 0a 20 20 2f  ,}$/i);.  }..  /
1440: 2a 2a 0a 20 20 20 2a 20 53 61 6e 69 74 69 7a 65  **.   * Sanitize
1450: 73 20 61 20 63 6f 6c 6f 72 20 66 6f 72 6d 61 74  s a color format
1460: 20 74 6f 20 6f 6e 65 20 73 75 70 70 6f 72 74 65   to one supporte
1470: 64 20 62 79 20 77 65 62 20 62 72 6f 77 73 65 72  d by web browser
1480: 73 2e 0a 20 20 20 2a 20 52 65 74 75 72 6e 73 20  s..   * Returns 
1490: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an empty string 
14a0: 6f 66 20 74 68 65 20 66 6f 72 6d 61 74 20 63 61  of the format ca
14b0: 6e 27 74 20 62 65 20 72 65 63 6f 67 6e 69 73 65  n't be recognise
14c0: 64 2e 0a 20 20 20 2a 0a 20 20 20 2a 20 40 70 61  d..   *.   * @pa
14d0: 72 61 6d 20 7b 53 74 72 69 6e 67 7c 2a 7d 20 66  ram {String|*} f
14e0: 6f 72 6d 61 74 0a 20 20 20 2a 20 40 65 78 61 6d  ormat.   * @exam
14f0: 70 6c 65 20 43 6f 6c 6f 72 49 74 65 6d 2e 73 61  ple ColorItem.sa
1500: 6e 69 74 69 7a 65 46 6f 72 6d 61 74 28 27 72 67  nitizeFormat('rg
1510: 62 61 27 29 3b 20 2f 2f 20 27 72 67 62 27 0a 20  ba'); // 'rgb'. 
1520: 20 20 2a 20 40 65 78 61 6d 70 6c 65 20 43 6f 6c    * @example Col
1530: 6f 72 49 74 65 6d 2e 69 73 48 65 78 28 27 68 65  orItem.isHex('he
1540: 78 38 27 29 3b 20 2f 2f 20 27 68 65 78 27 0a 20  x8'); // 'hex'. 
1550: 20 20 2a 20 40 65 78 61 6d 70 6c 65 20 43 6f 6c    * @example Col
1560: 6f 72 49 74 65 6d 2e 69 73 48 65 78 28 27 69 6e  orItem.isHex('in
1570: 76 61 6c 69 64 27 29 3b 20 2f 2f 20 27 27 0a 20  valid'); // ''. 
1580: 20 20 2a 20 40 73 74 61 74 69 63 0a 20 20 20 2a    * @static.   *
1590: 20 40 72 65 74 75 72 6e 73 20 7b 53 74 72 69 6e   @returns {Strin
15a0: 67 7d 20 27 72 67 62 27 2c 20 27 68 73 6c 27 2c  g} 'rgb', 'hsl',
15b0: 20 27 68 65 78 27 20 6f 72 20 27 27 2e 0a 20 20   'hex' or ''..  
15c0: 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 73 61 6e   */.  static san
15d0: 69 74 69 7a 65 46 6f 72 6d 61 74 28 66 6f 72 6d  itizeFormat(form
15e0: 61 74 29 20 7b 0a 20 20 20 20 73 77 69 74 63 68  at) {.    switch
15f0: 20 28 66 6f 72 6d 61 74 29 20 7b 0a 20 20 20 20   (format) {.    
1600: 20 20 63 61 73 65 20 27 68 65 78 27 3a 0a 20 20    case 'hex':.  
1610: 20 20 20 20 63 61 73 65 20 27 68 65 78 33 27 3a      case 'hex3':
1620: 0a 20 20 20 20 20 20 63 61 73 65 20 27 68 65 78  .      case 'hex
1630: 34 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27  4':.      case '
1640: 68 65 78 36 27 3a 0a 20 20 20 20 20 20 63 61 73  hex6':.      cas
1650: 65 20 27 68 65 78 38 27 3a 0a 20 20 20 20 20 20  e 'hex8':.      
1660: 20 20 72 65 74 75 72 6e 20 27 68 65 78 27 3b 0a    return 'hex';.
1670: 20 20 20 20 20 20 63 61 73 65 20 27 72 67 62 27        case 'rgb'
1680: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27 72 67  :.      case 'rg
1690: 62 61 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20  ba':.      case 
16a0: 27 6b 65 79 77 6f 72 64 27 3a 0a 20 20 20 20 20  'keyword':.     
16b0: 20 63 61 73 65 20 27 6e 61 6d 65 27 3a 0a 20 20   case 'name':.  
16c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 27 72 67        return 'rg
16d0: 62 27 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27  b';.      case '
16e0: 68 73 6c 27 3a 0a 20 20 20 20 20 20 63 61 73 65  hsl':.      case
16f0: 20 27 68 73 6c 61 27 3a 0a 20 20 20 20 20 20 63   'hsla':.      c
1700: 61 73 65 20 27 68 73 76 27 3a 0a 20 20 20 20 20  ase 'hsv':.     
1710: 20 63 61 73 65 20 27 68 73 76 61 27 3a 0a 20 20   case 'hsva':.  
1720: 20 20 20 20 63 61 73 65 20 27 68 77 62 27 3a 20      case 'hwb': 
1730: 2f 2f 20 48 57 42 20 74 68 69 73 20 69 73 20 73  // HWB this is s
1740: 75 70 70 6f 72 74 65 64 20 62 79 20 51 69 78 20  upported by Qix 
1750: 43 6f 6c 6f 72 2c 20 62 75 74 20 6e 6f 74 20 62  Color, but not b
1760: 79 20 62 72 6f 77 73 65 72 73 0a 20 20 20 20 20  y browsers.     
1770: 20 63 61 73 65 20 27 68 77 62 61 27 3a 0a 20 20   case 'hwba':.  
1780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 27 68 73        return 'hs
1790: 6c 27 3b 0a 20 20 20 20 20 20 64 65 66 61 75 6c  l';.      defaul
17a0: 74 20 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75  t :.        retu
17b0: 72 6e 20 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d  rn '';.    }.  }
17c0: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 52 65 74  ..  /**.   * Ret
17d0: 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65  urns true if the
17e0: 20 63 6f 6c 6f 72 20 69 73 20 76 61 6c 69 64 2c   color is valid,
17f0: 20 66 61 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 20   false if not.. 
1800: 20 20 2a 0a 20 20 20 2a 20 40 72 65 74 75 72 6e    *.   * @return
1810: 73 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 20 20 20 2a  s {boolean}.   *
1820: 2f 0a 20 20 69 73 56 61 6c 69 64 28 29 20 7b 0a  /.  isValid() {.
1830: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
1840: 5f 6f 72 69 67 69 6e 61 6c 2e 76 61 6c 69 64 20  _original.valid 
1850: 3d 3d 3d 20 74 72 75 65 3b 0a 20 20 7d 0a 0a 20  === true;.  }.. 
1860: 20 2f 2a 2a 0a 20 20 20 2a 20 48 75 65 20 76 61   /**.   * Hue va
1870: 6c 75 65 20 66 72 6f 6d 20 30 20 74 6f 20 33 36  lue from 0 to 36
1880: 30 0a 20 20 20 2a 0a 20 20 20 2a 20 40 72 65 74  0.   *.   * @ret
1890: 75 72 6e 73 20 7b 69 6e 74 7d 0a 20 20 20 2a 2f  urns {int}.   */
18a0: 0a 20 20 67 65 74 20 68 75 65 28 29 20 7b 0a 20  .  get hue() {. 
18b0: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
18c0: 63 6f 6c 6f 72 2e 68 75 65 28 29 3b 0a 20 20 7d  color.hue();.  }
18d0: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 53 61 74  ..  /**.   * Sat
18e0: 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 20 66 72  uration value fr
18f0: 6f 6d 20 30 20 74 6f 20 31 30 30 0a 20 20 20 2a  om 0 to 100.   *
1900: 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
1910: 69 6e 74 7d 0a 20 20 20 2a 2f 0a 20 20 67 65 74  int}.   */.  get
1920: 20 73 61 74 75 72 61 74 69 6f 6e 28 29 20 7b 0a   saturation() {.
1930: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
1940: 5f 63 6f 6c 6f 72 2e 73 61 74 75 72 61 74 69 6f  _color.saturatio
1950: 6e 76 28 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  nv();.  }..  /**
1960: 0a 20 20 20 2a 20 56 61 6c 75 65 20 63 68 61 6e  .   * Value chan
1970: 6e 65 6c 20 76 61 6c 75 65 20 66 72 6f 6d 20 30  nel value from 0
1980: 20 74 6f 20 31 30 30 0a 20 20 20 2a 0a 20 20 20   to 100.   *.   
1990: 2a 20 40 72 65 74 75 72 6e 73 20 7b 69 6e 74 7d  * @returns {int}
19a0: 0a 20 20 20 2a 2f 0a 20 20 67 65 74 20 76 61 6c  .   */.  get val
19b0: 75 65 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72  ue() {.    retur
19c0: 6e 20 74 68 69 73 2e 5f 63 6f 6c 6f 72 2e 76 61  n this._color.va
19d0: 6c 75 65 28 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lue();.  }..  /*
19e0: 2a 0a 20 20 20 2a 20 41 6c 70 68 61 20 76 61 6c  *.   * Alpha val
19f0: 75 65 20 66 72 6f 6d 20 30 2e 30 20 74 6f 20 31  ue from 0.0 to 1
1a00: 2e 30 0a 20 20 20 2a 0a 20 20 20 2a 20 40 72 65  .0.   *.   * @re
1a10: 74 75 72 6e 73 20 7b 6e 75 6d 62 65 72 7d 0a 20  turns {number}. 
1a20: 20 20 2a 2f 0a 20 20 67 65 74 20 61 6c 70 68 61    */.  get alpha
1a30: 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 61 20 3d  () {.    let a =
1a40: 20 74 68 69 73 2e 5f 63 6f 6c 6f 72 2e 61 6c 70   this._color.alp
1a50: 68 61 28 29 3b 0a 0a 20 20 20 20 72 65 74 75 72  ha();..    retur
1a60: 6e 20 69 73 4e 61 4e 28 61 29 20 3f 20 31 20 3a  n isNaN(a) ? 1 :
1a70: 20 61 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20   a;.  }..  /**. 
1a80: 20 20 2a 20 44 65 66 61 75 6c 74 20 63 6f 6c 6f    * Default colo
1a90: 72 20 66 6f 72 6d 61 74 20 74 6f 20 63 6f 6e 76  r format to conv
1aa0: 65 72 74 20 74 6f 20 77 68 65 6e 20 63 61 6c 6c  ert to when call
1ab0: 69 6e 67 20 74 6f 53 74 72 69 6e 67 28 29 20 6f  ing toString() o
1ac0: 72 20 73 74 72 69 6e 67 28 29 0a 20 20 20 2a 0a  r string().   *.
1ad0: 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 53     * @returns {S
1ae0: 74 72 69 6e 67 7d 20 27 72 67 62 27 2c 20 27 68  tring} 'rgb', 'h
1af0: 73 6c 27 2c 20 27 68 65 78 27 20 6f 72 20 27 27  sl', 'hex' or ''
1b00: 0a 20 20 20 2a 2f 0a 20 20 67 65 74 20 66 6f 72  .   */.  get for
1b10: 6d 61 74 28 29 20 7b 0a 20 20 20 20 72 65 74 75  mat() {.    retu
1b20: 72 6e 20 74 68 69 73 2e 5f 66 6f 72 6d 61 74 20  rn this._format 
1b30: 3f 20 74 68 69 73 2e 5f 66 6f 72 6d 61 74 20 3a  ? this._format :
1b40: 20 74 68 69 73 2e 5f 63 6f 6c 6f 72 2e 6d 6f 64   this._color.mod
1b50: 65 6c 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  el;.  }..  /**. 
1b60: 20 20 2a 20 53 65 74 73 20 74 68 65 20 68 75 65    * Sets the hue
1b70: 20 76 61 6c 75 65 0a 20 20 20 2a 0a 20 20 20 2a   value.   *.   *
1b80: 20 40 70 61 72 61 6d 20 7b 69 6e 74 7d 20 76 61   @param {int} va
1b90: 6c 75 65 20 49 6e 74 65 67 65 72 20 66 72 6f 6d  lue Integer from
1ba0: 20 30 20 74 6f 20 33 36 30 0a 20 20 20 2a 2f 0a   0 to 360.   */.
1bb0: 20 20 73 65 74 20 68 75 65 28 76 61 6c 75 65 29    set hue(value)
1bc0: 20 7b 0a 20 20 20 20 74 68 69 73 2e 5f 63 6f 6c   {.    this._col
1bd0: 6f 72 20 3d 20 74 68 69 73 2e 5f 63 6f 6c 6f 72  or = this._color
1be0: 2e 68 75 65 28 76 61 6c 75 65 29 3b 0a 20 20 7d  .hue(value);.  }
1bf0: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 53 65 74  ..  /**.   * Set
1c00: 73 20 74 68 65 20 68 75 65 20 72 61 74 69 6f 2c  s the hue ratio,
1c10: 20 77 68 65 72 65 20 31 2e 30 20 69 73 20 30 2c   where 1.0 is 0,
1c20: 20 30 2e 35 20 69 73 20 31 38 30 20 61 6e 64 20   0.5 is 180 and 
1c30: 30 2e 30 20 69 73 20 33 36 30 2e 0a 20 20 20 2a  0.0 is 360..   *
1c40: 0a 20 20 20 2a 20 40 69 67 6e 6f 72 65 0a 20 20  .   * @ignore.  
1c50: 20 2a 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65   * @param {numbe
1c60: 72 7d 20 68 20 52 61 74 69 6f 20 66 72 6f 6d 20  r} h Ratio from 
1c70: 31 2e 30 20 74 6f 20 30 2e 30 0a 20 20 20 2a 2f  1.0 to 0.0.   */
1c80: 0a 20 20 73 65 74 48 75 65 52 61 74 69 6f 28 68  .  setHueRatio(h
1c90: 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 68 75 65  ) {.    this.hue
1ca0: 20 3d 20 28 28 31 20 2d 20 68 29 20 2a 20 33 36   = ((1 - h) * 36
1cb0: 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  0);.  }..  /**. 
1cc0: 20 20 2a 20 53 65 74 73 20 74 68 65 20 73 61 74    * Sets the sat
1cd0: 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 0a 20 20  uration value.  
1ce0: 20 2a 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b   *.   * @param {
1cf0: 69 6e 74 7d 20 76 61 6c 75 65 20 49 6e 74 65 67  int} value Integ
1d00: 65 72 20 66 72 6f 6d 20 30 20 74 6f 20 31 30 30  er from 0 to 100
1d10: 0a 20 20 20 2a 2f 0a 20 20 73 65 74 20 73 61 74  .   */.  set sat
1d20: 75 72 61 74 69 6f 6e 28 76 61 6c 75 65 29 20 7b  uration(value) {
1d30: 0a 20 20 20 20 74 68 69 73 2e 5f 63 6f 6c 6f 72  .    this._color
1d40: 20 3d 20 74 68 69 73 2e 5f 63 6f 6c 6f 72 2e 73   = this._color.s
1d50: 61 74 75 72 61 74 69 6f 6e 76 28 76 61 6c 75 65  aturationv(value
1d60: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20  );.  }..  /**.  
1d70: 20 2a 20 53 65 74 73 20 74 68 65 20 73 61 74 75   * Sets the satu
1d80: 72 61 74 69 6f 6e 20 72 61 74 69 6f 2c 20 77 68  ration ratio, wh
1d90: 65 72 65 20 31 2e 30 20 69 73 20 31 30 30 20 61  ere 1.0 is 100 a
1da0: 6e 64 20 30 2e 30 20 69 73 20 30 2e 0a 20 20 20  nd 0.0 is 0..   
1db0: 2a 0a 20 20 20 2a 20 40 69 67 6e 6f 72 65 0a 20  *.   * @ignore. 
1dc0: 20 20 2a 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62    * @param {numb
1dd0: 65 72 7d 20 73 20 52 61 74 69 6f 20 66 72 6f 6d  er} s Ratio from
1de0: 20 30 2e 30 20 74 6f 20 31 2e 30 0a 20 20 20 2a   0.0 to 1.0.   *
1df0: 2f 0a 20 20 73 65 74 53 61 74 75 72 61 74 69 6f  /.  setSaturatio
1e00: 6e 52 61 74 69 6f 28 73 29 20 7b 0a 20 20 20 20  nRatio(s) {.    
1e10: 74 68 69 73 2e 73 61 74 75 72 61 74 69 6f 6e 20  this.saturation 
1e20: 3d 20 28 73 20 2a 20 31 30 30 29 3b 0a 20 20 7d  = (s * 100);.  }
1e30: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 53 65 74  ..  /**.   * Set
1e40: 73 20 74 68 65 20 27 76 61 6c 75 65 27 20 63 68  s the 'value' ch
1e50: 61 6e 6e 65 6c 20 76 61 6c 75 65 0a 20 20 20 2a  annel value.   *
1e60: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 69 6e  .   * @param {in
1e70: 74 7d 20 76 61 6c 75 65 20 49 6e 74 65 67 65 72  t} value Integer
1e80: 20 66 72 6f 6d 20 30 20 74 6f 20 31 30 30 0a 20   from 0 to 100. 
1e90: 20 20 2a 2f 0a 20 20 73 65 74 20 76 61 6c 75 65    */.  set value
1ea0: 28 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 74 68  (value) {.    th
1eb0: 69 73 2e 5f 63 6f 6c 6f 72 20 3d 20 74 68 69 73  is._color = this
1ec0: 2e 5f 63 6f 6c 6f 72 2e 76 61 6c 75 65 28 76 61  ._color.value(va
1ed0: 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  lue);.  }..  /**
1ee0: 0a 20 20 20 2a 20 53 65 74 73 20 74 68 65 20 76  .   * Sets the v
1ef0: 61 6c 75 65 20 72 61 74 69 6f 2c 20 77 68 65 72  alue ratio, wher
1f00: 65 20 31 2e 30 20 69 73 20 30 20 61 6e 64 20 30  e 1.0 is 0 and 0
1f10: 2e 30 20 69 73 20 31 30 30 2e 0a 20 20 20 2a 0a  .0 is 100..   *.
1f20: 20 20 20 2a 20 40 69 67 6e 6f 72 65 0a 20 20 20     * @ignore.   
1f30: 2a 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72  * @param {number
1f40: 7d 20 76 20 52 61 74 69 6f 20 66 72 6f 6d 20 31  } v Ratio from 1
1f50: 2e 30 20 74 6f 20 30 2e 30 0a 20 20 20 2a 2f 0a  .0 to 0.0.   */.
1f60: 20 20 73 65 74 56 61 6c 75 65 52 61 74 69 6f 28    setValueRatio(
1f70: 76 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 76 61  v) {.    this.va
1f80: 6c 75 65 20 3d 20 28 28 31 20 2d 20 76 29 20 2a  lue = ((1 - v) *
1f90: 20 31 30 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a   100);.  }..  /*
1fa0: 2a 0a 20 20 20 2a 20 53 65 74 73 20 74 68 65 20  *.   * Sets the 
1fb0: 61 6c 70 68 61 20 76 61 6c 75 65 2e 20 49 74 20  alpha value. It 
1fc0: 77 69 6c 6c 20 62 65 20 72 6f 75 6e 64 65 64 20  will be rounded 
1fd0: 74 6f 20 32 20 64 65 63 69 6d 61 6c 73 2e 0a 20  to 2 decimals.. 
1fe0: 20 20 2a 0a 20 20 20 2a 20 40 70 61 72 61 6d 20    *.   * @param 
1ff0: 7b 69 6e 74 7d 20 76 61 6c 75 65 20 46 6c 6f 61  {int} value Floa
2000: 74 20 66 72 6f 6d 20 30 2e 30 20 74 6f 20 31 2e  t from 0.0 to 1.
2010: 30 0a 20 20 20 2a 2f 0a 20 20 73 65 74 20 61 6c  0.   */.  set al
2020: 70 68 61 28 76 61 6c 75 65 29 20 7b 0a 20 20 20  pha(value) {.   
2030: 20 2f 2f 20 32 20 64 65 63 69 6d 61 6c 73 20 6d   // 2 decimals m
2040: 61 78 0a 20 20 20 20 74 68 69 73 2e 5f 63 6f 6c  ax.    this._col
2050: 6f 72 20 3d 20 74 68 69 73 2e 5f 63 6f 6c 6f 72  or = this._color
2060: 2e 61 6c 70 68 61 28 4d 61 74 68 2e 72 6f 75 6e  .alpha(Math.roun
2070: 64 28 76 61 6c 75 65 20 2a 20 31 30 30 29 20 2f  d(value * 100) /
2080: 20 31 30 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a   100);.  }..  /*
2090: 2a 0a 20 20 20 2a 20 53 65 74 73 20 74 68 65 20  *.   * Sets the 
20a0: 61 6c 70 68 61 20 72 61 74 69 6f 2c 20 77 68 65  alpha ratio, whe
20b0: 72 65 20 31 2e 30 20 69 73 20 30 2e 30 20 61 6e  re 1.0 is 0.0 an
20c0: 64 20 30 2e 30 20 69 73 20 31 2e 30 2e 0a 20 20  d 0.0 is 1.0..  
20d0: 20 2a 0a 20 20 20 2a 20 40 69 67 6e 6f 72 65 0a   *.   * @ignore.
20e0: 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 6e 75 6d     * @param {num
20f0: 62 65 72 7d 20 61 20 52 61 74 69 6f 20 66 72 6f  ber} a Ratio fro
2100: 6d 20 31 2e 30 20 74 6f 20 30 2e 30 0a 20 20 20  m 1.0 to 0.0.   
2110: 2a 2f 0a 20 20 73 65 74 41 6c 70 68 61 52 61 74  */.  setAlphaRat
2120: 69 6f 28 61 29 20 7b 0a 20 20 20 20 74 68 69 73  io(a) {.    this
2130: 2e 61 6c 70 68 61 20 3d 20 31 20 2d 20 61 3b 0a  .alpha = 1 - a;.
2140: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
2150: 53 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  Sets the default
2160: 20 63 6f 6c 6f 72 20 66 6f 72 6d 61 74 0a 20 20   color format.  
2170: 20 2a 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b   *.   * @param {
2180: 53 74 72 69 6e 67 7d 20 76 61 6c 75 65 20 53 75  String} value Su
2190: 70 70 6f 72 74 65 64 3a 20 27 72 67 62 27 2c 20  pported: 'rgb', 
21a0: 27 68 73 6c 27 2c 20 27 68 65 78 27 0a 20 20 20  'hsl', 'hex'.   
21b0: 2a 2f 0a 20 20 73 65 74 20 66 6f 72 6d 61 74 28  */.  set format(
21c0: 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 74 68 69  value) {.    thi
21d0: 73 2e 5f 66 6f 72 6d 61 74 20 3d 20 43 6f 6c 6f  s._format = Colo
21e0: 72 49 74 65 6d 2e 73 61 6e 69 74 69 7a 65 46 6f  rItem.sanitizeFo
21f0: 72 6d 61 74 28 76 61 6c 75 65 29 3b 0a 20 20 7d  rmat(value);.  }
2200: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 52 65 74  ..  /**.   * Ret
2210: 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65  urns true if the
2220: 20 73 61 74 75 72 61 74 69 6f 6e 20 76 61 6c 75   saturation valu
2230: 65 20 69 73 20 7a 65 72 6f 2c 20 66 61 6c 73 65  e is zero, false
2240: 20 6f 74 68 65 72 77 69 73 65 0a 20 20 20 2a 0a   otherwise.   *.
2250: 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 62     * @returns {b
2260: 6f 6f 6c 65 61 6e 7d 0a 20 20 20 2a 2f 0a 20 20  oolean}.   */.  
2270: 69 73 44 65 73 61 74 75 72 61 74 65 64 28 29 20  isDesaturated() 
2280: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68 69  {.    return thi
2290: 73 2e 73 61 74 75 72 61 74 69 6f 6e 20 3d 3d 3d  s.saturation ===
22a0: 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20   0;.  }..  /**. 
22b0: 20 20 2a 20 52 65 74 75 72 6e 73 20 74 72 75 65    * Returns true
22c0: 20 69 66 20 74 68 65 20 61 6c 70 68 61 20 76 61   if the alpha va
22d0: 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 66 61 6c  lue is zero, fal
22e0: 73 65 20 6f 74 68 65 72 77 69 73 65 0a 20 20 20  se otherwise.   
22f0: 2a 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20  *.   * @returns 
2300: 7b 62 6f 6f 6c 65 61 6e 7d 0a 20 20 20 2a 2f 0a  {boolean}.   */.
2310: 20 20 69 73 54 72 61 6e 73 70 61 72 65 6e 74 28    isTransparent(
2320: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 74  ) {.    return t
2330: 68 69 73 2e 61 6c 70 68 61 20 3d 3d 3d 20 30 3b  his.alpha === 0;
2340: 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a  .  }..  /**.   *
2350: 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   Returns true if
2360: 20 74 68 65 20 61 6c 70 68 61 20 76 61 6c 75 65   the alpha value
2370: 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
2380: 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 66 61 6c  less than 1, fal
2390: 73 65 20 6f 74 68 65 72 77 69 73 65 0a 20 20 20  se otherwise.   
23a0: 2a 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20  *.   * @returns 
23b0: 7b 62 6f 6f 6c 65 61 6e 7d 0a 20 20 20 2a 2f 0a  {boolean}.   */.
23c0: 20 20 68 61 73 54 72 61 6e 73 70 61 72 65 6e 63    hasTransparenc
23d0: 79 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  y() {.    return
23e0: 20 74 68 69 73 2e 68 61 73 41 6c 70 68 61 28 29   this.hasAlpha()
23f0: 20 26 26 20 28 74 68 69 73 2e 61 6c 70 68 61 20   && (this.alpha 
2400: 3c 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  < 1);.  }..  /**
2410: 0a 20 20 20 2a 20 52 65 74 75 72 6e 73 20 74 72  .   * Returns tr
2420: 75 65 20 69 66 20 74 68 65 20 61 6c 70 68 61 20  ue if the alpha 
2430: 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63  value is numeric
2440: 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73  , false otherwis
2450: 65 0a 20 20 20 2a 0a 20 20 20 2a 20 40 72 65 74  e.   *.   * @ret
2460: 75 72 6e 73 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 20  urns {boolean}. 
2470: 20 20 2a 2f 0a 20 20 68 61 73 41 6c 70 68 61 28    */.  hasAlpha(
2480: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 21  ) {.    return !
2490: 69 73 4e 61 4e 28 74 68 69 73 2e 61 6c 70 68 61  isNaN(this.alpha
24a0: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20  );.  }..  /**.  
24b0: 20 2a 20 52 65 74 75 72 6e 73 20 61 20 6e 65 77   * Returns a new
24c0: 20 48 53 56 41 43 6f 6c 6f 72 20 6f 62 6a 65 63   HSVAColor objec
24d0: 74 2c 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  t, based on the 
24e0: 63 75 72 72 65 6e 74 20 63 6f 6c 6f 72 0a 20 20  current color.  
24f0: 20 2a 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73   *.   * @returns
2500: 20 7b 48 53 56 41 43 6f 6c 6f 72 7d 0a 20 20 20   {HSVAColor}.   
2510: 2a 2f 0a 20 20 74 6f 4f 62 6a 65 63 74 28 29 20  */.  toObject() 
2520: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77  {.    return new
2530: 20 48 53 56 41 43 6f 6c 6f 72 28 74 68 69 73 2e   HSVAColor(this.
2540: 68 75 65 2c 20 74 68 69 73 2e 73 61 74 75 72 61  hue, this.satura
2550: 74 69 6f 6e 2c 20 74 68 69 73 2e 76 61 6c 75 65  tion, this.value
2560: 2c 20 74 68 69 73 2e 61 6c 70 68 61 29 3b 0a 20  , this.alpha);. 
2570: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 41   }..  /**.   * A
2580: 6c 69 61 73 20 6f 66 20 74 6f 4f 62 6a 65 63 74  lias of toObject
2590: 28 29 0a 20 20 20 2a 0a 20 20 20 2a 20 40 72 65  ().   *.   * @re
25a0: 74 75 72 6e 73 20 7b 48 53 56 41 43 6f 6c 6f 72  turns {HSVAColor
25b0: 7d 0a 20 20 20 2a 2f 0a 20 20 74 6f 48 73 76 61  }.   */.  toHsva
25c0: 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  () {.    return 
25d0: 74 68 69 73 2e 74 6f 4f 62 6a 65 63 74 28 29 3b  this.toObject();
25e0: 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a  .  }..  /**.   *
25f0: 20 52 65 74 75 72 6e 73 20 61 20 6e 65 77 20 48   Returns a new H
2600: 53 56 41 43 6f 6c 6f 72 20 6f 62 6a 65 63 74 20  SVAColor object 
2610: 77 69 74 68 20 74 68 65 20 72 61 74 69 6f 20 76  with the ratio v
2620: 61 6c 75 65 73 20 28 66 72 6f 6d 20 30 2e 30 20  alues (from 0.0 
2630: 74 6f 20 31 2e 30 29 2c 0a 20 20 20 2a 20 62 61  to 1.0),.   * ba
2640: 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65  sed on the curre
2650: 6e 74 20 63 6f 6c 6f 72 2e 0a 20 20 20 2a 0a 20  nt color..   *. 
2660: 20 20 2a 20 40 69 67 6e 6f 72 65 0a 20 20 20 2a    * @ignore.   *
2670: 20 40 72 65 74 75 72 6e 73 20 7b 48 53 56 41 43   @returns {HSVAC
2680: 6f 6c 6f 72 7d 0a 20 20 20 2a 2f 0a 20 20 74 6f  olor}.   */.  to
2690: 48 73 76 61 52 61 74 69 6f 28 29 20 7b 0a 20 20  HsvaRatio() {.  
26a0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 48 53 56    return new HSV
26b0: 41 43 6f 6c 6f 72 28 0a 20 20 20 20 20 20 74 68  AColor(.      th
26c0: 69 73 2e 68 75 65 20 2f 20 33 36 30 2c 0a 20 20  is.hue / 360,.  
26d0: 20 20 20 20 74 68 69 73 2e 73 61 74 75 72 61 74      this.saturat
26e0: 69 6f 6e 20 2f 20 31 30 30 2c 0a 20 20 20 20 20  ion / 100,.     
26f0: 20 74 68 69 73 2e 76 61 6c 75 65 20 2f 20 31 30   this.value / 10
2700: 30 2c 0a 20 20 20 20 20 20 74 68 69 73 2e 61 6c  0,.      this.al
2710: 70 68 61 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 0a  pha.    );.  }..
2720: 20 20 2f 2a 2a 0a 20 20 20 2a 20 43 6f 6e 76 65    /**.   * Conve
2730: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
2740: 63 6f 6c 6f 72 20 74 6f 20 69 74 73 20 73 74 72  color to its str
2750: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
2760: 6f 6e 2c 0a 20 20 20 2a 20 75 73 69 6e 67 20 74  on,.   * using t
2770: 68 65 20 69 6e 74 65 72 6e 61 6c 20 66 6f 72 6d  he internal form
2780: 61 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 61  at of this insta
2790: 6e 63 65 2e 0a 20 20 20 2a 0a 20 20 20 2a 20 40  nce..   *.   * @
27a0: 72 65 74 75 72 6e 73 20 7b 53 74 72 69 6e 67 7d  returns {String}
27b0: 0a 20 20 20 2a 2f 0a 20 20 74 6f 53 74 72 69 6e  .   */.  toStrin
27c0: 67 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  g() {.    return
27d0: 20 74 68 69 73 2e 73 74 72 69 6e 67 28 29 3b 0a   this.string();.
27e0: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
27f0: 43 6f 6e 76 65 72 74 73 20 74 68 65 20 63 75 72  Converts the cur
2800: 72 65 6e 74 20 63 6f 6c 6f 72 20 74 6f 20 69 74  rent color to it
2810: 73 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  s string represe
2820: 6e 74 61 74 69 6f 6e 2c 0a 20 20 20 2a 20 75 73  ntation,.   * us
2830: 69 6e 67 20 74 68 65 20 67 69 76 65 6e 20 66 6f  ing the given fo
2840: 72 6d 61 74 2e 0a 20 20 20 2a 0a 20 20 20 2a 20  rmat..   *.   * 
2850: 40 70 61 72 61 6d 20 7b 53 74 72 69 6e 67 7c 6e  @param {String|n
2860: 75 6c 6c 7d 20 66 6f 72 6d 61 74 20 46 6f 72 6d  ull} format Form
2870: 61 74 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 6f  at to convert to
2880: 2e 20 49 66 20 65 6d 70 74 79 20 6f 72 20 6e 75  . If empty or nu
2890: 6c 6c 2c 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ll, the internal
28a0: 20 66 6f 72 6d 61 74 20 77 69 6c 6c 20 62 65 20   format will be 
28b0: 75 73 65 64 2e 0a 20 20 20 2a 20 40 72 65 74 75  used..   * @retu
28c0: 72 6e 73 20 7b 53 74 72 69 6e 67 7d 0a 20 20 20  rns {String}.   
28d0: 2a 2f 0a 20 20 73 74 72 69 6e 67 28 66 6f 72 6d  */.  string(form
28e0: 61 74 20 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20  at = null) {.   
28f0: 20 66 6f 72 6d 61 74 20 3d 20 43 6f 6c 6f 72 49   format = ColorI
2900: 74 65 6d 2e 73 61 6e 69 74 69 7a 65 46 6f 72 6d  tem.sanitizeForm
2910: 61 74 28 66 6f 72 6d 61 74 20 3f 20 66 6f 72 6d  at(format ? form
2920: 61 74 20 3a 20 74 68 69 73 2e 66 6f 72 6d 61 74  at : this.format
2930: 29 3b 0a 0a 20 20 20 20 69 66 20 28 21 66 6f 72  );..    if (!for
2940: 6d 61 74 29 20 7b 0a 20 20 20 20 20 20 72 65 74  mat) {.      ret
2950: 75 72 6e 20 74 68 69 73 2e 5f 63 6f 6c 6f 72 2e  urn this._color.
2960: 72 6f 75 6e 64 28 29 2e 73 74 72 69 6e 67 28 29  round().string()
2970: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20  ;.    }..    if 
2980: 28 74 68 69 73 2e 5f 63 6f 6c 6f 72 5b 66 6f 72  (this._color[for
2990: 6d 61 74 5d 20 3d 3d 3d 20 75 6e 64 65 66 69 6e  mat] === undefin
29a0: 65 64 29 20 7b 0a 20 20 20 20 20 20 74 68 72 6f  ed) {.      thro
29b0: 77 20 6e 65 77 20 45 72 72 6f 72 28 60 55 6e 73  w new Error(`Uns
29c0: 75 70 70 6f 72 74 65 64 20 63 6f 6c 6f 72 20 66  upported color f
29d0: 6f 72 6d 61 74 3a 20 27 24 7b 66 6f 72 6d 61 74  ormat: '${format
29e0: 7d 27 60 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  }'`);.    }..   
29f0: 20 6c 65 74 20 73 74 72 20 3d 20 74 68 69 73 2e   let str = this.
2a00: 5f 63 6f 6c 6f 72 5b 66 6f 72 6d 61 74 5d 28 29  _color[format]()
2a10: 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 73 74  ;..    return st
2a20: 72 2e 72 6f 75 6e 64 20 3f 20 73 74 72 2e 72 6f  r.round ? str.ro
2a30: 75 6e 64 28 29 2e 73 74 72 69 6e 67 28 29 20 3a  und().string() :
2a40: 20 73 74 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a   str;.  }..  /**
2a50: 0a 20 20 20 2a 20 52 65 74 75 72 6e 73 20 74 72  .   * Returns tr
2a60: 75 65 20 69 66 20 74 68 65 20 67 69 76 65 6e 20  ue if the given 
2a70: 63 6f 6c 6f 72 20 76 61 6c 75 65 73 20 65 71 75  color values equ
2a80: 61 6c 73 20 74 68 69 73 20 6f 6e 65 2c 20 66 61  als this one, fa
2a90: 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0a 20  lse otherwise.. 
2aa0: 20 20 2a 20 54 68 65 20 66 6f 72 6d 61 74 20 69    * The format i
2ab0: 73 20 6e 6f 74 20 63 6f 6d 70 61 72 65 64 2e 0a  s not compared..
2ac0: 20 20 20 2a 20 49 66 20 61 6e 79 20 6f 66 20 74     * If any of t
2ad0: 68 65 20 63 6f 6c 6f 72 73 20 69 73 20 69 6e 76  he colors is inv
2ae0: 61 6c 69 64 2c 20 74 68 65 20 72 65 73 75 6c 74  alid, the result
2af0: 20 77 69 6c 6c 20 62 65 20 66 61 6c 73 65 2e 0a   will be false..
2b00: 20 20 20 2a 0a 20 20 20 2a 20 40 70 61 72 61 6d     *.   * @param
2b10: 20 7b 43 6f 6c 6f 72 49 74 65 6d 7c 48 53 56 41   {ColorItem|HSVA
2b20: 43 6f 6c 6f 72 7c 51 69 78 43 6f 6c 6f 72 7c 53  Color|QixColor|S
2b30: 74 72 69 6e 67 7c 2a 7c 6e 75 6c 6c 7d 20 63 6f  tring|*|null} co
2b40: 6c 6f 72 20 43 6f 6c 6f 72 20 64 61 74 61 0a 20  lor Color data. 
2b50: 20 20 2a 0a 20 20 20 2a 20 40 72 65 74 75 72 6e    *.   * @return
2b60: 73 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 20 20 20 2a  s {boolean}.   *
2b70: 2f 0a 20 20 65 71 75 61 6c 73 28 63 6f 6c 6f 72  /.  equals(color
2b80: 29 20 7b 0a 20 20 20 20 63 6f 6c 6f 72 20 3d 20  ) {.    color = 
2b90: 28 63 6f 6c 6f 72 20 69 6e 73 74 61 6e 63 65 6f  (color instanceo
2ba0: 66 20 43 6f 6c 6f 72 49 74 65 6d 29 20 3f 20 63  f ColorItem) ? c
2bb0: 6f 6c 6f 72 20 3a 20 6e 65 77 20 43 6f 6c 6f 72  olor : new Color
2bc0: 49 74 65 6d 28 63 6f 6c 6f 72 29 3b 0a 0a 20 20  Item(color);..  
2bd0: 20 20 69 66 20 28 21 63 6f 6c 6f 72 2e 69 73 56    if (!color.isV
2be0: 61 6c 69 64 28 29 20 7c 7c 20 21 74 68 69 73 2e  alid() || !this.
2bf0: 69 73 56 61 6c 69 64 28 29 29 20 7b 0a 20 20 20  isValid()) {.   
2c00: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c10: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75  .    }..    retu
2c20: 72 6e 20 28 0a 20 20 20 20 20 20 74 68 69 73 2e  rn (.      this.
2c30: 68 75 65 20 3d 3d 3d 20 63 6f 6c 6f 72 2e 68 75  hue === color.hu
2c40: 65 20 26 26 0a 20 20 20 20 20 20 74 68 69 73 2e  e &&.      this.
2c50: 73 61 74 75 72 61 74 69 6f 6e 20 3d 3d 3d 20 63  saturation === c
2c60: 6f 6c 6f 72 2e 73 61 74 75 72 61 74 69 6f 6e 20  olor.saturation 
2c70: 26 26 0a 20 20 20 20 20 20 74 68 69 73 2e 76 61  &&.      this.va
2c80: 6c 75 65 20 3d 3d 3d 20 63 6f 6c 6f 72 2e 76 61  lue === color.va
2c90: 6c 75 65 20 26 26 0a 20 20 20 20 20 20 74 68 69  lue &&.      thi
2ca0: 73 2e 61 6c 70 68 61 20 3d 3d 3d 20 63 6f 6c 6f  s.alpha === colo
2cb0: 72 2e 61 6c 70 68 61 0a 20 20 20 20 29 3b 0a 20  r.alpha.    );. 
2cc0: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 43   }..  /**.   * C
2cd0: 72 65 61 74 65 73 20 61 20 63 6f 70 79 20 6f 66  reates a copy of
2ce0: 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 0a 20   this instance. 
2cf0: 20 20 2a 0a 20 20 20 2a 20 40 72 65 74 75 72 6e    *.   * @return
2d00: 73 20 7b 43 6f 6c 6f 72 49 74 65 6d 7d 0a 20 20  s {ColorItem}.  
2d10: 20 2a 2f 0a 20 20 67 65 74 43 6c 6f 6e 65 28 29   */.  getClone()
2d20: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 65   {.    return ne
2d30: 77 20 43 6f 6c 6f 72 49 74 65 6d 28 74 68 69 73  w ColorItem(this
2d40: 2e 5f 63 6f 6c 6f 72 2c 20 74 68 69 73 2e 66 6f  ._color, this.fo
2d50: 72 6d 61 74 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  rmat);.  }..  /*
2d60: 2a 0a 20 20 20 2a 20 43 72 65 61 74 65 73 20 61  *.   * Creates a
2d70: 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 69 6e   copy of this in
2d80: 73 74 61 6e 63 65 2c 20 6f 6e 6c 79 20 63 6f 70  stance, only cop
2d90: 79 69 6e 67 20 74 68 65 20 68 75 65 20 76 61 6c  ying the hue val
2da0: 75 65 2c 0a 20 20 20 2a 20 61 6e 64 20 73 65 74  ue,.   * and set
2db0: 74 69 6e 67 20 74 68 65 20 6f 74 68 65 72 73 20  ting the others 
2dc0: 74 6f 20 69 74 73 20 6d 61 78 20 76 61 6c 75 65  to its max value
2dd0: 2e 0a 20 20 20 2a 0a 20 20 20 2a 20 40 72 65 74  ..   *.   * @ret
2de0: 75 72 6e 73 20 7b 43 6f 6c 6f 72 49 74 65 6d 7d  urns {ColorItem}
2df0: 0a 20 20 20 2a 2f 0a 20 20 67 65 74 43 6c 6f 6e  .   */.  getClon
2e00: 65 48 75 65 4f 6e 6c 79 28 29 20 7b 0a 20 20 20  eHueOnly() {.   
2e10: 20 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6c 6f   return new Colo
2e20: 72 49 74 65 6d 28 5b 74 68 69 73 2e 68 75 65 2c  rItem([this.hue,
2e30: 20 31 30 30 2c 20 31 30 30 2c 20 31 5d 2c 20 74   100, 100, 1], t
2e40: 68 69 73 2e 66 6f 72 6d 61 74 29 3b 0a 20 20 7d  his.format);.  }
2e50: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 43 72 65  ..  /**.   * Cre
2e60: 61 74 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74  ates a copy of t
2e70: 68 69 73 20 69 6e 73 74 61 6e 63 65 20 73 65 74  his instance set
2e80: 74 69 6e 67 20 74 68 65 20 61 6c 70 68 61 20 74  ting the alpha t
2e90: 6f 20 74 68 65 20 6d 61 78 2e 0a 20 20 20 2a 0a  o the max..   *.
2ea0: 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 43     * @returns {C
2eb0: 6f 6c 6f 72 49 74 65 6d 7d 0a 20 20 20 2a 2f 0a  olorItem}.   */.
2ec0: 20 20 67 65 74 43 6c 6f 6e 65 4f 70 61 71 75 65    getCloneOpaque
2ed0: 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  () {.    return 
2ee0: 6e 65 77 20 43 6f 6c 6f 72 49 74 65 6d 28 74 68  new ColorItem(th
2ef0: 69 73 2e 5f 63 6f 6c 6f 72 2e 61 6c 70 68 61 28  is._color.alpha(
2f00: 31 29 2c 20 74 68 69 73 2e 66 6f 72 6d 61 74 29  1), this.format)
2f10: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20  ;.  }..  /**.   
2f20: 2a 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20 63  * Converts the c
2f30: 6f 6c 6f 72 20 74 6f 20 61 20 52 47 42 20 73 74  olor to a RGB st
2f40: 72 69 6e 67 0a 20 20 20 2a 0a 20 20 20 2a 20 40  ring.   *.   * @
2f50: 72 65 74 75 72 6e 73 20 7b 53 74 72 69 6e 67 7d  returns {String}
2f60: 0a 20 20 20 2a 2f 0a 20 20 74 6f 52 67 62 53 74  .   */.  toRgbSt
2f70: 72 69 6e 67 28 29 20 7b 0a 20 20 20 20 72 65 74  ring() {.    ret
2f80: 75 72 6e 20 74 68 69 73 2e 73 74 72 69 6e 67 28  urn this.string(
2f90: 27 72 67 62 27 29 3b 0a 20 20 7d 0a 0a 20 20 2f  'rgb');.  }..  /
2fa0: 2a 2a 0a 20 20 20 2a 20 43 6f 6e 76 65 72 74 73  **.   * Converts
2fb0: 20 74 68 65 20 63 6f 6c 6f 72 20 74 6f 20 61 20   the color to a 
2fc0: 48 65 78 61 64 65 63 69 6d 61 6c 20 73 74 72 69  Hexadecimal stri
2fd0: 6e 67 0a 20 20 20 2a 0a 20 20 20 2a 20 40 72 65  ng.   *.   * @re
2fe0: 74 75 72 6e 73 20 7b 53 74 72 69 6e 67 7d 0a 20  turns {String}. 
2ff0: 20 20 2a 2f 0a 20 20 74 6f 48 65 78 53 74 72 69    */.  toHexStri
3000: 6e 67 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72  ng() {.    retur
3010: 6e 20 74 68 69 73 2e 73 74 72 69 6e 67 28 27 68  n this.string('h
3020: 65 78 27 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  ex');.  }..  /**
3030: 0a 20 20 20 2a 20 43 6f 6e 76 65 72 74 73 20 74  .   * Converts t
3040: 68 65 20 63 6f 6c 6f 72 20 74 6f 20 61 20 48 53  he color to a HS
3050: 4c 20 73 74 72 69 6e 67 0a 20 20 20 2a 0a 20 20  L string.   *.  
3060: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 53 74 72   * @returns {Str
3070: 69 6e 67 7d 0a 20 20 20 2a 2f 0a 20 20 74 6f 48  ing}.   */.  toH
3080: 73 6c 53 74 72 69 6e 67 28 29 20 7b 0a 20 20 20  slString() {.   
3090: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 73 74 72   return this.str
30a0: 69 6e 67 28 27 68 73 6c 27 29 3b 0a 20 20 7d 0a  ing('hsl');.  }.
30b0: 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 52 65 74 75  .  /**.   * Retu
30c0: 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20  rns true if the 
30d0: 63 6f 6c 6f 72 20 69 73 20 64 61 72 6b 2c 20 66  color is dark, f
30e0: 61 6c 73 65 20 6f 74 68 65 72 77 68 69 73 65 2e  alse otherwhise.
30f0: 0a 20 20 20 2a 20 54 68 69 73 20 69 73 20 75 73  .   * This is us
3100: 65 66 75 6c 20 74 6f 20 64 65 63 69 64 65 20 61  eful to decide a
3110: 20 74 65 78 74 20 63 6f 6c 6f 72 2e 0a 20 20 20   text color..   
3120: 2a 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20  *.   * @returns 
3130: 7b 62 6f 6f 6c 65 61 6e 7d 0a 20 20 20 2a 2f 0a  {boolean}.   */.
3140: 20 20 69 73 44 61 72 6b 28 29 20 7b 0a 20 20 20    isDark() {.   
3150: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 63 6f   return this._co
3160: 6c 6f 72 2e 69 73 44 61 72 6b 28 29 3b 0a 20 20  lor.isDark();.  
3170: 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 52 65  }..  /**.   * Re
3180: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68  turns true if th
3190: 65 20 63 6f 6c 6f 72 20 69 73 20 6c 69 67 68 74  e color is light
31a0: 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 68 69  , false otherwhi
31b0: 73 65 2e 0a 20 20 20 2a 20 54 68 69 73 20 69 73  se..   * This is
31c0: 20 75 73 65 66 75 6c 20 74 6f 20 64 65 63 69 64   useful to decid
31d0: 65 20 61 20 74 65 78 74 20 63 6f 6c 6f 72 2e 0a  e a text color..
31e0: 20 20 20 2a 0a 20 20 20 2a 20 40 72 65 74 75 72     *.   * @retur
31f0: 6e 73 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 20 20 20  ns {boolean}.   
3200: 2a 2f 0a 20 20 69 73 4c 69 67 68 74 28 29 20 7b  */.  isLight() {
3210: 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73  .    return this
3220: 2e 5f 63 6f 6c 6f 72 2e 69 73 4c 69 67 68 74 28  ._color.isLight(
3230: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20  );.  }..  /**.  
3240: 20 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20 6c   * Generates a l
3250: 69 73 74 20 6f 66 20 63 6f 6c 6f 72 73 20 75 73  ist of colors us
3260: 69 6e 67 20 74 68 65 20 67 69 76 65 6e 20 68 75  ing the given hu
3270: 65 2d 62 61 73 65 64 20 66 6f 72 6d 75 6c 61 20  e-based formula 
3280: 6f 72 20 74 68 65 20 67 69 76 65 6e 20 61 72 72  or the given arr
3290: 61 79 20 6f 66 20 68 75 65 20 76 61 6c 75 65 73  ay of hue values
32a0: 2e 0a 20 20 20 2a 20 48 75 65 20 66 6f 72 6d 75  ..   * Hue formu
32b0: 6c 61 73 20 63 61 6e 20 62 65 20 65 78 74 65 6e  las can be exten
32c0: 64 65 64 20 75 73 69 6e 67 20 43 6f 6c 6f 72 49  ded using ColorI
32d0: 74 65 6d 2e 63 6f 6c 6f 72 46 6f 72 6d 75 6c 61  tem.colorFormula
32e0: 73 20 73 74 61 74 69 63 20 70 72 6f 70 65 72 74  s static propert
32f0: 79 2e 0a 20 20 20 2a 0a 20 20 20 2a 20 40 70 61  y..   *.   * @pa
3300: 72 61 6d 20 7b 53 74 72 69 6e 67 7c 4e 75 6d 62  ram {String|Numb
3310: 65 72 5b 5d 7d 20 66 6f 72 6d 75 6c 61 20 45 78  er[]} formula Ex
3320: 61 6d 70 6c 65 73 3a 20 27 63 6f 6d 70 6c 65 6d  amples: 'complem
3330: 65 6e 74 61 72 79 27 2c 20 27 74 72 69 61 64 27  entary', 'triad'
3340: 2c 20 27 74 65 74 72 61 64 27 2c 20 27 73 70 6c  , 'tetrad', 'spl
3350: 69 74 63 6f 6d 70 6c 65 6d 65 6e 74 27 2c 20 5b  itcomplement', [
3360: 31 38 30 2c 20 32 37 30 5d 0a 20 20 20 2a 20 40  180, 270].   * @
3370: 65 78 61 6d 70 6c 65 20 6c 65 74 20 63 6f 6c 6f  example let colo
3380: 72 73 20 3d 20 63 6f 6c 6f 72 2e 67 65 6e 65 72  rs = color.gener
3390: 61 74 65 28 27 74 72 69 61 64 27 29 3b 0a 20 20  ate('triad');.  
33a0: 20 2a 20 40 65 78 61 6d 70 6c 65 20 6c 65 74 20   * @example let 
33b0: 63 6f 6c 6f 72 73 20 3d 20 63 6f 6c 6f 72 2e 67  colors = color.g
33c0: 65 6e 65 72 61 74 65 28 5b 34 35 2c 20 38 30 2c  enerate([45, 80,
33d0: 20 31 31 32 2c 20 32 30 30 5d 29 3b 0a 20 20 20   112, 200]);.   
33e0: 2a 20 40 72 65 74 75 72 6e 73 20 7b 43 6f 6c 6f  * @returns {Colo
33f0: 72 49 74 65 6d 5b 5d 7d 0a 20 20 20 2a 2f 0a 20  rItem[]}.   */. 
3400: 20 67 65 6e 65 72 61 74 65 28 66 6f 72 6d 75 6c   generate(formul
3410: 61 29 20 7b 0a 20 20 20 20 6c 65 74 20 68 75 65  a) {.    let hue
3420: 73 20 3d 20 5b 5d 3b 0a 0a 20 20 20 20 69 66 20  s = [];..    if 
3430: 28 41 72 72 61 79 2e 69 73 41 72 72 61 79 28 66  (Array.isArray(f
3440: 6f 72 6d 75 6c 61 29 29 20 7b 0a 20 20 20 20 20  ormula)) {.     
3450: 20 68 75 65 73 20 3d 20 66 6f 72 6d 75 6c 61 3b   hues = formula;
3460: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
3470: 21 43 6f 6c 6f 72 49 74 65 6d 2e 63 6f 6c 6f 72  !ColorItem.color
3480: 46 6f 72 6d 75 6c 61 73 2e 68 61 73 4f 77 6e 50  Formulas.hasOwnP
3490: 72 6f 70 65 72 74 79 28 66 6f 72 6d 75 6c 61 29  roperty(formula)
34a0: 29 20 7b 0a 20 20 20 20 20 20 74 68 72 6f 77 20  ) {.      throw 
34b0: 6e 65 77 20 45 72 72 6f 72 28 60 4e 6f 20 63 6f  new Error(`No co
34c0: 6c 6f 72 20 66 6f 72 6d 75 6c 61 20 66 6f 75 6e  lor formula foun
34d0: 64 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  d with the name 
34e0: 27 24 7b 66 6f 72 6d 75 6c 61 7d 27 2e 60 29 3b  '${formula}'.`);
34f0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
3500: 20 20 20 20 68 75 65 73 20 3d 20 43 6f 6c 6f 72      hues = Color
3510: 49 74 65 6d 2e 63 6f 6c 6f 72 46 6f 72 6d 75 6c  Item.colorFormul
3520: 61 73 5b 66 6f 72 6d 75 6c 61 5d 3b 0a 20 20 20  as[formula];.   
3530: 20 7d 0a 0a 20 20 20 20 6c 65 74 20 63 6f 6c 6f   }..    let colo
3540: 72 73 20 3d 20 5b 5d 2c 20 6d 61 69 6e 43 6f 6c  rs = [], mainCol
3550: 6f 72 20 3d 20 74 68 69 73 2e 5f 63 6f 6c 6f 72  or = this._color
3560: 2c 20 66 6f 72 6d 61 74 20 3d 20 74 68 69 73 2e  , format = this.
3570: 66 6f 72 6d 61 74 3b 0a 0a 20 20 20 20 68 75 65  format;..    hue
3580: 73 2e 66 6f 72 45 61 63 68 28 66 75 6e 63 74 69  s.forEach(functi
3590: 6f 6e 20 28 68 75 65 29 20 7b 0a 20 20 20 20 20  on (hue) {.     
35a0: 20 6c 65 74 20 6c 65 76 65 6c 73 20 3d 20 5b 0a   let levels = [.
35b0: 20 20 20 20 20 20 20 20 68 75 65 20 3f 20 28 28          hue ? ((
35c0: 6d 61 69 6e 43 6f 6c 6f 72 2e 68 75 65 28 29 20  mainColor.hue() 
35d0: 2b 20 68 75 65 29 20 25 20 33 36 30 29 20 3a 20  + hue) % 360) : 
35e0: 6d 61 69 6e 43 6f 6c 6f 72 2e 68 75 65 28 29 2c  mainColor.hue(),
35f0: 0a 20 20 20 20 20 20 20 20 6d 61 69 6e 43 6f 6c  .        mainCol
3600: 6f 72 2e 73 61 74 75 72 61 74 69 6f 6e 76 28 29  or.saturationv()
3610: 2c 0a 20 20 20 20 20 20 20 20 6d 61 69 6e 43 6f  ,.        mainCo
3620: 6c 6f 72 2e 76 61 6c 75 65 28 29 2c 0a 20 20 20  lor.value(),.   
3630: 20 20 20 20 20 6d 61 69 6e 43 6f 6c 6f 72 2e 61       mainColor.a
3640: 6c 70 68 61 28 29 0a 20 20 20 20 20 20 5d 3b 0a  lpha().      ];.
3650: 0a 20 20 20 20 20 20 63 6f 6c 6f 72 73 2e 70 75  .      colors.pu
3660: 73 68 28 6e 65 77 20 43 6f 6c 6f 72 49 74 65 6d  sh(new ColorItem
3670: 28 6c 65 76 65 6c 73 2c 20 66 6f 72 6d 61 74 29  (levels, format)
3680: 29 3b 0a 20 20 20 20 7d 29 3b 0a 0a 20 20 20 20  );.    });..    
3690: 72 65 74 75 72 6e 20 63 6f 6c 6f 72 73 3b 0a 20  return colors;. 
36a0: 20 7d 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 4c 69 73   }.}../**. * Lis
36b0: 74 20 6f 66 20 68 75 65 2d 62 61 73 65 64 20 63  t of hue-based c
36c0: 6f 6c 6f 72 20 66 6f 72 6d 75 6c 61 73 20 75 73  olor formulas us
36d0: 65 64 20 62 79 20 43 6f 6c 6f 72 49 74 65 6d 2e  ed by ColorItem.
36e0: 70 72 6f 74 6f 74 79 70 65 2e 67 65 6e 65 72 61  prototype.genera
36f0: 74 65 28 29 0a 20 2a 0a 20 2a 20 40 73 74 61 74  te(). *. * @stat
3700: 69 63 0a 20 2a 20 40 74 79 70 65 20 7b 7b 63 6f  ic. * @type {{co
3710: 6d 70 6c 65 6d 65 6e 74 61 72 79 3a 20 6e 75 6d  mplementary: num
3720: 62 65 72 5b 5d 2c 20 74 72 69 61 64 3a 20 6e 75  ber[], triad: nu
3730: 6d 62 65 72 5b 5d 2c 20 74 65 74 72 61 64 3a 20  mber[], tetrad: 
3740: 6e 75 6d 62 65 72 5b 5d 2c 20 73 70 6c 69 74 63  number[], splitc
3750: 6f 6d 70 6c 65 6d 65 6e 74 3a 20 6e 75 6d 62 65  omplement: numbe
3760: 72 5b 5d 7d 7d 0a 20 2a 2f 0a 43 6f 6c 6f 72 49  r[]}}. */.ColorI
3770: 74 65 6d 2e 63 6f 6c 6f 72 46 6f 72 6d 75 6c 61  tem.colorFormula
3780: 73 20 3d 20 7b 0a 20 20 63 6f 6d 70 6c 65 6d 65  s = {.  compleme
3790: 6e 74 61 72 79 3a 20 5b 31 38 30 5d 2c 0a 20 20  ntary: [180],.  
37a0: 74 72 69 61 64 3a 20 5b 30 2c 20 31 32 30 2c 20  triad: [0, 120, 
37b0: 32 34 30 5d 2c 0a 20 20 74 65 74 72 61 64 3a 20  240],.  tetrad: 
37c0: 5b 30 2c 20 39 30 2c 20 31 38 30 2c 20 32 37 30  [0, 90, 180, 270
37d0: 5d 2c 0a 20 20 73 70 6c 69 74 63 6f 6d 70 6c 65  ],.  splitcomple
37e0: 6d 65 6e 74 3a 20 5b 30 2c 20 37 32 2c 20 32 31  ment: [0, 72, 21
37f0: 36 5d 0a 7d 3b 0a 0a 65 78 70 6f 72 74 20 64 65  6].};..export de
3800: 66 61 75 6c 74 20 43 6f 6c 6f 72 49 74 65 6d 3b  fault ColorItem;
3810: 0a 0a 65 78 70 6f 72 74 20 7b 0a 20 20 48 53 56  ..export {.  HSV
3820: 41 43 6f 6c 6f 72 2c 0a 20 20 43 6f 6c 6f 72 49  AColor,.  ColorI
3830: 74 65 6d 0a 7d 3b 0a                             tem.};.