{"version":3,"sources":["node_modules/tinycolor2/tinycolor.js","src/utils/color-helpers.ts"],"names":["Math","trimLeft","trimRight","tinyCounter","mathRound","round","mathMin","min","mathMax","max","mathRandom","random","tinycolor","color","opts","this","rgb","inputToRGB","_originalInput","_r","r","_g","g","_b","b","_a","a","_roundA","_format","format","_gradientType","gradientType","_ok","ok","_tc_id","prototype","isDark","getBrightness","isLight","isValid","getOriginalInput","getFormat","getAlpha","toRgb","getLuminance","RsRGB","GsRGB","BsRGB","R","G","B","pow","setAlpha","value","boundAlpha","toHsv","hsv","rgbToHsv","h","s","v","toHsvString","toHsl","hsl","rgbToHsl","l","toHslString","toHex","allow3Char","rgbToHex","toHexString","toHex8","allow4Char","rgbaToHex","toHex8String","toRgbString","toPercentageRgb","bound01","toPercentageRgbString","toName","hexNames","toFilter","secondColor","hex8String","rgbaToArgbHex","secondHex8String","toString","formatSet","formattedString","hasAlpha","needsAlphaFormat","clone","_applyModification","fn","args","apply","concat","slice","call","lighten","arguments","brighten","darken","desaturate","saturate","greyscale","spin","_applyCombination","analogous","complement","monochromatic","splitcomplement","triad","tetrad","fromRatio","newColor","i","hasOwnProperty","convertToPercentage","stringInputToObject","isValidCSSUnit","rgbToRgb","String","substr","hsvToRgb","hslToRgb","d","hue2rgb","p","q","t","floor","f","mod","hex","pad2","charAt","join","convertDecimalToHex","equals","color1","color2","amount","clamp01","hue","results","slices","part","ret","push","modification","mix","rgb1","rgb2","rgba","readability","c1","c2","isReadable","wcag2","wcag2Parms","out","validateWCAG2Parms","level","size","mostReadable","baseColor","colorList","bestColor","bestScore","includeFallbackColors","length","names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","flip","o","flipped","parseFloat","isNaN","n","isOnePointZero","processPercent","isPercentage","parseInt","abs","val","parseIntFromHex","indexOf","c","convertHexToDecimal","matchers","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","RegExp","hsla","hsva","hex3","hex6","hex4","hex8","exec","replace","toLowerCase","named","match","parms","toUpperCase","module","exports","window","Color","ColorHelper","[object Object]","colorValue","contrast","getContrastColor","name"],"mappings":"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","sourcesContent":["// TinyColor v1.4.2\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n","import tinycolor from 'tinycolor2';\n\nconst Color = tinycolor;\n\nexport class ColorHelper {\n /**\n * Generate color variations\n * @param {string} colorValue\n */\n static getColorVariations(colorValue: string): { name: string; value: string }[] {\n const color = Color(colorValue);\n const contrast = this.getContrastColor(colorValue);\n return [\n {\n name: 'contrast',\n value: contrast,\n },\n {\n name: 'hover',\n value: Color.mix(color, contrast, 15).toHexString(),\n },\n {\n name: 'active',\n value: Color.mix(color, contrast, 20).toHexString(),\n },\n ];\n }\n\n static getTintOrShadeColor(colorValue: string): string {\n const color = Color(colorValue);\n const contrast = this.getContrastColor(colorValue);\n return Color.mix(color, contrast, 50).toHexString();\n }\n\n /**\n * Return best contrast color (black or white)\n * @param {string} colorValue\n */\n static getContrastColor(colorValue: string): 'black' | 'white' {\n if (Color.isReadable(colorValue, 'white', {})) {\n return 'white';\n }\n return 'black';\n }\n}\n"]}