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.};.