@ctrl/tinycolor 4.0.4 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -98,6 +98,15 @@ new TinyColor('hsv 0 1 1');
98
98
  new TinyColor({ h: 0, s: 100, v: 100 });
99
99
  ```
100
100
 
101
+ ### CMYK
102
+
103
+ ```ts
104
+ new TinyColor('cmyk(0, 25, 20, 0)');
105
+ new TinyColor('cmyk(0, 100, 100, 0)');
106
+ new TinyColor('cmyk 100 0 100 0)');
107
+ new TinyColor({c: 0, m: 25, y: 25, k: 0});
108
+ ```
109
+
101
110
  ### Named
102
111
 
103
112
  ```ts
@@ -284,6 +293,13 @@ color.setAlpha(0.5);
284
293
  color.toHslString(); // "hsla(0, 100%, 50%, 0.5)"
285
294
  ```
286
295
 
296
+ ### toCmykString
297
+
298
+ ```ts
299
+ const color = new TinyColor('red');
300
+ color.toCmykString(); // "cmyk(0, 100, 100, 0)"
301
+ ```
302
+
287
303
  ### toNumber
288
304
  ```ts
289
305
  new TinyColor('#aabbcc').toNumber() === 0xaabbcc // true
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).tinycolor=e()}(this,(function(){"use strict";const t={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function e(t,e){(function(t){return"string"==typeof t&&-1!==t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");const r=function(t){return"string"==typeof t&&-1!==t.indexOf("%")}(t);return t=360===e?t:Math.min(e,Math.max(0,parseFloat(t))),r&&(t=parseInt(String(t*e),10)/100),Math.abs(t-e)<1e-6?1:t=360===e?(t<0?t%e+e:t%e)/parseFloat(String(e)):t%e/parseFloat(String(e))}function r(t){return Math.min(1,Math.max(0,t))}function n(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function a(t){return Number(t)<=1?100*Number(t)+"%":t}function s(t){return 1===t.length?"0"+t:String(t)}function o(t,r,n){t=e(t,255),r=e(r,255),n=e(n,255);const a=Math.max(t,r,n),s=Math.min(t,r,n);let o=0,i=0;const h=(a+s)/2;if(a===s)i=0,o=0;else{const e=a-s;switch(i=h>.5?e/(2-a-s):e/(a+s),a){case t:o=(r-n)/e+(r<n?6:0);break;case r:o=(n-t)/e+2;break;case n:o=(t-r)/e+4}o/=6}return{h:o,s:i,l:h}}function i(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*r*(e-t):r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function h(t,r,n){t=e(t,255),r=e(r,255),n=e(n,255);const a=Math.max(t,r,n),s=Math.min(t,r,n);let o=0;const i=a,h=a-s,u=0===a?0:h/a;if(a===s)o=0;else{switch(a){case t:o=(r-n)/h+(r<n?6:0);break;case r:o=(n-t)/h+2;break;case n:o=(t-r)/h+4}o/=6}return{h:o,s:u,v:i}}function u(t,e,r,n){const a=[s(Math.round(t).toString(16)),s(Math.round(e).toString(16)),s(Math.round(r).toString(16))];return n&&a[0].startsWith(a[0].charAt(1))&&a[1].startsWith(a[1].charAt(1))&&a[2].startsWith(a[2].charAt(1))?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function f(t,e,r,n){return[s(l(n)),s(Math.round(t).toString(16)),s(Math.round(e).toString(16)),s(Math.round(r).toString(16))].join("")}function l(t){return Math.round(255*parseFloat(t)).toString(16)}function c(t){return g(t)/255}function g(t){return parseInt(t,16)}function d(t){let r={r:0,g:0,b:0},s=1,o=null,h=null,u=null,f=!1,l=!1;var c,g,d;return"string"==typeof t&&(t=M(t)),"object"==typeof t&&(x(t.r)&&x(t.g)&&x(t.b)?(c=t.r,g=t.g,d=t.b,r={r:255*e(c,255),g:255*e(g,255),b:255*e(d,255)},f=!0,l="%"===String(t.r).substr(-1)?"prgb":"rgb"):x(t.h)&&x(t.s)&&x(t.v)?(o=a(t.s),h=a(t.v),r=function(t,r,n){t=6*e(t,360),r=e(r,100),n=e(n,100);const a=Math.floor(t),s=t-a,o=n*(1-r),i=n*(1-s*r),h=n*(1-(1-s)*r),u=a%6;return{r:255*[n,i,o,o,h,n][u],g:255*[h,n,n,i,o,o][u],b:255*[o,o,h,n,n,i][u]}}(t.h,o,h),f=!0,l="hsv"):x(t.h)&&x(t.s)&&x(t.l)&&(o=a(t.s),u=a(t.l),r=function(t,r,n){let a,s,o;if(t=e(t,360),r=e(r,100),n=e(n,100),0===r)s=n,o=n,a=n;else{const e=n<.5?n*(1+r):n+r-n*r,h=2*n-e;a=i(h,e,t+1/3),s=i(h,e,t),o=i(h,e,t-1/3)}return{r:255*a,g:255*s,b:255*o}}(t.h,o,u),f=!0,l="hsl"),Object.prototype.hasOwnProperty.call(t,"a")&&(s=t.a)),s=n(s),{ok:f,format:t.format||l,r:Math.min(255,Math.max(r.r,0)),g:Math.min(255,Math.max(r.g,0)),b:Math.min(255,Math.max(r.b,0)),a:s}}const b="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",m="[\\s|\\(]+("+b+")[,|\\s]+("+b+")[,|\\s]+("+b+")\\s*\\)?",p="[\\s|\\(]+("+b+")[,|\\s]+("+b+")[,|\\s]+("+b+")[,|\\s]+("+b+")\\s*\\)?",w={CSS_UNIT:new RegExp(b),rgb:new RegExp("rgb"+m),rgba:new RegExp("rgba"+p),hsl:new RegExp("hsl"+m),hsla:new RegExp("hsla"+p),hsv:new RegExp("hsv"+m),hsva:new RegExp("hsva"+p),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function M(e){if(0===(e=e.trim().toLowerCase()).length)return!1;let r=!1;if(t[e])e=t[e],r=!0;else if("transparent"===e)return{r:0,g:0,b:0,a:0,format:"name"};let n=w.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=w.rgba.exec(e),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=w.hsl.exec(e),n?{h:n[1],s:n[2],l:n[3]}:(n=w.hsla.exec(e),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=w.hsv.exec(e),n?{h:n[1],s:n[2],v:n[3]}:(n=w.hsva.exec(e),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=w.hex8.exec(e),n?{r:g(n[1]),g:g(n[2]),b:g(n[3]),a:c(n[4]),format:r?"name":"hex8"}:(n=w.hex6.exec(e),n?{r:g(n[1]),g:g(n[2]),b:g(n[3]),format:r?"name":"hex"}:(n=w.hex4.exec(e),n?{r:g(n[1]+n[1]),g:g(n[2]+n[2]),b:g(n[3]+n[3]),a:c(n[4]+n[4]),format:r?"name":"hex8"}:(n=w.hex3.exec(e),!!n&&{r:g(n[1]+n[1]),g:g(n[2]+n[2]),b:g(n[3]+n[3]),format:r?"name":"hex"})))))))))}function x(t){return"number"==typeof t?!Number.isNaN(t):w.CSS_UNIT.test(t)}class y{constructor(t="",e={}){if(t instanceof y)return t;"number"==typeof t&&(t=function(t){return{r:t>>16,g:(65280&t)>>8,b:255&t}}(t)),this.originalInput=t;const r=d(t);this.originalInput=t,this.r=r.r,this.g=r.g,this.b=r.b,this.a=r.a,this.roundA=Math.round(100*this.a)/100,this.format=e.format??r.format,this.gradientType=e.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=r.ok}isDark(){return this.getBrightness()<128}isLight(){return!this.isDark()}getBrightness(){const t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3}getLuminance(){const t=this.toRgb();let e,r,n;const a=t.r/255,s=t.g/255,o=t.b/255;return e=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4),r=s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4),n=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),.2126*e+.7152*r+.0722*n}getAlpha(){return this.a}setAlpha(t){return this.a=n(t),this.roundA=Math.round(100*this.a)/100,this}isMonochrome(){const{s:t}=this.toHsl();return 0===t}toHsv(){const t=h(this.r,this.g,this.b);return{h:360*t.h,s:t.s,v:t.v,a:this.a}}toHsvString(){const t=h(this.r,this.g,this.b),e=Math.round(360*t.h),r=Math.round(100*t.s),n=Math.round(100*t.v);return 1===this.a?`hsv(${e}, ${r}%, ${n}%)`:`hsva(${e}, ${r}%, ${n}%, ${this.roundA})`}toHsl(){const t=o(this.r,this.g,this.b);return{h:360*t.h,s:t.s,l:t.l,a:this.a}}toHslString(){const t=o(this.r,this.g,this.b),e=Math.round(360*t.h),r=Math.round(100*t.s),n=Math.round(100*t.l);return 1===this.a?`hsl(${e}, ${r}%, ${n}%)`:`hsla(${e}, ${r}%, ${n}%, ${this.roundA})`}toHex(t=!1){return u(this.r,this.g,this.b,t)}toHexString(t=!1){return"#"+this.toHex(t)}toHex8(t=!1){return function(t,e,r,n,a){const o=[s(Math.round(t).toString(16)),s(Math.round(e).toString(16)),s(Math.round(r).toString(16)),s(l(n))];return a&&o[0].startsWith(o[0].charAt(1))&&o[1].startsWith(o[1].charAt(1))&&o[2].startsWith(o[2].charAt(1))&&o[3].startsWith(o[3].charAt(1))?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0):o.join("")}(this.r,this.g,this.b,this.a,t)}toHex8String(t=!1){return"#"+this.toHex8(t)}toHexShortString(t=!1){return 1===this.a?this.toHexString(t):this.toHex8String(t)}toRgb(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}}toRgbString(){const t=Math.round(this.r),e=Math.round(this.g),r=Math.round(this.b);return 1===this.a?`rgb(${t}, ${e}, ${r})`:`rgba(${t}, ${e}, ${r}, ${this.roundA})`}toPercentageRgb(){const t=t=>`${Math.round(100*e(t,255))}%`;return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}}toPercentageRgbString(){const t=t=>Math.round(100*e(t,255));return 1===this.a?`rgb(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%)`:`rgba(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%, ${this.roundA})`}toName(){if(0===this.a)return"transparent";if(this.a<1)return!1;const e="#"+u(this.r,this.g,this.b,!1);for(const[r,n]of Object.entries(t))if(e===n)return r;return!1}toString(t){const e=Boolean(t);t=t??this.format;let r=!1;const n=this.a<1&&this.a>=0;return e||!n||!t.startsWith("hex")&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this.a?this.toName():this.toRgbString()}toNumber(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)}clone(){return new y(this.toString())}lighten(t=10){const e=this.toHsl();return e.l+=t/100,e.l=r(e.l),new y(e)}brighten(t=10){const e=this.toRgb();return e.r=Math.max(0,Math.min(255,e.r-Math.round(-t/100*255))),e.g=Math.max(0,Math.min(255,e.g-Math.round(-t/100*255))),e.b=Math.max(0,Math.min(255,e.b-Math.round(-t/100*255))),new y(e)}darken(t=10){const e=this.toHsl();return e.l-=t/100,e.l=r(e.l),new y(e)}tint(t=10){return this.mix("white",t)}shade(t=10){return this.mix("black",t)}desaturate(t=10){const e=this.toHsl();return e.s-=t/100,e.s=r(e.s),new y(e)}saturate(t=10){const e=this.toHsl();return e.s+=t/100,e.s=r(e.s),new y(e)}greyscale(){return this.desaturate(100)}spin(t){const e=this.toHsl(),r=(e.h+t)%360;return e.h=r<0?360+r:r,new y(e)}mix(t,e=50){const r=this.toRgb(),n=new y(t).toRgb(),a=e/100,s={r:(n.r-r.r)*a+r.r,g:(n.g-r.g)*a+r.g,b:(n.b-r.b)*a+r.b,a:(n.a-r.a)*a+r.a};return new y(s)}analogous(t=6,e=30){const r=this.toHsl(),n=360/e,a=[this];for(r.h=(r.h-(n*t>>1)+720)%360;--t;)r.h=(r.h+n)%360,a.push(new y(r));return a}complement(){const t=this.toHsl();return t.h=(t.h+180)%360,new y(t)}monochromatic(t=6){const e=this.toHsv(),{h:r}=e,{s:n}=e;let{v:a}=e;const s=[],o=1/t;for(;t--;)s.push(new y({h:r,s:n,v:a})),a=(a+o)%1;return s}splitcomplement(){const t=this.toHsl(),{h:e}=t;return[this,new y({h:(e+72)%360,s:t.s,l:t.l}),new y({h:(e+216)%360,s:t.s,l:t.l})]}onBackground(t){const e=this.toRgb(),r=new y(t).toRgb(),n=e.a+r.a*(1-e.a);return new y({r:(e.r*e.a+r.r*r.a*(1-e.a))/n,g:(e.g*e.a+r.g*r.a*(1-e.a))/n,b:(e.b*e.a+r.b*r.a*(1-e.a))/n,a:n})}triad(){return this.polyad(3)}tetrad(){return this.polyad(4)}polyad(t){const e=this.toHsl(),{h:r}=e,n=[this],a=360/t;for(let s=1;s<t;s++)n.push(new y({h:(r+s*a)%360,s:e.s,l:e.l}));return n}equals(t){return this.toRgbString()===new y(t).toRgbString()}}function k(t){t>=334&&t<=360&&(t-=360);for(const e of R){const r=v(e);if(r.hueRange&&t>=r.hueRange[0]&&t<=r.hueRange[1])return r}throw Error("Color not found")}function A(t,e){if(void 0===e)return Math.floor(t[0]+Math.random()*(t[1]+1-t[0]));const r=t[1]||1,n=t[0]||0,a=(e=(9301*e+49297)%233280)/233280;return Math.floor(n+a*(r-n))}function v(t){const e=t.lowerBounds[0][0],r=t.lowerBounds[t.lowerBounds.length-1][0],n=t.lowerBounds[t.lowerBounds.length-1][1],a=t.lowerBounds[0][1];return{name:t.name,hueRange:t.hueRange,lowerBounds:t.lowerBounds,saturationRange:[e,r],brightnessRange:[n,a]}}const R=[{name:"monochrome",hueRange:null,lowerBounds:[[0,0],[100,0]]},{name:"red",hueRange:[-26,18],lowerBounds:[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]},{name:"orange",hueRange:[19,46],lowerBounds:[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]},{name:"yellow",hueRange:[47,62],lowerBounds:[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]},{name:"green",hueRange:[63,178],lowerBounds:[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]},{name:"blue",hueRange:[179,257],lowerBounds:[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]},{name:"purple",hueRange:[258,282],lowerBounds:[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]},{name:"pink",hueRange:[283,334],lowerBounds:[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]}];function S(t,e){const r=new y(t),n=new y(e);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)}const $={TinyColor:y,readability:S,mostReadable:function t(e,r,n={includeFallbackColors:!1,level:"AA",size:"small"}){let a=null,s=0;const{includeFallbackColors:o,level:i,size:h}=n;for(const t of r){const r=S(e,t);r>s&&(s=r,a=new y(t))}return function(t,e,r={level:"AA",size:"small"}){const n=S(t,e);switch((r.level??"AA")+(r.size??"small")){case"AAsmall":case"AAAlarge":return n>=4.5;case"AAlarge":return n>=3;case"AAAsmall":return n>=7;default:return!1}}(e,a,{level:i,size:h})||!o?a:(n.includeFallbackColors=!1,t(e,["#fff","#000"],n))},random:function t(e={}){if(void 0!==e.count&&null!==e.count){const r=e.count,n=[];for(e.count=void 0;r>n.length;)e.count=null,e.seed&&(e.seed+=1),n.push(t(e));return e.count=r,n}const r=function(t,e){let r=A(function(t){const e=parseInt(t,10);if(!Number.isNaN(e)&&e<360&&e>0)return[e,e];if("string"==typeof t){const e=R.find((e=>e.name===t));if(e){const t=v(e);if(t.hueRange)return t.hueRange}const r=new y(t);if(r.isValid){const t=r.toHsv().h;return[t,t]}}return[0,360]}(t),e);r<0&&(r=360+r);return r}(e.hue,e.seed),n=function(t,e){if("monochrome"===e.hue)return 0;if("random"===e.luminosity)return A([0,100],e.seed);const{saturationRange:r}=k(t);let n=r[0],a=r[1];switch(e.luminosity){case"bright":n=55;break;case"dark":n=a-10;break;case"light":a=55}return A([n,a],e.seed)}(r,e),a=function(t,e,r){let n=function(t,e){const{lowerBounds:r}=k(t);for(let t=0;t<r.length-1;t++){const n=r[t][0],a=r[t][1],s=r[t+1][0],o=r[t+1][1];if(e>=n&&e<=s){const t=(o-a)/(s-n);return t*e+(a-t*n)}}return 0}(t,e),a=100;switch(r.luminosity){case"dark":a=n+20;break;case"light":n=(a+n)/2;break;case"random":n=0,a=100}return A([n,a],r.seed)}(r,n,e),s={h:r,s:n,v:a};return void 0!==e.alpha&&(s.a=e.alpha),new y(s)},names:t,fromRatio:function(t,e){const r={r:a(t.r),g:a(t.g),b:a(t.b)};return void 0!==t.a&&(r.a=Number(t.a)),new y(r,e)},legacyRandom:function(){return new y({r:Math.random(),g:Math.random(),b:Math.random()})},toMsFilter:function(t,e){const r=new y(t),n="#"+f(r.r,r.g,r.b,r.a);let a=n;const s=r.gradientType?"GradientType = 1, ":"";if(e){const t=new y(e);a="#"+f(t.r,t.g,t.b,t.a)}return`progid:DXImageTransform.Microsoft.gradient(${s}startColorstr=${n},endColorstr=${a})`},inputToRGB:d,stringInputToObject:M,isValidCSSUnit:x};return $}));
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).tinycolor=e()}(this,(function(){"use strict";const t={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function e(t,e){(function(t){return"string"==typeof t&&-1!==t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");const r=function(t){return"string"==typeof t&&-1!==t.indexOf("%")}(t);return t=360===e?t:Math.min(e,Math.max(0,parseFloat(t))),r&&(t=parseInt(String(t*e),10)/100),Math.abs(t-e)<1e-6?1:t=360===e?(t<0?t%e+e:t%e)/parseFloat(String(e)):t%e/parseFloat(String(e))}function r(t){return Math.min(1,Math.max(0,t))}function n(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function a(t){return Number(t)<=1?100*Number(t)+"%":t}function s(t){return 1===t.length?"0"+t:String(t)}function o(t,r,n){t=e(t,255),r=e(r,255),n=e(n,255);const a=Math.max(t,r,n),s=Math.min(t,r,n);let o=0,i=0;const h=(a+s)/2;if(a===s)i=0,o=0;else{const e=a-s;switch(i=h>.5?e/(2-a-s):e/(a+s),a){case t:o=(r-n)/e+(r<n?6:0);break;case r:o=(n-t)/e+2;break;case n:o=(t-r)/e+4}o/=6}return{h:o,s:i,l:h}}function i(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*r*(e-t):r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function h(t,r,n){t=e(t,255),r=e(r,255),n=e(n,255);const a=Math.max(t,r,n),s=Math.min(t,r,n);let o=0;const i=a,h=a-s,u=0===a?0:h/a;if(a===s)o=0;else{switch(a){case t:o=(r-n)/h+(r<n?6:0);break;case r:o=(n-t)/h+2;break;case n:o=(t-r)/h+4}o/=6}return{h:o,s:u,v:i}}function u(t,e,r,n){const a=[s(Math.round(t).toString(16)),s(Math.round(e).toString(16)),s(Math.round(r).toString(16))];return n&&a[0].startsWith(a[0].charAt(1))&&a[1].startsWith(a[1].charAt(1))&&a[2].startsWith(a[2].charAt(1))?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function f(t,e,r,n){return[s(c(n)),s(Math.round(t).toString(16)),s(Math.round(e).toString(16)),s(Math.round(r).toString(16))].join("")}function l(t,e,r){let n=1-t/255,a=1-e/255,s=1-r/255,o=Math.min(n,a,s);return 1===o?(n=0,a=0,s=0):(n=(n-o)/(1-o)*100,a=(a-o)/(1-o)*100,s=(s-o)/(1-o)*100),o*=100,{c:Math.round(n),m:Math.round(a),y:Math.round(s),k:Math.round(o)}}function c(t){return Math.round(255*parseFloat(t)).toString(16)}function g(t){return d(t)/255}function d(t){return parseInt(t,16)}function b(t){let r={r:0,g:0,b:0},s=1,o=null,h=null,u=null,f=!1,l=!1;var c,g,d;return"string"==typeof t&&(t=M(t)),"object"==typeof t&&(k(t.r)&&k(t.g)&&k(t.b)?(c=t.r,g=t.g,d=t.b,r={r:255*e(c,255),g:255*e(g,255),b:255*e(d,255)},f=!0,l="%"===String(t.r).substr(-1)?"prgb":"rgb"):k(t.h)&&k(t.s)&&k(t.v)?(o=a(t.s),h=a(t.v),r=function(t,r,n){t=6*e(t,360),r=e(r,100),n=e(n,100);const a=Math.floor(t),s=t-a,o=n*(1-r),i=n*(1-s*r),h=n*(1-(1-s)*r),u=a%6;return{r:255*[n,i,o,o,h,n][u],g:255*[h,n,n,i,o,o][u],b:255*[o,o,h,n,n,i][u]}}(t.h,o,h),f=!0,l="hsv"):k(t.h)&&k(t.s)&&k(t.l)?(o=a(t.s),u=a(t.l),r=function(t,r,n){let a,s,o;if(t=e(t,360),r=e(r,100),n=e(n,100),0===r)s=n,o=n,a=n;else{const e=n<.5?n*(1+r):n+r-n*r,h=2*n-e;a=i(h,e,t+1/3),s=i(h,e,t),o=i(h,e,t-1/3)}return{r:255*a,g:255*s,b:255*o}}(t.h,o,u),f=!0,l="hsl"):k(t.c)&&k(t.m)&&k(t.y)&&k(t.k)&&(r=function(t,e,r,n){const a=n/100;return{r:255*(1-t/100)*(1-a),g:255*(1-e/100)*(1-a),b:255*(1-r/100)*(1-a)}}(t.c,t.m,t.y,t.k),f=!0,l="cmyk"),Object.prototype.hasOwnProperty.call(t,"a")&&(s=t.a)),s=n(s),{ok:f,format:t.format||l,r:Math.min(255,Math.max(r.r,0)),g:Math.min(255,Math.max(r.g,0)),b:Math.min(255,Math.max(r.b,0)),a:s}}const m="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",p="[\\s|\\(]+("+m+")[,|\\s]+("+m+")[,|\\s]+("+m+")\\s*\\)?",w="[\\s|\\(]+("+m+")[,|\\s]+("+m+")[,|\\s]+("+m+")[,|\\s]+("+m+")\\s*\\)?",y={CSS_UNIT:new RegExp(m),rgb:new RegExp("rgb"+p),rgba:new RegExp("rgba"+w),hsl:new RegExp("hsl"+p),hsla:new RegExp("hsla"+w),hsv:new RegExp("hsv"+p),hsva:new RegExp("hsva"+w),cmyk:new RegExp("cmyk"+w),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function M(e){if(0===(e=e.trim().toLowerCase()).length)return!1;let r=!1;if(t[e])e=t[e],r=!0;else if("transparent"===e)return{r:0,g:0,b:0,a:0,format:"name"};let n=y.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=y.rgba.exec(e),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=y.hsl.exec(e),n?{h:n[1],s:n[2],l:n[3]}:(n=y.hsla.exec(e),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=y.hsv.exec(e),n?{h:n[1],s:n[2],v:n[3]}:(n=y.hsva.exec(e),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=y.cmyk.exec(e),n?{c:n[1],m:n[2],y:n[3],k:n[4]}:(n=y.hex8.exec(e),n?{r:d(n[1]),g:d(n[2]),b:d(n[3]),a:g(n[4]),format:r?"name":"hex8"}:(n=y.hex6.exec(e),n?{r:d(n[1]),g:d(n[2]),b:d(n[3]),format:r?"name":"hex"}:(n=y.hex4.exec(e),n?{r:d(n[1]+n[1]),g:d(n[2]+n[2]),b:d(n[3]+n[3]),a:g(n[4]+n[4]),format:r?"name":"hex8"}:(n=y.hex3.exec(e),!!n&&{r:d(n[1]+n[1]),g:d(n[2]+n[2]),b:d(n[3]+n[3]),format:r?"name":"hex"}))))))))))}function k(t){return"number"==typeof t?!Number.isNaN(t):y.CSS_UNIT.test(t)}class x{constructor(t="",e={}){if(t instanceof x)return t;"number"==typeof t&&(t=function(t){return{r:t>>16,g:(65280&t)>>8,b:255&t}}(t)),this.originalInput=t;const r=b(t);this.originalInput=t,this.r=r.r,this.g=r.g,this.b=r.b,this.a=r.a,this.roundA=Math.round(100*this.a)/100,this.format=e.format??r.format,this.gradientType=e.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=r.ok}isDark(){return this.getBrightness()<128}isLight(){return!this.isDark()}getBrightness(){const t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3}getLuminance(){const t=this.toRgb();let e,r,n;const a=t.r/255,s=t.g/255,o=t.b/255;return e=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4),r=s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4),n=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),.2126*e+.7152*r+.0722*n}getAlpha(){return this.a}setAlpha(t){return this.a=n(t),this.roundA=Math.round(100*this.a)/100,this}isMonochrome(){const{s:t}=this.toHsl();return 0===t}toHsv(){const t=h(this.r,this.g,this.b);return{h:360*t.h,s:t.s,v:t.v,a:this.a}}toHsvString(){const t=h(this.r,this.g,this.b),e=Math.round(360*t.h),r=Math.round(100*t.s),n=Math.round(100*t.v);return 1===this.a?`hsv(${e}, ${r}%, ${n}%)`:`hsva(${e}, ${r}%, ${n}%, ${this.roundA})`}toHsl(){const t=o(this.r,this.g,this.b);return{h:360*t.h,s:t.s,l:t.l,a:this.a}}toHslString(){const t=o(this.r,this.g,this.b),e=Math.round(360*t.h),r=Math.round(100*t.s),n=Math.round(100*t.l);return 1===this.a?`hsl(${e}, ${r}%, ${n}%)`:`hsla(${e}, ${r}%, ${n}%, ${this.roundA})`}toHex(t=!1){return u(this.r,this.g,this.b,t)}toHexString(t=!1){return"#"+this.toHex(t)}toHex8(t=!1){return function(t,e,r,n,a){const o=[s(Math.round(t).toString(16)),s(Math.round(e).toString(16)),s(Math.round(r).toString(16)),s(c(n))];return a&&o[0].startsWith(o[0].charAt(1))&&o[1].startsWith(o[1].charAt(1))&&o[2].startsWith(o[2].charAt(1))&&o[3].startsWith(o[3].charAt(1))?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0):o.join("")}(this.r,this.g,this.b,this.a,t)}toHex8String(t=!1){return"#"+this.toHex8(t)}toHexShortString(t=!1){return 1===this.a?this.toHexString(t):this.toHex8String(t)}toRgb(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}}toRgbString(){const t=Math.round(this.r),e=Math.round(this.g),r=Math.round(this.b);return 1===this.a?`rgb(${t}, ${e}, ${r})`:`rgba(${t}, ${e}, ${r}, ${this.roundA})`}toPercentageRgb(){const t=t=>`${Math.round(100*e(t,255))}%`;return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}}toPercentageRgbString(){const t=t=>Math.round(100*e(t,255));return 1===this.a?`rgb(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%)`:`rgba(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%, ${this.roundA})`}toCmyk(){return{...l(this.r,this.g,this.b)}}toCmykString(){const{c:t,m:e,y:r,k:n}=l(this.r,this.g,this.b);return`cmyk(${t}, ${e}, ${r}, ${n})`}toName(){if(0===this.a)return"transparent";if(this.a<1)return!1;const e="#"+u(this.r,this.g,this.b,!1);for(const[r,n]of Object.entries(t))if(e===n)return r;return!1}toString(t){const e=Boolean(t);t=t??this.format;let r=!1;const n=this.a<1&&this.a>=0;return e||!n||!t.startsWith("hex")&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),"cmyk"===t&&(r=this.toCmykString()),r||this.toHexString()):"name"===t&&0===this.a?this.toName():this.toRgbString()}toNumber(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)}clone(){return new x(this.toString())}lighten(t=10){const e=this.toHsl();return e.l+=t/100,e.l=r(e.l),new x(e)}brighten(t=10){const e=this.toRgb();return e.r=Math.max(0,Math.min(255,e.r-Math.round(-t/100*255))),e.g=Math.max(0,Math.min(255,e.g-Math.round(-t/100*255))),e.b=Math.max(0,Math.min(255,e.b-Math.round(-t/100*255))),new x(e)}darken(t=10){const e=this.toHsl();return e.l-=t/100,e.l=r(e.l),new x(e)}tint(t=10){return this.mix("white",t)}shade(t=10){return this.mix("black",t)}desaturate(t=10){const e=this.toHsl();return e.s-=t/100,e.s=r(e.s),new x(e)}saturate(t=10){const e=this.toHsl();return e.s+=t/100,e.s=r(e.s),new x(e)}greyscale(){return this.desaturate(100)}spin(t){const e=this.toHsl(),r=(e.h+t)%360;return e.h=r<0?360+r:r,new x(e)}mix(t,e=50){const r=this.toRgb(),n=new x(t).toRgb(),a=e/100,s={r:(n.r-r.r)*a+r.r,g:(n.g-r.g)*a+r.g,b:(n.b-r.b)*a+r.b,a:(n.a-r.a)*a+r.a};return new x(s)}analogous(t=6,e=30){const r=this.toHsl(),n=360/e,a=[this];for(r.h=(r.h-(n*t>>1)+720)%360;--t;)r.h=(r.h+n)%360,a.push(new x(r));return a}complement(){const t=this.toHsl();return t.h=(t.h+180)%360,new x(t)}monochromatic(t=6){const e=this.toHsv(),{h:r}=e,{s:n}=e;let{v:a}=e;const s=[],o=1/t;for(;t--;)s.push(new x({h:r,s:n,v:a})),a=(a+o)%1;return s}splitcomplement(){const t=this.toHsl(),{h:e}=t;return[this,new x({h:(e+72)%360,s:t.s,l:t.l}),new x({h:(e+216)%360,s:t.s,l:t.l})]}onBackground(t){const e=this.toRgb(),r=new x(t).toRgb(),n=e.a+r.a*(1-e.a);return new x({r:(e.r*e.a+r.r*r.a*(1-e.a))/n,g:(e.g*e.a+r.g*r.a*(1-e.a))/n,b:(e.b*e.a+r.b*r.a*(1-e.a))/n,a:n})}triad(){return this.polyad(3)}tetrad(){return this.polyad(4)}polyad(t){const e=this.toHsl(),{h:r}=e,n=[this],a=360/t;for(let s=1;s<t;s++)n.push(new x({h:(r+s*a)%360,s:e.s,l:e.l}));return n}equals(t){const e=new x(t);return"cmyk"===this.format||"cmyk"===e.format?this.toCmykString()===e.toCmykString():this.toRgbString()===e.toRgbString()}}function A(t){t>=334&&t<=360&&(t-=360);for(const e of R){const r=S(e);if(r.hueRange&&t>=r.hueRange[0]&&t<=r.hueRange[1])return r}throw Error("Color not found")}function v(t,e){if(void 0===e)return Math.floor(t[0]+Math.random()*(t[1]+1-t[0]));const r=t[1]||1,n=t[0]||0,a=(e=(9301*e+49297)%233280)/233280;return Math.floor(n+a*(r-n))}function S(t){const e=t.lowerBounds[0][0],r=t.lowerBounds[t.lowerBounds.length-1][0],n=t.lowerBounds[t.lowerBounds.length-1][1],a=t.lowerBounds[0][1];return{name:t.name,hueRange:t.hueRange,lowerBounds:t.lowerBounds,saturationRange:[e,r],brightnessRange:[n,a]}}const R=[{name:"monochrome",hueRange:null,lowerBounds:[[0,0],[100,0]]},{name:"red",hueRange:[-26,18],lowerBounds:[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]},{name:"orange",hueRange:[19,46],lowerBounds:[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]},{name:"yellow",hueRange:[47,62],lowerBounds:[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]},{name:"green",hueRange:[63,178],lowerBounds:[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]},{name:"blue",hueRange:[179,257],lowerBounds:[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]},{name:"purple",hueRange:[258,282],lowerBounds:[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]},{name:"pink",hueRange:[283,334],lowerBounds:[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]}];function $(t,e){const r=new x(t),n=new x(e);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)}const H={TinyColor:x,readability:$,mostReadable:function t(e,r,n={includeFallbackColors:!1,level:"AA",size:"small"}){let a=null,s=0;const{includeFallbackColors:o,level:i,size:h}=n;for(const t of r){const r=$(e,t);r>s&&(s=r,a=new x(t))}return function(t,e,r={level:"AA",size:"small"}){const n=$(t,e);switch((r.level??"AA")+(r.size??"small")){case"AAsmall":case"AAAlarge":return n>=4.5;case"AAlarge":return n>=3;case"AAAsmall":return n>=7;default:return!1}}(e,a,{level:i,size:h})||!o?a:(n.includeFallbackColors=!1,t(e,["#fff","#000"],n))},random:function t(e={}){if(void 0!==e.count&&null!==e.count){const r=e.count,n=[];for(e.count=void 0;r>n.length;)e.count=null,e.seed&&(e.seed+=1),n.push(t(e));return e.count=r,n}const r=function(t,e){let r=v(function(t){const e=parseInt(t,10);if(!Number.isNaN(e)&&e<360&&e>0)return[e,e];if("string"==typeof t){const e=R.find((e=>e.name===t));if(e){const t=S(e);if(t.hueRange)return t.hueRange}const r=new x(t);if(r.isValid){const t=r.toHsv().h;return[t,t]}}return[0,360]}(t),e);r<0&&(r=360+r);return r}(e.hue,e.seed),n=function(t,e){if("monochrome"===e.hue)return 0;if("random"===e.luminosity)return v([0,100],e.seed);const{saturationRange:r}=A(t);let n=r[0],a=r[1];switch(e.luminosity){case"bright":n=55;break;case"dark":n=a-10;break;case"light":a=55}return v([n,a],e.seed)}(r,e),a=function(t,e,r){let n=function(t,e){const{lowerBounds:r}=A(t);for(let t=0;t<r.length-1;t++){const n=r[t][0],a=r[t][1],s=r[t+1][0],o=r[t+1][1];if(e>=n&&e<=s){const t=(o-a)/(s-n);return t*e+(a-t*n)}}return 0}(t,e),a=100;switch(r.luminosity){case"dark":a=n+20;break;case"light":n=(a+n)/2;break;case"random":n=0,a=100}return v([n,a],r.seed)}(r,n,e),s={h:r,s:n,v:a};return void 0!==e.alpha&&(s.a=e.alpha),new x(s)},names:t,fromRatio:function(t,e){const r={r:a(t.r),g:a(t.g),b:a(t.b)};return void 0!==t.a&&(r.a=Number(t.a)),new x(r,e)},legacyRandom:function(){return new x({r:Math.random(),g:Math.random(),b:Math.random()})},toMsFilter:function(t,e){const r=new x(t),n="#"+f(r.r,r.g,r.b,r.a);let a=n;const s=r.gradientType?"GradientType = 1, ":"";if(e){const t=new x(e);a="#"+f(t.r,t.g,t.b,t.a)}return`progid:DXImageTransform.Microsoft.gradient(${s}startColorstr=${n},endColorstr=${a})`},inputToRGB:b,stringInputToObject:M,isValidCSSUnit:k};return H}));
2
2
  //# sourceMappingURL=tinycolor.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tinycolor.umd.min.js","sources":["../module/css-color-names.js","../module/util.js","../module/conversion.js","../module/format-input.js","../module/index.js","../module/random.js","../module/readability.js","../module/umd_api.js","../module/from-ratio.js","../module/to-ms-filter.js"],"sourcesContent":["// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json\n/**\n * @hidden\n */\nexport const names = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\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: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\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 lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\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: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\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: '#ff0000',\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: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","/**\n * Take input from [0, n] and return it as [0, 1]\n * @hidden\n */\nexport function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = '100%';\n }\n const isPercent = isPercentage(n);\n n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));\n // Automatically convert percentage into number\n if (isPercent) {\n n = parseInt(String(n * max), 10) / 100;\n }\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n // Convert into [0, 1] range if it isn't already\n if (max === 360) {\n // If n is a hue given in degrees,\n // wrap around out-of-range values into [0, 360] range\n // then convert into [0, 1].\n n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));\n }\n else {\n // If n not a hue given in degrees\n // Convert into [0, 1] range if it isn't already.\n n = (n % max) / parseFloat(String(max));\n }\n return n;\n}\n/**\n * Force a number between 0 and 1\n * @hidden\n */\nexport function clamp01(val) {\n return Math.min(1, Math.max(0, val));\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 * <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n * @hidden\n */\nexport function 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\n * @hidden\n */\nexport function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n}\n/**\n * Return a valid alpha value [0,1] with all invalid values being set to 1\n * @hidden\n */\nexport function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n/**\n * Replace a decimal with it's percentage value\n * @hidden\n */\nexport function convertToPercentage(n) {\n if (Number(n) <= 1) {\n return `${Number(n) * 100}%`;\n }\n return n;\n}\n/**\n * Force a hex value to have 2 characters\n * @hidden\n */\nexport function pad2(c) {\n return c.length === 1 ? '0' + c : String(c);\n}\n","import { bound01, pad2 } from './util.js';\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n/**\n * Handle bounds / percentage checking to conform to CSS color spec\n * <http://www.w3.org/TR/css3-color/>\n * *Assumes:* r, g, b in [0, 255] or [0, 1]\n * *Returns:* { r, g, b } in [0, 255]\n */\nexport function 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 * 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]\n */\nexport function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n if (max === min) {\n s = 0;\n h = 0; // achromatic\n }\n else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h, s, l };\n}\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * (6 * t);\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n/**\n * Converts an HSL color value to RGB.\n *\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]\n */\nexport function hslToRgb(h, s, l) {\n let r;\n let g;\n let b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n if (s === 0) {\n // achromatic\n g = l;\n b = l;\n r = l;\n }\n else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const 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 return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color value to HSV\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n * *Returns:* { h, s, v } in [0,1]\n */\nexport function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n const v = max;\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0; // achromatic\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h, s, v };\n}\n/**\n * Converts an HSV color value to RGB.\n *\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 */\nexport function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n const i = Math.floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color to hex\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255]\n * *Returns:* a 3 or 6 character hex\n */\nexport function rgbToHex(r, g, b, allow3Char) {\n const hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n // Return a 3 character hex if possible\n if (allow3Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color plus alpha transparency to hex\n *\n * *Assumes:* r, g, b are contained in the set [0, 255] and a in [0, 1]\n * *Returns:* a 4 or 8 character rgba hex\n */\n// eslint-disable-next-line max-params\nexport function rgbaToHex(r, g, b, a, allow4Char) {\n const hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n pad2(convertDecimalToHex(a)),\n ];\n // Return a 4 character hex if possible\n if (allow4Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1)) &&\n hex[3].startsWith(hex[3].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color to an ARGB Hex8 string\n * Rarely used, but required for \"toFilter()\"\n *\n * *Assumes:* r, g, b are contained in the set [0, 255] and a in [0, 1]\n * *Returns:* a 8 character argb hex\n */\nexport function rgbaToArgbHex(r, g, b, a) {\n const hex = [\n pad2(convertDecimalToHex(a)),\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n return hex.join('');\n}\n/** Converts a decimal to a hex value */\nexport function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n/** Converts a hex value to a decimal */\nexport function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\n/** Parse a base-16 hex value into a base-10 integer */\nexport function parseIntFromHex(val) {\n return parseInt(val, 16);\n}\nexport function numberInputToObject(color) {\n return {\n r: color >> 16,\n g: (color & 0xff00) >> 8,\n b: color & 0xff,\n };\n}\n","import { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb, } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { boundAlpha, convertToPercentage } from './util.js';\n/**\n * Given a string or object, convert that input to RGB\n *\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 * ```\n */\nexport function inputToRGB(color) {\n let rgb = { r: 0, g: 0, b: 0 };\n let a = 1;\n let s = null;\n let v = null;\n let l = null;\n let ok = false;\n let format = false;\n if (typeof color === 'string') {\n color = stringInputToObject(color);\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 if (Object.prototype.hasOwnProperty.call(color, 'a')) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a,\n };\n}\n// <http://www.w3.org/TR/css3-values/#integers>\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// <http://www.w3.org/TR/css3-values/#number-value>\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n// Actual matching.\n// Parentheses and commas are optional, but not required.\n// Whitespace can take the place of commas or opening paren\n// eslint-disable-next-line prettier/prettier\nconst PERMISSIVE_MATCH3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH4 = \n// eslint-disable-next-line prettier/prettier\n'[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst matchers = {\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 * 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}`\n */\nexport function stringInputToObject(color) {\n color = color.trim().toLowerCase();\n if (color.length === 0) {\n return false;\n }\n let 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 // 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 let match = matchers.rgb.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n match = matchers.rgba.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n match = matchers.hsl.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n match = matchers.hsla.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n match = matchers.hsv.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n match = matchers.hsva.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n match = matchers.hex8.exec(color);\n if (match) {\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 match = matchers.hex6.exec(color);\n if (match) {\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 match = matchers.hex4.exec(color);\n if (match) {\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 match = matchers.hex3.exec(color);\n if (match) {\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 return false;\n}\n/**\n * Check to see if it looks like a CSS unit\n * (see `matchers` above for definition).\n */\nexport function isValidCSSUnit(color) {\n if (typeof color === 'number') {\n return !Number.isNaN(color);\n }\n return matchers.CSS_UNIT.test(color);\n}\n","import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { inputToRGB } from './format-input.js';\nimport { bound01, boundAlpha, clamp01 } from './util.js';\nexport class TinyColor {\n constructor(color = '', opts = {}) {\n // If input is already a tinycolor, return itself\n if (color instanceof TinyColor) {\n // eslint-disable-next-line no-constructor-return\n return color;\n }\n if (typeof color === 'number') {\n color = numberInputToObject(color);\n }\n this.originalInput = color;\n const 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 = Math.round(100 * this.a) / 100;\n this.format = opts.format ?? rgb.format;\n this.gradientType = opts.gradientType;\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) {\n this.r = Math.round(this.r);\n }\n if (this.g < 1) {\n this.g = Math.round(this.g);\n }\n if (this.b < 1) {\n this.b = Math.round(this.b);\n }\n this.isValid = rgb.ok;\n }\n isDark() {\n return this.getBrightness() < 128;\n }\n isLight() {\n return !this.isDark();\n }\n /**\n * Returns the perceived brightness of the color, from 0-255.\n */\n getBrightness() {\n // http://www.w3.org/TR/AERT#color-contrast\n const rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n }\n /**\n * Returns the perceived luminance of a color, from 0-1.\n */\n getLuminance() {\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n const rgb = this.toRgb();\n let R;\n let G;\n let B;\n const RsRGB = rgb.r / 255;\n const GsRGB = rgb.g / 255;\n const BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n }\n /**\n * Returns the alpha value of a color, from 0-1.\n */\n getAlpha() {\n return this.a;\n }\n /**\n * Sets the alpha value on the current color.\n *\n * @param alpha - The new alpha value. The accepted range is 0-1.\n */\n setAlpha(alpha) {\n this.a = boundAlpha(alpha);\n this.roundA = Math.round(100 * this.a) / 100;\n return this;\n }\n /**\n * Returns whether the color is monochrome.\n */\n isMonochrome() {\n const { s } = this.toHsl();\n return s === 0;\n }\n /**\n * Returns the object as a HSVA object.\n */\n toHsv() {\n const 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 /**\n * Returns the hsva values interpolated into a string with the following format:\n * \"hsva(xxx, xxx, xxx, xx)\".\n */\n toHsvString() {\n const hsv = rgbToHsv(this.r, this.g, this.b);\n const h = Math.round(hsv.h * 360);\n const s = Math.round(hsv.s * 100);\n const v = Math.round(hsv.v * 100);\n return this.a === 1 ? `hsv(${h}, ${s}%, ${v}%)` : `hsva(${h}, ${s}%, ${v}%, ${this.roundA})`;\n }\n /**\n * Returns the object as a HSLA object.\n */\n toHsl() {\n const 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 /**\n * Returns the hsla values interpolated into a string with the following format:\n * \"hsla(xxx, xxx, xxx, xx)\".\n */\n toHslString() {\n const hsl = rgbToHsl(this.r, this.g, this.b);\n const h = Math.round(hsl.h * 360);\n const s = Math.round(hsl.s * 100);\n const l = Math.round(hsl.l * 100);\n return this.a === 1 ? `hsl(${h}, ${s}%, ${l}%)` : `hsla(${h}, ${s}%, ${l}%, ${this.roundA})`;\n }\n /**\n * Returns the hex value of the color.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n toHex(allow3Char = false) {\n return rgbToHex(this.r, this.g, this.b, allow3Char);\n }\n /**\n * Returns the hex value of the color -with a # prefixed.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n toHexString(allow3Char = false) {\n return '#' + this.toHex(allow3Char);\n }\n /**\n * Returns the hex 8 value of the color.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n toHex8(allow4Char = false) {\n return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);\n }\n /**\n * Returns the hex 8 value of the color -with a # prefixed.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n toHex8String(allow4Char = false) {\n return '#' + this.toHex8(allow4Char);\n }\n /**\n * Returns the shorter hex value of the color depends on its alpha -with a # prefixed.\n * @param allowShortChar will shorten hex value to 3 or 4 char if possible\n */\n toHexShortString(allowShortChar = false) {\n return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);\n }\n /**\n * Returns the object as a RGBA object.\n */\n toRgb() {\n return {\n r: Math.round(this.r),\n g: Math.round(this.g),\n b: Math.round(this.b),\n a: this.a,\n };\n }\n /**\n * Returns the RGBA values interpolated into a string with the following format:\n * \"RGBA(xxx, xxx, xxx, xx)\".\n */\n toRgbString() {\n const r = Math.round(this.r);\n const g = Math.round(this.g);\n const b = Math.round(this.b);\n return this.a === 1 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${this.roundA})`;\n }\n /**\n * Returns the object as a RGBA object.\n */\n toPercentageRgb() {\n const fmt = (x) => `${Math.round(bound01(x, 255) * 100)}%`;\n return {\n r: fmt(this.r),\n g: fmt(this.g),\n b: fmt(this.b),\n a: this.a,\n };\n }\n /**\n * Returns the RGBA relative values interpolated into a string\n */\n toPercentageRgbString() {\n const rnd = (x) => Math.round(bound01(x, 255) * 100);\n return this.a === 1\n ? `rgb(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%)`\n : `rgba(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%, ${this.roundA})`;\n }\n /**\n * The 'real' name of the color -if there is one.\n */\n toName() {\n if (this.a === 0) {\n return 'transparent';\n }\n if (this.a < 1) {\n return false;\n }\n const hex = '#' + rgbToHex(this.r, this.g, this.b, false);\n for (const [key, value] of Object.entries(names)) {\n if (hex === value) {\n return key;\n }\n }\n return false;\n }\n toString(format) {\n const formatSet = Boolean(format);\n format = format ?? this.format;\n let formattedString = false;\n const hasAlpha = this.a < 1 && this.a >= 0;\n const needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');\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 return formattedString || this.toHexString();\n }\n toNumber() {\n return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);\n }\n clone() {\n return new TinyColor(this.toString());\n }\n /**\n * Lighten the color a given amount. Providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n lighten(amount = 10) {\n const hsl = this.toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n }\n /**\n * Brighten the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n brighten(amount = 10) {\n const rgb = this.toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return new TinyColor(rgb);\n }\n /**\n * Darken the color a given amount, from 0 to 100.\n * Providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n darken(amount = 10) {\n const hsl = this.toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n }\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n tint(amount = 10) {\n return this.mix('white', amount);\n }\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n shade(amount = 10) {\n return this.mix('black', amount);\n }\n /**\n * Desaturate the color a given amount, from 0 to 100.\n * Providing 100 will is the same as calling greyscale\n * @param amount - valid between 1-100\n */\n desaturate(amount = 10) {\n const hsl = this.toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n }\n /**\n * Saturate the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n saturate(amount = 10) {\n const hsl = this.toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n }\n /**\n * Completely desaturates a color into greyscale.\n * Same as calling `desaturate(100)`\n */\n greyscale() {\n return this.desaturate(100);\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.\n */\n spin(amount) {\n const hsl = this.toHsl();\n const hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return new TinyColor(hsl);\n }\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n mix(color, amount = 50) {\n const rgb1 = this.toRgb();\n const rgb2 = new TinyColor(color).toRgb();\n const p = amount / 100;\n const 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 return new TinyColor(rgba);\n }\n analogous(results = 6, slices = 30) {\n const hsl = this.toHsl();\n const part = 360 / slices;\n const ret = [this];\n for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(new TinyColor(hsl));\n }\n return ret;\n }\n /**\n * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js\n */\n complement() {\n const hsl = this.toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return new TinyColor(hsl);\n }\n monochromatic(results = 6) {\n const hsv = this.toHsv();\n const { h } = hsv;\n const { s } = hsv;\n let { v } = hsv;\n const res = [];\n const modification = 1 / results;\n while (results--) {\n res.push(new TinyColor({ h, s, v }));\n v = (v + modification) % 1;\n }\n return res;\n }\n splitcomplement() {\n const hsl = this.toHsl();\n const { h } = hsl;\n return [\n this,\n new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n ];\n }\n /**\n * Compute how the color would appear on a background\n */\n onBackground(background) {\n const fg = this.toRgb();\n const bg = new TinyColor(background).toRgb();\n const alpha = fg.a + bg.a * (1 - fg.a);\n return new TinyColor({\n r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n a: alpha,\n });\n }\n /**\n * Alias for `polyad(3)`\n */\n triad() {\n return this.polyad(3);\n }\n /**\n * Alias for `polyad(4)`\n */\n tetrad() {\n return this.polyad(4);\n }\n /**\n * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)\n * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...\n */\n polyad(n) {\n const hsl = this.toHsl();\n const { h } = hsl;\n const result = [this];\n const increment = 360 / n;\n for (let i = 1; i < n; i++) {\n result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));\n }\n return result;\n }\n /**\n * compare color vs current color\n */\n equals(color) {\n return this.toRgbString() === new TinyColor(color).toRgbString();\n }\n}\n","// randomColor by David Merfield under the CC0 license\n// https://github.com/davidmerfield/randomColor/\nimport { TinyColor } from './index.js';\nexport function random(options = {}) {\n // Check if we need to generate multiple colors\n if (options.count !== undefined &&\n options.count !== null) {\n const totalColors = options.count;\n const colors = [];\n options.count = undefined;\n while (totalColors > colors.length) {\n // Since we're generating multiple colors,\n // incremement the seed. Otherwise we'd just\n // generate the same color each time...\n options.count = null;\n if (options.seed) {\n options.seed += 1;\n }\n colors.push(random(options));\n }\n options.count = totalColors;\n return colors;\n }\n // First we pick a hue (H)\n const h = pickHue(options.hue, options.seed);\n // Then use H to determine saturation (S)\n const s = pickSaturation(h, options);\n // Then use S and H to determine brightness (B).\n const v = pickBrightness(h, s, options);\n const res = { h, s, v };\n if (options.alpha !== undefined) {\n res.a = options.alpha;\n }\n // Then we return the HSB color in the desired format\n return new TinyColor(res);\n}\nfunction pickHue(hue, seed) {\n const hueRange = getHueRange(hue);\n let res = randomWithin(hueRange, seed);\n // Instead of storing red as two seperate ranges,\n // we group them, using negative numbers\n if (res < 0) {\n res = 360 + res;\n }\n return res;\n}\nfunction pickSaturation(hue, options) {\n if (options.hue === 'monochrome') {\n return 0;\n }\n if (options.luminosity === 'random') {\n return randomWithin([0, 100], options.seed);\n }\n const { saturationRange } = getColorInfo(hue);\n let sMin = saturationRange[0];\n let sMax = saturationRange[1];\n switch (options.luminosity) {\n case 'bright':\n sMin = 55;\n break;\n case 'dark':\n sMin = sMax - 10;\n break;\n case 'light':\n sMax = 55;\n break;\n default:\n break;\n }\n return randomWithin([sMin, sMax], options.seed);\n}\nfunction pickBrightness(H, S, options) {\n let bMin = getMinimumBrightness(H, S);\n let bMax = 100;\n switch (options.luminosity) {\n case 'dark':\n bMax = bMin + 20;\n break;\n case 'light':\n bMin = (bMax + bMin) / 2;\n break;\n case 'random':\n bMin = 0;\n bMax = 100;\n break;\n default:\n break;\n }\n return randomWithin([bMin, bMax], options.seed);\n}\nfunction getMinimumBrightness(H, S) {\n const { lowerBounds } = getColorInfo(H);\n for (let i = 0; i < lowerBounds.length - 1; i++) {\n const s1 = lowerBounds[i][0];\n const v1 = lowerBounds[i][1];\n const s2 = lowerBounds[i + 1][0];\n const v2 = lowerBounds[i + 1][1];\n if (S >= s1 && S <= s2) {\n const m = (v2 - v1) / (s2 - s1);\n const b = v1 - m * s1;\n return m * S + b;\n }\n }\n return 0;\n}\nfunction getHueRange(colorInput) {\n const num = parseInt(colorInput, 10);\n if (!Number.isNaN(num) && num < 360 && num > 0) {\n return [num, num];\n }\n if (typeof colorInput === 'string') {\n const namedColor = bounds.find(n => n.name === colorInput);\n if (namedColor) {\n const color = defineColor(namedColor);\n if (color.hueRange) {\n return color.hueRange;\n }\n }\n const parsed = new TinyColor(colorInput);\n if (parsed.isValid) {\n const hue = parsed.toHsv().h;\n return [hue, hue];\n }\n }\n return [0, 360];\n}\nfunction getColorInfo(hue) {\n // Maps red colors to make picking hue easier\n if (hue >= 334 && hue <= 360) {\n hue -= 360;\n }\n for (const bound of bounds) {\n const color = defineColor(bound);\n if (color.hueRange && hue >= color.hueRange[0] && hue <= color.hueRange[1]) {\n return color;\n }\n }\n throw Error('Color not found');\n}\nfunction randomWithin(range, seed) {\n if (seed === undefined) {\n return Math.floor(range[0] + Math.random() * (range[1] + 1 - range[0]));\n }\n // Seeded random algorithm from http://indiegamr.com/generate-repeatable-random-numbers-in-js/\n const max = range[1] || 1;\n const min = range[0] || 0;\n seed = (seed * 9301 + 49297) % 233280;\n const rnd = seed / 233280.0;\n return Math.floor(min + rnd * (max - min));\n}\nfunction defineColor(bound) {\n const sMin = bound.lowerBounds[0][0];\n const sMax = bound.lowerBounds[bound.lowerBounds.length - 1][0];\n const bMin = bound.lowerBounds[bound.lowerBounds.length - 1][1];\n const bMax = bound.lowerBounds[0][1];\n return {\n name: bound.name,\n hueRange: bound.hueRange,\n lowerBounds: bound.lowerBounds,\n saturationRange: [sMin, sMax],\n brightnessRange: [bMin, bMax],\n };\n}\n/**\n * @hidden\n */\nexport const bounds = [\n {\n name: 'monochrome',\n hueRange: null,\n lowerBounds: [\n [0, 0],\n [100, 0],\n ],\n },\n {\n name: 'red',\n hueRange: [-26, 18],\n lowerBounds: [\n [20, 100],\n [30, 92],\n [40, 89],\n [50, 85],\n [60, 78],\n [70, 70],\n [80, 60],\n [90, 55],\n [100, 50],\n ],\n },\n {\n name: 'orange',\n hueRange: [19, 46],\n lowerBounds: [\n [20, 100],\n [30, 93],\n [40, 88],\n [50, 86],\n [60, 85],\n [70, 70],\n [100, 70],\n ],\n },\n {\n name: 'yellow',\n hueRange: [47, 62],\n lowerBounds: [\n [25, 100],\n [40, 94],\n [50, 89],\n [60, 86],\n [70, 84],\n [80, 82],\n [90, 80],\n [100, 75],\n ],\n },\n {\n name: 'green',\n hueRange: [63, 178],\n lowerBounds: [\n [30, 100],\n [40, 90],\n [50, 85],\n [60, 81],\n [70, 74],\n [80, 64],\n [90, 50],\n [100, 40],\n ],\n },\n {\n name: 'blue',\n hueRange: [179, 257],\n lowerBounds: [\n [20, 100],\n [30, 86],\n [40, 80],\n [50, 74],\n [60, 60],\n [70, 52],\n [80, 44],\n [90, 39],\n [100, 35],\n ],\n },\n {\n name: 'purple',\n hueRange: [258, 282],\n lowerBounds: [\n [20, 100],\n [30, 87],\n [40, 79],\n [50, 70],\n [60, 65],\n [70, 59],\n [80, 52],\n [90, 45],\n [100, 42],\n ],\n },\n {\n name: 'pink',\n hueRange: [283, 334],\n lowerBounds: [\n [20, 100],\n [30, 90],\n [40, 86],\n [60, 84],\n [80, 80],\n [90, 75],\n [100, 73],\n ],\n },\n];\n","import { TinyColor } from './index.js';\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n/**\n * AKA `contrast`\n *\n * Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n */\nexport function readability(color1, color2) {\n const c1 = new TinyColor(color1);\n const c2 = new TinyColor(color2);\n return ((Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) /\n (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05));\n}\n/**\n * Ensure that foreground and background color combinations meet WCAG2 guidelines.\n * The third argument is an object.\n * the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n * the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n * If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n *\n * Example\n * ```ts\n * new TinyColor().isReadable('#000', '#111') => false\n * new TinyColor().isReadable('#000', '#111', { level: 'AA', size: 'large' }) => false\n * ```\n */\nexport function isReadable(color1, color2, wcag2 = { level: 'AA', size: 'small' }) {\n const readabilityLevel = readability(color1, color2);\n switch ((wcag2.level ?? 'AA') + (wcag2.size ?? 'small')) {\n case 'AAsmall':\n case 'AAAlarge':\n return readabilityLevel >= 4.5;\n case 'AAlarge':\n return readabilityLevel >= 3;\n case 'AAAsmall':\n return readabilityLevel >= 7;\n default:\n return false;\n }\n}\n/**\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 *\n * @param baseColor - the base color.\n * @param colorList - array of colors to pick the most readable one from.\n * @param args - and object with extra arguments\n *\n * Example\n * ```ts\n * new TinyColor().mostReadable('#123', ['#124\", \"#125'], { includeFallbackColors: false }).toHexString(); // \"#112255\"\n * new TinyColor().mostReadable('#123', ['#124\", \"#125'],{ includeFallbackColors: true }).toHexString(); // \"#ffffff\"\n * new TinyColor().mostReadable('#a8015a', [\"#faf3f3\"], { includeFallbackColors:true, level: 'AAA', size: 'large' }).toHexString(); // \"#faf3f3\"\n * new TinyColor().mostReadable('#a8015a', [\"#faf3f3\"], { includeFallbackColors:true, level: 'AAA', size: 'small' }).toHexString(); // \"#ffffff\"\n * ```\n */\nexport function mostReadable(baseColor, colorList, args = { includeFallbackColors: false, level: 'AA', size: 'small' }) {\n let bestColor = null;\n let bestScore = 0;\n const { includeFallbackColors, level, size } = args;\n for (const color of colorList) {\n const score = readability(baseColor, color);\n if (score > bestScore) {\n bestScore = score;\n bestColor = new TinyColor(color);\n }\n }\n if (isReadable(baseColor, bestColor, { level, size }) || !includeFallbackColors) {\n return bestColor;\n }\n args.includeFallbackColors = false;\n return mostReadable(baseColor, ['#fff', '#000'], args);\n}\n","import { names } from './css-color-names.js';\nimport { inputToRGB, isValidCSSUnit, stringInputToObject } from './format-input.js';\nimport { fromRatio, legacyRandom } from './from-ratio.js';\nimport { TinyColor } from './index.js';\nimport { random } from './random.js';\nimport { mostReadable, readability } from './readability.js';\nimport { toMsFilter } from './to-ms-filter.js';\nconst tinycolorumd = {\n TinyColor,\n readability,\n mostReadable,\n random,\n names,\n fromRatio,\n legacyRandom,\n toMsFilter,\n inputToRGB,\n stringInputToObject,\n isValidCSSUnit,\n};\nexport default tinycolorumd;\n","import { TinyColor } from './index.js';\nimport { convertToPercentage } from './util.js';\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\n */\nexport function fromRatio(ratio, opts) {\n const newColor = {\n r: convertToPercentage(ratio.r),\n g: convertToPercentage(ratio.g),\n b: convertToPercentage(ratio.b),\n };\n if (ratio.a !== undefined) {\n newColor.a = Number(ratio.a);\n }\n return new TinyColor(newColor, opts);\n}\n/** old random function */\nexport function legacyRandom() {\n return new TinyColor({\n r: Math.random(),\n g: Math.random(),\n b: Math.random(),\n });\n}\n","import { rgbaToArgbHex } from './conversion.js';\nimport { TinyColor } from './index.js';\n/**\n * Returns the color represented as a Microsoft filter for use in old versions of IE.\n */\nexport function toMsFilter(firstColor, secondColor) {\n const color = new TinyColor(firstColor);\n const hex8String = '#' + rgbaToArgbHex(color.r, color.g, color.b, color.a);\n let secondHex8String = hex8String;\n const gradientType = color.gradientType ? 'GradientType = 1, ' : '';\n if (secondColor) {\n const s = new TinyColor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s.r, s.g, s.b, s.a);\n }\n return `progid:DXImageTransform.Microsoft.gradient(${gradientType}startColorstr=${hex8String},endColorstr=${secondHex8String})`;\n}\n"],"names":["names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","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","goldenrod","gold","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavenderblush","lavender","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","bound01","n","max","indexOf","parseFloat","isOnePointZero","isPercent","isPercentage","Math","min","parseInt","String","abs","clamp01","val","boundAlpha","a","isNaN","convertToPercentage","Number","pad2","c","length","rgbToHsl","r","g","b","h","s","l","d","hue2rgb","p","q","t","rgbToHsv","v","rgbToHex","allow3Char","hex","round","toString","startsWith","charAt","join","rgbaToArgbHex","convertDecimalToHex","convertHexToDecimal","parseIntFromHex","inputToRGB","color","rgb","ok","format","stringInputToObject","isValidCSSUnit","substr","i","floor","f","mod","hsvToRgb","hslToRgb","Object","prototype","hasOwnProperty","call","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","matchers","RegExp","rgba","hsl","hsla","hsv","hsva","hex3","hex6","hex4","hex8","trim","toLowerCase","named","match","exec","test","TinyColor","constructor","opts","numberInputToObject","this","originalInput","roundA","gradientType","isValid","isDark","getBrightness","isLight","toRgb","getLuminance","R","G","B","RsRGB","GsRGB","BsRGB","pow","getAlpha","setAlpha","alpha","isMonochrome","toHsl","toHsv","toHsvString","toHslString","toHex","toHexString","toHex8","allow4Char","rgbaToHex","toHex8String","toHexShortString","allowShortChar","toRgbString","toPercentageRgb","fmt","x","toPercentageRgbString","rnd","toName","key","value","entries","formatSet","Boolean","formattedString","hasAlpha","toNumber","clone","lighten","amount","brighten","darken","tint","mix","shade","desaturate","saturate","greyscale","spin","hue","rgb1","rgb2","analogous","results","slices","part","ret","push","complement","monochromatic","res","modification","splitcomplement","onBackground","background","fg","bg","triad","polyad","tetrad","result","increment","equals","getColorInfo","bound","bounds","defineColor","hueRange","Error","randomWithin","range","seed","undefined","random","sMin","lowerBounds","sMax","bMin","bMax","name","saturationRange","brightnessRange","readability","color1","color2","c1","c2","tinycolorumd","mostReadable","baseColor","colorList","args","includeFallbackColors","level","size","bestColor","bestScore","score","wcag2","readabilityLevel","isReadable","options","count","totalColors","colors","colorInput","num","namedColor","find","parsed","getHueRange","pickHue","luminosity","pickSaturation","H","S","s1","v1","s2","v2","m","getMinimumBrightness","pickBrightness","fromRatio","ratio","newColor","legacyRandom","toMsFilter","firstColor","secondColor","hex8String","secondHex8String"],"mappings":"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"}
1
+ {"version":3,"file":"tinycolor.umd.min.js","sources":["../module/css-color-names.js","../module/util.js","../module/conversion.js","../module/format-input.js","../module/index.js","../module/random.js","../module/readability.js","../module/umd_api.js","../module/from-ratio.js","../module/to-ms-filter.js"],"sourcesContent":["// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json\n/**\n * @hidden\n */\nexport const names = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\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: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\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 lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\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: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\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: '#ff0000',\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: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","/**\n * Take input from [0, n] and return it as [0, 1]\n * @hidden\n */\nexport function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = '100%';\n }\n const isPercent = isPercentage(n);\n n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));\n // Automatically convert percentage into number\n if (isPercent) {\n n = parseInt(String(n * max), 10) / 100;\n }\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n // Convert into [0, 1] range if it isn't already\n if (max === 360) {\n // If n is a hue given in degrees,\n // wrap around out-of-range values into [0, 360] range\n // then convert into [0, 1].\n n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));\n }\n else {\n // If n not a hue given in degrees\n // Convert into [0, 1] range if it isn't already.\n n = (n % max) / parseFloat(String(max));\n }\n return n;\n}\n/**\n * Force a number between 0 and 1\n * @hidden\n */\nexport function clamp01(val) {\n return Math.min(1, Math.max(0, val));\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 * <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n * @hidden\n */\nexport function 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\n * @hidden\n */\nexport function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n}\n/**\n * Return a valid alpha value [0,1] with all invalid values being set to 1\n * @hidden\n */\nexport function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n/**\n * Replace a decimal with it's percentage value\n * @hidden\n */\nexport function convertToPercentage(n) {\n if (Number(n) <= 1) {\n return `${Number(n) * 100}%`;\n }\n return n;\n}\n/**\n * Force a hex value to have 2 characters\n * @hidden\n */\nexport function pad2(c) {\n return c.length === 1 ? '0' + c : String(c);\n}\n","import { bound01, pad2 } from './util.js';\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n/**\n * Handle bounds / percentage checking to conform to CSS color spec\n * <http://www.w3.org/TR/css3-color/>\n * *Assumes:* r, g, b in [0, 255] or [0, 1]\n * *Returns:* { r, g, b } in [0, 255]\n */\nexport function 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 * 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]\n */\nexport function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n if (max === min) {\n s = 0;\n h = 0; // achromatic\n }\n else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h, s, l };\n}\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * (6 * t);\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n/**\n * Converts an HSL color value to RGB.\n *\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]\n */\nexport function hslToRgb(h, s, l) {\n let r;\n let g;\n let b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n if (s === 0) {\n // achromatic\n g = l;\n b = l;\n r = l;\n }\n else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const 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 return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color value to HSV\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n * *Returns:* { h, s, v } in [0,1]\n */\nexport function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n const v = max;\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0; // achromatic\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h, s, v };\n}\n/**\n * Converts an HSV color value to RGB.\n *\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 */\nexport function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n const i = Math.floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const mod = i % 6;\n const r = [v, q, p, p, t, v][mod];\n const g = [t, v, v, q, p, p][mod];\n const b = [p, p, t, v, v, q][mod];\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color to hex\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255]\n * *Returns:* a 3 or 6 character hex\n */\nexport function rgbToHex(r, g, b, allow3Char) {\n const hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n // Return a 3 character hex if possible\n if (allow3Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color plus alpha transparency to hex\n *\n * *Assumes:* r, g, b are contained in the set [0, 255] and a in [0, 1]\n * *Returns:* a 4 or 8 character rgba hex\n */\n// eslint-disable-next-line max-params\nexport function rgbaToHex(r, g, b, a, allow4Char) {\n const hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n pad2(convertDecimalToHex(a)),\n ];\n // Return a 4 character hex if possible\n if (allow4Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1)) &&\n hex[3].startsWith(hex[3].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color to an ARGB Hex8 string\n * Rarely used, but required for \"toFilter()\"\n *\n * *Assumes:* r, g, b are contained in the set [0, 255] and a in [0, 1]\n * *Returns:* a 8 character argb hex\n */\nexport function rgbaToArgbHex(r, g, b, a) {\n const hex = [\n pad2(convertDecimalToHex(a)),\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n return hex.join('');\n}\n/**\n * Converts CMYK to RBG\n * Assumes c, m, y, k are in the set [0, 100]\n */\nexport function cmykToRgb(c, m, y, k) {\n const cConv = c / 100;\n const mConv = m / 100;\n const yConv = y / 100;\n const kConv = k / 100;\n const r = 255 * (1 - cConv) * (1 - kConv);\n const g = 255 * (1 - mConv) * (1 - kConv);\n const b = 255 * (1 - yConv) * (1 - kConv);\n return { r, g, b };\n}\nexport function rgbToCmyk(r, g, b) {\n let c = 1 - r / 255;\n let m = 1 - g / 255;\n let y = 1 - b / 255;\n let k = Math.min(c, m, y);\n if (k === 1) {\n c = 0;\n m = 0;\n y = 0;\n }\n else {\n c = ((c - k) / (1 - k)) * 100;\n m = ((m - k) / (1 - k)) * 100;\n y = ((y - k) / (1 - k)) * 100;\n }\n k *= 100;\n return {\n c: Math.round(c),\n m: Math.round(m),\n y: Math.round(y),\n k: Math.round(k),\n };\n}\n/** Converts a decimal to a hex value */\nexport function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n/** Converts a hex value to a decimal */\nexport function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\n/** Parse a base-16 hex value into a base-10 integer */\nexport function parseIntFromHex(val) {\n return parseInt(val, 16);\n}\nexport function numberInputToObject(color) {\n return {\n r: color >> 16,\n g: (color & 0xff00) >> 8,\n b: color & 0xff,\n };\n}\n","import { cmykToRgb, convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb, } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { boundAlpha, convertToPercentage } from './util.js';\n/**\n * Given a string or object, convert that input to RGB\n *\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 * \"cmyk(0, 20, 0, 0)\" or \"cmyk 0 20 0 0\"\n * ```\n */\nexport function inputToRGB(color) {\n let rgb = { r: 0, g: 0, b: 0 };\n let a = 1;\n let s = null;\n let v = null;\n let l = null;\n let ok = false;\n let format = false;\n if (typeof color === 'string') {\n color = stringInputToObject(color);\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 else if (isValidCSSUnit(color.c) &&\n isValidCSSUnit(color.m) &&\n isValidCSSUnit(color.y) &&\n isValidCSSUnit(color.k)) {\n rgb = cmykToRgb(color.c, color.m, color.y, color.k);\n ok = true;\n format = 'cmyk';\n }\n if (Object.prototype.hasOwnProperty.call(color, 'a')) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a,\n };\n}\n// <http://www.w3.org/TR/css3-values/#integers>\nconst CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// <http://www.w3.org/TR/css3-values/#number-value>\nconst CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\nconst CSS_UNIT = '(?:' + CSS_NUMBER + ')|(?:' + CSS_INTEGER + ')';\n// Actual matching.\n// Parentheses and commas are optional, but not required.\n// Whitespace can take the place of commas or opening paren\n// eslint-disable-next-line prettier/prettier\nconst PERMISSIVE_MATCH3 = '[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst PERMISSIVE_MATCH4 = \n// eslint-disable-next-line prettier/prettier\n'[\\\\s|\\\\(]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')[,|\\\\s]+(' + CSS_UNIT + ')\\\\s*\\\\)?';\nconst matchers = {\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 cmyk: new RegExp('cmyk' + 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 * 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}` or `{c, m, y, k}` or `{c, m, y, k, a}`\n */\nexport function stringInputToObject(color) {\n color = color.trim().toLowerCase();\n if (color.length === 0) {\n return false;\n }\n let 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 // 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 let match = matchers.rgb.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n match = matchers.rgba.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n match = matchers.hsl.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n match = matchers.hsla.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n match = matchers.hsv.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n match = matchers.hsva.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n match = matchers.cmyk.exec(color);\n if (match) {\n return {\n c: match[1],\n m: match[2],\n y: match[3],\n k: match[4],\n };\n }\n match = matchers.hex8.exec(color);\n if (match) {\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 match = matchers.hex6.exec(color);\n if (match) {\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 match = matchers.hex4.exec(color);\n if (match) {\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 match = matchers.hex3.exec(color);\n if (match) {\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 return false;\n}\n/**\n * Check to see if it looks like a CSS unit\n * (see `matchers` above for definition).\n */\nexport function isValidCSSUnit(color) {\n if (typeof color === 'number') {\n return !Number.isNaN(color);\n }\n return matchers.CSS_UNIT.test(color);\n}\n","import { numberInputToObject, rgbaToHex, rgbToCmyk, rgbToHex, rgbToHsl, rgbToHsv, } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { inputToRGB } from './format-input.js';\nimport { bound01, boundAlpha, clamp01 } from './util.js';\nexport class TinyColor {\n constructor(color = '', opts = {}) {\n // If input is already a tinycolor, return itself\n if (color instanceof TinyColor) {\n // eslint-disable-next-line no-constructor-return\n return color;\n }\n if (typeof color === 'number') {\n color = numberInputToObject(color);\n }\n this.originalInput = color;\n const 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 = Math.round(100 * this.a) / 100;\n this.format = opts.format ?? rgb.format;\n this.gradientType = opts.gradientType;\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) {\n this.r = Math.round(this.r);\n }\n if (this.g < 1) {\n this.g = Math.round(this.g);\n }\n if (this.b < 1) {\n this.b = Math.round(this.b);\n }\n this.isValid = rgb.ok;\n }\n isDark() {\n return this.getBrightness() < 128;\n }\n isLight() {\n return !this.isDark();\n }\n /**\n * Returns the perceived brightness of the color, from 0-255.\n */\n getBrightness() {\n // http://www.w3.org/TR/AERT#color-contrast\n const rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n }\n /**\n * Returns the perceived luminance of a color, from 0-1.\n */\n getLuminance() {\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n const rgb = this.toRgb();\n let R;\n let G;\n let B;\n const RsRGB = rgb.r / 255;\n const GsRGB = rgb.g / 255;\n const BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n }\n /**\n * Returns the alpha value of a color, from 0-1.\n */\n getAlpha() {\n return this.a;\n }\n /**\n * Sets the alpha value on the current color.\n *\n * @param alpha - The new alpha value. The accepted range is 0-1.\n */\n setAlpha(alpha) {\n this.a = boundAlpha(alpha);\n this.roundA = Math.round(100 * this.a) / 100;\n return this;\n }\n /**\n * Returns whether the color is monochrome.\n */\n isMonochrome() {\n const { s } = this.toHsl();\n return s === 0;\n }\n /**\n * Returns the object as a HSVA object.\n */\n toHsv() {\n const 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 /**\n * Returns the hsva values interpolated into a string with the following format:\n * \"hsva(xxx, xxx, xxx, xx)\".\n */\n toHsvString() {\n const hsv = rgbToHsv(this.r, this.g, this.b);\n const h = Math.round(hsv.h * 360);\n const s = Math.round(hsv.s * 100);\n const v = Math.round(hsv.v * 100);\n return this.a === 1 ? `hsv(${h}, ${s}%, ${v}%)` : `hsva(${h}, ${s}%, ${v}%, ${this.roundA})`;\n }\n /**\n * Returns the object as a HSLA object.\n */\n toHsl() {\n const 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 /**\n * Returns the hsla values interpolated into a string with the following format:\n * \"hsla(xxx, xxx, xxx, xx)\".\n */\n toHslString() {\n const hsl = rgbToHsl(this.r, this.g, this.b);\n const h = Math.round(hsl.h * 360);\n const s = Math.round(hsl.s * 100);\n const l = Math.round(hsl.l * 100);\n return this.a === 1 ? `hsl(${h}, ${s}%, ${l}%)` : `hsla(${h}, ${s}%, ${l}%, ${this.roundA})`;\n }\n /**\n * Returns the hex value of the color.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n toHex(allow3Char = false) {\n return rgbToHex(this.r, this.g, this.b, allow3Char);\n }\n /**\n * Returns the hex value of the color -with a # prefixed.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n toHexString(allow3Char = false) {\n return '#' + this.toHex(allow3Char);\n }\n /**\n * Returns the hex 8 value of the color.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n toHex8(allow4Char = false) {\n return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);\n }\n /**\n * Returns the hex 8 value of the color -with a # prefixed.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n toHex8String(allow4Char = false) {\n return '#' + this.toHex8(allow4Char);\n }\n /**\n * Returns the shorter hex value of the color depends on its alpha -with a # prefixed.\n * @param allowShortChar will shorten hex value to 3 or 4 char if possible\n */\n toHexShortString(allowShortChar = false) {\n return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);\n }\n /**\n * Returns the object as a RGBA object.\n */\n toRgb() {\n return {\n r: Math.round(this.r),\n g: Math.round(this.g),\n b: Math.round(this.b),\n a: this.a,\n };\n }\n /**\n * Returns the RGBA values interpolated into a string with the following format:\n * \"RGBA(xxx, xxx, xxx, xx)\".\n */\n toRgbString() {\n const r = Math.round(this.r);\n const g = Math.round(this.g);\n const b = Math.round(this.b);\n return this.a === 1 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${this.roundA})`;\n }\n /**\n * Returns the object as a RGBA object.\n */\n toPercentageRgb() {\n const fmt = (x) => `${Math.round(bound01(x, 255) * 100)}%`;\n return {\n r: fmt(this.r),\n g: fmt(this.g),\n b: fmt(this.b),\n a: this.a,\n };\n }\n /**\n * Returns the RGBA relative values interpolated into a string\n */\n toPercentageRgbString() {\n const rnd = (x) => Math.round(bound01(x, 255) * 100);\n return this.a === 1\n ? `rgb(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%)`\n : `rgba(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%, ${this.roundA})`;\n }\n toCmyk() {\n return {\n ...rgbToCmyk(this.r, this.g, this.b),\n };\n }\n toCmykString() {\n const { c, m, y, k } = rgbToCmyk(this.r, this.g, this.b);\n return `cmyk(${c}, ${m}, ${y}, ${k})`;\n }\n /**\n * The 'real' name of the color -if there is one.\n */\n toName() {\n if (this.a === 0) {\n return 'transparent';\n }\n if (this.a < 1) {\n return false;\n }\n const hex = '#' + rgbToHex(this.r, this.g, this.b, false);\n for (const [key, value] of Object.entries(names)) {\n if (hex === value) {\n return key;\n }\n }\n return false;\n }\n toString(format) {\n const formatSet = Boolean(format);\n format = format ?? this.format;\n let formattedString = false;\n const hasAlpha = this.a < 1 && this.a >= 0;\n const needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');\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 if (format === 'cmyk') {\n formattedString = this.toCmykString();\n }\n return formattedString || this.toHexString();\n }\n toNumber() {\n return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);\n }\n clone() {\n return new TinyColor(this.toString());\n }\n /**\n * Lighten the color a given amount. Providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n lighten(amount = 10) {\n const hsl = this.toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n }\n /**\n * Brighten the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n brighten(amount = 10) {\n const rgb = this.toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return new TinyColor(rgb);\n }\n /**\n * Darken the color a given amount, from 0 to 100.\n * Providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n darken(amount = 10) {\n const hsl = this.toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n }\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n tint(amount = 10) {\n return this.mix('white', amount);\n }\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n shade(amount = 10) {\n return this.mix('black', amount);\n }\n /**\n * Desaturate the color a given amount, from 0 to 100.\n * Providing 100 will is the same as calling greyscale\n * @param amount - valid between 1-100\n */\n desaturate(amount = 10) {\n const hsl = this.toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n }\n /**\n * Saturate the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n saturate(amount = 10) {\n const hsl = this.toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n }\n /**\n * Completely desaturates a color into greyscale.\n * Same as calling `desaturate(100)`\n */\n greyscale() {\n return this.desaturate(100);\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.\n */\n spin(amount) {\n const hsl = this.toHsl();\n const hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return new TinyColor(hsl);\n }\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n mix(color, amount = 50) {\n const rgb1 = this.toRgb();\n const rgb2 = new TinyColor(color).toRgb();\n const p = amount / 100;\n const 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 return new TinyColor(rgba);\n }\n analogous(results = 6, slices = 30) {\n const hsl = this.toHsl();\n const part = 360 / slices;\n const ret = [this];\n for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(new TinyColor(hsl));\n }\n return ret;\n }\n /**\n * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js\n */\n complement() {\n const hsl = this.toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return new TinyColor(hsl);\n }\n monochromatic(results = 6) {\n const hsv = this.toHsv();\n const { h } = hsv;\n const { s } = hsv;\n let { v } = hsv;\n const res = [];\n const modification = 1 / results;\n while (results--) {\n res.push(new TinyColor({ h, s, v }));\n v = (v + modification) % 1;\n }\n return res;\n }\n splitcomplement() {\n const hsl = this.toHsl();\n const { h } = hsl;\n return [\n this,\n new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n ];\n }\n /**\n * Compute how the color would appear on a background\n */\n onBackground(background) {\n const fg = this.toRgb();\n const bg = new TinyColor(background).toRgb();\n const alpha = fg.a + bg.a * (1 - fg.a);\n return new TinyColor({\n r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n a: alpha,\n });\n }\n /**\n * Alias for `polyad(3)`\n */\n triad() {\n return this.polyad(3);\n }\n /**\n * Alias for `polyad(4)`\n */\n tetrad() {\n return this.polyad(4);\n }\n /**\n * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)\n * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...\n */\n polyad(n) {\n const hsl = this.toHsl();\n const { h } = hsl;\n const result = [this];\n const increment = 360 / n;\n for (let i = 1; i < n; i++) {\n result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));\n }\n return result;\n }\n /**\n * compare color vs current color\n */\n equals(color) {\n const comparedColor = new TinyColor(color);\n /**\n * RGB and CMYK do not have the same color gamut, so a CMYK conversion will never be 100%.\n * This means we need to compare CMYK to CMYK to ensure accuracy of the equals function.\n */\n if (this.format === 'cmyk' || comparedColor.format === 'cmyk') {\n return this.toCmykString() === comparedColor.toCmykString();\n }\n return this.toRgbString() === comparedColor.toRgbString();\n }\n}\n","// randomColor by David Merfield under the CC0 license\n// https://github.com/davidmerfield/randomColor/\nimport { TinyColor } from './index.js';\nexport function random(options = {}) {\n // Check if we need to generate multiple colors\n if (options.count !== undefined &&\n options.count !== null) {\n const totalColors = options.count;\n const colors = [];\n options.count = undefined;\n while (totalColors > colors.length) {\n // Since we're generating multiple colors,\n // incremement the seed. Otherwise we'd just\n // generate the same color each time...\n options.count = null;\n if (options.seed) {\n options.seed += 1;\n }\n colors.push(random(options));\n }\n options.count = totalColors;\n return colors;\n }\n // First we pick a hue (H)\n const h = pickHue(options.hue, options.seed);\n // Then use H to determine saturation (S)\n const s = pickSaturation(h, options);\n // Then use S and H to determine brightness (B).\n const v = pickBrightness(h, s, options);\n const res = { h, s, v };\n if (options.alpha !== undefined) {\n res.a = options.alpha;\n }\n // Then we return the HSB color in the desired format\n return new TinyColor(res);\n}\nfunction pickHue(hue, seed) {\n const hueRange = getHueRange(hue);\n let res = randomWithin(hueRange, seed);\n // Instead of storing red as two seperate ranges,\n // we group them, using negative numbers\n if (res < 0) {\n res = 360 + res;\n }\n return res;\n}\nfunction pickSaturation(hue, options) {\n if (options.hue === 'monochrome') {\n return 0;\n }\n if (options.luminosity === 'random') {\n return randomWithin([0, 100], options.seed);\n }\n const { saturationRange } = getColorInfo(hue);\n let sMin = saturationRange[0];\n let sMax = saturationRange[1];\n switch (options.luminosity) {\n case 'bright':\n sMin = 55;\n break;\n case 'dark':\n sMin = sMax - 10;\n break;\n case 'light':\n sMax = 55;\n break;\n default:\n break;\n }\n return randomWithin([sMin, sMax], options.seed);\n}\nfunction pickBrightness(H, S, options) {\n let bMin = getMinimumBrightness(H, S);\n let bMax = 100;\n switch (options.luminosity) {\n case 'dark':\n bMax = bMin + 20;\n break;\n case 'light':\n bMin = (bMax + bMin) / 2;\n break;\n case 'random':\n bMin = 0;\n bMax = 100;\n break;\n default:\n break;\n }\n return randomWithin([bMin, bMax], options.seed);\n}\nfunction getMinimumBrightness(H, S) {\n const { lowerBounds } = getColorInfo(H);\n for (let i = 0; i < lowerBounds.length - 1; i++) {\n const s1 = lowerBounds[i][0];\n const v1 = lowerBounds[i][1];\n const s2 = lowerBounds[i + 1][0];\n const v2 = lowerBounds[i + 1][1];\n if (S >= s1 && S <= s2) {\n const m = (v2 - v1) / (s2 - s1);\n const b = v1 - m * s1;\n return m * S + b;\n }\n }\n return 0;\n}\nfunction getHueRange(colorInput) {\n const num = parseInt(colorInput, 10);\n if (!Number.isNaN(num) && num < 360 && num > 0) {\n return [num, num];\n }\n if (typeof colorInput === 'string') {\n const namedColor = bounds.find(n => n.name === colorInput);\n if (namedColor) {\n const color = defineColor(namedColor);\n if (color.hueRange) {\n return color.hueRange;\n }\n }\n const parsed = new TinyColor(colorInput);\n if (parsed.isValid) {\n const hue = parsed.toHsv().h;\n return [hue, hue];\n }\n }\n return [0, 360];\n}\nfunction getColorInfo(hue) {\n // Maps red colors to make picking hue easier\n if (hue >= 334 && hue <= 360) {\n hue -= 360;\n }\n for (const bound of bounds) {\n const color = defineColor(bound);\n if (color.hueRange && hue >= color.hueRange[0] && hue <= color.hueRange[1]) {\n return color;\n }\n }\n throw Error('Color not found');\n}\nfunction randomWithin(range, seed) {\n if (seed === undefined) {\n return Math.floor(range[0] + Math.random() * (range[1] + 1 - range[0]));\n }\n // Seeded random algorithm from http://indiegamr.com/generate-repeatable-random-numbers-in-js/\n const max = range[1] || 1;\n const min = range[0] || 0;\n seed = (seed * 9301 + 49297) % 233280;\n const rnd = seed / 233280.0;\n return Math.floor(min + rnd * (max - min));\n}\nfunction defineColor(bound) {\n const sMin = bound.lowerBounds[0][0];\n const sMax = bound.lowerBounds[bound.lowerBounds.length - 1][0];\n const bMin = bound.lowerBounds[bound.lowerBounds.length - 1][1];\n const bMax = bound.lowerBounds[0][1];\n return {\n name: bound.name,\n hueRange: bound.hueRange,\n lowerBounds: bound.lowerBounds,\n saturationRange: [sMin, sMax],\n brightnessRange: [bMin, bMax],\n };\n}\n/**\n * @hidden\n */\nexport const bounds = [\n {\n name: 'monochrome',\n hueRange: null,\n lowerBounds: [\n [0, 0],\n [100, 0],\n ],\n },\n {\n name: 'red',\n hueRange: [-26, 18],\n lowerBounds: [\n [20, 100],\n [30, 92],\n [40, 89],\n [50, 85],\n [60, 78],\n [70, 70],\n [80, 60],\n [90, 55],\n [100, 50],\n ],\n },\n {\n name: 'orange',\n hueRange: [19, 46],\n lowerBounds: [\n [20, 100],\n [30, 93],\n [40, 88],\n [50, 86],\n [60, 85],\n [70, 70],\n [100, 70],\n ],\n },\n {\n name: 'yellow',\n hueRange: [47, 62],\n lowerBounds: [\n [25, 100],\n [40, 94],\n [50, 89],\n [60, 86],\n [70, 84],\n [80, 82],\n [90, 80],\n [100, 75],\n ],\n },\n {\n name: 'green',\n hueRange: [63, 178],\n lowerBounds: [\n [30, 100],\n [40, 90],\n [50, 85],\n [60, 81],\n [70, 74],\n [80, 64],\n [90, 50],\n [100, 40],\n ],\n },\n {\n name: 'blue',\n hueRange: [179, 257],\n lowerBounds: [\n [20, 100],\n [30, 86],\n [40, 80],\n [50, 74],\n [60, 60],\n [70, 52],\n [80, 44],\n [90, 39],\n [100, 35],\n ],\n },\n {\n name: 'purple',\n hueRange: [258, 282],\n lowerBounds: [\n [20, 100],\n [30, 87],\n [40, 79],\n [50, 70],\n [60, 65],\n [70, 59],\n [80, 52],\n [90, 45],\n [100, 42],\n ],\n },\n {\n name: 'pink',\n hueRange: [283, 334],\n lowerBounds: [\n [20, 100],\n [30, 90],\n [40, 86],\n [60, 84],\n [80, 80],\n [90, 75],\n [100, 73],\n ],\n },\n];\n","import { TinyColor } from './index.js';\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n/**\n * AKA `contrast`\n *\n * Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n */\nexport function readability(color1, color2) {\n const c1 = new TinyColor(color1);\n const c2 = new TinyColor(color2);\n return ((Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) /\n (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05));\n}\n/**\n * Ensure that foreground and background color combinations meet WCAG2 guidelines.\n * The third argument is an object.\n * the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n * the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n * If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n *\n * Example\n * ```ts\n * new TinyColor().isReadable('#000', '#111') => false\n * new TinyColor().isReadable('#000', '#111', { level: 'AA', size: 'large' }) => false\n * ```\n */\nexport function isReadable(color1, color2, wcag2 = { level: 'AA', size: 'small' }) {\n const readabilityLevel = readability(color1, color2);\n switch ((wcag2.level ?? 'AA') + (wcag2.size ?? 'small')) {\n case 'AAsmall':\n case 'AAAlarge':\n return readabilityLevel >= 4.5;\n case 'AAlarge':\n return readabilityLevel >= 3;\n case 'AAAsmall':\n return readabilityLevel >= 7;\n default:\n return false;\n }\n}\n/**\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 *\n * @param baseColor - the base color.\n * @param colorList - array of colors to pick the most readable one from.\n * @param args - and object with extra arguments\n *\n * Example\n * ```ts\n * new TinyColor().mostReadable('#123', ['#124\", \"#125'], { includeFallbackColors: false }).toHexString(); // \"#112255\"\n * new TinyColor().mostReadable('#123', ['#124\", \"#125'],{ includeFallbackColors: true }).toHexString(); // \"#ffffff\"\n * new TinyColor().mostReadable('#a8015a', [\"#faf3f3\"], { includeFallbackColors:true, level: 'AAA', size: 'large' }).toHexString(); // \"#faf3f3\"\n * new TinyColor().mostReadable('#a8015a', [\"#faf3f3\"], { includeFallbackColors:true, level: 'AAA', size: 'small' }).toHexString(); // \"#ffffff\"\n * ```\n */\nexport function mostReadable(baseColor, colorList, args = { includeFallbackColors: false, level: 'AA', size: 'small' }) {\n let bestColor = null;\n let bestScore = 0;\n const { includeFallbackColors, level, size } = args;\n for (const color of colorList) {\n const score = readability(baseColor, color);\n if (score > bestScore) {\n bestScore = score;\n bestColor = new TinyColor(color);\n }\n }\n if (isReadable(baseColor, bestColor, { level, size }) || !includeFallbackColors) {\n return bestColor;\n }\n args.includeFallbackColors = false;\n return mostReadable(baseColor, ['#fff', '#000'], args);\n}\n","import { names } from './css-color-names.js';\nimport { inputToRGB, isValidCSSUnit, stringInputToObject } from './format-input.js';\nimport { fromRatio, legacyRandom } from './from-ratio.js';\nimport { TinyColor } from './index.js';\nimport { random } from './random.js';\nimport { mostReadable, readability } from './readability.js';\nimport { toMsFilter } from './to-ms-filter.js';\nconst tinycolorumd = {\n TinyColor,\n readability,\n mostReadable,\n random,\n names,\n fromRatio,\n legacyRandom,\n toMsFilter,\n inputToRGB,\n stringInputToObject,\n isValidCSSUnit,\n};\nexport default tinycolorumd;\n","import { TinyColor } from './index.js';\nimport { convertToPercentage } from './util.js';\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\n */\nexport function fromRatio(ratio, opts) {\n const newColor = {\n r: convertToPercentage(ratio.r),\n g: convertToPercentage(ratio.g),\n b: convertToPercentage(ratio.b),\n };\n if (ratio.a !== undefined) {\n newColor.a = Number(ratio.a);\n }\n return new TinyColor(newColor, opts);\n}\n/** old random function */\nexport function legacyRandom() {\n return new TinyColor({\n r: Math.random(),\n g: Math.random(),\n b: Math.random(),\n });\n}\n","import { rgbaToArgbHex } from './conversion.js';\nimport { TinyColor } from './index.js';\n/**\n * Returns the color represented as a Microsoft filter for use in old versions of IE.\n */\nexport function toMsFilter(firstColor, secondColor) {\n const color = new TinyColor(firstColor);\n const hex8String = '#' + rgbaToArgbHex(color.r, color.g, color.b, color.a);\n let secondHex8String = hex8String;\n const gradientType = color.gradientType ? 'GradientType = 1, ' : '';\n if (secondColor) {\n const s = new TinyColor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s.r, s.g, s.b, s.a);\n }\n return `progid:DXImageTransform.Microsoft.gradient(${gradientType}startColorstr=${hex8String},endColorstr=${secondHex8String})`;\n}\n"],"names":["names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","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","goldenrod","gold","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavenderblush","lavender","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","bound01","n","max","indexOf","parseFloat","isOnePointZero","isPercent","isPercentage","Math","min","parseInt","String","abs","clamp01","val","boundAlpha","a","isNaN","convertToPercentage","Number","pad2","c","length","rgbToHsl","r","g","b","h","s","l","d","hue2rgb","p","q","t","rgbToHsv","v","rgbToHex","allow3Char","hex","round","toString","startsWith","charAt","join","rgbaToArgbHex","convertDecimalToHex","rgbToCmyk","m","y","k","convertHexToDecimal","parseIntFromHex","inputToRGB","color","rgb","ok","format","stringInputToObject","isValidCSSUnit","substr","i","floor","f","mod","hsvToRgb","hslToRgb","kConv","cmykToRgb","Object","prototype","hasOwnProperty","call","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","matchers","RegExp","rgba","hsl","hsla","hsv","hsva","cmyk","hex3","hex6","hex4","hex8","trim","toLowerCase","named","match","exec","test","TinyColor","constructor","opts","numberInputToObject","this","originalInput","roundA","gradientType","isValid","isDark","getBrightness","isLight","toRgb","getLuminance","R","G","B","RsRGB","GsRGB","BsRGB","pow","getAlpha","setAlpha","alpha","isMonochrome","toHsl","toHsv","toHsvString","toHslString","toHex","toHexString","toHex8","allow4Char","rgbaToHex","toHex8String","toHexShortString","allowShortChar","toRgbString","toPercentageRgb","fmt","x","toPercentageRgbString","rnd","toCmyk","toCmykString","toName","key","value","entries","formatSet","Boolean","formattedString","hasAlpha","toNumber","clone","lighten","amount","brighten","darken","tint","mix","shade","desaturate","saturate","greyscale","spin","hue","rgb1","rgb2","analogous","results","slices","part","ret","push","complement","monochromatic","res","modification","splitcomplement","onBackground","background","fg","bg","triad","polyad","tetrad","result","increment","equals","comparedColor","getColorInfo","bound","bounds","defineColor","hueRange","Error","randomWithin","range","seed","undefined","random","sMin","lowerBounds","sMax","bMin","bMax","name","saturationRange","brightnessRange","readability","color1","color2","c1","c2","tinycolorumd","mostReadable","baseColor","colorList","args","includeFallbackColors","level","size","bestColor","bestScore","score","wcag2","readabilityLevel","isReadable","options","count","totalColors","colors","colorInput","num","namedColor","find","parsed","getHueRange","pickHue","luminosity","pickSaturation","H","S","s1","v1","s2","v2","getMinimumBrightness","pickBrightness","fromRatio","ratio","newColor","legacyRandom","toMsFilter","firstColor","secondColor","hex8String","secondHex8String"],"mappings":"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"}
@@ -55,6 +55,21 @@ export declare function rgbaToHex(r: number, g: number, b: number, a: number, al
55
55
  * *Returns:* a 8 character argb hex
56
56
  */
57
57
  export declare function rgbaToArgbHex(r: number, g: number, b: number, a: number): string;
58
+ /**
59
+ * Converts CMYK to RBG
60
+ * Assumes c, m, y, k are in the set [0, 100]
61
+ */
62
+ export declare function cmykToRgb(c: number, m: number, y: number, k: number): {
63
+ r: number;
64
+ g: number;
65
+ b: number;
66
+ };
67
+ export declare function rgbToCmyk(r: number, g: number, b: number): {
68
+ c: number;
69
+ m: number;
70
+ y: number;
71
+ k: number;
72
+ };
58
73
  /** Converts a decimal to a hex value */
59
74
  export declare function convertDecimalToHex(d: string | number): string;
60
75
  /** Converts a hex value to a decimal */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.numberInputToObject = exports.parseIntFromHex = exports.convertHexToDecimal = exports.convertDecimalToHex = exports.rgbaToArgbHex = exports.rgbaToHex = exports.rgbToHex = exports.hsvToRgb = exports.rgbToHsv = exports.hslToRgb = exports.rgbToHsl = exports.rgbToRgb = void 0;
3
+ exports.numberInputToObject = exports.parseIntFromHex = exports.convertHexToDecimal = exports.convertDecimalToHex = exports.rgbToCmyk = exports.cmykToRgb = exports.rgbaToArgbHex = exports.rgbaToHex = exports.rgbToHex = exports.hsvToRgb = exports.rgbToHsv = exports.hslToRgb = exports.rgbToHsl = exports.rgbToRgb = void 0;
4
4
  const util_js_1 = require("./util.js");
5
5
  // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
6
6
  // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
@@ -228,6 +228,45 @@ function rgbaToArgbHex(r, g, b, a) {
228
228
  return hex.join('');
229
229
  }
230
230
  exports.rgbaToArgbHex = rgbaToArgbHex;
231
+ /**
232
+ * Converts CMYK to RBG
233
+ * Assumes c, m, y, k are in the set [0, 100]
234
+ */
235
+ function cmykToRgb(c, m, y, k) {
236
+ const cConv = c / 100;
237
+ const mConv = m / 100;
238
+ const yConv = y / 100;
239
+ const kConv = k / 100;
240
+ const r = 255 * (1 - cConv) * (1 - kConv);
241
+ const g = 255 * (1 - mConv) * (1 - kConv);
242
+ const b = 255 * (1 - yConv) * (1 - kConv);
243
+ return { r, g, b };
244
+ }
245
+ exports.cmykToRgb = cmykToRgb;
246
+ function rgbToCmyk(r, g, b) {
247
+ let c = 1 - r / 255;
248
+ let m = 1 - g / 255;
249
+ let y = 1 - b / 255;
250
+ let k = Math.min(c, m, y);
251
+ if (k === 1) {
252
+ c = 0;
253
+ m = 0;
254
+ y = 0;
255
+ }
256
+ else {
257
+ c = ((c - k) / (1 - k)) * 100;
258
+ m = ((m - k) / (1 - k)) * 100;
259
+ y = ((y - k) / (1 - k)) * 100;
260
+ }
261
+ k *= 100;
262
+ return {
263
+ c: Math.round(c),
264
+ m: Math.round(m),
265
+ y: Math.round(y),
266
+ k: Math.round(k),
267
+ };
268
+ }
269
+ exports.rgbToCmyk = rgbToCmyk;
231
270
  /** Converts a decimal to a hex value */
232
271
  function convertDecimalToHex(d) {
233
272
  return Math.round(parseFloat(d) * 255).toString(16);
@@ -1,4 +1,4 @@
1
- import { HSL, HSLA, HSV, HSVA, RGB, RGBA } from './interfaces.js';
1
+ import { CMYK, HSL, HSLA, HSV, HSVA, RGB, RGBA } from './interfaces.js';
2
2
  /**
3
3
  * Given a string or object, convert that input to RGB
4
4
  *
@@ -15,9 +15,10 @@ import { HSL, HSLA, HSV, HSVA, RGB, RGBA } from './interfaces.js';
15
15
  * "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
16
16
  * "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
17
17
  * "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
18
+ * "cmyk(0, 20, 0, 0)" or "cmyk 0 20 0 0"
18
19
  * ```
19
20
  */
20
- export declare function inputToRGB(color: string | RGB | RGBA | HSL | HSLA | HSV | HSVA | any): {
21
+ export declare function inputToRGB(color: string | RGB | RGBA | HSL | HSLA | HSV | HSVA | CMYK | any): {
21
22
  ok: boolean;
22
23
  format: any;
23
24
  r: number;
@@ -27,7 +28,7 @@ export declare function inputToRGB(color: string | RGB | RGBA | HSL | HSLA | HSV
27
28
  };
28
29
  /**
29
30
  * Permissive string parsing. Take in a number of formats, and output an object
30
- * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
31
+ * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` or `{c, m, y, k}` or `{c, m, y, k, a}`
31
32
  */
32
33
  export declare function stringInputToObject(color: string): any;
33
34
  /**
@@ -20,6 +20,7 @@ const util_js_1 = require("./util.js");
20
20
  * "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
21
21
  * "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
22
22
  * "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
23
+ * "cmyk(0, 20, 0, 0)" or "cmyk 0 20 0 0"
23
24
  * ```
24
25
  */
25
26
  function inputToRGB(color) {
@@ -53,6 +54,14 @@ function inputToRGB(color) {
53
54
  ok = true;
54
55
  format = 'hsl';
55
56
  }
57
+ else if (isValidCSSUnit(color.c) &&
58
+ isValidCSSUnit(color.m) &&
59
+ isValidCSSUnit(color.y) &&
60
+ isValidCSSUnit(color.k)) {
61
+ rgb = (0, conversion_js_1.cmykToRgb)(color.c, color.m, color.y, color.k);
62
+ ok = true;
63
+ format = 'cmyk';
64
+ }
56
65
  if (Object.prototype.hasOwnProperty.call(color, 'a')) {
57
66
  a = color.a;
58
67
  }
@@ -90,6 +99,7 @@ const matchers = {
90
99
  hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),
91
100
  hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),
92
101
  hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),
102
+ cmyk: new RegExp('cmyk' + PERMISSIVE_MATCH4),
93
103
  hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
94
104
  hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
95
105
  hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
@@ -97,7 +107,7 @@ const matchers = {
97
107
  };
98
108
  /**
99
109
  * Permissive string parsing. Take in a number of formats, and output an object
100
- * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
110
+ * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` or `{c, m, y, k}` or `{c, m, y, k, a}`
101
111
  */
102
112
  function stringInputToObject(color) {
103
113
  color = color.trim().toLowerCase();
@@ -140,6 +150,15 @@ function stringInputToObject(color) {
140
150
  if (match) {
141
151
  return { h: match[1], s: match[2], v: match[3], a: match[4] };
142
152
  }
153
+ match = matchers.cmyk.exec(color);
154
+ if (match) {
155
+ return {
156
+ c: match[1],
157
+ m: match[2],
158
+ y: match[3],
159
+ k: match[4],
160
+ };
161
+ }
143
162
  match = matchers.hex8.exec(color);
144
163
  if (match) {
145
164
  return {
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { HSL, HSLA, HSV, HSVA, Numberify, RGB, RGBA } from './interfaces.js';
1
+ import { CMYK, HSL, HSLA, HSV, HSVA, Numberify, RGB, RGBA } from './interfaces.js';
2
2
  export interface TinyColorOptions {
3
3
  format: string;
4
4
  gradientType: string;
5
5
  }
6
- export type ColorInput = string | number | RGB | RGBA | HSL | HSLA | HSV | HSVA | TinyColor;
7
- export type ColorFormats = 'rgb' | 'prgb' | 'hex' | 'hex3' | 'hex4' | 'hex6' | 'hex8' | 'name' | 'hsl' | 'hsv';
6
+ export type ColorInput = string | number | RGB | RGBA | HSL | HSLA | HSV | HSVA | CMYK | TinyColor;
7
+ export type ColorFormats = 'rgb' | 'prgb' | 'hex' | 'hex3' | 'hex4' | 'hex6' | 'hex8' | 'name' | 'hsl' | 'hsv' | 'cmyk';
8
8
  export declare class TinyColor {
9
9
  /** red */
10
10
  r: number;
@@ -108,6 +108,8 @@ export declare class TinyColor {
108
108
  * Returns the RGBA relative values interpolated into a string
109
109
  */
110
110
  toPercentageRgbString(): string;
111
+ toCmyk(): Numberify<CMYK>;
112
+ toCmykString(): string;
111
113
  /**
112
114
  * The 'real' name of the color -if there is one.
113
115
  */
package/dist/index.js CHANGED
@@ -225,6 +225,15 @@ class TinyColor {
225
225
  ? `rgb(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%)`
226
226
  : `rgba(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%, ${this.roundA})`;
227
227
  }
228
+ toCmyk() {
229
+ return {
230
+ ...(0, conversion_js_1.rgbToCmyk)(this.r, this.g, this.b),
231
+ };
232
+ }
233
+ toCmykString() {
234
+ const { c, m, y, k } = (0, conversion_js_1.rgbToCmyk)(this.r, this.g, this.b);
235
+ return `cmyk(${c}, ${m}, ${y}, ${k})`;
236
+ }
228
237
  /**
229
238
  * The 'real' name of the color -if there is one.
230
239
  */
@@ -284,6 +293,9 @@ class TinyColor {
284
293
  if (format === 'hsv') {
285
294
  formattedString = this.toHsvString();
286
295
  }
296
+ if (format === 'cmyk') {
297
+ formattedString = this.toCmykString();
298
+ }
287
299
  return formattedString || this.toHexString();
288
300
  }
289
301
  toNumber() {
@@ -478,7 +490,15 @@ class TinyColor {
478
490
  * compare color vs current color
479
491
  */
480
492
  equals(color) {
481
- return this.toRgbString() === new TinyColor(color).toRgbString();
493
+ const comparedColor = new TinyColor(color);
494
+ /**
495
+ * RGB and CMYK do not have the same color gamut, so a CMYK conversion will never be 100%.
496
+ * This means we need to compare CMYK to CMYK to ensure accuracy of the equals function.
497
+ */
498
+ if (this.format === 'cmyk' || comparedColor.format === 'cmyk') {
499
+ return this.toCmykString() === comparedColor.toCmykString();
500
+ }
501
+ return this.toRgbString() === comparedColor.toRgbString();
482
502
  }
483
503
  }
484
504
  exports.TinyColor = TinyColor;
@@ -44,3 +44,14 @@ export interface HSV {
44
44
  export interface HSVA extends HSV {
45
45
  a: number;
46
46
  }
47
+ /**
48
+ * The CMYK color model is a subtractive color model used in the printing process.
49
+ * It described four ink palettes: Cyan, Magenta, Yellow, and Black.
50
+ * @link https://en.wikipedia.org/wiki/CMYK_color_model
51
+ */
52
+ export interface CMYK {
53
+ c: number | string;
54
+ m: number | string;
55
+ y: number | string;
56
+ k: number | string;
57
+ }
@@ -217,6 +217,43 @@ export function rgbaToArgbHex(r, g, b, a) {
217
217
  ];
218
218
  return hex.join('');
219
219
  }
220
+ /**
221
+ * Converts CMYK to RBG
222
+ * Assumes c, m, y, k are in the set [0, 100]
223
+ */
224
+ export function cmykToRgb(c, m, y, k) {
225
+ const cConv = c / 100;
226
+ const mConv = m / 100;
227
+ const yConv = y / 100;
228
+ const kConv = k / 100;
229
+ const r = 255 * (1 - cConv) * (1 - kConv);
230
+ const g = 255 * (1 - mConv) * (1 - kConv);
231
+ const b = 255 * (1 - yConv) * (1 - kConv);
232
+ return { r, g, b };
233
+ }
234
+ export function rgbToCmyk(r, g, b) {
235
+ let c = 1 - r / 255;
236
+ let m = 1 - g / 255;
237
+ let y = 1 - b / 255;
238
+ let k = Math.min(c, m, y);
239
+ if (k === 1) {
240
+ c = 0;
241
+ m = 0;
242
+ y = 0;
243
+ }
244
+ else {
245
+ c = ((c - k) / (1 - k)) * 100;
246
+ m = ((m - k) / (1 - k)) * 100;
247
+ y = ((y - k) / (1 - k)) * 100;
248
+ }
249
+ k *= 100;
250
+ return {
251
+ c: Math.round(c),
252
+ m: Math.round(m),
253
+ y: Math.round(y),
254
+ k: Math.round(k),
255
+ };
256
+ }
220
257
  /** Converts a decimal to a hex value */
221
258
  export function convertDecimalToHex(d) {
222
259
  return Math.round(parseFloat(d) * 255).toString(16);
@@ -1,4 +1,4 @@
1
- import { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb, } from './conversion.js';
1
+ import { cmykToRgb, convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb, } from './conversion.js';
2
2
  import { names } from './css-color-names.js';
3
3
  import { boundAlpha, convertToPercentage } from './util.js';
4
4
  /**
@@ -17,6 +17,7 @@ import { boundAlpha, convertToPercentage } from './util.js';
17
17
  * "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
18
18
  * "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
19
19
  * "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
20
+ * "cmyk(0, 20, 0, 0)" or "cmyk 0 20 0 0"
20
21
  * ```
21
22
  */
22
23
  export function inputToRGB(color) {
@@ -50,6 +51,14 @@ export function inputToRGB(color) {
50
51
  ok = true;
51
52
  format = 'hsl';
52
53
  }
54
+ else if (isValidCSSUnit(color.c) &&
55
+ isValidCSSUnit(color.m) &&
56
+ isValidCSSUnit(color.y) &&
57
+ isValidCSSUnit(color.k)) {
58
+ rgb = cmykToRgb(color.c, color.m, color.y, color.k);
59
+ ok = true;
60
+ format = 'cmyk';
61
+ }
53
62
  if (Object.prototype.hasOwnProperty.call(color, 'a')) {
54
63
  a = color.a;
55
64
  }
@@ -86,6 +95,7 @@ const matchers = {
86
95
  hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),
87
96
  hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),
88
97
  hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),
98
+ cmyk: new RegExp('cmyk' + PERMISSIVE_MATCH4),
89
99
  hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
90
100
  hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
91
101
  hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
@@ -93,7 +103,7 @@ const matchers = {
93
103
  };
94
104
  /**
95
105
  * Permissive string parsing. Take in a number of formats, and output an object
96
- * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
106
+ * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` or `{c, m, y, k}` or `{c, m, y, k, a}`
97
107
  */
98
108
  export function stringInputToObject(color) {
99
109
  color = color.trim().toLowerCase();
@@ -136,6 +146,15 @@ export function stringInputToObject(color) {
136
146
  if (match) {
137
147
  return { h: match[1], s: match[2], v: match[3], a: match[4] };
138
148
  }
149
+ match = matchers.cmyk.exec(color);
150
+ if (match) {
151
+ return {
152
+ c: match[1],
153
+ m: match[2],
154
+ y: match[3],
155
+ k: match[4],
156
+ };
157
+ }
139
158
  match = matchers.hex8.exec(color);
140
159
  if (match) {
141
160
  return {
@@ -1,4 +1,4 @@
1
- import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion.js';
1
+ import { numberInputToObject, rgbaToHex, rgbToCmyk, rgbToHex, rgbToHsl, rgbToHsv, } from './conversion.js';
2
2
  import { names } from './css-color-names.js';
3
3
  import { inputToRGB } from './format-input.js';
4
4
  import { bound01, boundAlpha, clamp01 } from './util.js';
@@ -222,6 +222,15 @@ export class TinyColor {
222
222
  ? `rgb(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%)`
223
223
  : `rgba(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%, ${this.roundA})`;
224
224
  }
225
+ toCmyk() {
226
+ return {
227
+ ...rgbToCmyk(this.r, this.g, this.b),
228
+ };
229
+ }
230
+ toCmykString() {
231
+ const { c, m, y, k } = rgbToCmyk(this.r, this.g, this.b);
232
+ return `cmyk(${c}, ${m}, ${y}, ${k})`;
233
+ }
225
234
  /**
226
235
  * The 'real' name of the color -if there is one.
227
236
  */
@@ -281,6 +290,9 @@ export class TinyColor {
281
290
  if (format === 'hsv') {
282
291
  formattedString = this.toHsvString();
283
292
  }
293
+ if (format === 'cmyk') {
294
+ formattedString = this.toCmykString();
295
+ }
284
296
  return formattedString || this.toHexString();
285
297
  }
286
298
  toNumber() {
@@ -475,6 +487,14 @@ export class TinyColor {
475
487
  * compare color vs current color
476
488
  */
477
489
  equals(color) {
478
- return this.toRgbString() === new TinyColor(color).toRgbString();
490
+ const comparedColor = new TinyColor(color);
491
+ /**
492
+ * RGB and CMYK do not have the same color gamut, so a CMYK conversion will never be 100%.
493
+ * This means we need to compare CMYK to CMYK to ensure accuracy of the equals function.
494
+ */
495
+ if (this.format === 'cmyk' || comparedColor.format === 'cmyk') {
496
+ return this.toCmykString() === comparedColor.toCmykString();
497
+ }
498
+ return this.toRgbString() === comparedColor.toRgbString();
479
499
  }
480
500
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ctrl/tinycolor",
3
- "version": "4.0.4",
3
+ "version": "4.1.0",
4
4
  "description": "Fast, small color manipulation and conversion for JavaScript",
5
5
  "author": "Scott Cooper <scttcper@gmail.com>",
6
6
  "publishConfig": {