accessible-colors
Version:
Utility functions for working with colors in adherence to WCAG 2.1 guidelines.
8 lines • 2.66 kB
JavaScript
/**
* @license
* author: Christopher Hawke (https://github.com/cdhawke)
* accessible-colors.js v1.0.9
* Released under the MIT license.
*/
var c=r=>{let n=w(r);return L(n)},b=r=>{let n=m(r);return B(n)},L=r=>{let{r:n,g:t,b:e}=r;return`#${(n<<16|t<<8|e).toString(16).padStart(6,"0")}`},m=r=>{let n=parseInt(r.replace(/^#/,""),16),t=n>>16&255,e=n>>8&255,s=n&255;return{r:t,g:e,b:s}},w=({h:r,s:n,l:t})=>{let e,s,o;if(n==0)e=s=o=t;else{let l=(a,f,g)=>(g<0&&(g+=1),g>1&&(g-=1),g<.16666666666666666?a+(f-a)*6*g:g<.5?f:g<.6666666666666666?a+(f-a)*(.6666666666666666-g)*6:a),i=t<.5?t*(1+n):t+n-t*n,u=2*t-i;e=l(u,i,r+1/3),s=l(u,i,r),o=l(u,i,r-1/3)}return{r:Math.round(e*255),g:Math.round(s*255),b:Math.round(o*255)}},B=({r,g:n,b:t})=>{r/=255,n/=255,t/=255;let e=Math.max(r,n,t),s=Math.min(r,n,t),o,l,i=(e+s)/2;if(e==s)o=l=0;else{let u=e-s;switch(l=i>.5?u/(2-e-s):u/(e+s),e){case r:o=(n-t)/u+(n<t?6:0);break;case n:o=(t-r)/u+2;break;case t:o=(r-n)/u+4;break}o/=6}return{h:o,s:l,l:i}},M=(r,n,t,e,s)=>{let{l:o,...l}=r,i=t==="lighten"?1:o,u=t==="lighten"?o:0,a=c({...l,l:u}),f=c({...l,l:i}),g=c(n);if(!e(t==="lighten"?f:a,g,s))return null;let d=null,A=null;for(;a!==d||f!==A;){d=a,A=f;let h=(u+i)/2,C=c({...l,l:h});t==="lighten"&&(e(C,g,s)?(i=h,f=c({...l,l:h})):(u=h,a=c({...l,l:h}))),t==="darken"&&(e(C,g,s)?(u=h,a=c({...l,l:h})):(i=h,f=c({...l,l:h})))}return b(t==="lighten"?f:a)},p=(r,n,t,e)=>{let s=b(r),o=b(n);if(!o||!s)return null;if(t(r,n,e))return r;let l=M(s,o,"darken",t,e),i=M(s,o,"lighten",t,e);if(l!==null&&i!==null){let u=Math.abs(s.l-l.l),a=Math.abs(s.l-i.l);return c(u<a?l:i)}return l===null&&i!==null?c(i):i===null&&l!==null?c(l):null};var H=r=>{if(!r)return null;let n=m(r);if(!n)return null;let[t,e,s]=Object.values(n).map(o=>{let l=o/255;return l<=.03928?l/12.92:Math.pow((l+.055)/1.055,2.4)});return .2126*t+.7152*e+.0722*s},G=(r,n,t=3)=>{if(r===null||n===null)return null;let e=H(r),s=H(n);if(e===null||s===null)return null;let[o,l]=[e,s].sort((i,u)=>u-i);return Math.round((o+.05)/(l+.05)*10**t)/10**t},S=(r,n,t)=>{let e=G(r,n);return e?e>=t:null},R=(r,n,t=!1)=>S(r,n,t?3:4.5),k=(r,n,t=!1)=>S(r,n,t?4.5:7),x=()=>`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,"0")}`,V=(r,n=!1)=>{let t=x(),e=0;for(;!R(r,t,n);){if(e++>1e3)return null;t=x()}return t},j=(r,n=!1)=>{let t=x(),e=0;for(;!k(r,t,n);){if(e++>1e3)return null;t=x()}return t},D=(r,n,t)=>p(r,n,R,t),$=(r,n,t)=>p(r,n,k,t);export{G as getContrast,H as getLuminance,j as getRandomAAAColor,V as getRandomAAColor,k as isAAAContrast,R as isAAContrast,S as isContrasting,x as randomColor,$ as suggestAAAColorVariant,D as suggestAAColorVariant};
//# sourceMappingURL=index.mjs.map