chromametry 0.3.4 → 0.3.5

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var O=(l,t)=>{for(var s in t)v(l,s,{get:t[s],enumerable:!0})},V=(l,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of j(t))!N.call(l,e)&&e!==s&&v(l,e,{get:()=>t[e],enumerable:!(n=G(t,e))||n.enumerable});return l};var $=l=>V(v({},"__esModule",{value:!0}),l);var et={};O(et,{Palette:()=>T,Ramp:()=>q,Swatch:()=>y,calcDeltaE2000:()=>k,calcScore:()=>L,calcStatistics:()=>nt,createMonotone:()=>E,cssRgbToRgb:()=>st,fromLightnessEAL:()=>J,hexToRgb:()=>C,labToLch:()=>P,labToRgb:()=>tt,lchToLab:()=>Q,rgbToHex:()=>Z,rgbToLab:()=>S,rootMeanSquare:()=>d,toLightnessEAL:()=>_});module.exports=$(et);var F=l=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return l.map(t)},K=l=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return l.map(t)},Z=l=>{let[t,s,n]=F(l);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},C=l=>{let t=parseInt(l.slice(1,3),16)/255,s=parseInt(l.slice(3,5),16)/255,n=parseInt(l.slice(5,7),16)/255;return K([t,s,n])},_=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e},J=(l,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),Math.max(0,l-(m+c)*e)},Q=l=>{let[t,s,n]=l,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},S=l=>{let[t,s,n]=l,e=.4124564*t+.3575761*s+.1804375*n,h=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,i=g=>g>.008856?Math.cbrt(g):7.787*g+16/116,m=i(e/a),c=i(h/u),p=i(o/r);return[116*c-16,500*(m-c),200*(c-p)]},tt=l=>{let[t,s,n]=l,e=(t+16)/116,h=s/500+e,o=e-n/200,a=g=>g**3>.008856?g**3:(g-16/116)/7.787,u=.95047,r=1,i=1.08883,m=a(h)*u,c=a(e)*r,p=a(o)*i;return[3.2404542*m-1.5371385*c-.4985314*p,-.969266*m+1.8760108*c+.041556*p,.0556434*m-.2040259*c+1.0572252*p]},P=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},k=(l,t)=>{let[s,n,e]=l,[h,o,a]=t,u=(s+h)/2,r=Math.sqrt(n*n+e*e),i=Math.sqrt(o*o+a*a),m=(r+i)/2,c=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),p=n*(1+c),g=o*(1+c),M=Math.sqrt(p*p+e*e),b=Math.sqrt(g*g+a*a),w=(M+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),f=Math.atan2(a,g)*180/Math.PI+(Math.atan2(a,g)<0?360:0),R=f-x;Math.abs(R)>180&&(R+=f<=x?360:-360);let I=Math.abs(x-f)>180?(x+f+360)/2:(x+f)/2,Y=1-.17*Math.cos((I-30)*Math.PI/180)+.24*Math.cos(2*I*Math.PI/180)+.32*Math.cos((3*I+6)*Math.PI/180)-.2*Math.cos((4*I-63)*Math.PI/180),U=h-s,B=b-M,A=2*Math.sqrt(M*b)*Math.sin(R/2*Math.PI/180),W=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),D=1+.045*w,H=1+.015*w*Y,X=30*Math.exp(-Math.pow((I-275)/25,2)),z=-(2*Math.sqrt(Math.pow(w,7)/(Math.pow(w,7)+Math.pow(25,7))))*Math.sin(2*X*Math.PI/180);return Math.sqrt(Math.pow(U/W,2)+Math.pow(B/D,2)+Math.pow(A/H,2)+z*(B/D)*(A/H))},st=l=>{let t=l.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},E=l=>{if(l.length<1)return r=>0;let t=[...l].sort((r,i)=>r[0]-i[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),h=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(h[r+1]-h[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let i=a[r-1],m=a[r];if(i*m<=0)u[r]=0;else{let c=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=i*m/((1-c)*i+c*m)}}return r=>{if(r<=e[0])return h[0];if(r>=e[n-1])return h[n-1];let i=0,m=n-2,c=0;for(;i<=m;){let f=Math.floor((i+m)/2);if(r>=e[f]&&r<=e[f+1]){c=f;break}r<e[f]?m=f-1:i=f+1}let p=o[c],g=(r-e[c])/p,M=g*g,b=M*g,w=u[c]*p,x=u[c+1]*p;return(2*b-3*M+1)*h[c]+(b-2*M+g)*w+(-2*b+3*M)*h[c+1]+(b-M)*x}};function d(l){let t=l.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=l[n]*l[n];return Math.sqrt(s/t)}var nt=l=>{let t=l.length;if(t===0)return{min:0,max:0,avg:0};let s=l[0],n=l[0],e=0;for(let h=0;h<t;h++){let o=l[h];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=l=>{let t=l.length;if(t===0)return 0;let s=1e-6,n=l.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var y=class{constructor(t){this.hex=t}get rgb(){return C(this.hex)}get lab(){return S(this.rgb)}get lch(){return P(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new y(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let h=new y(e);h.chroma>n&&(n=h.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=S(C(this.colors[0])),s=S(C(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let h of[30,45,70]){let o=h/10,a=n,u=0;for(let r=1;r<s;r++){let i=1/0;for(let m=0;m<s-r;m++){let c=t[m].luminance,p=t[m+r].luminance,g=(Math.max(c,p)+.05)/(Math.min(c,p)+.05);g<i&&(i=g)}if(i>=o){a=r,u=i;break}r===n&&(u=i)}e[h]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},h=(o,a)=>{let i=o<.022?o+Math.pow(.022-o,1.414):o,m=a<.022?a+Math.pow(.022-a,1.414):a,c=m>=i?(Math.pow(m,.56)-Math.pow(i,.57))*114:(Math.pow(m,.65)-Math.pow(i,.62))*114;return Math.abs(c)<10?0:(c=c>0?c-2.7:c+2.7,Math.round(c))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let i=1;i<s;i++){let m=1/0;for(let c=0;c<s-i;c++){let p=t[c].luminance>t[c+i].luminance?t[c].luminance:t[c+i].luminance,g=t[c].luminance>t[c+i].luminance?t[c+i].luminance:t[c].luminance,M=Math.abs(h(g,p));M<m&&(m=M)}if(m>=a){u=i,r=m;break}i===n&&(r=m)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=k(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,h=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],h+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*h-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let m=0,c=0;for(let p=0;p<s;p++){let g=u*p+r,M=t[p]-g;m+=M*M;let b=Math.max(g-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-g);c+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(m/s)/Math.sqrt(c/s)))}get chromaSmoothness(){let t=this.swatches.map(c=>c.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let h=t.map(c=>c/e*n),o=Math.min(...h),a=Math.max(...h),u=h.findIndex(c=>c===a),r=E([[0,h[0]],[u,a],[s-1,h[s-1]]]),i=0,m=0;for(let c=0;c<s;c++){let p=r(c),g=h[c]-p;i+=g*g,m+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/s)/Math.sqrt(m/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let h=0;for(let a of n)h+=Math.pow(a-e,2);let o=Math.sqrt(h/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,h=0;for(let r=0;r<s;r++){let i=Math.abs(t[r]-n)%360;i>180&&(i=360-i),e+=i*i;let m=r/(s-1)*180;h+=m*m}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(h/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var T=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get contrastEfficiency(){return d(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return d(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return d(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return d(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return d(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};0&&(module.exports={Palette,Ramp,Swatch,calcDeltaE2000,calcScore,calcStatistics,createMonotone,cssRgbToRgb,fromLightnessEAL,hexToRgb,labToLch,labToRgb,lchToLab,rgbToHex,rgbToLab,rootMeanSquare,toLightnessEAL});
1
+ "use strict";var v=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var j=(i,t)=>{for(var s in t)v(i,s,{get:t[s],enumerable:!0})},N=(i,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of G(t))!O.call(i,e)&&e!==s&&v(i,e,{get:()=>t[e],enumerable:!(n=z(t,e))||n.enumerable});return i};var V=i=>N(v({},"__esModule",{value:!0}),i);var at={};j(at,{Palette:()=>T,Ramp:()=>q,Swatch:()=>y,calcDeltaE2000:()=>P,calcScore:()=>L,calcStatistics:()=>rt,createMonotone:()=>E,cssRgbToRgb:()=>et,fromLightnessEAL:()=>tt,hexToRgb:()=>C,labToLch:()=>k,labToRgb:()=>nt,lchToLab:()=>st,oklabToRgb:()=>J,rgbToHex:()=>K,rgbToLab:()=>S,rgbToOklab:()=>Z,rootMeanSquare:()=>d,toLightnessEAL:()=>Q});module.exports=V(at);var $=i=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return i.map(t)},F=i=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return i.map(t)},K=i=>{let[t,s,n]=$(i);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},C=i=>{let t=parseInt(i.slice(1,3),16)/255,s=parseInt(i.slice(3,5),16)/255,n=parseInt(i.slice(5,7),16)/255;return F([t,s,n])},Z=i=>{let t=.4122214708*i[0]+.5363325363*i[1]+.0514459929*i[2],s=.2119034982*i[0]+.6806995451*i[1]+.1073969566*i[2],n=.0883024619*i[0]+.2817188376*i[1]+.6299787005*i[2],e=Math.cbrt(t),c=Math.cbrt(s),o=Math.cbrt(n);return[.2104542553*e+.793617785*c-.0040720468*o,1.9779984951*e-2.428592205*c+.4505937099*o,.0259040371*e+.7827717662*c-.808675766*o]},J=i=>{let[t,s,n]=i,e=t+.3963377774*s+.2158037573*n,c=t-.1055613458*s-.0638541728*n,o=t-.0894841775*s-1.291485548*n,a=e*e*e,u=c*c*c,r=o*o*o;return[4.0767416621*a-3.3077115913*u+.2309699292*r,-1.2684380046*a+2.6097574011*u-.3413193965*r,-.0041960863*a-.7034186147*u+1.707614701*r]},Q=i=>{let[t,s,n]=i,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),t+(m+h)*e},tt=(i,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),Math.max(0,i-(m+h)*e)},st=i=>{let[t,s,n]=i,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},S=i=>{let[t,s,n]=i,e=.4124564*t+.3575761*s+.1804375*n,c=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,l=M=>M>.008856?Math.cbrt(M):7.787*M+16/116,m=l(e/a),h=l(c/u),p=l(o/r);return[116*h-16,500*(m-h),200*(h-p)]},nt=i=>{let[t,s,n]=i,e=(t+16)/116,c=s/500+e,o=e-n/200,a=M=>M**3>.008856?M**3:(M-16/116)/7.787,u=.95047,r=1,l=1.08883,m=a(c)*u,h=a(e)*r,p=a(o)*l;return[3.2404542*m-1.5371385*h-.4985314*p,-.969266*m+1.8760108*h+.041556*p,.0556434*m-.2040259*h+1.0572252*p]},k=i=>{let[t,s,n]=i,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},P=(i,t)=>{let[s,n,e]=i,[c,o,a]=t,u=(s+c)/2,r=Math.sqrt(n*n+e*e),l=Math.sqrt(o*o+a*a),m=(r+l)/2,h=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),p=n*(1+h),M=o*(1+h),f=Math.sqrt(p*p+e*e),b=Math.sqrt(M*M+a*a),w=(f+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),g=Math.atan2(a,M)*180/Math.PI+(Math.atan2(a,M)<0?360:0),R=g-x;Math.abs(R)>180&&(R+=g<=x?360:-360);let I=Math.abs(x-g)>180?(x+g+360)/2:(x+g)/2,H=1-.17*Math.cos((I-30)*Math.PI/180)+.24*Math.cos(2*I*Math.PI/180)+.32*Math.cos((3*I+6)*Math.PI/180)-.2*Math.cos((4*I-63)*Math.PI/180),Y=c-s,B=b-f,A=2*Math.sqrt(f*b)*Math.sin(R/2*Math.PI/180),U=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),D=1+.045*w,_=1+.015*w*H,W=30*Math.exp(-Math.pow((I-275)/25,2)),X=-(2*Math.sqrt(Math.pow(w,7)/(Math.pow(w,7)+Math.pow(25,7))))*Math.sin(2*W*Math.PI/180);return Math.sqrt(Math.pow(Y/U,2)+Math.pow(B/D,2)+Math.pow(A/_,2)+X*(B/D)*(A/_))},et=i=>{let t=i.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},E=i=>{if(i.length<1)return r=>0;let t=[...i].sort((r,l)=>r[0]-l[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),c=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(c[r+1]-c[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let l=a[r-1],m=a[r];if(l*m<=0)u[r]=0;else{let h=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=l*m/((1-h)*l+h*m)}}return r=>{if(r<=e[0])return c[0];if(r>=e[n-1])return c[n-1];let l=0,m=n-2,h=0;for(;l<=m;){let g=Math.floor((l+m)/2);if(r>=e[g]&&r<=e[g+1]){h=g;break}r<e[g]?m=g-1:l=g+1}let p=o[h],M=(r-e[h])/p,f=M*M,b=f*M,w=u[h]*p,x=u[h+1]*p;return(2*b-3*f+1)*c[h]+(b-2*f+M)*w+(-2*b+3*f)*c[h+1]+(b-f)*x}};function d(i){let t=i.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=i[n]*i[n];return Math.sqrt(s/t)}var rt=i=>{let t=i.length;if(t===0)return{min:0,max:0,avg:0};let s=i[0],n=i[0],e=0;for(let c=0;c<t;c++){let o=i[c];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=i=>{let t=i.length;if(t===0)return 0;let s=1e-6,n=i.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),c=Math.max(0,Math.min(1,e));return parseFloat((c*100).toFixed(2))};var y=class{constructor(t){this.hex=t}get rgb(){return C(this.hex)}get lab(){return S(this.rgb)}get lch(){return k(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),t+(m+h)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=c=>c>5e-4?c:c+Math.pow(5e-4-c,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new y(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let c=new y(e);c.chroma>n&&(n=c.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=S(C(this.colors[0])),s=S(C(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let c of[30,45,70]){let o=c/10,a=n,u=0;for(let r=1;r<s;r++){let l=1/0;for(let m=0;m<s-r;m++){let h=t[m].luminance,p=t[m+r].luminance,M=(Math.max(h,p)+.05)/(Math.min(h,p)+.05);M<l&&(l=M)}if(l>=o){a=r,u=l;break}r===n&&(u=l)}e[c]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},c=(o,a)=>{let l=o<.022?o+Math.pow(.022-o,1.414):o,m=a<.022?a+Math.pow(.022-a,1.414):a,h=m>=l?(Math.pow(m,.56)-Math.pow(l,.57))*114:(Math.pow(m,.65)-Math.pow(l,.62))*114;return Math.abs(h)<10?0:(h=h>0?h-2.7:h+2.7,Math.round(h))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let l=1;l<s;l++){let m=1/0;for(let h=0;h<s-l;h++){let p=t[h].luminance>t[h+l].luminance?t[h].luminance:t[h+l].luminance,M=t[h].luminance>t[h+l].luminance?t[h+l].luminance:t[h].luminance,f=Math.abs(c(M,p));f<m&&(m=f)}if(m>=a){u=l,r=m;break}l===n&&(r=m)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=P(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,c=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],c+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*c-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let m=0,h=0;for(let p=0;p<s;p++){let M=u*p+r,f=t[p]-M;m+=f*f;let b=Math.max(M-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-M);h+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(m/s)/Math.sqrt(h/s)))}get chromaSmoothness(){let t=this.swatches.map(h=>h.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let c=t.map(h=>h/e*n),o=Math.min(...c),a=Math.max(...c),u=c.findIndex(h=>h===a),r=E([[0,c[0]],[u,a],[s-1,c[s-1]]]),l=0,m=0;for(let h=0;h<s;h++){let p=r(h),M=c[h]-p;l+=M*M,m+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(l/s)/Math.sqrt(m/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let c=0;for(let a of n)c+=Math.pow(a-e,2);let o=Math.sqrt(c/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,c=0;for(let r=0;r<s;r++){let l=Math.abs(t[r]-n)%360;l>180&&(l=360-l),e+=l*l;let m=r/(s-1)*180;c+=m*m}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(c/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var T=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),c=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:c,value:o/(this.ramps.length||1),efficiency:s>1?c/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),c=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:c,value:o/(this.ramps.length||1),efficiency:s>1?c/(s-1):0}}return t}get contrastEfficiency(){return d(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return d(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return d(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return d(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return d(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};0&&(module.exports={Palette,Ramp,Swatch,calcDeltaE2000,calcScore,calcStatistics,createMonotone,cssRgbToRgb,fromLightnessEAL,hexToRgb,labToLch,labToRgb,lchToLab,oklabToRgb,rgbToHex,rgbToLab,rgbToOklab,rootMeanSquare,toLightnessEAL});
package/dist/index.d.cts CHANGED
@@ -2,6 +2,12 @@
2
2
  declare const rgbToHex: (rgb: number[]) => string;
3
3
  /** Convert sRGB Hex string to linear RGB. */
4
4
  declare const hexToRgb: (hex: string) => number[];
5
+ /** Converts linear RGB to Oklab color space. */
6
+ /** Specification: Björn Ottosson (2020). */
7
+ declare const rgbToOklab: (rgb: number[]) => number[];
8
+ /** Converts Oklab color space to linear RGB. */
9
+ /** Specification: Björn Ottosson (2020). */
10
+ declare const oklabToRgb: (lab: number[]) => number[];
5
11
  /** Calculate Equivalent Achromatic Lightness (L_EAL) using High et al. (2023). */
6
12
  declare const toLightnessEAL: (lab: number[]) => number;
7
13
  /** Reverse L_EAL to get CIELAB Lightness (L). */
@@ -107,4 +113,4 @@ declare class Palette {
107
113
  get score(): number;
108
114
  }
109
115
 
110
- export { type ApcaContrasts, type ContrastValue, Palette, type PaletteColors, Ramp, Swatch, type WcagContrasts, calcDeltaE2000, calcScore, calcStatistics, createMonotone, cssRgbToRgb, fromLightnessEAL, hexToRgb, labToLch, labToRgb, lchToLab, rgbToHex, rgbToLab, rootMeanSquare, toLightnessEAL };
116
+ export { type ApcaContrasts, type ContrastValue, Palette, type PaletteColors, Ramp, Swatch, type WcagContrasts, calcDeltaE2000, calcScore, calcStatistics, createMonotone, cssRgbToRgb, fromLightnessEAL, hexToRgb, labToLch, labToRgb, lchToLab, oklabToRgb, rgbToHex, rgbToLab, rgbToOklab, rootMeanSquare, toLightnessEAL };
package/dist/index.d.ts CHANGED
@@ -2,6 +2,12 @@
2
2
  declare const rgbToHex: (rgb: number[]) => string;
3
3
  /** Convert sRGB Hex string to linear RGB. */
4
4
  declare const hexToRgb: (hex: string) => number[];
5
+ /** Converts linear RGB to Oklab color space. */
6
+ /** Specification: Björn Ottosson (2020). */
7
+ declare const rgbToOklab: (rgb: number[]) => number[];
8
+ /** Converts Oklab color space to linear RGB. */
9
+ /** Specification: Björn Ottosson (2020). */
10
+ declare const oklabToRgb: (lab: number[]) => number[];
5
11
  /** Calculate Equivalent Achromatic Lightness (L_EAL) using High et al. (2023). */
6
12
  declare const toLightnessEAL: (lab: number[]) => number;
7
13
  /** Reverse L_EAL to get CIELAB Lightness (L). */
@@ -107,4 +113,4 @@ declare class Palette {
107
113
  get score(): number;
108
114
  }
109
115
 
110
- export { type ApcaContrasts, type ContrastValue, Palette, type PaletteColors, Ramp, Swatch, type WcagContrasts, calcDeltaE2000, calcScore, calcStatistics, createMonotone, cssRgbToRgb, fromLightnessEAL, hexToRgb, labToLch, labToRgb, lchToLab, rgbToHex, rgbToLab, rootMeanSquare, toLightnessEAL };
116
+ export { type ApcaContrasts, type ContrastValue, Palette, type PaletteColors, Ramp, Swatch, type WcagContrasts, calcDeltaE2000, calcScore, calcStatistics, createMonotone, cssRgbToRgb, fromLightnessEAL, hexToRgb, labToLch, labToRgb, lchToLab, oklabToRgb, rgbToHex, rgbToLab, rgbToOklab, rootMeanSquare, toLightnessEAL };
@@ -1 +1 @@
1
- "use strict";var Chromametry=(()=>{var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var O=(l,t)=>{for(var s in t)v(l,s,{get:t[s],enumerable:!0})},V=(l,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of j(t))!N.call(l,e)&&e!==s&&v(l,e,{get:()=>t[e],enumerable:!(n=G(t,e))||n.enumerable});return l};var $=l=>V(v({},"__esModule",{value:!0}),l);var et={};O(et,{Palette:()=>T,Ramp:()=>q,Swatch:()=>y,calcDeltaE2000:()=>k,calcScore:()=>L,calcStatistics:()=>nt,createMonotone:()=>E,cssRgbToRgb:()=>st,fromLightnessEAL:()=>J,hexToRgb:()=>C,labToLch:()=>P,labToRgb:()=>tt,lchToLab:()=>Q,rgbToHex:()=>Z,rgbToLab:()=>S,rootMeanSquare:()=>d,toLightnessEAL:()=>_});var F=l=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return l.map(t)},K=l=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return l.map(t)},Z=l=>{let[t,s,n]=F(l);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},C=l=>{let t=parseInt(l.slice(1,3),16)/255,s=parseInt(l.slice(3,5),16)/255,n=parseInt(l.slice(5,7),16)/255;return K([t,s,n])},_=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e},J=(l,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),Math.max(0,l-(m+c)*e)},Q=l=>{let[t,s,n]=l,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},S=l=>{let[t,s,n]=l,e=.4124564*t+.3575761*s+.1804375*n,h=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,i=g=>g>.008856?Math.cbrt(g):7.787*g+16/116,m=i(e/a),c=i(h/u),p=i(o/r);return[116*c-16,500*(m-c),200*(c-p)]},tt=l=>{let[t,s,n]=l,e=(t+16)/116,h=s/500+e,o=e-n/200,a=g=>g**3>.008856?g**3:(g-16/116)/7.787,u=.95047,r=1,i=1.08883,m=a(h)*u,c=a(e)*r,p=a(o)*i;return[3.2404542*m-1.5371385*c-.4985314*p,-.969266*m+1.8760108*c+.041556*p,.0556434*m-.2040259*c+1.0572252*p]},P=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},k=(l,t)=>{let[s,n,e]=l,[h,o,a]=t,u=(s+h)/2,r=Math.sqrt(n*n+e*e),i=Math.sqrt(o*o+a*a),m=(r+i)/2,c=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),p=n*(1+c),g=o*(1+c),M=Math.sqrt(p*p+e*e),b=Math.sqrt(g*g+a*a),w=(M+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),f=Math.atan2(a,g)*180/Math.PI+(Math.atan2(a,g)<0?360:0),R=f-x;Math.abs(R)>180&&(R+=f<=x?360:-360);let I=Math.abs(x-f)>180?(x+f+360)/2:(x+f)/2,Y=1-.17*Math.cos((I-30)*Math.PI/180)+.24*Math.cos(2*I*Math.PI/180)+.32*Math.cos((3*I+6)*Math.PI/180)-.2*Math.cos((4*I-63)*Math.PI/180),U=h-s,B=b-M,A=2*Math.sqrt(M*b)*Math.sin(R/2*Math.PI/180),W=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),D=1+.045*w,H=1+.015*w*Y,X=30*Math.exp(-Math.pow((I-275)/25,2)),z=-(2*Math.sqrt(Math.pow(w,7)/(Math.pow(w,7)+Math.pow(25,7))))*Math.sin(2*X*Math.PI/180);return Math.sqrt(Math.pow(U/W,2)+Math.pow(B/D,2)+Math.pow(A/H,2)+z*(B/D)*(A/H))},st=l=>{let t=l.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},E=l=>{if(l.length<1)return r=>0;let t=[...l].sort((r,i)=>r[0]-i[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),h=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(h[r+1]-h[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let i=a[r-1],m=a[r];if(i*m<=0)u[r]=0;else{let c=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=i*m/((1-c)*i+c*m)}}return r=>{if(r<=e[0])return h[0];if(r>=e[n-1])return h[n-1];let i=0,m=n-2,c=0;for(;i<=m;){let f=Math.floor((i+m)/2);if(r>=e[f]&&r<=e[f+1]){c=f;break}r<e[f]?m=f-1:i=f+1}let p=o[c],g=(r-e[c])/p,M=g*g,b=M*g,w=u[c]*p,x=u[c+1]*p;return(2*b-3*M+1)*h[c]+(b-2*M+g)*w+(-2*b+3*M)*h[c+1]+(b-M)*x}};function d(l){let t=l.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=l[n]*l[n];return Math.sqrt(s/t)}var nt=l=>{let t=l.length;if(t===0)return{min:0,max:0,avg:0};let s=l[0],n=l[0],e=0;for(let h=0;h<t;h++){let o=l[h];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=l=>{let t=l.length;if(t===0)return 0;let s=1e-6,n=l.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var y=class{constructor(t){this.hex=t}get rgb(){return C(this.hex)}get lab(){return S(this.rgb)}get lch(){return P(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new y(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let h=new y(e);h.chroma>n&&(n=h.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=S(C(this.colors[0])),s=S(C(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let h of[30,45,70]){let o=h/10,a=n,u=0;for(let r=1;r<s;r++){let i=1/0;for(let m=0;m<s-r;m++){let c=t[m].luminance,p=t[m+r].luminance,g=(Math.max(c,p)+.05)/(Math.min(c,p)+.05);g<i&&(i=g)}if(i>=o){a=r,u=i;break}r===n&&(u=i)}e[h]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},h=(o,a)=>{let i=o<.022?o+Math.pow(.022-o,1.414):o,m=a<.022?a+Math.pow(.022-a,1.414):a,c=m>=i?(Math.pow(m,.56)-Math.pow(i,.57))*114:(Math.pow(m,.65)-Math.pow(i,.62))*114;return Math.abs(c)<10?0:(c=c>0?c-2.7:c+2.7,Math.round(c))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let i=1;i<s;i++){let m=1/0;for(let c=0;c<s-i;c++){let p=t[c].luminance>t[c+i].luminance?t[c].luminance:t[c+i].luminance,g=t[c].luminance>t[c+i].luminance?t[c+i].luminance:t[c].luminance,M=Math.abs(h(g,p));M<m&&(m=M)}if(m>=a){u=i,r=m;break}i===n&&(r=m)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=k(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,h=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],h+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*h-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let m=0,c=0;for(let p=0;p<s;p++){let g=u*p+r,M=t[p]-g;m+=M*M;let b=Math.max(g-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-g);c+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(m/s)/Math.sqrt(c/s)))}get chromaSmoothness(){let t=this.swatches.map(c=>c.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let h=t.map(c=>c/e*n),o=Math.min(...h),a=Math.max(...h),u=h.findIndex(c=>c===a),r=E([[0,h[0]],[u,a],[s-1,h[s-1]]]),i=0,m=0;for(let c=0;c<s;c++){let p=r(c),g=h[c]-p;i+=g*g,m+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/s)/Math.sqrt(m/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let h=0;for(let a of n)h+=Math.pow(a-e,2);let o=Math.sqrt(h/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,h=0;for(let r=0;r<s;r++){let i=Math.abs(t[r]-n)%360;i>180&&(i=360-i),e+=i*i;let m=r/(s-1)*180;h+=m*m}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(h/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var T=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get contrastEfficiency(){return d(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return d(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return d(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return d(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return d(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};return $(et);})();
1
+ "use strict";var Chromametry=(()=>{var v=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var j=(i,t)=>{for(var s in t)v(i,s,{get:t[s],enumerable:!0})},N=(i,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of G(t))!O.call(i,e)&&e!==s&&v(i,e,{get:()=>t[e],enumerable:!(n=z(t,e))||n.enumerable});return i};var V=i=>N(v({},"__esModule",{value:!0}),i);var at={};j(at,{Palette:()=>T,Ramp:()=>q,Swatch:()=>y,calcDeltaE2000:()=>P,calcScore:()=>L,calcStatistics:()=>rt,createMonotone:()=>E,cssRgbToRgb:()=>et,fromLightnessEAL:()=>tt,hexToRgb:()=>C,labToLch:()=>k,labToRgb:()=>nt,lchToLab:()=>st,oklabToRgb:()=>J,rgbToHex:()=>K,rgbToLab:()=>S,rgbToOklab:()=>Z,rootMeanSquare:()=>d,toLightnessEAL:()=>Q});var $=i=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return i.map(t)},F=i=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return i.map(t)},K=i=>{let[t,s,n]=$(i);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},C=i=>{let t=parseInt(i.slice(1,3),16)/255,s=parseInt(i.slice(3,5),16)/255,n=parseInt(i.slice(5,7),16)/255;return F([t,s,n])},Z=i=>{let t=.4122214708*i[0]+.5363325363*i[1]+.0514459929*i[2],s=.2119034982*i[0]+.6806995451*i[1]+.1073969566*i[2],n=.0883024619*i[0]+.2817188376*i[1]+.6299787005*i[2],e=Math.cbrt(t),c=Math.cbrt(s),o=Math.cbrt(n);return[.2104542553*e+.793617785*c-.0040720468*o,1.9779984951*e-2.428592205*c+.4505937099*o,.0259040371*e+.7827717662*c-.808675766*o]},J=i=>{let[t,s,n]=i,e=t+.3963377774*s+.2158037573*n,c=t-.1055613458*s-.0638541728*n,o=t-.0894841775*s-1.291485548*n,a=e*e*e,u=c*c*c,r=o*o*o;return[4.0767416621*a-3.3077115913*u+.2309699292*r,-1.2684380046*a+2.6097574011*u-.3413193965*r,-.0041960863*a-.7034186147*u+1.707614701*r]},Q=i=>{let[t,s,n]=i,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),t+(m+h)*e},tt=(i,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),Math.max(0,i-(m+h)*e)},st=i=>{let[t,s,n]=i,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},S=i=>{let[t,s,n]=i,e=.4124564*t+.3575761*s+.1804375*n,c=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,l=M=>M>.008856?Math.cbrt(M):7.787*M+16/116,m=l(e/a),h=l(c/u),p=l(o/r);return[116*h-16,500*(m-h),200*(h-p)]},nt=i=>{let[t,s,n]=i,e=(t+16)/116,c=s/500+e,o=e-n/200,a=M=>M**3>.008856?M**3:(M-16/116)/7.787,u=.95047,r=1,l=1.08883,m=a(c)*u,h=a(e)*r,p=a(o)*l;return[3.2404542*m-1.5371385*h-.4985314*p,-.969266*m+1.8760108*h+.041556*p,.0556434*m-.2040259*h+1.0572252*p]},k=i=>{let[t,s,n]=i,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},P=(i,t)=>{let[s,n,e]=i,[c,o,a]=t,u=(s+c)/2,r=Math.sqrt(n*n+e*e),l=Math.sqrt(o*o+a*a),m=(r+l)/2,h=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),p=n*(1+h),M=o*(1+h),f=Math.sqrt(p*p+e*e),b=Math.sqrt(M*M+a*a),w=(f+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),g=Math.atan2(a,M)*180/Math.PI+(Math.atan2(a,M)<0?360:0),R=g-x;Math.abs(R)>180&&(R+=g<=x?360:-360);let I=Math.abs(x-g)>180?(x+g+360)/2:(x+g)/2,H=1-.17*Math.cos((I-30)*Math.PI/180)+.24*Math.cos(2*I*Math.PI/180)+.32*Math.cos((3*I+6)*Math.PI/180)-.2*Math.cos((4*I-63)*Math.PI/180),Y=c-s,B=b-f,A=2*Math.sqrt(f*b)*Math.sin(R/2*Math.PI/180),U=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),D=1+.045*w,_=1+.015*w*H,W=30*Math.exp(-Math.pow((I-275)/25,2)),X=-(2*Math.sqrt(Math.pow(w,7)/(Math.pow(w,7)+Math.pow(25,7))))*Math.sin(2*W*Math.PI/180);return Math.sqrt(Math.pow(Y/U,2)+Math.pow(B/D,2)+Math.pow(A/_,2)+X*(B/D)*(A/_))},et=i=>{let t=i.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},E=i=>{if(i.length<1)return r=>0;let t=[...i].sort((r,l)=>r[0]-l[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),c=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(c[r+1]-c[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let l=a[r-1],m=a[r];if(l*m<=0)u[r]=0;else{let h=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=l*m/((1-h)*l+h*m)}}return r=>{if(r<=e[0])return c[0];if(r>=e[n-1])return c[n-1];let l=0,m=n-2,h=0;for(;l<=m;){let g=Math.floor((l+m)/2);if(r>=e[g]&&r<=e[g+1]){h=g;break}r<e[g]?m=g-1:l=g+1}let p=o[h],M=(r-e[h])/p,f=M*M,b=f*M,w=u[h]*p,x=u[h+1]*p;return(2*b-3*f+1)*c[h]+(b-2*f+M)*w+(-2*b+3*f)*c[h+1]+(b-f)*x}};function d(i){let t=i.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=i[n]*i[n];return Math.sqrt(s/t)}var rt=i=>{let t=i.length;if(t===0)return{min:0,max:0,avg:0};let s=i[0],n=i[0],e=0;for(let c=0;c<t;c++){let o=i[c];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=i=>{let t=i.length;if(t===0)return 0;let s=1e-6,n=i.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),c=Math.max(0,Math.min(1,e));return parseFloat((c*100).toFixed(2))};var y=class{constructor(t){this.hex=t}get rgb(){return C(this.hex)}get lab(){return S(this.rgb)}get lch(){return k(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),t+(m+h)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=c=>c>5e-4?c:c+Math.pow(5e-4-c,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new y(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let c=new y(e);c.chroma>n&&(n=c.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=S(C(this.colors[0])),s=S(C(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let c of[30,45,70]){let o=c/10,a=n,u=0;for(let r=1;r<s;r++){let l=1/0;for(let m=0;m<s-r;m++){let h=t[m].luminance,p=t[m+r].luminance,M=(Math.max(h,p)+.05)/(Math.min(h,p)+.05);M<l&&(l=M)}if(l>=o){a=r,u=l;break}r===n&&(u=l)}e[c]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},c=(o,a)=>{let l=o<.022?o+Math.pow(.022-o,1.414):o,m=a<.022?a+Math.pow(.022-a,1.414):a,h=m>=l?(Math.pow(m,.56)-Math.pow(l,.57))*114:(Math.pow(m,.65)-Math.pow(l,.62))*114;return Math.abs(h)<10?0:(h=h>0?h-2.7:h+2.7,Math.round(h))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let l=1;l<s;l++){let m=1/0;for(let h=0;h<s-l;h++){let p=t[h].luminance>t[h+l].luminance?t[h].luminance:t[h+l].luminance,M=t[h].luminance>t[h+l].luminance?t[h+l].luminance:t[h].luminance,f=Math.abs(c(M,p));f<m&&(m=f)}if(m>=a){u=l,r=m;break}l===n&&(r=m)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=P(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,c=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],c+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*c-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let m=0,h=0;for(let p=0;p<s;p++){let M=u*p+r,f=t[p]-M;m+=f*f;let b=Math.max(M-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-M);h+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(m/s)/Math.sqrt(h/s)))}get chromaSmoothness(){let t=this.swatches.map(h=>h.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let c=t.map(h=>h/e*n),o=Math.min(...c),a=Math.max(...c),u=c.findIndex(h=>h===a),r=E([[0,c[0]],[u,a],[s-1,c[s-1]]]),l=0,m=0;for(let h=0;h<s;h++){let p=r(h),M=c[h]-p;l+=M*M,m+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(l/s)/Math.sqrt(m/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let c=0;for(let a of n)c+=Math.pow(a-e,2);let o=Math.sqrt(c/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,c=0;for(let r=0;r<s;r++){let l=Math.abs(t[r]-n)%360;l>180&&(l=360-l),e+=l*l;let m=r/(s-1)*180;c+=m*m}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(c/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var T=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),c=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:c,value:o/(this.ramps.length||1),efficiency:s>1?c/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),c=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:c,value:o/(this.ramps.length||1),efficiency:s>1?c/(s-1):0}}return t}get contrastEfficiency(){return d(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return d(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return d(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return d(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return d(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};return V(at);})();
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var z=m=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return m.map(t)},G=m=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return m.map(t)},N=m=>{let[t,s,n]=z(m);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},S=m=>{let t=parseInt(m.slice(1,3),16)/255,s=parseInt(m.slice(3,5),16)/255,n=parseInt(m.slice(5,7),16)/255;return G([t,s,n])},O=m=>{let[t,s,n]=m,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,l=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(l+c)*e},V=(m,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,l=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),Math.max(0,m-(l+c)*e)},$=m=>{let[t,s,n]=m,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},y=m=>{let[t,s,n]=m,e=.4124564*t+.3575761*s+.1804375*n,h=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,i=g=>g>.008856?Math.cbrt(g):7.787*g+16/116,l=i(e/a),c=i(h/u),p=i(o/r);return[116*c-16,500*(l-c),200*(c-p)]},F=m=>{let[t,s,n]=m,e=(t+16)/116,h=s/500+e,o=e-n/200,a=g=>g**3>.008856?g**3:(g-16/116)/7.787,u=.95047,r=1,i=1.08883,l=a(h)*u,c=a(e)*r,p=a(o)*i;return[3.2404542*l-1.5371385*c-.4985314*p,-.969266*l+1.8760108*c+.041556*p,.0556434*l-.2040259*c+1.0572252*p]},T=m=>{let[t,s,n]=m,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},B=(m,t)=>{let[s,n,e]=m,[h,o,a]=t,u=(s+h)/2,r=Math.sqrt(n*n+e*e),i=Math.sqrt(o*o+a*a),l=(r+i)/2,c=.5*(1-Math.sqrt(Math.pow(l,7)/(Math.pow(l,7)+Math.pow(25,7)))),p=n*(1+c),g=o*(1+c),M=Math.sqrt(p*p+e*e),b=Math.sqrt(g*g+a*a),d=(M+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),f=Math.atan2(a,g)*180/Math.PI+(Math.atan2(a,g)<0?360:0),R=f-x;Math.abs(R)>180&&(R+=f<=x?360:-360);let C=Math.abs(x-f)>180?(x+f+360)/2:(x+f)/2,H=1-.17*Math.cos((C-30)*Math.PI/180)+.24*Math.cos(2*C*Math.PI/180)+.32*Math.cos((3*C+6)*Math.PI/180)-.2*Math.cos((4*C-63)*Math.PI/180),Y=h-s,v=b-M,P=2*Math.sqrt(M*b)*Math.sin(R/2*Math.PI/180),U=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),k=1+.045*d,E=1+.015*d*H,W=30*Math.exp(-Math.pow((C-275)/25,2)),X=-(2*Math.sqrt(Math.pow(d,7)/(Math.pow(d,7)+Math.pow(25,7))))*Math.sin(2*W*Math.PI/180);return Math.sqrt(Math.pow(Y/U,2)+Math.pow(v/k,2)+Math.pow(P/E,2)+X*(v/k)*(P/E))},K=m=>{let t=m.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},A=m=>{if(m.length<1)return r=>0;let t=[...m].sort((r,i)=>r[0]-i[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),h=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(h[r+1]-h[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let i=a[r-1],l=a[r];if(i*l<=0)u[r]=0;else{let c=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=i*l/((1-c)*i+c*l)}}return r=>{if(r<=e[0])return h[0];if(r>=e[n-1])return h[n-1];let i=0,l=n-2,c=0;for(;i<=l;){let f=Math.floor((i+l)/2);if(r>=e[f]&&r<=e[f+1]){c=f;break}r<e[f]?l=f-1:i=f+1}let p=o[c],g=(r-e[c])/p,M=g*g,b=M*g,d=u[c]*p,x=u[c+1]*p;return(2*b-3*M+1)*h[c]+(b-2*M+g)*d+(-2*b+3*M)*h[c+1]+(b-M)*x}};function w(m){let t=m.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=m[n]*m[n];return Math.sqrt(s/t)}var Z=m=>{let t=m.length;if(t===0)return{min:0,max:0,avg:0};let s=m[0],n=m[0],e=0;for(let h=0;h<t;h++){let o=m[h];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=m=>{let t=m.length;if(t===0)return 0;let s=1e-6,n=m.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var I=class{constructor(t){this.hex=t}get rgb(){return S(this.hex)}get lab(){return y(this.rgb)}get lch(){return T(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,l=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(l+c)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new I(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let h=new I(e);h.chroma>n&&(n=h.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=y(S(this.colors[0])),s=y(S(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let h of[30,45,70]){let o=h/10,a=n,u=0;for(let r=1;r<s;r++){let i=1/0;for(let l=0;l<s-r;l++){let c=t[l].luminance,p=t[l+r].luminance,g=(Math.max(c,p)+.05)/(Math.min(c,p)+.05);g<i&&(i=g)}if(i>=o){a=r,u=i;break}r===n&&(u=i)}e[h]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},h=(o,a)=>{let i=o<.022?o+Math.pow(.022-o,1.414):o,l=a<.022?a+Math.pow(.022-a,1.414):a,c=l>=i?(Math.pow(l,.56)-Math.pow(i,.57))*114:(Math.pow(l,.65)-Math.pow(i,.62))*114;return Math.abs(c)<10?0:(c=c>0?c-2.7:c+2.7,Math.round(c))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let i=1;i<s;i++){let l=1/0;for(let c=0;c<s-i;c++){let p=t[c].luminance>t[c+i].luminance?t[c].luminance:t[c+i].luminance,g=t[c].luminance>t[c+i].luminance?t[c+i].luminance:t[c].luminance,M=Math.abs(h(g,p));M<l&&(l=M)}if(l>=a){u=i,r=l;break}i===n&&(r=l)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=B(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,h=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],h+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*h-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let l=0,c=0;for(let p=0;p<s;p++){let g=u*p+r,M=t[p]-g;l+=M*M;let b=Math.max(g-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-g);c+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(l/s)/Math.sqrt(c/s)))}get chromaSmoothness(){let t=this.swatches.map(c=>c.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let h=t.map(c=>c/e*n),o=Math.min(...h),a=Math.max(...h),u=h.findIndex(c=>c===a),r=A([[0,h[0]],[u,a],[s-1,h[s-1]]]),i=0,l=0;for(let c=0;c<s;c++){let p=r(c),g=h[c]-p;i+=g*g,l+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/s)/Math.sqrt(l/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let h=0;for(let a of n)h+=Math.pow(a-e,2);let o=Math.sqrt(h/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,h=0;for(let r=0;r<s;r++){let i=Math.abs(t[r]-n)%360;i>180&&(i=360-i),e+=i*i;let l=r/(s-1)*180;h+=l*l}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(h/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var D=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get contrastEfficiency(){return w(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return w(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return w(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return w(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return w(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};export{D as Palette,q as Ramp,I as Swatch,B as calcDeltaE2000,L as calcScore,Z as calcStatistics,A as createMonotone,K as cssRgbToRgb,V as fromLightnessEAL,S as hexToRgb,T as labToLch,F as labToRgb,$ as lchToLab,N as rgbToHex,y as rgbToLab,w as rootMeanSquare,O as toLightnessEAL};
1
+ var X=u=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return u.map(t)},z=u=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return u.map(t)},O=u=>{let[t,s,n]=X(u);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},S=u=>{let t=parseInt(u.slice(1,3),16)/255,s=parseInt(u.slice(3,5),16)/255,n=parseInt(u.slice(5,7),16)/255;return z([t,s,n])},j=u=>{let t=.4122214708*u[0]+.5363325363*u[1]+.0514459929*u[2],s=.2119034982*u[0]+.6806995451*u[1]+.1073969566*u[2],n=.0883024619*u[0]+.2817188376*u[1]+.6299787005*u[2],e=Math.cbrt(t),c=Math.cbrt(s),o=Math.cbrt(n);return[.2104542553*e+.793617785*c-.0040720468*o,1.9779984951*e-2.428592205*c+.4505937099*o,.0259040371*e+.7827717662*c-.808675766*o]},N=u=>{let[t,s,n]=u,e=t+.3963377774*s+.2158037573*n,c=t-.1055613458*s-.0638541728*n,o=t-.0894841775*s-1.291485548*n,a=e*e*e,i=c*c*c,r=o*o*o;return[4.0767416621*a-3.3077115913*i+.2309699292*r,-1.2684380046*a+2.6097574011*i-.3413193965*r,-.0041960863*a-.7034186147*i+1.707614701*r]},V=u=>{let[t,s,n]=u,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,i=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+i,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),t+(m+h)*e},$=(u,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,i=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+i,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),Math.max(0,u-(m+h)*e)},F=u=>{let[t,s,n]=u,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},y=u=>{let[t,s,n]=u,e=.4124564*t+.3575761*s+.1804375*n,c=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,i=1,r=1.08883,l=M=>M>.008856?Math.cbrt(M):7.787*M+16/116,m=l(e/a),h=l(c/i),p=l(o/r);return[116*h-16,500*(m-h),200*(h-p)]},K=u=>{let[t,s,n]=u,e=(t+16)/116,c=s/500+e,o=e-n/200,a=M=>M**3>.008856?M**3:(M-16/116)/7.787,i=.95047,r=1,l=1.08883,m=a(c)*i,h=a(e)*r,p=a(o)*l;return[3.2404542*m-1.5371385*h-.4985314*p,-.969266*m+1.8760108*h+.041556*p,.0556434*m-.2040259*h+1.0572252*p]},T=u=>{let[t,s,n]=u,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},B=(u,t)=>{let[s,n,e]=u,[c,o,a]=t,i=(s+c)/2,r=Math.sqrt(n*n+e*e),l=Math.sqrt(o*o+a*a),m=(r+l)/2,h=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),p=n*(1+h),M=o*(1+h),f=Math.sqrt(p*p+e*e),b=Math.sqrt(M*M+a*a),d=(f+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),g=Math.atan2(a,M)*180/Math.PI+(Math.atan2(a,M)<0?360:0),R=g-x;Math.abs(R)>180&&(R+=g<=x?360:-360);let C=Math.abs(x-g)>180?(x+g+360)/2:(x+g)/2,_=1-.17*Math.cos((C-30)*Math.PI/180)+.24*Math.cos(2*C*Math.PI/180)+.32*Math.cos((3*C+6)*Math.PI/180)-.2*Math.cos((4*C-63)*Math.PI/180),H=c-s,v=b-f,k=2*Math.sqrt(f*b)*Math.sin(R/2*Math.PI/180),Y=1+.015*Math.pow(i-50,2)/Math.sqrt(20+Math.pow(i-50,2)),P=1+.045*d,E=1+.015*d*_,U=30*Math.exp(-Math.pow((C-275)/25,2)),W=-(2*Math.sqrt(Math.pow(d,7)/(Math.pow(d,7)+Math.pow(25,7))))*Math.sin(2*U*Math.PI/180);return Math.sqrt(Math.pow(H/Y,2)+Math.pow(v/P,2)+Math.pow(k/E,2)+W*(v/P)*(k/E))},Z=u=>{let t=u.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},A=u=>{if(u.length<1)return r=>0;let t=[...u].sort((r,l)=>r[0]-l[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),c=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(c[r+1]-c[r])/o[r];let i=new Array(n);i[0]=a[0],i[n-1]=a[n-2];for(let r=1;r<n-1;r++){let l=a[r-1],m=a[r];if(l*m<=0)i[r]=0;else{let h=(1+o[r]/(o[r-1]+o[r]))/3;i[r]=l*m/((1-h)*l+h*m)}}return r=>{if(r<=e[0])return c[0];if(r>=e[n-1])return c[n-1];let l=0,m=n-2,h=0;for(;l<=m;){let g=Math.floor((l+m)/2);if(r>=e[g]&&r<=e[g+1]){h=g;break}r<e[g]?m=g-1:l=g+1}let p=o[h],M=(r-e[h])/p,f=M*M,b=f*M,d=i[h]*p,x=i[h+1]*p;return(2*b-3*f+1)*c[h]+(b-2*f+M)*d+(-2*b+3*f)*c[h+1]+(b-f)*x}};function w(u){let t=u.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=u[n]*u[n];return Math.sqrt(s/t)}var J=u=>{let t=u.length;if(t===0)return{min:0,max:0,avg:0};let s=u[0],n=u[0],e=0;for(let c=0;c<t;c++){let o=u[c];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=u=>{let t=u.length;if(t===0)return 0;let s=1e-6,n=u.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),c=Math.max(0,Math.min(1,e));return parseFloat((c*100).toFixed(2))};var I=class{constructor(t){this.hex=t}get rgb(){return S(this.hex)}get lab(){return y(this.rgb)}get lch(){return T(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,i=.0603,r=.1307,l=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+i,h=0;return(o<=90||o>=270)&&(h=r*Math.abs(Math.cos(o*(Math.PI/180)))+l),t+(m+h)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=c=>c>5e-4?c:c+Math.pow(5e-4-c,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new I(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let c=new I(e);c.chroma>n&&(n=c.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=y(S(this.colors[0])),s=y(S(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let c of[30,45,70]){let o=c/10,a=n,i=0;for(let r=1;r<s;r++){let l=1/0;for(let m=0;m<s-r;m++){let h=t[m].luminance,p=t[m+r].luminance,M=(Math.max(h,p)+.05)/(Math.min(h,p)+.05);M<l&&(l=M)}if(l>=o){a=r,i=l;break}r===n&&(i=l)}e[c]={efficiency:a/n,target:o,span:a,value:i}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},c=(o,a)=>{let l=o<.022?o+Math.pow(.022-o,1.414):o,m=a<.022?a+Math.pow(.022-a,1.414):a,h=m>=l?(Math.pow(m,.56)-Math.pow(l,.57))*114:(Math.pow(m,.65)-Math.pow(l,.62))*114;return Math.abs(h)<10?0:(h=h>0?h-2.7:h+2.7,Math.round(h))};for(let o of[45,60,75]){let a=o,i=n,r=0;for(let l=1;l<s;l++){let m=1/0;for(let h=0;h<s-l;h++){let p=t[h].luminance>t[h+l].luminance?t[h].luminance:t[h+l].luminance,M=t[h].luminance>t[h+l].luminance?t[h+l].luminance:t[h].luminance,f=Math.abs(c(M,p));f<m&&(m=f)}if(m>=a){i=l,r=m;break}l===n&&(r=m)}e[o]={efficiency:i/n,target:a,span:i,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=B(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,c=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],c+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let i=(s*c-n*e)/a,r=(e-i*n)/s;if(Math.abs(i*(s-1))<.001)return 1;let m=0,h=0;for(let p=0;p<s;p++){let M=i*p+r,f=t[p]-M;m+=f*f;let b=Math.max(M-Math.min(r,i*(s-1)+r),Math.max(r,i*(s-1)+r)-M);h+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(m/s)/Math.sqrt(h/s)))}get chromaSmoothness(){let t=this.swatches.map(h=>h.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let c=t.map(h=>h/e*n),o=Math.min(...c),a=Math.max(...c),i=c.findIndex(h=>h===a),r=A([[0,c[0]],[i,a],[s-1,c[s-1]]]),l=0,m=0;for(let h=0;h<s;h++){let p=r(h),M=c[h]-p;l+=M*M,m+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(l/s)/Math.sqrt(m/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let i=t[a]-t[a-1];if(i<0)return 0;n.push(i)}let e=n.reduce((a,i)=>a+i,0)/n.length;if(e<=1e-6)return 0;let c=0;for(let a of n)c+=Math.pow(a-e,2);let o=Math.sqrt(c/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,i;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(i=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?i:0,e=0,c=0;for(let r=0;r<s;r++){let l=Math.abs(t[r]-n)%360;l>180&&(l=360-l),e+=l*l;let m=r/(s-1)*180;c+=m*m}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(c/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var D=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),c=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,i)=>a+((i==null?void 0:i.value)||0),0);t[n]={target:n/10,span:c,value:o/(this.ramps.length||1),efficiency:s>1?c/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),c=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,i)=>a+((i==null?void 0:i.value)||0),0);t[n]={target:n,span:c,value:o/(this.ramps.length||1),efficiency:s>1?c/(s-1):0}}return t}get contrastEfficiency(){return w(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return w(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return w(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return w(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return w(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};export{D as Palette,q as Ramp,I as Swatch,B as calcDeltaE2000,L as calcScore,J as calcStatistics,A as createMonotone,Z as cssRgbToRgb,$ as fromLightnessEAL,S as hexToRgb,T as labToLch,K as labToRgb,F as lchToLab,N as oklabToRgb,O as rgbToHex,y as rgbToLab,j as rgbToOklab,w as rootMeanSquare,V as toLightnessEAL};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chromametry",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "Web-accessible Color Palette Metrics",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
package/dist/palettes.js DELETED
@@ -1 +0,0 @@
1
- export default [{"name":"Adobe Spectrum","colors":{"blue":["#ffffff","#f5f9ff","#e5f0fe","#cbe2fe","#accffd","#8eb9fc","#729efd","#5d89ff","#4b75ff","#3b63fb","#274dea","#1d3ecf","#1532ad","#10288c","#0c1f69","#0e1843","#070b1e","#000000"],"red":["#ffffff","#fff6f5","#ffebe8","#ffd6d1","#ffbcb4","#ff9d91","#ff7665","#ff513d","#f03823","#d73220","#b72818","#9c2113","#811b0e","#68150a","#501006","#3b0b04","#1d0502","#000000"],"orange":["#ffffff","#fff6e7","#ffeccf","#ffda9e","#ffc15e","#ffa213","#fc7d00","#e86a00","#d45b00","#c24e00","#a73e00","#903300","#762900","#5f2000","#491800","#341200","#190800","#000000"],"yellow":["#ffffff","#fff8cc","#fff197","#ffde2c","#f5c700","#e6af00","#d29500","#c18300","#af7400","#9e6600","#865500","#724800","#5d3b00","#4b2f00","#382300","#281900","#120b00","#000000"],"green":["#ffffff","#edfcf1","#d7f7e1","#adeec5","#6be3a2","#2bd17d","#12b867","#0ba45d","#079355","#05834e","#036e45","#025d3c","#014c34","#003d2c","#002e22","#002119","#000f0c","#000000"],"cyan":["#ffffff","#eefafe","#d9f4fd","#b7e7fc","#8ad5ff","#5cc0ff","#30a7fe","#1d95e7","#1286cd","#0b78b3","#046691","#005779","#004762","#00394e","#002b3b","#001f2b","#000e14","#000000"],"purple":["#ffffff","#fbf7fe","#f4ebfc","#ebdaf9","#ddc1f6","#d0a7f3","#bf8aee","#b272eb","#a65ce7","#9a47e2","#8628d9","#730dcc","#5d00b1","#4b0090","#3b006f","#2c0054","#17002d","#000000"],"pink":["#ffffff","#fff6fc","#ffe8f7","#ffd3f0","#ffb5e6","#ff94db","#ff67cc","#f24cb8","#e434a3","#ce2a92","#b01f7b","#981668","#800c55","#690344","#530035","#3e0027","#210015","#000000"],"brown":["#ffffff","#fcf7f2","#f7eee1","#efddc3","#e5c89d","#d6b17b","#be9b68","#ab8a5a","#9a7b4d","#8b6d42","#775b32","#674c23","#583d15","#463111","#34250d","#261a09","#100c04","#000000"],"silver":["#ffffff","#f7f7f7","#efefef","#dfdfdf","#cccccc","#b7b7b7","#a0a0a0","#8f8f8f","#808080","#727272","#606060","#515151","#424242","#343434","#272727","#1c1c1c","#0c0c0c","#000000"]}},{"name":"Ant Design","colors":{"red":["#ffffff","#fff1f0","#ffccc7","#ffa39e","#ff7875","#ff4d4f","#f5222d","#cf1322","#a8071a","#820014","#5c0011","#000000"],"volcano":["#ffffff","#fff2e8","#ffd8bf","#ffbb96","#ff9c6e","#ff7a45","#fa541c","#d4380d","#ad2102","#871400","#610b00","#000000"],"gold":["#ffffff","#fffbe6","#fff1b8","#ffe58f","#ffd666","#ffc53d","#faad14","#d48806","#ad6800","#874d00","#613400","#000000"],"yellow":["#ffffff","#feffe6","#ffffb8","#fffb8f","#fff566","#ffec3d","#fadb14","#d4b106","#ad8b00","#876800","#614700","#000000"],"lime":["#ffffff","#fcffe6","#f4ffb8","#eaff8f","#d3f261","#bae637","#a0d911","#7cb305","#5b8c00","#3f6600","#254000","#000000"],"green":["#ffffff","#f6ffed","#d9f7be","#b7eb8f","#95de64","#73d13d","#52c41a","#389e0d","#237804","#135200","#092b00","#000000"],"cyan":["#ffffff","#e6fffb","#b5f5ec","#87e8de","#5cdbd3","#36cfc9","#13c2c2","#08979c","#006d75","#00474f","#002329","#000000"],"blue":["#ffffff","#e6f4ff","#bae0ff","#91caff","#69b1ff","#4096ff","#1677ff","#0958d9","#003eb3","#002c8c","#001d66","#000000"],"geekblue":["#ffffff","#f0f5ff","#d6e4ff","#adc6ff","#85a5ff","#597ef7","#2f54eb","#1d39c4","#10239e","#061178","#030852","#000000"],"purple":["#ffffff","#f9f0ff","#efdbff","#d3adf7","#b37feb","#9254de","#722ed1","#531dab","#391085","#22075e","#120338","#000000"],"magenta":["#ffffff","#fff0f6","#ffd6e7","#ffadd2","#ff85c0","#f759ab","#eb2f96","#c41d7f","#9e1068","#780650","#520339","#000000"],"grey":["#ffffff","#a6a6a6","#999999","#8c8c8c","#808080","#737373","#666666","#404040","#1a1a1a","#000000","#000000","#000000"]}},{"name":"Atlassian","colors":{"lime":["#FFFFFF","#EFFFD6","#D3F1A7","#BDE97C","#B3DF72","#94C748","#82B536","#6A9A23","#5B7F24","#4C6B1F","#3F5224","#37471F","#28311B","#000000"],"red":["#FFFFFF","#FFECEB","#FFD5D2","#FFB8B2","#FD9891","#F87168","#F15B50","#E2483D","#C9372C","#AE2E24","#872821","#5D1F1A","#42221F","#000000"],"orange":["#FFFFFF","#FFF5DB","#FCE4A6","#FBD779","#FBC828","#FCA700","#F68909","#E06C00","#BD5B00","#9E4C00","#7A3B00","#693200","#3A2C1F","#000000"],"yellow":["#FFFFFF","#FEF7C8","#F5E989","#EFDD4E","#EED12B","#DDB30E","#CF9F02","#B38600","#946F00","#7F5F01","#614A05","#533F04","#332E1B","#000000"],"green":["#FFFFFF","#DCFFF1","#BAF3DB","#97EDC9","#7EE2B8","#4BCE97","#2ABB7F","#22A06B","#1F845A","#216E4E","#19573D","#164B35","#1C3329","#000000"],"teal":["#FFFFFF","#E7F9FF","#C6EDFB","#B1E4F7","#9DD9EE","#6CC3E0","#42B2D7","#2898BD","#227D9B","#206A83","#1A5265","#164555","#1E3137","#000000"],"blue":["#FFFFFF","#E9F2FE","#CFE1FD","#ADCBFB","#8FB8F6","#669DF1","#4688EC","#357DE8","#1868DB","#1558BC","#144794","#123263","#1C2B42","#000000"],"purple":["#FFFFFF","#F8EEFE","#EED7FC","#E3BDFA","#D8A0F7","#C97CF4","#BF63F3","#AF59E1","#964AC0","#803FA5","#673286","#48245D","#35243F","#000000"],"magenta":["#FFFFFF","#FFECF8","#FDD0EC","#FCB6E1","#F797D2","#E774BB","#DA62AC","#CD519D","#AE4787","#943D73","#77325B","#50253F","#3D2232","#000000"]}},{"name":"IBM Carbon","colors":{"yellow":["#ffffff","#fcf4d6","#fddc69","#f1c21b","#d2a106","#b28600","#8e6a00","#684e00","#483700","#302400","#1c1500","#000000"],"orange":["#ffffff","#fff2e8","#ffd9be","#ffb784","#ff832b","#eb6200","#ba4e00","#8a3800","#5e2900","#3e1a00","#231000","#000000"],"red":["#ffffff","#fff1f1","#ffd7d9","#ffb3b8","#ff8389","#fa4d56","#da1e28","#a2191f","#750e13","#520408","#2d0709","#000000"],"magenta":["#ffffff","#fff0f7","#ffd6e8","#ffafd2","#ff7eb6","#ee5396","#d02670","#9f1853","#740937","#510224","#2a0a18","#000000"],"purple":["#ffffff","#f6f2ff","#e8daff","#d4bbff","#be95ff","#a56eff","#8a3ffc","#6929c4","#491d8b","#31135e","#1c0f30","#000000"],"blue":["#ffffff","#edf5ff","#d0e2ff","#a6c8ff","#78a9ff","#4589ff","#0f62fe","#0043ce","#002d9c","#001d6c","#001141","#000000"],"cyan":["#ffffff","#e5f6ff","#bae6ff","#82cfff","#33b1ff","#1192e8","#0072c3","#00539a","#003a6d","#012749","#061727","#000000"],"teal":["#ffffff","#d9fbfb","#9ef0f0","#3ddbd9","#08bdba","#009d9a","#007d79","#005d5d","#004144","#022b30","#081a1c","#000000"],"green":["#ffffff","#defbe6","#a7f0ba","#6fdc8c","#42be65","#24a148","#198038","#0e6027","#044317","#022d0d","#071908","#000000"],"gray":["#ffffff","#f4f4f4","#e0e0e0","#c6c6c6","#a8a8a8","#8d8d8d","#6f6f6f","#525252","#393939","#262626","#161616","#000000"],"coolGray":["#ffffff","#f2f4f8","#dde1e6","#c1c7cd","#a2a9b0","#878d96","#697077","#4d5358","#343a3f","#21272a","#121619","#000000"],"warmGray":["#ffffff","#f7f3f2","#e5e0df","#cac5c4","#ada8a8","#8f8b8b","#726e6e","#565151","#3c3838","#272525","#171414","#000000"]}},{"name":"Github Primer Brand","colors":{"gray":["#ffffff","#f6f8fa","#eaeef2","#d0d7de","#afb8c1","#8c959f","#6e7781","#57606a","#424a53","#32383f","#24292f","#000000"],"blue":["#ffffff","#ddf4ff","#b6e3ff","#80ccff","#54aeff","#218bff","#0969da","#0550ae","#033d8b","#0a3069","#002155","#000000"],"green":["#ffffff","#dafbe1","#aceebb","#6fdd8b","#4ac26b","#2da44e","#1a7f37","#116329","#044f1e","#003d16","#002d11","#000000"],"yellow":["#ffffff","#fff8c5","#fae17d","#eac54f","#d4a72c","#bf8700","#9a6700","#7d4e00","#633c01","#4d2d00","#3b2300","#000000"],"orange":["#ffffff","#fff1e5","#ffd8b5","#ffb77c","#fb8f44","#e16f24","#bc4c00","#953800","#762c00","#5c2200","#471700","#000000"],"red":["#ffffff","#ffebe9","#ffcecb","#ffaba8","#ff8182","#fa4549","#cf222e","#a40e26","#82071e","#660018","#4c0014","#000000"],"purple":["#ffffff","#fbefff","#ecd8ff","#d8b9ff","#c297ff","#a475f9","#8250df","#6639ba","#512a97","#3e1f79","#2e1461","#000000"],"pink":["#ffffff","#ffeff7","#ffd3eb","#ffadda","#ff80c8","#e85aad","#bf3989","#99286e","#772057","#611347","#4d0336","#000000"],"coral":["#ffffff","#fff0eb","#ffd6cc","#ffb4a1","#fd8c73","#ec6547","#c4432b","#9e2f1c","#801f0f","#691105","#510901","#000000"],"lemon":["#ffffff","#FDF5B3","#F4E162","#DEC741","#C5AA20","#A88D02","#866D00","#685400","#534100","#413200","#322400","#000000"],"lime":["#ffffff","#EAFABA","#CDEC78","#B1D353","#94B83B","#799A2A","#5A791B","#425E13","#2F4A06","#233B03","#182C01","#000000"],"teal":["#ffffff","#DAF9F5","#B0EAE3","#6BD6D0","#49BCB7","#339D9B","#197B7B","#136061","#024B4D","#063A3C","#052B2C","#000000"],"indigo":["#ffffff","#EFF2FF","#D7DDFF","#B9C2FF","#9AA4FF","#7683FF","#545DF0","#3C42D0","#2C33A5","#22297F","#191F5C","#000000"]}},{"name":"Material UI","colors":{"red":["#ffffff","#ffebee","#ffcdd2","#ef9a9a","#e57373","#ef5350","#f44336","#e53935","#d32f2f","#c62828","#b71c1c","#000000"],"pink":["#ffffff","#fce4ec","#f8bbd0","#f48fb1","#f06292","#ec407a","#e91e63","#d81b60","#c2185b","#ad1457","#880e4f","#000000"],"purple":["#ffffff","#f3e5f5","#e1bee7","#ce93d8","#ba68c8","#ab47bc","#9c27b0","#8e24aa","#7b1fa2","#6a1b9a","#4a148c","#000000"],"deeppurple":["#ffffff","#ede7f6","#d1c4e9","#b39ddb","#9575cd","#7e57c2","#673ab7","#5e35b1","#512da8","#4527a0","#311b92","#000000"],"indigo":["#ffffff","#e8eaf6","#c5cae9","#9fa8da","#7986cb","#5c6bc0","#3f51b5","#3949ab","#303f9f","#283593","#1a237e","#000000"],"blue":["#ffffff","#e3f2fd","#bbdefb","#90caf9","#64b5f6","#42a5f5","#2196f3","#1e88e5","#1976d2","#1565c0","#0d47a1","#000000"],"lightblue":["#ffffff","#e1f5fe","#b3e5fc","#81d4fa","#4fc3f7","#29b6f6","#03a9f4","#039be5","#0288d1","#0277bd","#01579b","#000000"],"cyan":["#ffffff","#e0f7fa","#b2ebf2","#80deea","#4dd0e1","#26c6da","#00bcd4","#00acc1","#0097a7","#00838f","#006064","#000000"],"teal":["#ffffff","#e0f2f1","#b2dfdb","#80cbc4","#4db6ac","#26a69a","#009688","#00897b","#00796b","#00695c","#004d40","#000000"],"green":["#ffffff","#e8f5e9","#c8e6c9","#a5d6a7","#81c784","#66bb6a","#4caf50","#43a047","#388e3c","#2e7d32","#1b5e20","#000000"],"lightgreen":["#ffffff","#f1f8e9","#dcedc8","#c5e1a5","#aed581","#9ccc65","#8bc34a","#7cb342","#689f38","#558b2f","#33691e","#000000"],"lime":["#ffffff","#f9fbe7","#f0f4c3","#e6ee9c","#dce775","#d4e157","#cddc39","#c0ca33","#afb42b","#9e9d24","#827717","#000000"],"yellow":["#ffffff","#fffde7","#fff9c4","#fff59d","#fff176","#ffee58","#ffeb3b","#fdd835","#fbc02d","#f9a825","#f57f17","#000000"],"amber":["#ffffff","#fff8e1","#ffecb3","#ffe082","#ffd54f","#ffca28","#ffc107","#ffb300","#ffa000","#ff8f00","#ff6f00","#000000"],"orange":["#ffffff","#fff3e0","#ffe0b2","#ffcc80","#ffb74d","#ffa726","#ff9800","#fb8c00","#f57c00","#ef6c00","#e65100","#000000"],"deeporange":["#ffffff","#fbe9e7","#ffccbc","#ffab91","#ff8a65","#ff7043","#ff5722","#f4511e","#e64a19","#d84315","#bf360c","#000000"],"brown":["#ffffff","#efebe9","#d7ccc8","#bcaaa4","#a1887f","#8d6e63","#795548","#6d4c41","#5d4037","#4e342e","#3e2723","#000000"],"grey":["#ffffff","#fafafa","#f5f5f5","#eeeeee","#e0e0e0","#bdbdbd","#9e9e9e","#757575","#616161","#424242","#212121","#000000"],"bluegrey":["#ffffff","#eceff1","#cfd8dc","#b0bec5","#90a4ae","#78909c","#607d8b","#546e7a","#455a64","#37474f","#263238","#000000"]}},{"name":"RadixUI","colors":{"gray":["#ffffff","#f9f9f9","#f0f0f0","#e8e8e8","#e0e0e0","#d9d9d9","#cecece","#bbbbbb","#8d8d8d","#838383","#646464","#202020","#000000"],"mauve":["#ffffff","#faf8fb","#f5f2f7","#ede9ef","#e6e1e8","#dfdae0","#d3cdd7","#c1bac7","#8e8896","#837d8b","#65636d","#211f26","#000000"],"slate":["#ffffff","#f8f9fa","#f1f3f5","#eceef0","#e6e8eb","#dfe3e6","#d7dbdf","#c1c8cd","#889096","#7e868c","#687076","#11181c","#000000"],"sage":["#ffffff","#f7f9f8","#eef1f0","#e6e9e8","#dfe2e0","#d7dad9","#cbcfcd","#b8bcba","#868e8b","#7c8481","#5f6563","#1a211e","#000000"],"olive":["#ffffff","#f8faf8","#f2f4f2","#ecefec","#e6e9e6","#dfe3df","#d2d7d2","#bdc3bd","#8b918b","#808780","#60655f","#1d211c","#000000"],"sand":["#ffffff","#f9f9f8","#f3f3f2","#eeeeec","#e9e9e6","#e3e3df","#d6d6d0","#c0c0b8","#90908c","#868682","#696965","#21201c","#000000"],"tomato":["#ffffff","#fff8f7","#feebe7","#ffdcd3","#ffcdc2","#fdbdaf","#f5a898","#ec8e7b","#e54d2e","#dd4425","#d13415","#5c271f","#000000"],"red":["#ffffff","#fff7f7","#feebec","#ffdbdc","#ffcdce","#fdbdbe","#f4a9aa","#eb8e90","#e5484d","#dc3d43","#cd2b31","#381316","#000000"],"ruby":["#ffffff","#fff7f8","#feeaed","#ffdce1","#ffced6","#f8bfc8","#efacb8","#e592a3","#e54666","#dc3b5d","#ca244d","#3a141e","#000000"],"crimson":["#ffffff","#fff7fb","#feecf4","#ffdcec","#ffcee4","#f9bdd9","#f0a9cd","#e58fbf","#e93d82","#df3478","#cb1d63","#381525","#000000"],"pink":["#ffffff","#fff7fc","#fee9f5","#fbdcef","#f6cee7","#efbfdd","#e7acd0","#dd90c3","#d6409f","#cf3897","#c2298a","#3b0a2a","#000000"],"plum":["#ffffff","#fdf7fd","#fbebfb","#f7def8","#f2d1f3","#e9c2ec","#deade3","#cf91d8","#ab4aba","#a144af","#953ea3","#3d0f3f","#000000"],"purple":["#ffffff","#fbf7fe","#f7edfe","#f2e2fc","#ead5f9","#e0c4f4","#d1afec","#be93e4","#8e4ec6","#8445bc","#793aaf","#2b0e44","#000000"],"violet":["#ffffff","#faf8ff","#f4f0fe","#ebe4ff","#e1d9ff","#d4cafe","#c2b5f5","#aa99ec","#6e56cf","#644fc1","#5746af","#20134b","#000000"],"iris":["#ffffff","#f8f8ff","#f0f1fe","#e6e7ff","#dadcff","#cbcdff","#b8baf8","#9b9ef0","#5b5bd6","#5151cd","#4646b7","#171764","#000000"],"indigo":["#ffffff","#f8faff","#f0f4ff","#e6edfe","#d9e2fc","#c6d4f9","#aec0f5","#8da4ef","#3e63dd","#3358d4","#2a4cb2","#1f2d5c","#000000"]}},{"name":"Salesforce Lightning 2","colors":{"neutral":["#000000","#181818","#242424","#2E2E2E","#444444","#5C5C5C","#747474","#939393","#A0A0A0","#AEAEAE","#C9C9C9","#E5E5E5","#F3F3F3","#ffffff"],"blue":["#000000","#001639","#03234D","#032D60","#014486","#0B5CAB","#0176D3","#1B96FF","#57A3FD","#78B0FD","#AACBFF","#D8E6FE","#EEF4FF","#ffffff"],"cloud-blue":["#000000","#001A28","#0A2636","#023248","#084968","#05628A","#107CAD","#0D9DDA","#08ABED","#1AB9FF","#90D0FE","#CFE9FE","#EAF5FE","#ffffff"],"electric-blue":["#000000","#001642","#001E5B","#002775","#022AC0","#0250D9","#066AFE","#4992FE","#5F9FFE","#7CB1FE","#A8CBFF","#D6E6FF","#EDF4FF","#ffffff"],"indigo":["#000000","#200647","#1F0974","#321D71","#2F2CB7","#3A49DA","#5867E8","#7F8CED","#8E9BEF","#9EA9F1","#BEC7F6","#E0E5F8","#F1F3FB","#ffffff"],"purple":["#000000","#240643","#300B60","#401075","#5A1BA9","#7526E3","#9050E9","#AD7BEE","#B78DEF","#C29EF1","#D7BFF2","#ECE1F9","#F6F2FB","#ffffff"],"red":["#000000","#300C01","#4A0C04","#640103","#8E030F","#BA0517","#EA001E","#FE5C4C","#FE7765","#FE8F7D","#FEB8AB","#FEDED8","#FEF1EE","#ffffff"],"pink":["#000000","#370114","#4B0620","#61022A","#8A033E","#B60554","#E3066A","#FF538A","#FE7298","#FE8AA7","#FDB6C5","#FDDDE3","#FEF0F3","#ffffff"],"hot-orange":["#000000","#281202","#421604","#4A2413","#7E2600","#AA3001","#D83A00","#FF5D2D","#FF784F","#FF906E","#FEB9A5","#FFDED5","#FEF1ED","#ffffff"],"orange":["#000000","#201600","#371E03","#3E2B02","#5F3E02","#825101","#A96404","#DD7A01","#F38303","#FE9339","#FFBA90","#FEDFD0","#FFF1EA","#ffffff"],"yellow":["#000000","#281202","#2E2204","#4F2100","#6F3400","#8C4B02","#A86403","#CA8501","#D79304","#E4A201","#FCC003","#F9E3B6","#FBF3E0","#ffffff"],"teal":["#000000","#071B12","#072825","#023434","#024D4C","#056764","#0B827C","#06A59A","#03B4A7","#01C3B3","#04E1CB","#ACF3E4","#DEF9F3","#ffffff"],"green":["#000000","#071B12","#0C2912","#1C3326","#194E31","#396547","#2E844A","#3BA755","#41B658","#45C65A","#91DB8B","#CDEFC4","#EBF7E6","#ffffff"]}},{"name":"Shopify Polaris","colors":{"azure":["#ffffff","#f9fcff","#f6faff","#f1f8ff","#ecf6ff","#e6f4ff","#e1f1ff","#d4edff","#c7e9ff","#99e1ff","#00c8ec","#00b9db","#00aacd","#009ab9","#0083a0","#00657c","#000000"],"blue":["#ffffff","#fbfcff","#f8f9ff","#f6f7ff","#f2f4ff","#eef1ff","#ecefff","#e4e9ff","#dee5ff","#cad7ff","#8ac1ff","#00b2f5","#00a1eb","#008bcb","#0076ad","#00537c","#000000"],"gray":["#ffffff","#fefefe","#fdfdfd","#fbfbfb","#fafafa","#f9f9f9","#f6f6f6","#f2f2f2","#ebebeb","#e7e7e7","#dbdbdb","#c2c2c2","#a6a6a6","#939393","#787878","#5a5a5a","#000000"],"green":["#ffffff","#f4fff6","#e8ffeb","#d8ffe0","#c7fed6","#affbcb","#9afac6","#73f7be","#49f0b9","#56e0b7","#40cdad","#22b9a3","#1ca394","#0d9489","#2e7f78","#166c66","#000000"],"lime":["#ffffff","#f3fff3","#e9ffea","#deffe0","#ceffd0","#b6ffb8","#81ff87","#6ef977","#6af572","#63e96d","#56d45f","#49c051","#3db245","#3b9c40","#1c8626","#1c6522","#000000"],"magenta":["#ffffff","#fffbff","#fef8fe","#fff4ff","#fef0fe","#fdedfd","#fde9fd","#fce0fc","#fcd9fc","#fbc4fb","#f19df1","#e478e4","#cf6ccf","#b75ab7","#9d479d","#7d2a7d","#000000"],"orange":["#ffffff","#fffbf7","#fff9f2","#fff6ec","#fff3e4","#ffefdc","#ffecd2","#ffe5b7","#ffdd00","#f3d200","#dabe00","#c9b000","#b99f00","#a38b00","#8a7500","#6a5a00","#000000"],"purple":["#ffffff","#fcfbff","#faf9ff","#f8f6ff","#f5f3ff","#f3f0ff","#f0eeff","#ebe7ff","#e5dfff","#d5c9ff","#c8b4ff","#bc99ff","#b26cff","#9e00ea","#8400c8","#5d0097","#000000"],"red":["#ffffff","#fffbfc","#fff6f8","#fff5f6","#fff1f4","#ffeef0","#ffeaed","#ffe2e5","#fed6d9","#fbbcc0","#f27381","#e53869","#d13869","#c53b65","#a42e53","#77223b","#000000"],"rose":["#ffffff","#fffbfc","#fff8fa","#fff5f7","#fff1f5","#ffeef2","#ffeaef","#ffe2ea","#ffdbe6","#ffc5d9","#fe94c7","#f23db5","#dd2ea4","#c42291","#a81679","#870d5d","#000000"],"teal":["#ffffff","#f5fefd","#edfdfb","#e3fbf9","#d5fbf8","#c2fbf6","#b1f8f3","#a0f4ee","#73f1eb","#60e5df","#00d0cb","#4bbeb9","#3dada8","#3d9b97","#1c8582","#2a7370","#000000"],"yellow":["#ffffff","#fffcee","#fffae0","#fff8ce","#fff6b6","#fff400","#fbf000","#f6eb00","#f1e700","#e4da00","#cbc200","#bdb400","#aca400","#979000","#7c7600","#625d00","#000000"]}},{"name":"Tailwind CSS","colors":{"neutral":["#ffffff","#fafafa","#f5f5f5","#e5e5e5","#d4d4d4","#a3a3a3","#737373","#525252","#404040","#262626","#171717","#0a0a0a","#000000"],"red":["#ffffff","#fef2f2","#fee2e2","#fecaca","#fca5a5","#f87171","#ef4444","#dc2626","#b91c1c","#991b1b","#7f1d1d","#450a0a","#000000"],"orange":["#ffffff","#fff7ed","#ffedd5","#fed7aa","#fdba74","#fb923c","#f97316","#ea580c","#c2410c","#9a3412","#7c2d12","#431407","#000000"],"amber":["#ffffff","#fffbeb","#fef3c7","#fde68a","#fcd34d","#fbbf24","#f59e0b","#d97706","#b45309","#92400e","#78350f","#451a03","#000000"],"yellow":["#ffffff","#fefce8","#fef9c3","#fef08a","#fde047","#facc15","#eab308","#ca8a04","#a16207","#854d0e","#713f12","#422006","#000000"],"lime":["#ffffff","#f7fee7","#ecfccb","#d9f99d","#bef264","#a3e635","#84cc16","#65a30d","#4d7c0f","#3f6212","#365314","#1a2e05","#000000"],"green":["#ffffff","#f0fdf4","#dcfce7","#bbf7d0","#86efac","#4ade80","#22c55e","#16a34a","#15803d","#166534","#14532d","#052e16","#000000"],"emerald":["#ffffff","#ecfdf5","#d1fae5","#a7f3d0","#6ee7b7","#34d399","#10b981","#059669","#047857","#065f46","#064e3b","#022c22","#000000"],"teal":["#ffffff","#f0fdfa","#ccfbf1","#99f6e4","#5eead4","#2dd4bf","#14b8a6","#0d9488","#0f766e","#115e59","#134e4a","#042f2e","#000000"],"cyan":["#ffffff","#ecfeff","#cffafe","#a5f3fc","#67e8f9","#22d3ee","#06b6d4","#0891b2","#0e7490","#155e75","#164e63","#083344","#000000"],"sky":["#ffffff","#f0f9ff","#e0f2fe","#bae6fd","#7dd3fc","#38bdf8","#0ea5e9","#0284c7","#0369a1","#075985","#0c4a6e","#082f49","#000000"],"blue":["#ffffff","#eff6ff","#dbeafe","#bfdbfe","#93c5fd","#60a5fa","#3b82f6","#2563eb","#1d4ed8","#1e40af","#1e3a8a","#172554","#000000"],"indigo":["#ffffff","#eef2ff","#e0e7ff","#c7d2fe","#a5b4fc","#818cf8","#6366f1","#4f46e5","#4338ca","#3730a3","#312e81","#1e1b4b","#000000"],"violet":["#ffffff","#f5f3ff","#ede9fe","#ddd6fe","#c4b5fd","#a78bfa","#8b5cf6","#7c3aed","#6d28d9","#5b21b6","#4c1d95","#2e1065","#000000"],"purple":["#ffffff","#faf5ff","#f3e8ff","#e9d5ff","#d8b4fe","#c084fc","#a855f7","#9333ea","#7e22ce","#6b21a8","#581c87","#3b0764","#000000"],"fuchsia":["#ffffff","#fdf4ff","#fae8ff","#f5d0fe","#f0abfc","#e879f9","#d946ef","#c026d3","#a21caf","#86198f","#701a75","#4a044e","#000000"],"pink":["#ffffff","#fdf2f8","#fce7f3","#fbcfe8","#f9a8d4","#f472b6","#ec4899","#db2777","#be185d","#9d174d","#831843","#500724","#000000"],"rose":["#ffffff","#fff1f2","#ffe4e6","#fecdd3","#fda4af","#fb7185","#f43f5e","#e11d48","#be123c","#9f1239","#881337","#4c0519","#000000"]}},{"name":"U.S. Web Design System","colors":{"red-cool":["#ffffff","#f8eff1","#f3e1e4","#ecbec6","#e09aa6","#e16b80","#cd425b","#9e394b","#68363f","#40282c","#1e1517","#000000"],"red":["#ffffff","#f9eeee","#f8e1de","#f7bbb1","#f2938c","#e9695f","#d83933","#a23737","#6f3331","#3e2927","#1b1616","#000000"],"red-warm":["#ffffff","#f6efea","#f4e3db","#ecc0a7","#dca081","#d27a56","#c3512c","#805039","#524236","#332d29","#1f1c18","#000000"],"orange":["#ffffff","#f6efe9","#f2e4d4","#f3bf90","#f09860","#dd7533","#a86437","#775540","#524236","#332d27","#1b1614","#000000"],"orange-warm":["#ffffff","#faeee5","#fbe0d0","#f7bca2","#f3966d","#e17141","#bd5727","#914734","#633a32","#3d2925","#1c1615","#000000"],"gold":["#ffffff","#f5f0e6","#f1e5cd","#dec69a","#c7a97b","#ad8b65","#8e704f","#6b5947","#4d4438","#322d26","#191714","#000000"],"yellow":["#ffffff","#faf3d1","#f5e6af","#e6c74c","#c9ab48","#a88f48","#8a7237","#6b5a39","#504332","#332d27","#1a1614","#000000"],"green":["#ffffff","#eaf4dd","#dfeacd","#b8d293","#9bb672","#7d9b4e","#607f35","#4c6424","#3c4a29","#293021","#161814","#000000"],"green-warm":["#ffffff","#f1f4d7","#e7eab7","#cbd17a","#a6b557","#8a984b","#6f7a41","#5a5f38","#45472f","#2d2f21","#171712","#000000"],"green-cool":["#ffffff","#ecf3ec","#dbebde","#b4d0b9","#86b98e","#5e9f69","#4d8055","#446443","#37493b","#28312a","#1a1f1a","#000000"],"mint":["#ffffff","#dbf6ed","#c7efe2","#92d9bb","#5abf95","#34a37e","#2e8367","#286846","#204e34","#193324","#0d1a12","#000000"],"mint-cool":["#ffffff","#e0f7f6","#c4eeeb","#9bd4cf","#6fbab3","#4f9e99","#40807e","#376462","#2a4b45","#203131","#111818","#000000"],"cyan":["#ffffff","#e7f6f8","#ccecf2","#99deea","#5dc0d1","#449dac","#168092","#2a646d","#2c4a4e","#203133","#111819","#000000"],"blue":["#ffffff","#eff6fb","#d9e8f6","#aacdec","#73b3e7","#4f97d1","#2378c3","#2c608a","#274863","#1f303e","#11181d","#000000"],"blue-cool":["#ffffff","#e7f2f5","#dae9ee","#adcfdc","#82b4c9","#6499af","#3a7d95","#2e6276","#224a58","#14333d","#0f191c","#000000"],"blue-warm":["#ffffff","#ecf1f7","#e1e7f1","#bbcae4","#98afd2","#7292c7","#4a77b4","#345d96","#2f4668","#252f3e","#13171f","#000000"],"indigo":["#ffffff","#efeff8","#e5e4fa","#c5c5f3","#a5a8eb","#8889db","#676cc8","#4d52af","#3d4076","#2b2c40","#16171f","#000000"],"indigo-cool":["#ffffff","#eef0f9","#e1e6f9","#bbc8f5","#96abee","#6b8ee8","#496fd8","#3f57a6","#374274","#292d42","#151622","#000000"],"indigo-warm":["#ffffff","#f1eff7","#e7e3fa","#cbc4f2","#afa5e8","#9287d8","#7665d1","#5e519e","#453c7b","#2e2c40","#18161d","#000000"],"violet":["#ffffff","#f4f1f9","#ebe3f9","#d0c3e9","#b8a2e3","#9d84d2","#8168b3","#665190","#4c3d69","#312b3f","#18161d","#000000"],"violet-warm":["#ffffff","#f8f0f9","#f6dff8","#e2bee4","#d29ad8","#bf77c8","#b04abd","#864381","#5c395a","#382936","#1b151b","#000000"],"magenta":["#ffffff","#f9f0f2","#f6e1e8","#f0bbcc","#e895b3","#e0699f","#c84281","#8b4566","#66364b","#402731","#1b1617","#000000"],"gray":["#ffffff","#f0f0f0","#e6e6e6","#c9c9c9","#adadad","#919191","#757575","#5c5c5c","#454545","#2e2e2e","#1b1b1b","#000000"],"gray-cool":["#ffffff","#edeff0","#dfe1e2","#c6cace","#a9aeb1","#8d9297","#71767a","#565c65","#3d4551","#2d2e2f","#1c1d1f","#000000"],"gray-warm":["#ffffff","#f0f0ec","#e6e6e2","#cac9c0","#afaea2","#929285","#76766a","#5d5d52","#454540","#2e2e2a","#171716","#000000"]}}];