From 662277096f915e0ce59214bf2555832f23b44d32 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 9 Aug 2024 10:42:03 +0800 Subject: [PATCH] pref: optimize test (#341) * refactor: use tsup * chore: add license * refactor: use build file to test * chore: update * chore: test adjustment * test: alias chroma-js * chore: lint update * chore: update * ci: add test ci * chore: update * ci: test windows different * ci: patch windows * chore: update regex * chore: abandon tsup * chore: update * chore: update * chore: remove ci * chore: update --------- Co-authored-by: Chris --- .gitignore | 5 - dist/chroma-light.cjs | 27 ++-- dist/chroma-light.min.cjs | 2 +- eslint.config.mjs | 3 +- index-light.js | 8 +- package.json | 9 +- pnpm-lock.yaml | 167 +++++++--------------- test/alpha.test.js | 2 +- test/analyze.test.js | 4 +- test/autodetect.test.js | 2 +- test/average.test.js | 24 ++-- test/bezier.test.js | 14 +- test/blend.test.js | 12 +- test/color.test.js | 2 +- test/contrast.test.js | 2 +- test/converters.test.js | 2 +- test/cubehelix.test.js | 2 +- test/delta-e.test.js | 5 +- test/{docs.test.js => docs/index.test.js} | 18 ++- test/{ => io}/cmyk2rgb.test.js | 3 +- test/{ => io}/css2rgb.test.js | 2 +- test/{ => io}/hcg2rgb.test.js | 2 +- test/{ => io}/hex2rgb.test.js | 78 ++++++++-- test/{ => io}/hsi2rgb.test.js | 2 +- test/{ => io}/hsl2rgb.test.js | 20 ++- test/{ => io}/hsv2rgb.test.js | 2 +- test/{ => io}/lab2lch.test.js | 20 ++- test/{ => io}/lab2rgb.test.js | 4 +- test/{ => io}/lch2lab.test.js | 20 ++- test/{ => io}/lch2rgb.test.js | 4 +- test/{ => io}/num2rgb.test.js | 2 +- test/{ => io}/oklab2rgb.test.js | 4 +- test/{ => io}/oklch2rgb.test.js | 29 +++- test/{ => io}/rgb2cmyk.test.js | 2 +- test/{ => io}/rgb2css.test.js | 14 +- test/{ => io}/rgb2hex.test.js | 2 +- test/{ => io}/rgb2hsi.test.js | 2 +- test/{ => io}/rgb2hsv.test.js | 2 +- test/{ => io}/rgb2lab.test.js | 2 +- test/{ => io}/rgb2lch.test.js | 2 +- test/{ => io}/rgb2oklab.test.js | 2 +- test/{ => io}/rgb2oklch.test.js | 6 +- test/lch.test.js | 2 +- test/luminance.test.js | 2 +- test/manipulate.test.js | 2 +- test/misc.test.js | 2 +- test/mix.test.js | 2 +- test/num.test.js | 2 +- test/premultiply.test.js | 2 +- test/random.test.js | 2 +- test/scale.lcorrection.test.js | 18 +-- test/scales.test.js | 5 +- test/valid.test.js | 8 +- vitest.config.mjs | 13 ++ 54 files changed, 345 insertions(+), 251 deletions(-) rename test/{docs.test.js => docs/index.test.js} (51%) rename test/{ => io}/cmyk2rgb.test.js (96%) rename test/{ => io}/css2rgb.test.js (96%) rename test/{ => io}/hcg2rgb.test.js (96%) rename test/{ => io}/hex2rgb.test.js (60%) rename test/{ => io}/hsi2rgb.test.js (96%) rename test/{ => io}/hsl2rgb.test.js (69%) rename test/{ => io}/hsv2rgb.test.js (94%) rename test/{ => io}/lab2lch.test.js (77%) rename test/{ => io}/lab2rgb.test.js (92%) rename test/{ => io}/lch2lab.test.js (77%) rename test/{ => io}/lch2rgb.test.js (94%) rename test/{ => io}/num2rgb.test.js (94%) rename test/{ => io}/oklab2rgb.test.js (93%) rename test/{ => io}/oklch2rgb.test.js (63%) rename test/{ => io}/rgb2cmyk.test.js (93%) rename test/{ => io}/rgb2css.test.js (80%) rename test/{ => io}/rgb2hex.test.js (96%) rename test/{ => io}/rgb2hsi.test.js (96%) rename test/{ => io}/rgb2hsv.test.js (95%) rename test/{ => io}/rgb2lab.test.js (96%) rename test/{ => io}/rgb2lch.test.js (96%) rename test/{ => io}/rgb2oklab.test.js (96%) rename test/{ => io}/rgb2oklch.test.js (92%) create mode 100644 vitest.config.mjs diff --git a/.gitignore b/.gitignore index e48be50c..04d3d9ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,5 @@ - readme (Autosaved).md - m.txt - .DS_Store license.coffee node_modules - -yarn.lock diff --git a/dist/chroma-light.cjs b/dist/chroma-light.cjs index e5bd4678..cafb3000 100644 --- a/dist/chroma-light.cjs +++ b/dist/chroma-light.cjs @@ -55,10 +55,11 @@ * @preserve */ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - factory(); -})((function () { 'use strict'; + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.chroma = factory()); +})(this, (function () { 'use strict'; function limit (x, low, high) { if ( high === void 0 ) high = 1; @@ -1062,12 +1063,22 @@ // register interpolator index.oklab = oklab; - // generators -- > create new colors - chroma.mix = chroma.interpolate = require('./src/generator/mix'); + function valid () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + try { + new (Function.prototype.bind.apply( Color, [ null ].concat( args) )); + return true; + // eslint-disable-next-line + } catch (e) { + return false; + } + } - // other utility methods - chroma.valid = require('./src/utils/valid'); + chroma.mix = chroma.interpolate = mix; + chroma.valid = valid; - module.exports = chroma; + return chroma; })); diff --git a/dist/chroma-light.min.cjs b/dist/chroma-light.min.cjs index 99a4fda5..90bed88d 100644 --- a/dist/chroma-light.min.cjs +++ b/dist/chroma-light.min.cjs @@ -55,4 +55,4 @@ * @preserve */ -!function(t){"function"==typeof define&&define.amd?define(t):t()}((function(){"use strict";function t(t,r,n){return void 0===n&&(n=1),s(l(r,t),n)}for(var r={},n=0,e=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n=3?Array.prototype.slice.call(t):"object"==a(t[0])&&r?r.split("").filter((function(r){return void 0!==t[0][r]})).map((function(r){return t[0][r]})):t[0]}function u(t){if(t.length<2)return null;var r=t.length-1;return"string"==a(t[r])?t[r].toLowerCase():null}var s=Math.min,l=Math.max,c={format:{},autodetect:[]},h=function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];var e=this;if("object"===a(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var o=u(r),i=!1;if(!o){i=!0,c.sorted||(c.autodetect=c.autodetect.sort((function(t,r){return r.p-t.p})),c.sorted=!0);for(var s=0,l=c.autodetect;s255)&&(r._clipped=!0),r[n]=t(r[n],0,255)):3===n&&(r[n]=t(r[n],0,1));return r}(f),3===e._rgb.length&&e._rgb.push(1)};h.prototype.toString=function(){return"function"==a(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var f=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(f.Color,[null].concat(t)))};f.Color=h,f.version="2.6.0";var p=function(t){return Math.round(100*t)/100},g=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n,e,o=(t=i(t,"rgba"))[0],a=t[1],u=t[2],c=s(o/=255,a/=255,u/=255),h=l(o,a,u),f=(h+c)/2;return h===c?(n=0,e=Number.NaN):n=f<.5?(h-c)/(h+c):(h-c)/(2-h-c),o==h?e=(a-u)/(h-c):a==h?e=2+(u-o)/(h-c):u==h&&(e=4+(o-a)/(h-c)),(e*=60)<0&&(e+=360),t.length>3&&void 0!==t[3]?[e,n,f,t[3]]:[e,n,f]},b=Math.round,d=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgba"),e=u(t)||"rgb";return"hsl"==e.substr(0,3)?function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"hsla"),e=u(t)||"lsa";return n[0]=p(n[0]||0),n[1]=p(100*n[1])+"%",n[2]=p(100*n[2])+"%","hsla"===e||n.length>3&&n[3]<1?(n[3]=n.length>3?n[3]:1,e="hsla"):n.length=3,e+"("+n.join(",")+")"}(g(n),e):(n[0]=b(n[0]),n[1]=b(n[1]),n[2]=b(n[2]),("rgba"===e||n.length>3&&n[3]<1)&&(n[3]=n.length>3?n[3]:1,e="rgba"),e+"("+n.slice(0,"rgb"===e?3:4).join(",")+")")},v=Math.round,y=function(){for(var t,r=[],n=arguments.length;n--;)r[n]=arguments[n];var e,o,a,u=(r=i(r,"hsl"))[0],s=r[1],l=r[2];if(0===s)e=o=a=255*l;else{var c=[0,0,0],h=[0,0,0],f=l<.5?l*(1+s):l+s-l*s,p=2*l-f,g=u/360;c[0]=g+1/3,c[1]=g,c[2]=g-1/3;for(var b=0;b<3;b++)c[b]<0&&(c[b]+=1),c[b]>1&&(c[b]-=1),6*c[b]<1?h[b]=p+6*(f-p)*c[b]:2*c[b]<1?h[b]=f:3*c[b]<2?h[b]=p+(f-p)*(2/3-c[b])*6:h[b]=p;e=(t=[v(255*h[0]),v(255*h[1]),v(255*h[2])])[0],o=t[1],a=t[2]}return r.length>3?[e,o,a,r[3]]:[e,o,a,1]},w=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,m=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,k=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,_=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,M=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,x=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,F=Math.round,j=function(t){var r;if(t=t.toLowerCase().trim(),c.format.named)try{return c.format.named(t)}catch(t){}if(r=t.match(w)){for(var n=r.slice(1,4),e=0;e<3;e++)n[e]=+n[e];return n[3]=1,n}if(r=t.match(m)){for(var o=r.slice(1,5),a=0;a<4;a++)o[a]=+o[a];return o}if(r=t.match(k)){for(var i=r.slice(1,4),u=0;u<3;u++)i[u]=F(2.55*i[u]);return i[3]=1,i}if(r=t.match(_)){for(var s=r.slice(1,5),l=0;l<3;l++)s[l]=F(2.55*s[l]);return s[3]=+s[3],s}if(r=t.match(M)){var h=r.slice(1,4);h[1]*=.01,h[2]*=.01;var f=y(h);return f[3]=1,f}if(r=t.match(x)){var p=r.slice(1,4);p[1]*=.01,p[2]*=.01;var g=y(p);return g[3]=+r[4],g}};j.test=function(t){return w.test(t)||m.test(t)||k.test(t)||_.test(t)||M.test(t)||x.test(t)},h.prototype.css=function(t){return d(this._rgb,t)},f.css=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["css"])))},c.format.css=j,c.autodetect.push({p:5,test:function(t){for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];if(!r.length&&"string"===a(t)&&j.test(t))return"css"}});var N=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,$=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,A=Math.round;h.prototype.hex=function(t){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgba"),e=n[0],o=n[1],a=n[2],s=n[3],l=u(t)||"auto";void 0===s&&(s=1),"auto"===l&&(l=s<1?"rgba":"rgb");var c="000000"+((e=A(e))<<16|(o=A(o))<<8|(a=A(a))).toString(16);c=c.substr(c.length-6);var h="0"+A(255*s).toString(16);switch(h=h.substr(h.length-2),l.toLowerCase()){case"rgba":return"#"+c+h;case"argb":return"#"+h+c;default:return"#"+c}}(this._rgb,t)},f.hex=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["hex"])))},c.format.hex=function(t){if(t.match(N)){4!==t.length&&7!==t.length||(t=t.substr(1)),3===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]);var r=parseInt(t,16);return[r>>16,r>>8&255,255&r,1]}if(t.match($)){5!==t.length&&9!==t.length||(t=t.substr(1)),4===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);var n=parseInt(t,16);return[n>>24&255,n>>16&255,n>>8&255,Math.round((255&n)/255*100)/100]}throw new Error("unknown hex color: "+t)},c.autodetect.push({p:4,test:function(t){for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];if(!r.length&&"string"===a(t)&&[3,4,5,6,7,8,9].indexOf(t.length)>=0)return"hex"}}),h.prototype.hsl=function(){return g(this._rgb)},f.hsl=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["hsl"])))},c.format.hsl=y,c.autodetect.push({p:2,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"hsl"))&&3===t.length)return"hsl"}});var C=18,E=.95047,O=1,S=1.08883,L=.137931034,q=.206896552,I=.12841855,B=.008856452,D=Math.pow,R=function(t){return 255*(t<=.00304?12.92*t:1.055*D(t,1/2.4)-.055)},U=function(t){return t>q?t*t*t:I*(t-L)},z=Math.pow,G=function(t){return(t/=255)<=.04045?t/12.92:z((t+.055)/1.055,2.4)},H=function(t){return t>B?z(t,1/3):t/I+L},J=function(t,r,n){return t=G(t),r=G(r),n=G(n),[H((.4124564*t+.3575761*r+.1804375*n)/E),H((.2126729*t+.7151522*r+.072175*n)/O),H((.0193339*t+.119192*r+.9503041*n)/S)]};h.prototype.lab=function(){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgb"),e=n[0],o=n[1],a=n[2],u=J(e,o,a),s=u[0],l=u[1],c=116*l-16;return[c<0?0:c,500*(s-l),200*(l-u[2])]}(this._rgb)},f.lab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["lab"])))},c.format.lab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n,e,o,a=(t=i(t,"lab"))[0],u=t[1],s=t[2];return e=(a+16)/116,n=isNaN(u)?e:e+u/500,o=isNaN(s)?e:e-s/200,e=O*U(e),n=E*U(n),o=S*U(o),[R(3.2404542*n-1.5371385*e-.4985314*o),R(-.969266*n+1.8760108*e+.041556*o),R(.0556434*n-.2040259*e+1.0572252*o),t.length>3?t[3]:1]},c.autodetect.push({p:2,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"lab"))&&3===t.length)return"lab"}});var K=Math.pow,P=Math.sign;function Q(t){var r=Math.abs(t);return r>.0031308?(P(t)||1)*(1.055*K(r,1/2.4)-.055):12.92*t}var T=Math.cbrt,V=Math.pow,W=Math.sign;function X(t){var r=Math.abs(t);return r<.04045?t/12.92:(W(t)||1)*V((r+.055)/1.055,2.4)}h.prototype.oklab=function(){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgb"),e=n[0],o=n[1],a=n[2],u=[X(e/255),X(o/255),X(a/255)],s=u[0],l=u[1],c=u[2],h=T(.4122214708*s+.5363325363*l+.0514459929*c),f=T(.2119034982*s+.6806995451*l+.1073969566*c),p=T(.0883024619*s+.2817188376*l+.6299787005*c);return[.2104542553*h+.793617785*f-.0040720468*p,1.9779984951*h-2.428592205*f+.4505937099*p,.0259040371*h+.7827717662*f-.808675766*p]}(this._rgb)},f.oklab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["oklab"])))},c.format.oklab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=(t=i(t,"lab"))[0],e=t[1],o=t[2],a=K(n+.3963377774*e+.2158037573*o,3),u=K(n-.1055613458*e-.0638541728*o,3),s=K(n-.0894841775*e-1.291485548*o,3);return[255*Q(4.0767416621*a-3.3077115913*u+.2309699292*s),255*Q(-1.2684380046*a+2.6097574011*u-.3413193965*s),255*Q(-.0041960863*a-.7034186147*u+1.707614701*s),t.length>3?t[3]:1]},c.autodetect.push({p:3,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"oklab"))&&3===t.length)return"oklab"}});var Y=Math.round;h.prototype.rgb=function(t){return void 0===t&&(t=!0),!1===t?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Y)},h.prototype.rgba=function(t){return void 0===t&&(t=!0),this._rgb.slice(0,4).map((function(r,n){return n<3?!1===t?r:Y(r):r}))},f.rgb=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["rgb"])))},c.format.rgb=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgba");return void 0===n[3]&&(n[3]=1),n},c.autodetect.push({p:3,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"rgba"))&&(3===t.length||4===t.length&&"number"==a(t[3])&&t[3]>=0&&t[3]<=1))return"rgb"}}),h.prototype.alpha=function(t,r){return void 0===r&&(r=!1),void 0!==t&&"number"===a(t)?r?(this._rgb[3]=t,this):new h([this._rgb[0],this._rgb[1],this._rgb[2],t],"rgb"):this._rgb[3]},h.prototype.darken=function(t){void 0===t&&(t=1);var r=this.lab();return r[0]-=C*t,new h(r,"lab").alpha(this.alpha(),!0)},h.prototype.brighten=function(t){return void 0===t&&(t=1),this.darken(-t)},h.prototype.darker=h.prototype.darken,h.prototype.brighter=h.prototype.brighten,h.prototype.get=function(t){var r=t.split("."),n=r[0],e=r[1],o=this[n]();if(e){var a=n.indexOf(e)-("ok"===n.substr(0,2)?2:0);if(a>-1)return o[a];throw new Error("unknown channel "+e+" in mode "+n)}return o};var Z={};function tt(t,r,n){void 0===n&&(n=.5);for(var e=[],o=arguments.length-3;o-- >0;)e[o]=arguments[o+3];var i=e[0]||"lrgb";if(Z[i]||e.length||(i=Object.keys(Z)[0]),!Z[i])throw new Error("interpolation mode "+i+" is not defined");return"object"!==a(t)&&(t=new h(t)),"object"!==a(r)&&(r=new h(r)),Z[i](t,r,n).alpha(t.alpha()+n*(r.alpha()-t.alpha()))}h.prototype.mix=h.prototype.interpolate=function(t,r){void 0===r&&(r=.5);for(var n=[],e=arguments.length-2;e-- >0;)n[e]=arguments[e+2];return tt.apply(void 0,[this,t,r].concat(n))},h.prototype.set=function(t,r,n){void 0===n&&(n=!1);var e=t.split("."),o=e[0],i=e[1],u=this[o]();if(i){var s=o.indexOf(i)-("ok"===o.substr(0,2)?2:0);if(s>-1){if("string"==a(r))switch(r.charAt(0)){case"+":case"-":u[s]+=+r;break;case"*":u[s]*=+r.substr(1);break;case"/":u[s]/=+r.substr(1);break;default:u[s]=+r}else{if("number"!==a(r))throw new Error("unsupported value for Color.set");u[s]=r}var l=new h(u,o);return n?(this._rgb=l._rgb,this):l}throw new Error("unknown channel "+i+" in mode "+o)}return u},h.prototype.tint=function(t){void 0===t&&(t=.5);for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];return tt.apply(void 0,[this,"white",t].concat(r))},h.prototype.shade=function(t){void 0===t&&(t=.5);for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];return tt.apply(void 0,[this,"black",t].concat(r))};var rt=Math.sqrt,nt=Math.pow;Z.lrgb=function(t,r,n){var e=t._rgb,o=e[0],a=e[1],i=e[2],u=r._rgb,s=u[0],l=u[1],c=u[2];return new h(rt(nt(o,2)*(1-n)+nt(s,2)*n),rt(nt(a,2)*(1-n)+nt(l,2)*n),rt(nt(i,2)*(1-n)+nt(c,2)*n),"rgb")};Z.oklab=function(t,r,n){var e=t.oklab(),o=r.oklab();return new h(e[0]+n*(o[0]-e[0]),e[1]+n*(o[1]-e[1]),e[2]+n*(o[2]-e[2]),"oklab")},f.mix=f.interpolate=require("./src/generator/mix"),f.valid=require("./src/utils/valid"),module.exports=f})); +!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(t="undefined"!=typeof globalThis?globalThis:t||self).chroma=r()}(this,(function(){"use strict";function t(t,r,n){return void 0===n&&(n=1),l(s(r,t),n)}for(var r={},n=0,e=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n=3?Array.prototype.slice.call(t):"object"==a(t[0])&&r?r.split("").filter((function(r){return void 0!==t[0][r]})).map((function(r){return t[0][r]})):t[0]}function u(t){if(t.length<2)return null;var r=t.length-1;return"string"==a(t[r])?t[r].toLowerCase():null}var l=Math.min,s=Math.max,c={format:{},autodetect:[]},h=function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];var e=this;if("object"===a(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var o=u(r),i=!1;if(!o){i=!0,c.sorted||(c.autodetect=c.autodetect.sort((function(t,r){return r.p-t.p})),c.sorted=!0);for(var l=0,s=c.autodetect;l255)&&(r._clipped=!0),r[n]=t(r[n],0,255)):3===n&&(r[n]=t(r[n],0,1));return r}(f),3===e._rgb.length&&e._rgb.push(1)};h.prototype.toString=function(){return"function"==a(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var f=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(f.Color,[null].concat(t)))};f.Color=h,f.version="2.6.0";var p=function(t){return Math.round(100*t)/100},g=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n,e,o=(t=i(t,"rgba"))[0],a=t[1],u=t[2],c=l(o/=255,a/=255,u/=255),h=s(o,a,u),f=(h+c)/2;return h===c?(n=0,e=Number.NaN):n=f<.5?(h-c)/(h+c):(h-c)/(2-h-c),o==h?e=(a-u)/(h-c):a==h?e=2+(u-o)/(h-c):u==h&&(e=4+(o-a)/(h-c)),(e*=60)<0&&(e+=360),t.length>3&&void 0!==t[3]?[e,n,f,t[3]]:[e,n,f]},b=Math.round,d=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgba"),e=u(t)||"rgb";return"hsl"==e.substr(0,3)?function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"hsla"),e=u(t)||"lsa";return n[0]=p(n[0]||0),n[1]=p(100*n[1])+"%",n[2]=p(100*n[2])+"%","hsla"===e||n.length>3&&n[3]<1?(n[3]=n.length>3?n[3]:1,e="hsla"):n.length=3,e+"("+n.join(",")+")"}(g(n),e):(n[0]=b(n[0]),n[1]=b(n[1]),n[2]=b(n[2]),("rgba"===e||n.length>3&&n[3]<1)&&(n[3]=n.length>3?n[3]:1,e="rgba"),e+"("+n.slice(0,"rgb"===e?3:4).join(",")+")")},v=Math.round,y=function(){for(var t,r=[],n=arguments.length;n--;)r[n]=arguments[n];var e,o,a,u=(r=i(r,"hsl"))[0],l=r[1],s=r[2];if(0===l)e=o=a=255*s;else{var c=[0,0,0],h=[0,0,0],f=s<.5?s*(1+l):s+l-s*l,p=2*s-f,g=u/360;c[0]=g+1/3,c[1]=g,c[2]=g-1/3;for(var b=0;b<3;b++)c[b]<0&&(c[b]+=1),c[b]>1&&(c[b]-=1),6*c[b]<1?h[b]=p+6*(f-p)*c[b]:2*c[b]<1?h[b]=f:3*c[b]<2?h[b]=p+(f-p)*(2/3-c[b])*6:h[b]=p;e=(t=[v(255*h[0]),v(255*h[1]),v(255*h[2])])[0],o=t[1],a=t[2]}return r.length>3?[e,o,a,r[3]]:[e,o,a,1]},w=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,m=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,k=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,_=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,M=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,x=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,F=Math.round,j=function(t){var r;if(t=t.toLowerCase().trim(),c.format.named)try{return c.format.named(t)}catch(t){}if(r=t.match(w)){for(var n=r.slice(1,4),e=0;e<3;e++)n[e]=+n[e];return n[3]=1,n}if(r=t.match(m)){for(var o=r.slice(1,5),a=0;a<4;a++)o[a]=+o[a];return o}if(r=t.match(k)){for(var i=r.slice(1,4),u=0;u<3;u++)i[u]=F(2.55*i[u]);return i[3]=1,i}if(r=t.match(_)){for(var l=r.slice(1,5),s=0;s<3;s++)l[s]=F(2.55*l[s]);return l[3]=+l[3],l}if(r=t.match(M)){var h=r.slice(1,4);h[1]*=.01,h[2]*=.01;var f=y(h);return f[3]=1,f}if(r=t.match(x)){var p=r.slice(1,4);p[1]*=.01,p[2]*=.01;var g=y(p);return g[3]=+r[4],g}};j.test=function(t){return w.test(t)||m.test(t)||k.test(t)||_.test(t)||M.test(t)||x.test(t)},h.prototype.css=function(t){return d(this._rgb,t)},f.css=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["css"])))},c.format.css=j,c.autodetect.push({p:5,test:function(t){for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];if(!r.length&&"string"===a(t)&&j.test(t))return"css"}});var N=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,$=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,A=Math.round;h.prototype.hex=function(t){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgba"),e=n[0],o=n[1],a=n[2],l=n[3],s=u(t)||"auto";void 0===l&&(l=1),"auto"===s&&(s=l<1?"rgba":"rgb");var c="000000"+((e=A(e))<<16|(o=A(o))<<8|(a=A(a))).toString(16);c=c.substr(c.length-6);var h="0"+A(255*l).toString(16);switch(h=h.substr(h.length-2),s.toLowerCase()){case"rgba":return"#"+c+h;case"argb":return"#"+h+c;default:return"#"+c}}(this._rgb,t)},f.hex=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["hex"])))},c.format.hex=function(t){if(t.match(N)){4!==t.length&&7!==t.length||(t=t.substr(1)),3===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]);var r=parseInt(t,16);return[r>>16,r>>8&255,255&r,1]}if(t.match($)){5!==t.length&&9!==t.length||(t=t.substr(1)),4===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);var n=parseInt(t,16);return[n>>24&255,n>>16&255,n>>8&255,Math.round((255&n)/255*100)/100]}throw new Error("unknown hex color: "+t)},c.autodetect.push({p:4,test:function(t){for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];if(!r.length&&"string"===a(t)&&[3,4,5,6,7,8,9].indexOf(t.length)>=0)return"hex"}}),h.prototype.hsl=function(){return g(this._rgb)},f.hsl=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["hsl"])))},c.format.hsl=y,c.autodetect.push({p:2,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"hsl"))&&3===t.length)return"hsl"}});var C=18,E=.95047,O=1,S=1.08883,L=.137931034,I=.206896552,T=.12841855,q=.008856452,B=Math.pow,D=function(t){return 255*(t<=.00304?12.92*t:1.055*B(t,1/2.4)-.055)},R=function(t){return t>I?t*t*t:T*(t-L)},U=Math.pow,z=function(t){return(t/=255)<=.04045?t/12.92:U((t+.055)/1.055,2.4)},G=function(t){return t>q?U(t,1/3):t/T+L},H=function(t,r,n){return t=z(t),r=z(r),n=z(n),[G((.4124564*t+.3575761*r+.1804375*n)/E),G((.2126729*t+.7151522*r+.072175*n)/O),G((.0193339*t+.119192*r+.9503041*n)/S)]};h.prototype.lab=function(){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgb"),e=n[0],o=n[1],a=n[2],u=H(e,o,a),l=u[0],s=u[1],c=116*s-16;return[c<0?0:c,500*(l-s),200*(s-u[2])]}(this._rgb)},f.lab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["lab"])))},c.format.lab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n,e,o,a=(t=i(t,"lab"))[0],u=t[1],l=t[2];return e=(a+16)/116,n=isNaN(u)?e:e+u/500,o=isNaN(l)?e:e-l/200,e=O*R(e),n=E*R(n),o=S*R(o),[D(3.2404542*n-1.5371385*e-.4985314*o),D(-.969266*n+1.8760108*e+.041556*o),D(.0556434*n-.2040259*e+1.0572252*o),t.length>3?t[3]:1]},c.autodetect.push({p:2,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"lab"))&&3===t.length)return"lab"}});var J=Math.pow,K=Math.sign;function P(t){var r=Math.abs(t);return r>.0031308?(K(t)||1)*(1.055*J(r,1/2.4)-.055):12.92*t}var Q=Math.cbrt,V=Math.pow,W=Math.sign;function X(t){var r=Math.abs(t);return r<.04045?t/12.92:(W(t)||1)*V((r+.055)/1.055,2.4)}h.prototype.oklab=function(){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgb"),e=n[0],o=n[1],a=n[2],u=[X(e/255),X(o/255),X(a/255)],l=u[0],s=u[1],c=u[2],h=Q(.4122214708*l+.5363325363*s+.0514459929*c),f=Q(.2119034982*l+.6806995451*s+.1073969566*c),p=Q(.0883024619*l+.2817188376*s+.6299787005*c);return[.2104542553*h+.793617785*f-.0040720468*p,1.9779984951*h-2.428592205*f+.4505937099*p,.0259040371*h+.7827717662*f-.808675766*p]}(this._rgb)},f.oklab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["oklab"])))},c.format.oklab=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=(t=i(t,"lab"))[0],e=t[1],o=t[2],a=J(n+.3963377774*e+.2158037573*o,3),u=J(n-.1055613458*e-.0638541728*o,3),l=J(n-.0894841775*e-1.291485548*o,3);return[255*P(4.0767416621*a-3.3077115913*u+.2309699292*l),255*P(-1.2684380046*a+2.6097574011*u-.3413193965*l),255*P(-.0041960863*a-.7034186147*u+1.707614701*l),t.length>3?t[3]:1]},c.autodetect.push({p:3,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"oklab"))&&3===t.length)return"oklab"}});var Y=Math.round;h.prototype.rgb=function(t){return void 0===t&&(t=!0),!1===t?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Y)},h.prototype.rgba=function(t){return void 0===t&&(t=!0),this._rgb.slice(0,4).map((function(r,n){return n<3?!1===t?r:Y(r):r}))},f.rgb=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return new(Function.prototype.bind.apply(h,[null].concat(t,["rgb"])))},c.format.rgb=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];var n=i(t,"rgba");return void 0===n[3]&&(n[3]=1),n},c.autodetect.push({p:3,test:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if("array"===a(t=i(t,"rgba"))&&(3===t.length||4===t.length&&"number"==a(t[3])&&t[3]>=0&&t[3]<=1))return"rgb"}}),h.prototype.alpha=function(t,r){return void 0===r&&(r=!1),void 0!==t&&"number"===a(t)?r?(this._rgb[3]=t,this):new h([this._rgb[0],this._rgb[1],this._rgb[2],t],"rgb"):this._rgb[3]},h.prototype.darken=function(t){void 0===t&&(t=1);var r=this.lab();return r[0]-=C*t,new h(r,"lab").alpha(this.alpha(),!0)},h.prototype.brighten=function(t){return void 0===t&&(t=1),this.darken(-t)},h.prototype.darker=h.prototype.darken,h.prototype.brighter=h.prototype.brighten,h.prototype.get=function(t){var r=t.split("."),n=r[0],e=r[1],o=this[n]();if(e){var a=n.indexOf(e)-("ok"===n.substr(0,2)?2:0);if(a>-1)return o[a];throw new Error("unknown channel "+e+" in mode "+n)}return o};var Z={};function tt(t,r,n){void 0===n&&(n=.5);for(var e=[],o=arguments.length-3;o-- >0;)e[o]=arguments[o+3];var i=e[0]||"lrgb";if(Z[i]||e.length||(i=Object.keys(Z)[0]),!Z[i])throw new Error("interpolation mode "+i+" is not defined");return"object"!==a(t)&&(t=new h(t)),"object"!==a(r)&&(r=new h(r)),Z[i](t,r,n).alpha(t.alpha()+n*(r.alpha()-t.alpha()))}h.prototype.mix=h.prototype.interpolate=function(t,r){void 0===r&&(r=.5);for(var n=[],e=arguments.length-2;e-- >0;)n[e]=arguments[e+2];return tt.apply(void 0,[this,t,r].concat(n))},h.prototype.set=function(t,r,n){void 0===n&&(n=!1);var e=t.split("."),o=e[0],i=e[1],u=this[o]();if(i){var l=o.indexOf(i)-("ok"===o.substr(0,2)?2:0);if(l>-1){if("string"==a(r))switch(r.charAt(0)){case"+":case"-":u[l]+=+r;break;case"*":u[l]*=+r.substr(1);break;case"/":u[l]/=+r.substr(1);break;default:u[l]=+r}else{if("number"!==a(r))throw new Error("unsupported value for Color.set");u[l]=r}var s=new h(u,o);return n?(this._rgb=s._rgb,this):s}throw new Error("unknown channel "+i+" in mode "+o)}return u},h.prototype.tint=function(t){void 0===t&&(t=.5);for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];return tt.apply(void 0,[this,"white",t].concat(r))},h.prototype.shade=function(t){void 0===t&&(t=.5);for(var r=[],n=arguments.length-1;n-- >0;)r[n]=arguments[n+1];return tt.apply(void 0,[this,"black",t].concat(r))};var rt=Math.sqrt,nt=Math.pow;Z.lrgb=function(t,r,n){var e=t._rgb,o=e[0],a=e[1],i=e[2],u=r._rgb,l=u[0],s=u[1],c=u[2];return new h(rt(nt(o,2)*(1-n)+nt(l,2)*n),rt(nt(a,2)*(1-n)+nt(s,2)*n),rt(nt(i,2)*(1-n)+nt(c,2)*n),"rgb")};return Z.oklab=function(t,r,n){var e=t.oklab(),o=r.oklab();return new h(e[0]+n*(o[0]-e[0]),e[1]+n*(o[1]-e[1]),e[2]+n*(o[2]-e[2]),"oklab")},f.mix=f.interpolate=tt,f.valid=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];try{return new(Function.prototype.bind.apply(h,[null].concat(t))),!0}catch(t){return!1}},f})); diff --git a/eslint.config.mjs b/eslint.config.mjs index 05f71899..a5dffebf 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -18,6 +18,7 @@ export default [...compat.extends("eslint:recommended"), { globals: { ...globals.browser, ...globals.commonjs, + '__dirname': 'readonly', }, parser: babelParser, @@ -32,4 +33,4 @@ export default [...compat.extends("eslint:recommended"), { rules: { "no-sequences": "error", }, -}]; \ No newline at end of file +}]; diff --git a/index-light.js b/index-light.js index c1539739..3cefad43 100644 --- a/index-light.js +++ b/index-light.js @@ -24,9 +24,11 @@ import './src/interpolator/lrgb.js'; import './src/interpolator/oklab.js'; // generators -- > create new colors -chroma.mix = chroma.interpolate = require('./src/generator/mix'); +import mix from './src/generator/mix'; +chroma.mix = chroma.interpolate = mix; // other utility methods -chroma.valid = require('./src/utils/valid'); +import valid from './src/utils/valid'; +chroma.valid = valid; -module.exports = chroma; +export default chroma; diff --git a/package.json b/package.json index 99f977c2..4a38d88a 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "chroma-js", "description": "JavaScript library for color conversions", "version": "2.6.0", + "packageManager": "pnpm@9.6.0", "author": "Gregor Aisch", "type": "module", "homepage": "https://github.com/gka/chroma.js", @@ -32,8 +33,8 @@ "build": "rollup -c && cross-env DEV=1 rollup -c ", "docs": "cd docs && make", "docs-preview": "cd docs && make && make preview", - "test": "vitest test/*.js", - "test:old": "vows --dot-matrix test/*.cjs", + "test": "vitest", + "test:update": "vitest -u", "lint": "prettier --check index.js index-light.js src *.config.js test && eslint index.js index-light.js src", "format": "prettier --write index.js index-light.js src *.config.js test", "prepare": "husky" @@ -45,7 +46,6 @@ "@rollup/plugin-buble": "^1.0.3", "@rollup/plugin-terser": "^0.4.4", "cross-env": "^7.0.3", - "es6-shim": "^0.35.8", "eslint": "^9.8.0", "globals": "^15.8.0", "http-server": "^14.1.1", @@ -55,8 +55,7 @@ "prettier": "^3.3.3", "rollup": "^4.19.1", "rollup-plugin-license": "^3.5.2", - "vitest": "^2.0.4", - "vows": "^0.8.3" + "vitest": "^2.0.4" }, "license": "(BSD-3-Clause AND Apache-2.0)", "spm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5f6e2bef..12f56124 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@babel/eslint-parser': specifier: ^7.25.0 - version: 7.25.0(@babel/core@7.24.9)(eslint@9.8.0) + version: 7.25.0(@babel/core@7.25.2)(eslint@9.8.0) '@eslint/eslintrc': specifier: ^3.1.0 version: 3.1.0 @@ -26,9 +26,6 @@ importers: cross-env: specifier: ^7.0.3 version: 7.0.3 - es6-shim: - specifier: ^0.35.8 - version: 0.35.8 eslint: specifier: ^9.8.0 version: 9.8.0 @@ -59,9 +56,6 @@ importers: vitest: specifier: ^2.0.4 version: 2.0.4(terser@5.31.3) - vows: - specifier: ^0.8.3 - version: 0.8.3 packages: @@ -73,12 +67,12 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.0': - resolution: {integrity: sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg==} + '@babel/compat-data@7.25.2': + resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.9': - resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} '@babel/eslint-parser@7.25.0': @@ -92,16 +86,16 @@ packages: resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.0': - resolution: {integrity: sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ==} + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -130,8 +124,8 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.0': - resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} + '@babel/parser@7.25.3': + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} engines: {node: '>=6.0.0'} hasBin: true @@ -139,8 +133,8 @@ packages: resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.2': - resolution: {integrity: sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==} + '@babel/traverse@7.25.3': + resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} engines: {node: '>=6.9.0'} '@babel/types@7.25.2': @@ -406,46 +400,55 @@ packages: resolution: {integrity: sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.19.1': resolution: {integrity: sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.19.1': resolution: {integrity: sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.19.1': resolution: {integrity: sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.19.1': resolution: {integrity: sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.19.1': resolution: {integrity: sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.19.1': resolution: {integrity: sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.19.1': resolution: {integrity: sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.19.1': resolution: {integrity: sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.19.1': resolution: {integrity: sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==} @@ -595,8 +598,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001643: - resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} + caniuse-lite@1.0.30001646: + resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -701,15 +704,11 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.2: - resolution: {integrity: sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==} + electron-to-chromium@1.5.4: + resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} @@ -719,9 +718,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es6-shim@0.35.8: - resolution: {integrity: sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==} - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -808,10 +804,6 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} - eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -863,9 +855,6 @@ packages: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -899,10 +888,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -996,10 +981,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -1180,9 +1161,6 @@ packages: object-keys@0.4.0: resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -1219,10 +1197,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1606,10 +1580,6 @@ packages: jsdom: optional: true - vows@0.8.3: - resolution: {integrity: sha512-PVIxa/ovXhrw5gA3mz6M+ZF3PHlqX4tutR2p/y9NWPAaFVKcWBE8b2ktfr0opQM/qFmcOVWKjSCJVjnYOvjXhw==} - hasBin: true - whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -1628,9 +1598,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - xtend@2.1.2: resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} engines: {node: '>=0.4'} @@ -1657,19 +1624,19 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.25.0': {} + '@babel/compat-data@7.25.2': {} - '@babel/core@7.24.9': + '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.25.0(@babel/core@7.24.9) + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.0 + '@babel/parser': 7.25.3 '@babel/template': 7.25.0 - '@babel/traverse': 7.25.2 + '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 convert-source-map: 2.0.0 debug: 4.3.6 @@ -1679,9 +1646,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.25.0(@babel/core@7.24.9)(eslint@9.8.0)': + '@babel/eslint-parser@7.25.0(@babel/core@7.25.2)(eslint@9.8.0)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 9.8.0 eslint-visitor-keys: 2.1.0 @@ -1694,9 +1661,9 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/helper-compilation-targets@7.24.8': + '@babel/helper-compilation-targets@7.25.2': dependencies: - '@babel/compat-data': 7.25.0 + '@babel/compat-data': 7.25.2 '@babel/helper-validator-option': 7.24.8 browserslist: 4.23.2 lru-cache: 5.1.1 @@ -1704,24 +1671,24 @@ snapshots: '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.25.2 + '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.0(@babel/core@7.24.9)': + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.2 + '@babel/traverse': 7.25.3 transitivePeerDependencies: - supports-color '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.25.2 + '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -1744,21 +1711,21 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.25.0': + '@babel/parser@7.25.3': dependencies: '@babel/types': 7.25.2 '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.0 + '@babel/parser': 7.25.3 '@babel/types': 7.25.2 - '@babel/traverse@7.25.2': + '@babel/traverse@7.25.3': dependencies: '@babel/code-frame': 7.24.7 '@babel/generator': 7.25.0 - '@babel/parser': 7.25.0 + '@babel/parser': 7.25.3 '@babel/template': 7.25.0 '@babel/types': 7.25.2 debug: 4.3.6 @@ -2107,8 +2074,8 @@ snapshots: browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001643 - electron-to-chromium: 1.5.2 + caniuse-lite: 1.0.30001646 + electron-to-chromium: 1.5.4 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.2) @@ -2136,7 +2103,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001643: {} + caniuse-lite@1.0.30001646: {} caseless@0.12.0: {} @@ -2225,14 +2192,12 @@ snapshots: delayed-stream@1.0.0: {} - diff@4.0.2: {} - ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 - electron-to-chromium@1.5.2: {} + electron-to-chromium@1.5.4: {} es-define-property@1.0.0: dependencies: @@ -2240,8 +2205,6 @@ snapshots: es-errors@1.3.0: {} - es6-shim@0.35.8: {} - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -2373,8 +2336,6 @@ snapshots: extsprintf@1.3.0: {} - eyes@0.1.8: {} - fast-deep-equal@3.1.3: {} fast-json-stable-stringify@2.1.0: {} @@ -2413,8 +2374,6 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true @@ -2444,15 +2403,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - globals@11.12.0: {} globals@14.0.0: {} @@ -2542,11 +2492,6 @@ snapshots: imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.4: {} is-extglob@2.1.1: {} @@ -2691,10 +2636,6 @@ snapshots: object-keys@0.4.0: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -2728,8 +2669,6 @@ snapshots: path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-key@4.0.0: {} @@ -3133,12 +3072,6 @@ snapshots: - supports-color - terser - vows@0.8.3: - dependencies: - diff: 4.0.2 - eyes: 0.1.8 - glob: 7.2.3 - whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -3154,8 +3087,6 @@ snapshots: word-wrap@1.2.5: {} - wrappy@1.0.2: {} - xtend@2.1.2: dependencies: object-keys: 0.4.0 diff --git a/test/alpha.test.js b/test/alpha.test.js index d5b048ff..7e4abee6 100644 --- a/test/alpha.test.js +++ b/test/alpha.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Tests for the alpha channel', () => { it('setting & getting alpha channel', () => { diff --git a/test/analyze.test.js b/test/analyze.test.js index 6aea7b17..bf26b28d 100644 --- a/test/analyze.test.js +++ b/test/analyze.test.js @@ -1,5 +1,7 @@ import { describe, it, expect } from 'vitest'; -import { analyze } from '../src/utils/analyze.js'; +import chroma from 'chroma-js'; + +const analyze = chroma.analyze; describe('Some tests for analyze()', () => { it('analyze an array of numbers', () => { diff --git a/test/autodetect.test.js b/test/autodetect.test.js index 3974b836..f0d4b14f 100644 --- a/test/autodetect.test.js +++ b/test/autodetect.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('autodetect color', () => { it('autodetect named color', () => { diff --git a/test/average.test.js b/test/average.test.js index 4dd88f41..fd67f215 100644 --- a/test/average.test.js +++ b/test/average.test.js @@ -1,56 +1,58 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; + +const average = chroma.average; const colors = ['red', 'blue', 'white']; describe('Tests for average color', () => { it('average in RGB', () => { - const result = chroma.average(colors, 'rgb'); + const result = average(colors, 'rgb'); expect(result.hex()).toBe('#aa55aa'); }); it('average with alpha channel', () => { - const result = chroma.average([chroma('red').alpha(0.5), chroma('blue').alpha(0.5)], 'rgb'); + const result = average([chroma('red').alpha(0.5), chroma('blue').alpha(0.5)], 'rgb'); expect(result.rgba()).toEqual([128, 0, 128, 0.5]); }); it('average in lab', () => { - const result = chroma.average(colors, 'lab'); + const result = average(colors, 'lab'); expect(result.hex()).toBe('#e26daf'); }); it('average h in lch', () => { - const result = chroma.average([chroma.lch(50, 50, 0), chroma.lch(50, 50, 90)], 'lch').get('lch.h'); + const result = average([chroma.lch(50, 50, 0), chroma.lch(50, 50, 90)], 'lch').get('lch.h'); expect(Math.round(result)).toBe(45); }); it('average in hsl of same colors', () => { - const result = chroma.average(['#02c03a', '#02c03a'], 'hsl'); + const result = average(['#02c03a', '#02c03a'], 'hsl'); expect(result.hex()).toBe('#02c03a'); }); it('average same color', () => { - const result = chroma.average(['#02c03a', '#02c03a'], 'hsl'); + const result = average(['#02c03a', '#02c03a'], 'hsl'); expect(result.hex()).toBe('#02c03a'); }); it('lrgb average', () => { - const result = chroma.average(colors, 'lrgb'); + const result = average(colors, 'lrgb'); expect(result.hex()).toBe('#d093d0'); }); it('three colors, weighted rgb average', () => { - const result = chroma.average(colors, 'rgb', [1, 1, 2]); + const result = average(colors, 'rgb', [1, 1, 2]); expect(result.hex()).toBe('#bf80bf'); }); it('three colors, weighted lrgb average', () => { - const result = chroma.average(colors, 'lrgb', [1, 3, 2]); + const result = average(colors, 'lrgb', [1, 3, 2]); expect(result.hex()).toBe('#b493e9'); }); it('three colors, weighted hsl average', () => { - const result = chroma.average(colors, 'hsl', [0.25, 1, 0.5]); + const result = average(colors, 'hsl', [0.25, 1, 0.5]); expect(result.hex()).toBe('#8163e5'); }); }); diff --git a/test/bezier.test.js b/test/bezier.test.js index 729b00d0..6122123b 100644 --- a/test/bezier.test.js +++ b/test/bezier.test.js @@ -1,9 +1,11 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; + +const bezier = chroma.bezier; describe('Testing bezier interpolation', () => { describe('simple two color linear interpolation', () => { - const f = chroma.bezier(['white', 'black']); + const f = bezier(['white', 'black']); it('starts from white', () => { expect(f(0).hex()).toBe('#ffffff'); @@ -19,7 +21,7 @@ describe('Testing bezier interpolation', () => { }); describe('three color quadratic bezier interpolation', () => { - const f = chroma.bezier(['white', 'red', 'black']); + const f = bezier(['white', 'red', 'black']); it('starts from white', () => { expect(f(0).hex()).toBe('#ffffff'); @@ -35,7 +37,7 @@ describe('Testing bezier interpolation', () => { }); describe('four color cubic bezier interpolation', () => { - const f = chroma.bezier(['white', 'yellow', 'red', 'black']); + const f = bezier(['white', 'yellow', 'red', 'black']); it('starts from white', () => { expect(f(0).hex()).toBe('#ffffff'); @@ -59,7 +61,7 @@ describe('Testing bezier interpolation', () => { }); describe('five color diverging quadratic bezier interpolation', () => { - const f = chroma.bezier(['darkred', 'orange', 'snow', 'lightgreen', 'royalblue']); + const f = bezier(['darkred', 'orange', 'snow', 'lightgreen', 'royalblue']); it('starts from darkred', () => { expect(f(0).hex()).toBe('#8b0000'); @@ -84,7 +86,7 @@ describe('Testing bezier interpolation', () => { describe('using bezier in a chroma.scale', () => { const f = chroma - .scale(chroma.bezier(['darkred', 'orange', 'snow', 'lightgreen', 'royalblue'])) + .scale(bezier(['darkred', 'orange', 'snow', 'lightgreen', 'royalblue'])) .domain([0, 1], 5) .out('hex'); diff --git a/test/blend.test.js b/test/blend.test.js index 7f3eaa5d..6263f0d9 100644 --- a/test/blend.test.js +++ b/test/blend.test.js @@ -1,24 +1,26 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; + +const blend = chroma.blend; describe('Testing blend modes', () => { it('multiply 1', () => { - const result = chroma.blend('red', '#5a9f37', 'multiply'); + const result = blend('red', '#5a9f37', 'multiply'); expect(result.hex()).toBe('#5a0000'); }); it('multiply 2', () => { - const result = chroma.blend('#33b16f', '#857590', 'multiply'); + const result = blend('#33b16f', '#857590', 'multiply'); expect(result.hex()).toBe('#1b513f'); }); it('screen', () => { - const result = chroma.blend('#b83d31', '#0da671', 'screen'); + const result = blend('#b83d31', '#0da671', 'screen'); expect(result.hex()).toBe('#bcbb8c'); }); it('overlay', () => { - const result = chroma.blend('#b83d31', '#0da671', 'overlay'); + const result = blend('#b83d31', '#0da671', 'overlay'); expect(result.hex()).toBe('#784f2b'); }); }); diff --git a/test/color.test.js b/test/color.test.js index d9af1c4f..8eb48b5c 100644 --- a/test/color.test.js +++ b/test/color.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; const Color = chroma.Color; diff --git a/test/contrast.test.js b/test/contrast.test.js index 0a4cc9a1..7ed5eaeb 100644 --- a/test/contrast.test.js +++ b/test/contrast.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; const contrast = chroma.contrast; diff --git a/test/converters.test.js b/test/converters.test.js index afba5ad0..e3149e95 100644 --- a/test/converters.test.js +++ b/test/converters.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Testing color conversions', () => { for (const colorName in chroma.colors) { diff --git a/test/cubehelix.test.js b/test/cubehelix.test.js index d6c4a9d0..5a3c3908 100644 --- a/test/cubehelix.test.js +++ b/test/cubehelix.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; const cubehelix = chroma.cubehelix; diff --git a/test/delta-e.test.js b/test/delta-e.test.js index 1c511d78..c29100b4 100644 --- a/test/delta-e.test.js +++ b/test/delta-e.test.js @@ -1,6 +1,7 @@ import { describe, it, expect } from 'vitest'; -import '../index.js'; -import deltaE from '../src/utils/delta-e.js'; +import chroma from 'chroma-js'; + +const deltaE = chroma.deltaE; // due to floating-point arithmetic on different devices, differences in decimals may be found. // Running http://www.brucelindbloom.com/index.html?ColorDifferenceCalc.html JS code locally diff --git a/test/docs.test.js b/test/docs/index.test.js similarity index 51% rename from test/docs.test.js rename to test/docs/index.test.js index 838e3e02..9254abfe 100644 --- a/test/docs.test.js +++ b/test/docs/index.test.js @@ -1,13 +1,21 @@ +/* eslint-disable no-unused-vars */ import { describe, it, expect } from 'vitest'; -import chroma_ from '../index.js'; -import fs from 'fs'; +import fs from 'node:fs'; +import path from 'node:path'; +import chroma_ from '../../index.js'; -const DOCS = fs.readFileSync(__dirname + '/../docs/src/index.md', 'utf-8'); +const docsPath = path.resolve(__dirname, '../../docs/src/index.md'); +const DOCS = fs.readFileSync(docsPath, 'utf-8'); -const snippets = DOCS.match(/^```js$\n(^[^`].+$\n)+/gm).map((s) => s.split('\n').slice(1).join('\n')); +const snippets = Array.from(DOCS.matchAll(/```js([\s\S]+?)```/g)).map( + (m) => m[1] +); // is used in eval; -const data = [2.0, 3.5, 3.6, 3.8, 3.8, 4.1, 4.3, 4.4, 4.6, 4.9, 5.2, 5.3, 5.4, 5.7, 5.8, 5.9, 6.2, 6.5, 6.8, 7.2, 8]; +const data = [ + 2.0, 3.5, 3.6, 3.8, 3.8, 4.1, 4.3, 4.4, 4.6, 4.9, 5.2, 5.3, 5.4, 5.7, 5.8, + 5.9, 6.2, 6.5, 6.8, 7.2, 8 +]; describe('Tests all snippets in the documentation', () => { // referenced in code snippets diff --git a/test/cmyk2rgb.test.js b/test/io/cmyk2rgb.test.js similarity index 96% rename from test/cmyk2rgb.test.js rename to test/io/cmyk2rgb.test.js index c1741c93..6f4016f5 100644 --- a/test/cmyk2rgb.test.js +++ b/test/io/cmyk2rgb.test.js @@ -1,6 +1,5 @@ import { describe, it, expect } from 'vitest'; -import cmyk2rgb from '../src/io/cmyk/cmyk2rgb.js'; -import '../index.js'; +import cmyk2rgb from '../../src/io/cmyk/cmyk2rgb.js'; const cmykColors = [ [0, 0, 0, 1], diff --git a/test/css2rgb.test.js b/test/io/css2rgb.test.js similarity index 96% rename from test/css2rgb.test.js rename to test/io/css2rgb.test.js index 3196cc59..39d7a3c3 100644 --- a/test/css2rgb.test.js +++ b/test/io/css2rgb.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; const css2rgb = chroma.input.format.css; diff --git a/test/hcg2rgb.test.js b/test/io/hcg2rgb.test.js similarity index 96% rename from test/hcg2rgb.test.js rename to test/io/hcg2rgb.test.js index 885579c9..5e49baaf 100644 --- a/test/hcg2rgb.test.js +++ b/test/io/hcg2rgb.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import hcg2rgb from '../src/io/hcg/hcg2rgb.js'; +import hcg2rgb from '../../src/io/hcg/hcg2rgb.js'; describe('Testing HCG color conversions', () => { const colors = { diff --git a/test/hex2rgb.test.js b/test/io/hex2rgb.test.js similarity index 60% rename from test/hex2rgb.test.js rename to test/io/hex2rgb.test.js index a30b1c87..c93cea9d 100644 --- a/test/hex2rgb.test.js +++ b/test/io/hex2rgb.test.js @@ -1,16 +1,76 @@ import { describe, it, expect } from 'vitest'; -import hex2rgb from '../src/io/hex/hex2rgb.js'; +import hex2rgb from '../../src/io/hex/hex2rgb.js'; describe('Testing HEX2RGB color conversions', () => { const testCases = { - 'parse simple #rrggbb HEX colors': ['#000000', '#ffffff', '#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff'], - 'parse simple rrggbb HEX colors without #': ['000000', 'ffffff', 'ff0000', '00ff00', '0000ff', 'ffff00', '00ffff', 'ff00ff'], - 'parse simple short-hand HEX colors': ['#000', '#fff', '#f00', '#0f0', '#00f', '#ff0', '#0ff', '#f0f'], - 'parse simple short-hand HEX colors without #': ['000', 'fff', 'f00', '0f0', '00f', 'ff0', '0ff', 'f0f'], - 'parse different #rrggbbaa HEX colors': ['#00000000', '#ffffff80', '#ff000040', '#00FF00C0', '#FF00FFFF'], - 'parse different rrggbbaa HEX colors without #': ['00000000', 'ffffff80', 'ff000040', '00FF00C0', 'FF00FFFF'], - 'parse different #rgba HEX colors': ['#0000', '#fff8', '#f004', '#0F0C', '#F0FF'], - 'parse different rgba HEX colors without #': ['0000', 'fff8', 'f004', '0F0C', 'F0FF'] + 'parse simple #rrggbb HEX colors': [ + '#000000', + '#ffffff', + '#ff0000', + '#00ff00', + '#0000ff', + '#ffff00', + '#00ffff', + '#ff00ff' + ], + 'parse simple rrggbb HEX colors without #': [ + '000000', + 'ffffff', + 'ff0000', + '00ff00', + '0000ff', + 'ffff00', + '00ffff', + 'ff00ff' + ], + 'parse simple short-hand HEX colors': [ + '#000', + '#fff', + '#f00', + '#0f0', + '#00f', + '#ff0', + '#0ff', + '#f0f' + ], + 'parse simple short-hand HEX colors without #': [ + '000', + 'fff', + 'f00', + '0f0', + '00f', + 'ff0', + '0ff', + 'f0f' + ], + 'parse different #rrggbbaa HEX colors': [ + '#00000000', + '#ffffff80', + '#ff000040', + '#00FF00C0', + '#FF00FFFF' + ], + 'parse different rrggbbaa HEX colors without #': [ + '00000000', + 'ffffff80', + 'ff000040', + '00FF00C0', + 'FF00FFFF' + ], + 'parse different #rgba HEX colors': [ + '#0000', + '#fff8', + '#f004', + '#0F0C', + '#F0FF' + ], + 'parse different rgba HEX colors without #': [ + '0000', + 'fff8', + 'f004', + '0F0C', + 'F0FF' + ] }; const expectedResults = { diff --git a/test/hsi2rgb.test.js b/test/io/hsi2rgb.test.js similarity index 96% rename from test/hsi2rgb.test.js rename to test/io/hsi2rgb.test.js index c358a2f7..d92320a9 100644 --- a/test/hsi2rgb.test.js +++ b/test/io/hsi2rgb.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import hsi2rgb from '../src/io/hsi/hsi2rgb.js'; +import hsi2rgb from '../../src/io/hsi/hsi2rgb.js'; const round = (digits) => { const d = Math.pow(10, digits); diff --git a/test/hsl2rgb.test.js b/test/io/hsl2rgb.test.js similarity index 69% rename from test/hsl2rgb.test.js rename to test/io/hsl2rgb.test.js index c4b7d5f9..d58e35cc 100644 --- a/test/hsl2rgb.test.js +++ b/test/io/hsl2rgb.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import hsl2rgb from '../src/io/hsl/hsl2rgb.js'; +import hsl2rgb from '../../src/io/hsl/hsl2rgb.js'; describe('Testing HSL to RGB color conversions', () => { const testCases = [ @@ -7,11 +7,23 @@ describe('Testing HSL to RGB color conversions', () => { { name: 'white', hsl: [0, 0, 1], rgb: [255, 255, 255, 1] }, { name: 'gray', hsl: [0, 0, 0.5], rgb: [127.5, 127.5, 127.5, 1] }, { name: 'red', hsl: [0, 1, 0.5], rgb: [255, 0, 0, 1] }, - { name: 'yellow', hsl: [60, 1, 0.5], rgb: [254.99999999999994, 255, 0, 1] }, + { + name: 'yellow', + hsl: [60, 1, 0.5], + rgb: [254.99999999999994, 255, 0, 1] + }, { name: 'green', hsl: [120, 1, 0.5], rgb: [0, 255, 0, 1] }, - { name: 'cyan', hsl: [180, 1, 0.5], rgb: [0, 254.99999999999994, 255, 1] }, + { + name: 'cyan', + hsl: [180, 1, 0.5], + rgb: [0, 254.99999999999994, 255, 1] + }, { name: 'blue', hsl: [240, 1, 0.5], rgb: [0, 0, 255, 1] }, - { name: 'magenta', hsl: [300, 1, 0.5], rgb: [255, 0, 254.99999999999994, 1] }, + { + name: 'magenta', + hsl: [300, 1, 0.5], + rgb: [255, 0, 254.99999999999994, 1] + }, { name: 'red again', hsl: [360, 1, 0.5], rgb: [255, 0, 0, 1] } ]; diff --git a/test/hsv2rgb.test.js b/test/io/hsv2rgb.test.js similarity index 94% rename from test/hsv2rgb.test.js rename to test/io/hsv2rgb.test.js index c0fd7154..dcacf9eb 100644 --- a/test/hsv2rgb.test.js +++ b/test/io/hsv2rgb.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import hsv2rgb from '../src/io/hsv/hsv2rgb.js'; +import hsv2rgb from '../../src/io/hsv/hsv2rgb.js'; describe('Testing HSV to RGB color conversions', () => { const testCases = [ diff --git a/test/lab2lch.test.js b/test/io/lab2lch.test.js similarity index 77% rename from test/lab2lch.test.js rename to test/io/lab2lch.test.js index a995ef81..0944747f 100644 --- a/test/lab2lch.test.js +++ b/test/io/lab2lch.test.js @@ -1,16 +1,28 @@ import { describe, it, expect } from 'vitest'; -import lab2lch from '../src/io/lch/lab2lch.js'; +import lab2lch from '../../src/io/lch/lab2lch.js'; const testCases = [ { name: 'black', lab: [0, 0, 0], lch: [0, 0, NaN] }, { name: 'white', lab: [100, 0, 0], lch: [100, 0, NaN] }, { name: 'gray', lab: [53.59, 0, 0], lch: [53.59, 0, NaN] }, { name: 'red', lab: [53.24, 80.09, 67.2], lch: [53.24, 104.55, 40] }, - { name: 'yellow', lab: [97.14, -21.55, 94.48], lch: [97.14, 96.91, 102.85] }, - { name: 'green', lab: [87.73, -86.18, 83.18], lch: [87.73, 119.77, 136.01] }, + { + name: 'yellow', + lab: [97.14, -21.55, 94.48], + lch: [97.14, 96.91, 102.85] + }, + { + name: 'green', + lab: [87.73, -86.18, 83.18], + lch: [87.73, 119.77, 136.01] + }, { name: 'cyan', lab: [91.11, -48.09, -14.13], lch: [91.11, 50.12, 196.37] }, { name: 'blue', lab: [32.3, 79.19, -107.86], lch: [32.3, 133.81, 306.29] }, - { name: 'magenta', lab: [60.32, 98.23, -60.82], lch: [60.32, 115.53, 328.24] } + { + name: 'magenta', + lab: [60.32, 98.23, -60.82], + lch: [60.32, 115.53, 328.24] + } ]; const round = (digits) => { diff --git a/test/lab2rgb.test.js b/test/io/lab2rgb.test.js similarity index 92% rename from test/lab2rgb.test.js rename to test/io/lab2rgb.test.js index 7e16c61f..13986cb3 100644 --- a/test/lab2rgb.test.js +++ b/test/io/lab2rgb.test.js @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import lab2rgb from '../src/io/lab/lab2rgb.js'; -import limit from '../src/utils/limit.js'; +import lab2rgb from '../../src/io/lab/lab2rgb.js'; +import limit from '../../src/utils/limit.js'; const round = (v) => limit(Math.round(v), +0, 255); diff --git a/test/lch2lab.test.js b/test/io/lch2lab.test.js similarity index 77% rename from test/lch2lab.test.js rename to test/io/lch2lab.test.js index 2ccd2e2d..f69b9fcb 100644 --- a/test/lch2lab.test.js +++ b/test/io/lch2lab.test.js @@ -1,16 +1,28 @@ import { describe, it, expect } from 'vitest'; -import lch2lab from '../src/io/lch/lch2lab.js'; +import lch2lab from '../../src/io/lch/lch2lab.js'; const testCases = [ { name: 'black', lab: [0, 0, 0], lch: [0, 0, NaN] }, { name: 'white', lab: [100, 0, 0], lch: [100, 0, NaN] }, { name: 'gray', lab: [53.59, 0, 0], lch: [53.59, 0, NaN] }, { name: 'red', lab: [53.24, 80.09, 67.2], lch: [53.24, 104.55, 40] }, - { name: 'yellow', lab: [97.14, -21.55, 94.48], lch: [97.14, 96.91, 102.85] }, - { name: 'green', lab: [87.73, -86.17, 83.18], lch: [87.73, 119.77, 136.01] }, + { + name: 'yellow', + lab: [97.14, -21.55, 94.48], + lch: [97.14, 96.91, 102.85] + }, + { + name: 'green', + lab: [87.73, -86.17, 83.18], + lch: [87.73, 119.77, 136.01] + }, { name: 'cyan', lab: [91.11, -48.09, -14.13], lch: [91.11, 50.12, 196.37] }, { name: 'blue', lab: [32.3, 79.2, -107.86], lch: [32.3, 133.81, 306.29] }, - { name: 'magenta', lab: [60.32, 98.23, -60.81], lch: [60.32, 115.53, 328.24] } + { + name: 'magenta', + lab: [60.32, 98.23, -60.81], + lch: [60.32, 115.53, 328.24] + } ]; const round = (digits) => { diff --git a/test/lch2rgb.test.js b/test/io/lch2rgb.test.js similarity index 94% rename from test/lch2rgb.test.js rename to test/io/lch2rgb.test.js index cb5b297c..964736b4 100644 --- a/test/lch2rgb.test.js +++ b/test/io/lch2rgb.test.js @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import limit from '../src/utils/limit.js'; -import lch2rgb from '../src/io/lch/lch2rgb.js'; +import limit from '../../src/utils/limit.js'; +import lch2rgb from '../../src/io/lch/lch2rgb.js'; const testCases = [ { name: 'black', in: [0, 0, NaN], out: [0, 0, 0, 1] }, diff --git a/test/num2rgb.test.js b/test/io/num2rgb.test.js similarity index 94% rename from test/num2rgb.test.js rename to test/io/num2rgb.test.js index 1c1124b4..290ffc5b 100644 --- a/test/num2rgb.test.js +++ b/test/io/num2rgb.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import num2rgb from '../src/io/num/num2rgb.js'; +import num2rgb from '../../src/io/num/num2rgb.js'; describe('Testing num2rgb color conversions', () => { const testCases = { diff --git a/test/oklab2rgb.test.js b/test/io/oklab2rgb.test.js similarity index 93% rename from test/oklab2rgb.test.js rename to test/io/oklab2rgb.test.js index 07402d2c..92684d8a 100644 --- a/test/oklab2rgb.test.js +++ b/test/io/oklab2rgb.test.js @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import limit from '../src/utils/limit.js'; -import oklab2rgb from '../src/io/oklab/oklab2rgb.js'; +import limit from '../../src/utils/limit.js'; +import oklab2rgb from '../../src/io/oklab/oklab2rgb.js'; const round = (v) => limit(Math.round(v), 0, 255); diff --git a/test/oklch2rgb.test.js b/test/io/oklch2rgb.test.js similarity index 63% rename from test/oklch2rgb.test.js rename to test/io/oklch2rgb.test.js index 734b789a..f0de157d 100644 --- a/test/oklch2rgb.test.js +++ b/test/io/oklch2rgb.test.js @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import limit from '../src/utils/limit.js'; -import oklch2rgb from '../src/io/oklch/oklch2rgb.js'; +import limit from '../../src/utils/limit.js'; +import oklch2rgb from '../../src/io/oklch/oklch2rgb.js'; const round = (v) => limit(Math.round(v), 0, 255); @@ -9,12 +9,27 @@ describe('Testing LCH conversions', () => { black: { in: [0.0, 0.0, NaN], out: [0, 0, 0, 1] }, white: { in: [1.0, 0.0, NaN], out: [255, 255, 255, 1] }, gray: { in: [0.59987, 0.0, NaN], out: [128, 128, 128, 1] }, - red: { in: [0.62796, 0.25768, 29.233885192342633], out: [255, 0, 0, 1] }, - yellow: { in: [0.96798, 0.21101, 109.76923207652125], out: [255, 255, 0, 1] }, - green: { in: [0.51975, 0.17686, 142.49533888780996], out: [0, 128, 0, 1] }, - cyan: { in: [0.9054, 0.15455, 194.76894793196382], out: [0, 255, 255, 1] }, + red: { + in: [0.62796, 0.25768, 29.233885192342633], + out: [255, 0, 0, 1] + }, + yellow: { + in: [0.96798, 0.21101, 109.76923207652125], + out: [255, 255, 0, 1] + }, + green: { + in: [0.51975, 0.17686, 142.49533888780996], + out: [0, 128, 0, 1] + }, + cyan: { + in: [0.9054, 0.15455, 194.76894793196382], + out: [0, 255, 255, 1] + }, blue: { in: [0.45201, 0.31321, 264.052020638055], out: [0, 0, 255, 1] }, - magenta: { in: [0.70167, 0.32249, 328.36341792345144], out: [255, 0, 255, 1] } + magenta: { + in: [0.70167, 0.32249, 328.36341792345144], + out: [255, 0, 255, 1] + } }; Object.keys(testCases).forEach((key) => { diff --git a/test/rgb2cmyk.test.js b/test/io/rgb2cmyk.test.js similarity index 93% rename from test/rgb2cmyk.test.js rename to test/io/rgb2cmyk.test.js index 6e99ef55..7c12f5ab 100644 --- a/test/rgb2cmyk.test.js +++ b/test/io/rgb2cmyk.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2cmyk from '../src/io/cmyk/rgb2cmyk.js'; +import rgb2cmyk from '../../src/io/cmyk/rgb2cmyk.js'; const tests = { black: { cmyk: [0, 0, 0, 1], rgb: [0, 0, 0, 1] }, diff --git a/test/rgb2css.test.js b/test/io/rgb2css.test.js similarity index 80% rename from test/rgb2css.test.js rename to test/io/rgb2css.test.js index 9e852cef..b1dcbeaf 100644 --- a/test/rgb2css.test.js +++ b/test/io/rgb2css.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2css from '../src/io/css/rgb2css.js'; +import rgb2css from '../../src/io/css/rgb2css.js'; const tests = { black: { rgb: [0, 0, 0], css: 'rgb(0,0,0)' }, @@ -7,8 +7,16 @@ const tests = { auto_rgba: { rgb: [255, 0, 0, 0.25], css: 'rgba(255,0,0,0.25)' }, force_rgba: { rgb: [255, 0, 0], mode: 'rgba', css: 'rgba(255,0,0,1)' }, hsl: { rgb: [255, 0, 0], mode: 'hsl', css: 'hsl(0,100%,50%)' }, - auto_hsla: { rgb: [255, 0, 0, 0.5], mode: 'hsl', css: 'hsla(0,100%,50%,0.5)' }, - force_hsla: { rgb: [255, 255, 0, 0.75], mode: 'hsl', css: 'hsla(60,100%,50%,0.75)' } + auto_hsla: { + rgb: [255, 0, 0, 0.5], + mode: 'hsl', + css: 'hsla(0,100%,50%,0.5)' + }, + force_hsla: { + rgb: [255, 255, 0, 0.75], + mode: 'hsl', + css: 'hsla(60,100%,50%,0.75)' + } }; describe('Testing rgb2css color conversions', () => { diff --git a/test/rgb2hex.test.js b/test/io/rgb2hex.test.js similarity index 96% rename from test/rgb2hex.test.js rename to test/io/rgb2hex.test.js index 771a7443..4d637719 100644 --- a/test/rgb2hex.test.js +++ b/test/io/rgb2hex.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2hex from '../src/io/hex/rgb2hex.js'; +import rgb2hex from '../../src/io/hex/rgb2hex.js'; const tests = { black: { rgb: [0, 0, 0, 1], mode: 'auto', hex: '#000000' }, diff --git a/test/rgb2hsi.test.js b/test/io/rgb2hsi.test.js similarity index 96% rename from test/rgb2hsi.test.js rename to test/io/rgb2hsi.test.js index e44d890d..1edfc463 100644 --- a/test/rgb2hsi.test.js +++ b/test/io/rgb2hsi.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2hsi from '../src/io/hsi/rgb2hsi.js'; +import rgb2hsi from '../../src/io/hsi/rgb2hsi.js'; const tests = { black2: { hsi: [NaN, 0, 0], rgb: [0, 0, 0, 1] }, diff --git a/test/rgb2hsv.test.js b/test/io/rgb2hsv.test.js similarity index 95% rename from test/rgb2hsv.test.js rename to test/io/rgb2hsv.test.js index 098a60b3..83b55451 100644 --- a/test/rgb2hsv.test.js +++ b/test/io/rgb2hsv.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2hsv from '../src/io/hsv/rgb2hsv.js'; +import rgb2hsv from '../../src/io/hsv/rgb2hsv.js'; const tests = { black: { hsv: [NaN, 0, 0], rgb: [0, 0, 0, 1] }, diff --git a/test/rgb2lab.test.js b/test/io/rgb2lab.test.js similarity index 96% rename from test/rgb2lab.test.js rename to test/io/rgb2lab.test.js index 5f18e654..08d08ef0 100644 --- a/test/rgb2lab.test.js +++ b/test/io/rgb2lab.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2lab from '../src/io/lab/rgb2lab.js'; +import rgb2lab from '../../src/io/lab/rgb2lab.js'; const round = (digits) => { const d = Math.pow(10, digits); diff --git a/test/rgb2lch.test.js b/test/io/rgb2lch.test.js similarity index 96% rename from test/rgb2lch.test.js rename to test/io/rgb2lch.test.js index 74a09bbb..ec6e9c14 100644 --- a/test/rgb2lch.test.js +++ b/test/io/rgb2lch.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2lch from '../src/io/lch/rgb2lch.js'; +import rgb2lch from '../../src/io/lch/rgb2lch.js'; const round = (digits) => { const d = Math.pow(10, digits); diff --git a/test/rgb2oklab.test.js b/test/io/rgb2oklab.test.js similarity index 96% rename from test/rgb2oklab.test.js rename to test/io/rgb2oklab.test.js index afaceddf..d2736d30 100644 --- a/test/rgb2oklab.test.js +++ b/test/io/rgb2oklab.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2oklab from '../src/io/oklab/rgb2oklab.js'; +import rgb2oklab from '../../src/io/oklab/rgb2oklab.js'; const round = (digits) => { const d = Math.pow(10, digits); diff --git a/test/rgb2oklch.test.js b/test/io/rgb2oklch.test.js similarity index 92% rename from test/rgb2oklch.test.js rename to test/io/rgb2oklch.test.js index 07725f8d..09e8f795 100644 --- a/test/rgb2oklch.test.js +++ b/test/io/rgb2oklch.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import rgb2oklch from '../src/io/oklch/rgb2oklch.js'; +import rgb2oklch from '../../src/io/oklch/rgb2oklch.js'; const tests = { black: { oklch: [0.0, 0.0, NaN], rgb: [0, 0, 0, 1] }, @@ -37,7 +37,9 @@ describe('Test rgb2oklch color conversions', () => { }); it('converts arguments', () => { - expect(rgb2oklch.apply(null, test.rgb).map(rnd)).toEqual(test.oklch); + expect(rgb2oklch.apply(null, test.rgb).map(rnd)).toEqual( + test.oklch + ); }); }); }); diff --git a/test/lch.test.js b/test/lch.test.js index 10a5df5c..48c9b363 100644 --- a/test/lch.test.js +++ b/test/lch.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Some tests for chroma.lch()', () => { describe('lch grayscale', () => { diff --git a/test/luminance.test.js b/test/luminance.test.js index a9089c9c..ea12a5ba 100644 --- a/test/luminance.test.js +++ b/test/luminance.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; const rnd = function (f, d) { d = Math.pow(10, d); diff --git a/test/manipulate.test.js b/test/manipulate.test.js index 4f4dfa5b..9edebcc8 100644 --- a/test/manipulate.test.js +++ b/test/manipulate.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Manipulating colors', () => { it('darken', () => { diff --git a/test/misc.test.js b/test/misc.test.js index dce9a0b2..ac5fe7a1 100644 --- a/test/misc.test.js +++ b/test/misc.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; const round = function (digits) { var d; diff --git a/test/mix.test.js b/test/mix.test.js index fbcd1810..a5abe4dc 100644 --- a/test/mix.test.js +++ b/test/mix.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Some tests for chroma.color()', () => { it('hsv interpolation white <-> red', () => { diff --git a/test/num.test.js b/test/num.test.js index 353bbfa7..76e76ae7 100644 --- a/test/num.test.js +++ b/test/num.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Some tests for chroma.num()', () => { it('number output', () => { diff --git a/test/premultiply.test.js b/test/premultiply.test.js index 37268bad..f22c6c0f 100644 --- a/test/premultiply.test.js +++ b/test/premultiply.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Premultiply colors', () => { it('premultiply rgba', () => { diff --git a/test/random.test.js b/test/random.test.js index 4b34a0a8..8e65dd51 100644 --- a/test/random.test.js +++ b/test/random.test.js @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; describe('Some tests for random colors', () => { it('should generate valid hex codes for random colors', () => { diff --git a/test/scale.lcorrection.test.js b/test/scale.lcorrection.test.js index a34c9a93..76fcb76d 100644 --- a/test/scale.lcorrection.test.js +++ b/test/scale.lcorrection.test.js @@ -1,9 +1,11 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; + +const scale = chroma.scale; describe('Testing lightness correction', () => { describe('simple two color linear interpolation', () => { - const f = chroma.scale(['white', 'black']).mode('lab'); + const f = scale(['white', 'black']).mode('lab'); it('center L is 50', () => { expect(Math.round(f(0.5).lab()[0])).toBe(50); @@ -11,7 +13,7 @@ describe('Testing lightness correction', () => { }); describe('hot - w/o correction', () => { - const f = chroma.scale(['white', 'yellow', 'red', 'black']).mode('lab'); + const f = scale(['white', 'yellow', 'red', 'black']).mode('lab'); it('center L is 74', () => { expect(Math.round(f(0.5).lab()[0])).toBe(74); @@ -19,7 +21,7 @@ describe('Testing lightness correction', () => { }); describe('hot - with correction', () => { - const f = chroma.scale(['white', 'yellow', 'red', 'black']).mode('lab').correctLightness(true); + const f = scale(['white', 'yellow', 'red', 'black']).mode('lab').correctLightness(true); it('center L is 50', () => { expect(Math.round(f(0.5).lab()[0])).toBe(50); @@ -27,7 +29,7 @@ describe('Testing lightness correction', () => { }); describe('hot - w/o correction - domained [0,100]', () => { - const f = chroma.scale(['white', 'yellow', 'red', 'black']).domain([0, 100]).mode('lab'); + const f = scale(['white', 'yellow', 'red', 'black']).domain([0, 100]).mode('lab'); it('center L is 74', () => { expect(Math.round(f(50).lab()[0])).toBe(74); @@ -35,7 +37,7 @@ describe('Testing lightness correction', () => { }); describe('hot - with correction - domained [0,100]', () => { - const f = chroma.scale(['white', 'yellow', 'red', 'black']).domain([0, 100]).mode('lab').correctLightness(true); + const f = scale(['white', 'yellow', 'red', 'black']).domain([0, 100]).mode('lab').correctLightness(true); it('center L is 50', () => { expect(Math.round(f(50).lab()[0])).toBe(50); @@ -43,7 +45,7 @@ describe('Testing lightness correction', () => { }); describe('hot - w/o correction - domained [0,20,40,60,80,100]', () => { - const f = chroma.scale(['white', 'yellow', 'red', 'black']).domain([0, 20, 40, 60, 80, 100]).mode('lab'); + const f = scale(['white', 'yellow', 'red', 'black']).domain([0, 20, 40, 60, 80, 100]).mode('lab'); it('center L is 74', () => { expect(Math.round(f(50).lab()[0])).toBe(74); @@ -51,7 +53,7 @@ describe('Testing lightness correction', () => { }); describe('hot - with correction - domained [0,20,40,60,80,100]', () => { - const f = chroma.scale(['white', 'yellow', 'red', 'black']).domain([0, 20, 40, 60, 80, 100]).mode('lab').correctLightness(true); + const f = scale(['white', 'yellow', 'red', 'black']).domain([0, 20, 40, 60, 80, 100]).mode('lab').correctLightness(true); it('center L is 50', () => { expect(Math.round(f(50).lab()[0])).toBe(50); diff --git a/test/scales.test.js b/test/scales.test.js index 2d262d76..4fe5e589 100644 --- a/test/scales.test.js +++ b/test/scales.test.js @@ -1,6 +1,7 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; -import scale from '../src/generator/scale.js'; +import chroma from 'chroma-js'; + +const scale = chroma.scale; describe('Some tests for scale()', () => { describe('simple rgb scale (white-->black)', () => { diff --git a/test/valid.test.js b/test/valid.test.js index 96f9da13..4798c15a 100644 --- a/test/valid.test.js +++ b/test/valid.test.js @@ -1,12 +1,14 @@ import { describe, it, expect } from 'vitest'; -import chroma from '../index.js'; +import chroma from 'chroma-js'; + +const valid = chroma.valid; describe('Some tests for chroma.valid', () => { it('valid color', () => { - expect(chroma.valid('red')).toBe(true); + expect(valid('red')).toBe(true); }); it('invalid color', () => { - expect(chroma.valid('bread')).toBe(false); + expect(valid('bread')).toBe(false); }); }); diff --git a/vitest.config.mjs b/vitest.config.mjs new file mode 100644 index 00000000..6044d929 --- /dev/null +++ b/vitest.config.mjs @@ -0,0 +1,13 @@ +import { resolve } from 'node:path' +import { defineConfig } from 'vitest/config' +import { name } from './package.json' + +const r = (p) => resolve(__dirname, p) + +export default defineConfig({ + resolve: { + alias: { + [name]: r('./index.js'), + }, + }, +})