chromametry 0.3.4 → 0.3.6
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 +1 -1
- package/dist/index.d.cts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.global.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
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 };
|
package/dist/index.global.js
CHANGED
|
@@ -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};
|