@colordx/core
Advanced tools
+1
-1
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkZ5MM7DU5_cjs=require('./chunk-Z5MM7DU5.cjs'),chunkLTRVT3GL_cjs=require('./chunk-LTRVT3GL.cjs'),chunkGXECYURS_cjs=require('./chunk-GXECYURS.cjs');require('./chunk-EDNIB75Q.cjs');var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunk3V4MONNR_cjs=require('./chunk-3V4MONNR.cjs'),chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var V=l=>({h:chunkYISEJCI6_cjs.c(l.h),s:chunkYISEJCI6_cjs.a(l.s,0,100),l:chunkYISEJCI6_cjs.a(l.l,0,100),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(l.alpha,3),0,1)}),O={h:0,s:0,l:0,alpha:0},R=({r:l,g:r,b:o,alpha:t})=>{let n=l/255,e=r/255,s=o/255,a=Math.max(n,e,s),b=Math.min(n,e,s),C=(a+b)/2,d=0,x=0;if(a!==b){let _=a-b;switch(x=C>.5?_/(2-a-b):_/(a+b),a){case n:d=((e-s)/_+(e<s?6:0))/6;break;case e:d=((s-n)/_+2)/6;break;case s:d=((n-e)/_+4)/6;break}}let y=d*360;return O.h=y>=0&&y<360?y:(y%360+360)%360,O.s=chunkYISEJCI6_cjs.a(x*100,0,100),O.l=chunkYISEJCI6_cjs.a(C*100,0,100),O.alpha=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t,3),0,1),O};var N=(l,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?l+(r-l)*6*o:o<1/2?r:o<2/3?l+(r-l)*(2/3-o)*6:l),k=({h:l,s:r,l:o,alpha:t})=>{let n=r/100,e=o/100,s=e<.5?e*(1+n):e+n-e*n,a=2*e-s,b=(l%360+360)%360/360;return {r:N(a,s,b+1/3)*255,g:N(a,s,b)*255,b:N(a,s,b-1/3)*255,alpha:t}},X=l=>{if(!chunkYISEJCI6_cjs.h(l)||!chunkYISEJCI6_cjs.i(l,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:n=1}=l;return !chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(n)?null:k(V({h:chunkYISEJCI6_cjs.g(r),s:chunkYISEJCI6_cjs.g(o),l:chunkYISEJCI6_cjs.g(t),alpha:chunkYISEJCI6_cjs.g(n)}))},pr=new RegExp(`^hsla?\\(\\s*(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${chunkYISEJCI6_cjs.j})%\\s*,\\s*(?<l_c>${chunkYISEJCI6_cjs.j})%(?:\\s*,\\s*(?<al_c>${chunkYISEJCI6_cjs.j})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${chunkYISEJCI6_cjs.k})(?<sp_s>%?)\\s+(?<l_s>${chunkYISEJCI6_cjs.k})(?<lp_s>%?)(?:\\s*/\\s*(?<al_s>${chunkYISEJCI6_cjs.k})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),J=l=>{if(typeof l!="string")return null;let r=pr.exec(l.trim())?.groups;if(!r)return null;let o=r.s_c!==void 0;if(o&&/^none$/i.test(r.h))return null;let t=r.hu?.toLowerCase()??"deg",n=chunkYISEJCI6_cjs.l(r.h)*(chunkYISEJCI6_cjs.d[t]??1),e=chunkYISEJCI6_cjs.l(r.s_c??r.s_s),s=chunkYISEJCI6_cjs.l(r.l_c??r.l_s),a=r.al_c??r.al_s,b=!!(r.alp_c??r.alp_s);if(o&&a!==void 0&&/^none$/i.test(a))return null;let C=a===void 0?1:chunkYISEJCI6_cjs.l(a)/(b?100:1);return k(V({h:n,s:e,l:s,alpha:C}))};var Q=({l,c:r,h:o,alpha:t})=>({l,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),W=l=>{let{l:r,a:o,b:t,alpha:n}=chunkGXECYURS_cjs.b(l),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:chunkYISEJCI6_cjs.c(s),alpha:n}},A=l=>chunkGXECYURS_cjs.d(Q(l)),Y=l=>chunkGXECYURS_cjs.c(Q(l)),Z=l=>{if(!chunkYISEJCI6_cjs.h(l)||l.colorSpace==="lch"||!chunkYISEJCI6_cjs.i(l,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:n=1}=l;return !chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(n)||chunkYISEJCI6_cjs.g(r)>1?null:Y({l:chunkYISEJCI6_cjs.g(r),c:Math.max(0,chunkYISEJCI6_cjs.g(o)),h:chunkYISEJCI6_cjs.c(chunkYISEJCI6_cjs.g(t)),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(n),0,1)})},Cr=new RegExp(`^oklch\\(\\s*(?<l>${chunkYISEJCI6_cjs.k})(?<lp>%?)\\s+(?<c>${chunkYISEJCI6_cjs.k})(?<cp>%?)\\s+(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),rr=l=>{if(typeof l!="string")return null;let r=Cr.exec(l.trim())?.groups;if(!r)return null;let o=r.lp?chunkYISEJCI6_cjs.l(r.l)/100:chunkYISEJCI6_cjs.l(r.l),t=Math.max(0,r.cp?chunkYISEJCI6_cjs.l(r.c)*.004:chunkYISEJCI6_cjs.l(r.c)),n=r.hu?.toLowerCase()??"deg",e=chunkYISEJCI6_cjs.l(r.h)*(chunkYISEJCI6_cjs.d[n]??1),s=r.al===void 0?1:chunkYISEJCI6_cjs.l(r.al)/(r.alp?100:1);return Y({l:o,c:t,h:chunkYISEJCI6_cjs.c(e),alpha:chunkYISEJCI6_cjs.a(s,0,1)})};var or=[[chunkZ5MM7DU5_cjs.a,"hex"],[chunk3V4MONNR_cjs.c,"rgb"],[J,"hsl"],[rr,"oklch"],[chunkGXECYURS_cjs.h,"oklab"]],tr=[[chunk3V4MONNR_cjs.b,"rgb"],[X,"hsl"],[chunkGXECYURS_cjs.g,"oklab"],[Z,"oklch"]],lr=or.map(([l])=>l),nr=tr.map(([l])=>l),er=[...lr,...nr],L=[...er],F=[],sr=l=>{if(l==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof l=="string"?lr:nr;for(let o of r){let t=o(l);if(t)return t}for(let o=er.length;o<L.length;o++){let t=L[o](l);if(t)return t}return null},dr=l=>{if(l==="transparent")return "name";let r=typeof l=="string"?or:tr;for(let[o,t]of r)if(o(l))return t;for(let[o,t]of F)if(o(l))return t};var ar=Symbol(),g=class l{_rgb;_valid;constructor(r,o){if(r===ar)this._valid=true,this._rgb=o;else if(r instanceof l)this._valid=r._valid,this._rgb=r._rgb;else {let t=sr(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}}static _make(r){return new l(ar,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:n}){let[e,s,a]=chunkGXECYURS_cjs.f(r,o,t);return l._make({r:chunkX5FCFNQN_cjs.b(e)*255,g:chunkX5FCFNQN_cjs.b(s)*255,b:chunkX5FCFNQN_cjs.b(a)*255,alpha:n})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return {r:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255),g:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255),b:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255),alpha:n}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:n}=this._rgb,e=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255),s=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255),a=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255);return n<1?`rgb(${e} ${s} ${a} / ${n})`:`rgb(${e} ${s} ${a})`}toHex(){return chunkZ5MM7DU5_cjs.b(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255)<<16|chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255)<<8|chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255)}toHsl(r=2){let{h:o,s:t,l:n,alpha:e}=R(this._rgb),s=chunkYISEJCI6_cjs.b(o,r);return {h:s>=360?0:s,s:chunkYISEJCI6_cjs.b(t,r),l:chunkYISEJCI6_cjs.b(n,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l:n,alpha:e}=this.toHsl(r);return e<1?`hsl(${o} ${t}% ${n}% / ${e})`:`hsl(${o} ${t}% ${n}%)`}toOklab(){let{l:r,a:o,b:t,alpha:n}=chunkGXECYURS_cjs.b(this._rgb);return {l:chunkYISEJCI6_cjs.b(r,4),a:chunkYISEJCI6_cjs.b(o,4),b:chunkYISEJCI6_cjs.b(t,4),alpha:n}}toOklabString(){let{l:r,a:o,b:t,alpha:n}=this.toOklab();return n<1?`oklab(${r} ${o} ${t} / ${n})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:n}=W(this._rgb);return {l:chunkYISEJCI6_cjs.b(r,4),c:chunkYISEJCI6_cjs.b(o,4),h:chunkYISEJCI6_cjs.b(t,2),alpha:n}}toOklchString(){let{l:r,c:o,h:t,alpha:n}=this.toOklch(),e=o===0?"none":t;return n<1?`oklch(${r} ${o} ${e} / ${n})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return chunkYISEJCI6_cjs.b((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:l._make({...this._rgb,alpha:chunkYISEJCI6_cjs.b(chunkYISEJCI6_cjs.a(r,0,1),3)})}hue(r){let{h:o,s:t,l:n,alpha:e}=R(this._rgb);if(r===void 0){let s=chunkYISEJCI6_cjs.b(o,2);return s>=360?0:s}return l._make(k({h:r,s:t,l:n,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:l._make(A({...o,l:chunkYISEJCI6_cjs.a(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:l._make(A({...o,c:chunkYISEJCI6_cjs.a(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?e*(1+r):e+r*100;return l._make(k({h:t,s:n,l:chunkYISEJCI6_cjs.a(a,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?n*(1+r):n+r*100;return l._make(k({h:t,s:chunkYISEJCI6_cjs.a(a,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:n}=this._rgb;return l._make({r:255-r,g:255-o,b:255-t,alpha:n})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new l(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:l._make({r:chunkYISEJCI6_cjs.a(r,0,255),g:chunkYISEJCI6_cjs.a(o,0,255),b:chunkYISEJCI6_cjs.a(t,0,255),alpha:n})}mapSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,a]=chunkGXECYURS_cjs.a(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(o/255),chunkX5FCFNQN_cjs.a(t/255)),b=e>1-1e-7?1:e<1e-7?0:e,C=chunkLTRVT3GL_cjs.b({l:b,a:s,b:a,alpha:n});return C!==null?l._makeFromOklab(C):this}static toGamutSrgb},fr=l=>new g(l),kr=l=>{l.forEach(r=>r(g,L,F));},xr=(l,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:n}=new g(l).toOklab(),e=1/0,s=r[0];for(let a of r){let{l:b,a:C,b:d}=new g(a).toOklab(),x=(b-o)**2+(C-t)**2+(d-n)**2;x<e&&(e=x,s=a);}return s},_r=()=>new g({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});g.toGamutSrgb=l=>{let r=chunkLTRVT3GL_cjs.b(l);return r!==null?g._makeFromOklab(r):new g(l)};Object.defineProperty(exports,"inGamutSrgb",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.a}});Object.defineProperty(exports,"oklchToLinear",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.e}});Object.defineProperty(exports,"oklchToLinearAndSrgb",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.i}});Object.defineProperty(exports,"oklchToLinearAndSrgbInto",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.j}});Object.defineProperty(exports,"oklchToLinearInto",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.f}});Object.defineProperty(exports,"oklchToRgbChannels",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.g}});Object.defineProperty(exports,"oklchToRgbChannelsInto",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.h}});exports.Colordx=g;exports.colordx=fr;exports.extend=kr;exports.getFormat=dr;exports.nearest=xr;exports.random=_r;//# sourceMappingURL=index.cjs.map | ||
| 'use strict';var chunkZ5MM7DU5_cjs=require('./chunk-Z5MM7DU5.cjs'),chunkLTRVT3GL_cjs=require('./chunk-LTRVT3GL.cjs'),chunkGXECYURS_cjs=require('./chunk-GXECYURS.cjs');require('./chunk-EDNIB75Q.cjs');var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunk3V4MONNR_cjs=require('./chunk-3V4MONNR.cjs'),chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var V=l=>({h:chunkYISEJCI6_cjs.c(l.h),s:chunkYISEJCI6_cjs.a(l.s,0,100),l:chunkYISEJCI6_cjs.a(l.l,0,100),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(l.alpha,3),0,1)}),O={h:0,s:0,l:0,alpha:0},R=({r:l,g:r,b:o,alpha:t})=>{let n=l/255,e=r/255,s=o/255,a=Math.max(n,e,s),b=Math.min(n,e,s),C=(a+b)/2,d=0,x=0;if(a!==b){let _=a-b;switch(x=C>.5?_/(2-a-b):_/(a+b),a){case n:d=((e-s)/_+(e<s?6:0))/6;break;case e:d=((s-n)/_+2)/6;break;case s:d=((n-e)/_+4)/6;break}}let y=d*360;return O.h=y>=0&&y<360?y:(y%360+360)%360,O.s=chunkYISEJCI6_cjs.a(x*100,0,100),O.l=chunkYISEJCI6_cjs.a(C*100,0,100),O.alpha=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t,3),0,1),O};var N=(l,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?l+(r-l)*6*o:o<1/2?r:o<2/3?l+(r-l)*(2/3-o)*6:l),k=({h:l,s:r,l:o,alpha:t})=>{let n=r/100,e=o/100,s=e<.5?e*(1+n):e+n-e*n,a=2*e-s,b=(l%360+360)%360/360;return {r:N(a,s,b+1/3)*255,g:N(a,s,b)*255,b:N(a,s,b-1/3)*255,alpha:t}},X=l=>{if(!chunkYISEJCI6_cjs.h(l)||!chunkYISEJCI6_cjs.i(l,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:n=1}=l;return !chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(n)?null:k(V({h:chunkYISEJCI6_cjs.g(r),s:chunkYISEJCI6_cjs.g(o),l:chunkYISEJCI6_cjs.g(t),alpha:chunkYISEJCI6_cjs.g(n)}))},mr=new RegExp(`^hsla?\\(\\s*(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${chunkYISEJCI6_cjs.j})%\\s*,\\s*(?<l_c>${chunkYISEJCI6_cjs.j})%(?:\\s*,\\s*(?<al_c>${chunkYISEJCI6_cjs.j})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${chunkYISEJCI6_cjs.k})(?<sp_s>%?)\\s+(?<l_s>${chunkYISEJCI6_cjs.k})(?<lp_s>%?)(?:\\s*/\\s*(?<al_s>${chunkYISEJCI6_cjs.k})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),J=l=>{if(typeof l!="string")return null;let r=mr.exec(l.trim())?.groups;if(!r)return null;let o=r.s_c!==void 0;if(o&&/^none$/i.test(r.h))return null;let t=r.hu?.toLowerCase()??"deg",n=chunkYISEJCI6_cjs.l(r.h)*(chunkYISEJCI6_cjs.d[t]??1),e=chunkYISEJCI6_cjs.l(r.s_c??r.s_s),s=chunkYISEJCI6_cjs.l(r.l_c??r.l_s),a=r.al_c??r.al_s,b=!!(r.alp_c??r.alp_s);if(o&&a!==void 0&&/^none$/i.test(a))return null;let C=a===void 0?1:chunkYISEJCI6_cjs.l(a)/(b?100:1);return k(V({h:n,s:e,l:s,alpha:C}))};var Q=({l,c:r,h:o,alpha:t})=>({l,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),W=l=>{let{l:r,a:o,b:t,alpha:n}=chunkGXECYURS_cjs.b(l),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:chunkYISEJCI6_cjs.c(s),alpha:n}},A=l=>chunkGXECYURS_cjs.d(Q(l)),Y=l=>chunkGXECYURS_cjs.c(Q(l)),Z=l=>{if(!chunkYISEJCI6_cjs.h(l)||l.colorSpace==="lch"||!chunkYISEJCI6_cjs.i(l,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:n=1}=l;return !chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(n)||chunkYISEJCI6_cjs.g(r)>1?null:Y({l:chunkYISEJCI6_cjs.g(r),c:Math.max(0,chunkYISEJCI6_cjs.g(o)),h:chunkYISEJCI6_cjs.c(chunkYISEJCI6_cjs.g(t)),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(n),0,1)})},Cr=new RegExp(`^oklch\\(\\s*(?<l>${chunkYISEJCI6_cjs.k})(?<lp>%?)\\s+(?<c>${chunkYISEJCI6_cjs.k})(?<cp>%?)\\s+(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),rr=l=>{if(typeof l!="string")return null;let r=Cr.exec(l.trim())?.groups;if(!r)return null;let o=r.lp?chunkYISEJCI6_cjs.l(r.l)/100:chunkYISEJCI6_cjs.l(r.l),t=Math.max(0,r.cp?chunkYISEJCI6_cjs.l(r.c)*.004:chunkYISEJCI6_cjs.l(r.c)),n=r.hu?.toLowerCase()??"deg",e=chunkYISEJCI6_cjs.l(r.h)*(chunkYISEJCI6_cjs.d[n]??1),s=r.al===void 0?1:chunkYISEJCI6_cjs.l(r.al)/(r.alp?100:1);return Y({l:o,c:t,h:chunkYISEJCI6_cjs.c(e),alpha:chunkYISEJCI6_cjs.a(s,0,1)})};var or=[[chunkZ5MM7DU5_cjs.a,"hex"],[chunk3V4MONNR_cjs.c,"rgb"],[J,"hsl"],[rr,"oklch"],[chunkGXECYURS_cjs.h,"oklab"]],tr=[[chunk3V4MONNR_cjs.b,"rgb"],[X,"hsl"],[chunkGXECYURS_cjs.g,"oklab"],[Z,"oklch"]],lr=or.map(([l])=>l),nr=tr.map(([l])=>l),er=[...lr,...nr],L=[...er],F=[],sr=l=>{if(l==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof l=="string"?lr:nr;for(let o of r){let t=o(l);if(t)return t}for(let o=er.length;o<L.length;o++){let t=L[o](l);if(t)return t}return null},dr=l=>{if(l==="transparent")return "name";let r=typeof l=="string"?or:tr;for(let[o,t]of r)if(o(l))return t;for(let[o,t]of F)if(o(l))return t};var ar=Symbol(),g=class l{_rgb;_valid;constructor(r,o){if(r===ar)this._valid=true,this._rgb=o;else if(r instanceof l){this._valid=r._valid,this._rgb=r._rgb;return}else {let t=sr(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}this._rgb.alpha=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(this._rgb.alpha,3),0,1);}static _make(r){return new l(ar,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:n}){let[e,s,a]=chunkGXECYURS_cjs.f(r,o,t);return l._make({r:chunkX5FCFNQN_cjs.b(e)*255,g:chunkX5FCFNQN_cjs.b(s)*255,b:chunkX5FCFNQN_cjs.b(a)*255,alpha:n})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return {r:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255),g:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255),b:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255),alpha:n}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:n}=this._rgb,e=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255),s=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255),a=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255);return n<1?`rgb(${e} ${s} ${a} / ${n})`:`rgb(${e} ${s} ${a})`}toHex(){return chunkZ5MM7DU5_cjs.b(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255)<<16|chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255)<<8|chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255)}toHsl(r=2){let{h:o,s:t,l:n,alpha:e}=R(this._rgb),s=chunkYISEJCI6_cjs.b(o,r);return {h:s>=360?0:s,s:chunkYISEJCI6_cjs.b(t,r),l:chunkYISEJCI6_cjs.b(n,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l:n,alpha:e}=this.toHsl(r);return e<1?`hsl(${o} ${t}% ${n}% / ${e})`:`hsl(${o} ${t}% ${n}%)`}toOklab(){let{l:r,a:o,b:t,alpha:n}=chunkGXECYURS_cjs.b(this._rgb);return {l:chunkYISEJCI6_cjs.b(r,4),a:chunkYISEJCI6_cjs.b(o,4),b:chunkYISEJCI6_cjs.b(t,4),alpha:n}}toOklabString(){let{l:r,a:o,b:t,alpha:n}=this.toOklab();return n<1?`oklab(${r} ${o} ${t} / ${n})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:n}=W(this._rgb);return {l:chunkYISEJCI6_cjs.b(r,4),c:chunkYISEJCI6_cjs.b(o,4),h:chunkYISEJCI6_cjs.b(t,2),alpha:n}}toOklchString(){let{l:r,c:o,h:t,alpha:n}=this.toOklch(),e=o===0?"none":t;return n<1?`oklch(${r} ${o} ${e} / ${n})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return chunkYISEJCI6_cjs.b((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:l._make({...this._rgb,alpha:chunkYISEJCI6_cjs.b(chunkYISEJCI6_cjs.a(r,0,1),3)})}hue(r){let{h:o,s:t,l:n,alpha:e}=R(this._rgb);if(r===void 0){let s=chunkYISEJCI6_cjs.b(o,2);return s>=360?0:s}return l._make(k({h:r,s:t,l:n,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:l._make(A({...o,l:chunkYISEJCI6_cjs.a(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:l._make(A({...o,c:chunkYISEJCI6_cjs.a(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?e*(1+r):e+r*100;return l._make(k({h:t,s:n,l:chunkYISEJCI6_cjs.a(a,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?n*(1+r):n+r*100;return l._make(k({h:t,s:chunkYISEJCI6_cjs.a(a,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:n}=this._rgb;return l._make({r:255-r,g:255-o,b:255-t,alpha:n})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new l(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:l._make({r:chunkYISEJCI6_cjs.a(r,0,255),g:chunkYISEJCI6_cjs.a(o,0,255),b:chunkYISEJCI6_cjs.a(t,0,255),alpha:n})}mapSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,a]=chunkGXECYURS_cjs.a(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(o/255),chunkX5FCFNQN_cjs.a(t/255)),b=e>1-1e-7?1:e<1e-7?0:e,C=chunkLTRVT3GL_cjs.b({l:b,a:s,b:a,alpha:n});return C!==null?l._makeFromOklab(C):this}static toGamutSrgb},fr=l=>new g(l),kr=l=>{l.forEach(r=>r(g,L,F));},xr=(l,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:n}=new g(l).toOklab(),e=1/0,s=r[0];for(let a of r){let{l:b,a:C,b:d}=new g(a).toOklab(),x=(b-o)**2+(C-t)**2+(d-n)**2;x<e&&(e=x,s=a);}return s},_r=()=>new g({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});g.toGamutSrgb=l=>{let r=chunkLTRVT3GL_cjs.b(l);return r!==null?g._makeFromOklab(r):new g(l)};Object.defineProperty(exports,"inGamutSrgb",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.a}});Object.defineProperty(exports,"oklchToLinear",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.e}});Object.defineProperty(exports,"oklchToLinearAndSrgb",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.i}});Object.defineProperty(exports,"oklchToLinearAndSrgbInto",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.j}});Object.defineProperty(exports,"oklchToLinearInto",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.f}});Object.defineProperty(exports,"oklchToRgbChannels",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.g}});Object.defineProperty(exports,"oklchToRgbChannelsInto",{enumerable:true,get:function(){return chunkLTRVT3GL_cjs.h}});exports.Colordx=g;exports.colordx=fr;exports.extend=kr;exports.getFormat=dr;exports.nearest=xr;exports.random=_r;//# sourceMappingURL=index.cjs.map | ||
| //# sourceMappingURL=index.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","HSL_RE","NUM_OR_NONE","NUM","parseHslString","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): number => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n};\n\nexport const hslToRgb = ({ h, s, l, alpha }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = (((h % 360) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\n// Legacy comma form requires `%` on s/l and disallows `none`. Modern space form\n// allows optional `%` and the CSS Color 4 `none` keyword on any channel.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<l_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<l_s>${NUM_OR_NONE})(?<lp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSL_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null; // legacy syntax has no `none`\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const l = parseNum((g.l_c ?? g.l_s)!);\n const rawA = g.al_c ?? g.al_s;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n sanitize,\n} from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE = new RegExp(\n `^oklch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const C = Math.max(0, g.cp ? parseNum(g.c!) * 0.004 : parseNum(g.c!)); // 100% = 0.4\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const H = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgb(${ri} ${gi} ${bi} / ${alpha})` : `rgb(${ri} ${gi} ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsl(${h} ${s}% ${l}% / ${alpha})` : `hsl(${h} ${s}% ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","HSL_RE","NUM_OR_NONE","NUM","parseHslString","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): number => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n};\n\nexport const hslToRgb = ({ h, s, l, alpha }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = (((h % 360) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\n// Legacy comma form requires `%` on s/l and disallows `none`. Modern space form\n// allows optional `%` and the CSS Color 4 `none` keyword on any channel.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<l_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<l_s>${NUM_OR_NONE})(?<lp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSL_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null; // legacy syntax has no `none`\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const l = parseNum((g.l_c ?? g.l_s)!);\n const rawA = g.al_c ?? g.al_s;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n sanitize,\n} from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE = new RegExp(\n `^oklch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const C = Math.max(0, g.cp ? parseNum(g.c!) * 0.004 : parseNum(g.c!)); // 100% = 0.4\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const H = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n return;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n // Single chokepoint for alpha precision: parsers and _make() callers may hand us\n // raw floats (e.g. 1/255, 0.1+0.2). Snapping here keeps every formatter consistent.\n this._rgb.alpha = clamp(round(this._rgb.alpha, 3), 0, 1);\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgb(${ri} ${gi} ${bi} / ${alpha})` : `rgb(${ri} ${gi} ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsl(${h} ${s}% ${l}% / ${alpha})` : `hsl(${h} ${s}% ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import {a,b as b$3}from'./chunk-4JCO6H3F.mjs';import {b as b$5}from'./chunk-2HOOMNKQ.mjs';export{a as inGamutSrgb,e as oklchToLinear,i as oklchToLinearAndSrgb,j as oklchToLinearAndSrgbInto,f as oklchToLinearInto,g as oklchToRgbChannels,h as oklchToRgbChannelsInto}from'./chunk-2HOOMNKQ.mjs';import {h,g as g$1,c as c$2,f as f$1,b as b$4,a as a$2,d as d$1}from'./chunk-J6CH5YTL.mjs';import'./chunk-OXYX6VNO.mjs';import {b as b$2,a as a$3}from'./chunk-FXCFKFXK.mjs';import {c,b}from'./chunk-Q3O3QQ4H.mjs';import {l,d,a as a$1,c as c$1,h as h$1,i,f,g as g$2,k as k$1,j,b as b$1}from'./chunk-IOXRZECH.mjs';var V=l=>({h:c$1(l.h),s:a$1(l.s,0,100),l:a$1(l.l,0,100),alpha:a$1(b$1(l.alpha,3),0,1)}),O={h:0,s:0,l:0,alpha:0},R=({r:l,g:r,b:o,alpha:t})=>{let n=l/255,e=r/255,s=o/255,a=Math.max(n,e,s),b=Math.min(n,e,s),C=(a+b)/2,d=0,x=0;if(a!==b){let _=a-b;switch(x=C>.5?_/(2-a-b):_/(a+b),a){case n:d=((e-s)/_+(e<s?6:0))/6;break;case e:d=((s-n)/_+2)/6;break;case s:d=((n-e)/_+4)/6;break}}let y=d*360;return O.h=y>=0&&y<360?y:(y%360+360)%360,O.s=a$1(x*100,0,100),O.l=a$1(C*100,0,100),O.alpha=a$1(b$1(t,3),0,1),O};var N=(l,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?l+(r-l)*6*o:o<1/2?r:o<2/3?l+(r-l)*(2/3-o)*6:l),k=({h:l,s:r,l:o,alpha:t})=>{let n=r/100,e=o/100,s=e<.5?e*(1+n):e+n-e*n,a=2*e-s,b=(l%360+360)%360/360;return {r:N(a,s,b+1/3)*255,g:N(a,s,b)*255,b:N(a,s,b-1/3)*255,alpha:t}},X=l=>{if(!h$1(l)||!i(l,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:n=1}=l;return !f(r)||!f(o)||!f(t)||!f(n)?null:k(V({h:g$2(r),s:g$2(o),l:g$2(t),alpha:g$2(n)}))},pr=new RegExp(`^hsla?\\(\\s*(?<h>${k$1})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${j})%\\s*,\\s*(?<l_c>${j})%(?:\\s*,\\s*(?<al_c>${j})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${k$1})(?<sp_s>%?)\\s+(?<l_s>${k$1})(?<lp_s>%?)(?:\\s*/\\s*(?<al_s>${k$1})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),J=l$1=>{if(typeof l$1!="string")return null;let r=pr.exec(l$1.trim())?.groups;if(!r)return null;let o=r.s_c!==void 0;if(o&&/^none$/i.test(r.h))return null;let t=r.hu?.toLowerCase()??"deg",n=l(r.h)*(d[t]??1),e=l(r.s_c??r.s_s),s=l(r.l_c??r.l_s),a=r.al_c??r.al_s,b=!!(r.alp_c??r.alp_s);if(o&&a!==void 0&&/^none$/i.test(a))return null;let C=a===void 0?1:l(a)/(b?100:1);return k(V({h:n,s:e,l:s,alpha:C}))};var Q=({l,c:r,h:o,alpha:t})=>({l,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),W=l=>{let{l:r,a:o,b:t,alpha:n}=b$4(l),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:c$1(s),alpha:n}},A=l=>d$1(Q(l)),Y=l=>c$2(Q(l)),Z=l=>{if(!h$1(l)||l.colorSpace==="lch"||!i(l,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:n=1}=l;return !f(r)||!f(o)||!f(t)||!f(n)||g$2(r)>1?null:Y({l:g$2(r),c:Math.max(0,g$2(o)),h:c$1(g$2(t)),alpha:a$1(g$2(n),0,1)})},Cr=new RegExp(`^oklch\\(\\s*(?<l>${k$1})(?<lp>%?)\\s+(?<c>${k$1})(?<cp>%?)\\s+(?<h>${k$1})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${k$1})(?<alp>%?)\\s*)?\\)$`,"i"),rr=l$1=>{if(typeof l$1!="string")return null;let r=Cr.exec(l$1.trim())?.groups;if(!r)return null;let o=r.lp?l(r.l)/100:l(r.l),t=Math.max(0,r.cp?l(r.c)*.004:l(r.c)),n=r.hu?.toLowerCase()??"deg",e=l(r.h)*(d[n]??1),s=r.al===void 0?1:l(r.al)/(r.alp?100:1);return Y({l:o,c:t,h:c$1(e),alpha:a$1(s,0,1)})};var or=[[a,"hex"],[c,"rgb"],[J,"hsl"],[rr,"oklch"],[h,"oklab"]],tr=[[b,"rgb"],[X,"hsl"],[g$1,"oklab"],[Z,"oklch"]],lr=or.map(([l])=>l),nr=tr.map(([l])=>l),er=[...lr,...nr],L=[...er],F=[],sr=l=>{if(l==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof l=="string"?lr:nr;for(let o of r){let t=o(l);if(t)return t}for(let o=er.length;o<L.length;o++){let t=L[o](l);if(t)return t}return null},dr=l=>{if(l==="transparent")return "name";let r=typeof l=="string"?or:tr;for(let[o,t]of r)if(o(l))return t;for(let[o,t]of F)if(o(l))return t};var ar=Symbol(),g=class l{_rgb;_valid;constructor(r,o){if(r===ar)this._valid=true,this._rgb=o;else if(r instanceof l)this._valid=r._valid,this._rgb=r._rgb;else {let t=sr(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}}static _make(r){return new l(ar,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:n}){let[e,s,a]=f$1(r,o,t);return l._make({r:b$2(e)*255,g:b$2(s)*255,b:b$2(a)*255,alpha:n})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return {r:a$1(b$1(r),0,255),g:a$1(b$1(o),0,255),b:a$1(b$1(t),0,255),alpha:n}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:n}=this._rgb,e=a$1(b$1(r),0,255),s=a$1(b$1(o),0,255),a=a$1(b$1(t),0,255);return n<1?`rgb(${e} ${s} ${a} / ${n})`:`rgb(${e} ${s} ${a})`}toHex(){return b$3(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return a$1(b$1(r),0,255)<<16|a$1(b$1(o),0,255)<<8|a$1(b$1(t),0,255)}toHsl(r=2){let{h:o,s:t,l:n,alpha:e}=R(this._rgb),s=b$1(o,r);return {h:s>=360?0:s,s:b$1(t,r),l:b$1(n,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l:n,alpha:e}=this.toHsl(r);return e<1?`hsl(${o} ${t}% ${n}% / ${e})`:`hsl(${o} ${t}% ${n}%)`}toOklab(){let{l:r,a:o,b:t,alpha:n}=b$4(this._rgb);return {l:b$1(r,4),a:b$1(o,4),b:b$1(t,4),alpha:n}}toOklabString(){let{l:r,a:o,b:t,alpha:n}=this.toOklab();return n<1?`oklab(${r} ${o} ${t} / ${n})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:n}=W(this._rgb);return {l:b$1(r,4),c:b$1(o,4),h:b$1(t,2),alpha:n}}toOklchString(){let{l:r,c:o,h:t,alpha:n}=this.toOklch(),e=o===0?"none":t;return n<1?`oklch(${r} ${o} ${e} / ${n})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return b$1((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:l._make({...this._rgb,alpha:b$1(a$1(r,0,1),3)})}hue(r){let{h:o,s:t,l:n,alpha:e}=R(this._rgb);if(r===void 0){let s=b$1(o,2);return s>=360?0:s}return l._make(k({h:r,s:t,l:n,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:l._make(A({...o,l:a$1(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:l._make(A({...o,c:a$1(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?e*(1+r):e+r*100;return l._make(k({h:t,s:n,l:a$1(a,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?n*(1+r):n+r*100;return l._make(k({h:t,s:a$1(a,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:n}=this._rgb;return l._make({r:255-r,g:255-o,b:255-t,alpha:n})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new l(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:l._make({r:a$1(r,0,255),g:a$1(o,0,255),b:a$1(t,0,255),alpha:n})}mapSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,a]=a$2(a$3(r/255),a$3(o/255),a$3(t/255)),b=e>1-1e-7?1:e<1e-7?0:e,C=b$5({l:b,a:s,b:a,alpha:n});return C!==null?l._makeFromOklab(C):this}static toGamutSrgb},fr=l=>new g(l),kr=l=>{l.forEach(r=>r(g,L,F));},xr=(l,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:n}=new g(l).toOklab(),e=1/0,s=r[0];for(let a of r){let{l:b,a:C,b:d}=new g(a).toOklab(),x=(b-o)**2+(C-t)**2+(d-n)**2;x<e&&(e=x,s=a);}return s},_r=()=>new g({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});g.toGamutSrgb=l=>{let r=b$5(l);return r!==null?g._makeFromOklab(r):new g(l)};export{g as Colordx,fr as colordx,kr as extend,dr as getFormat,xr as nearest,_r as random};//# sourceMappingURL=index.mjs.map | ||
| import {a,b as b$3}from'./chunk-4JCO6H3F.mjs';import {b as b$5}from'./chunk-2HOOMNKQ.mjs';export{a as inGamutSrgb,e as oklchToLinear,i as oklchToLinearAndSrgb,j as oklchToLinearAndSrgbInto,f as oklchToLinearInto,g as oklchToRgbChannels,h as oklchToRgbChannelsInto}from'./chunk-2HOOMNKQ.mjs';import {h,g as g$1,c as c$2,f as f$1,b as b$4,a as a$2,d as d$1}from'./chunk-J6CH5YTL.mjs';import'./chunk-OXYX6VNO.mjs';import {b as b$2,a as a$3}from'./chunk-FXCFKFXK.mjs';import {c,b}from'./chunk-Q3O3QQ4H.mjs';import {l,d,a as a$1,c as c$1,h as h$1,i,f,g as g$2,k as k$1,j,b as b$1}from'./chunk-IOXRZECH.mjs';var V=l=>({h:c$1(l.h),s:a$1(l.s,0,100),l:a$1(l.l,0,100),alpha:a$1(b$1(l.alpha,3),0,1)}),O={h:0,s:0,l:0,alpha:0},R=({r:l,g:r,b:o,alpha:t})=>{let n=l/255,e=r/255,s=o/255,a=Math.max(n,e,s),b=Math.min(n,e,s),C=(a+b)/2,d=0,x=0;if(a!==b){let _=a-b;switch(x=C>.5?_/(2-a-b):_/(a+b),a){case n:d=((e-s)/_+(e<s?6:0))/6;break;case e:d=((s-n)/_+2)/6;break;case s:d=((n-e)/_+4)/6;break}}let y=d*360;return O.h=y>=0&&y<360?y:(y%360+360)%360,O.s=a$1(x*100,0,100),O.l=a$1(C*100,0,100),O.alpha=a$1(b$1(t,3),0,1),O};var N=(l,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?l+(r-l)*6*o:o<1/2?r:o<2/3?l+(r-l)*(2/3-o)*6:l),k=({h:l,s:r,l:o,alpha:t})=>{let n=r/100,e=o/100,s=e<.5?e*(1+n):e+n-e*n,a=2*e-s,b=(l%360+360)%360/360;return {r:N(a,s,b+1/3)*255,g:N(a,s,b)*255,b:N(a,s,b-1/3)*255,alpha:t}},X=l=>{if(!h$1(l)||!i(l,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:n=1}=l;return !f(r)||!f(o)||!f(t)||!f(n)?null:k(V({h:g$2(r),s:g$2(o),l:g$2(t),alpha:g$2(n)}))},mr=new RegExp(`^hsla?\\(\\s*(?<h>${k$1})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${j})%\\s*,\\s*(?<l_c>${j})%(?:\\s*,\\s*(?<al_c>${j})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${k$1})(?<sp_s>%?)\\s+(?<l_s>${k$1})(?<lp_s>%?)(?:\\s*/\\s*(?<al_s>${k$1})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),J=l$1=>{if(typeof l$1!="string")return null;let r=mr.exec(l$1.trim())?.groups;if(!r)return null;let o=r.s_c!==void 0;if(o&&/^none$/i.test(r.h))return null;let t=r.hu?.toLowerCase()??"deg",n=l(r.h)*(d[t]??1),e=l(r.s_c??r.s_s),s=l(r.l_c??r.l_s),a=r.al_c??r.al_s,b=!!(r.alp_c??r.alp_s);if(o&&a!==void 0&&/^none$/i.test(a))return null;let C=a===void 0?1:l(a)/(b?100:1);return k(V({h:n,s:e,l:s,alpha:C}))};var Q=({l,c:r,h:o,alpha:t})=>({l,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),W=l=>{let{l:r,a:o,b:t,alpha:n}=b$4(l),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:c$1(s),alpha:n}},A=l=>d$1(Q(l)),Y=l=>c$2(Q(l)),Z=l=>{if(!h$1(l)||l.colorSpace==="lch"||!i(l,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:n=1}=l;return !f(r)||!f(o)||!f(t)||!f(n)||g$2(r)>1?null:Y({l:g$2(r),c:Math.max(0,g$2(o)),h:c$1(g$2(t)),alpha:a$1(g$2(n),0,1)})},Cr=new RegExp(`^oklch\\(\\s*(?<l>${k$1})(?<lp>%?)\\s+(?<c>${k$1})(?<cp>%?)\\s+(?<h>${k$1})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${k$1})(?<alp>%?)\\s*)?\\)$`,"i"),rr=l$1=>{if(typeof l$1!="string")return null;let r=Cr.exec(l$1.trim())?.groups;if(!r)return null;let o=r.lp?l(r.l)/100:l(r.l),t=Math.max(0,r.cp?l(r.c)*.004:l(r.c)),n=r.hu?.toLowerCase()??"deg",e=l(r.h)*(d[n]??1),s=r.al===void 0?1:l(r.al)/(r.alp?100:1);return Y({l:o,c:t,h:c$1(e),alpha:a$1(s,0,1)})};var or=[[a,"hex"],[c,"rgb"],[J,"hsl"],[rr,"oklch"],[h,"oklab"]],tr=[[b,"rgb"],[X,"hsl"],[g$1,"oklab"],[Z,"oklch"]],lr=or.map(([l])=>l),nr=tr.map(([l])=>l),er=[...lr,...nr],L=[...er],F=[],sr=l=>{if(l==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof l=="string"?lr:nr;for(let o of r){let t=o(l);if(t)return t}for(let o=er.length;o<L.length;o++){let t=L[o](l);if(t)return t}return null},dr=l=>{if(l==="transparent")return "name";let r=typeof l=="string"?or:tr;for(let[o,t]of r)if(o(l))return t;for(let[o,t]of F)if(o(l))return t};var ar=Symbol(),g=class l{_rgb;_valid;constructor(r,o){if(r===ar)this._valid=true,this._rgb=o;else if(r instanceof l){this._valid=r._valid,this._rgb=r._rgb;return}else {let t=sr(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}this._rgb.alpha=a$1(b$1(this._rgb.alpha,3),0,1);}static _make(r){return new l(ar,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:n}){let[e,s,a]=f$1(r,o,t);return l._make({r:b$2(e)*255,g:b$2(s)*255,b:b$2(a)*255,alpha:n})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return {r:a$1(b$1(r),0,255),g:a$1(b$1(o),0,255),b:a$1(b$1(t),0,255),alpha:n}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:n}=this._rgb,e=a$1(b$1(r),0,255),s=a$1(b$1(o),0,255),a=a$1(b$1(t),0,255);return n<1?`rgb(${e} ${s} ${a} / ${n})`:`rgb(${e} ${s} ${a})`}toHex(){return b$3(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return a$1(b$1(r),0,255)<<16|a$1(b$1(o),0,255)<<8|a$1(b$1(t),0,255)}toHsl(r=2){let{h:o,s:t,l:n,alpha:e}=R(this._rgb),s=b$1(o,r);return {h:s>=360?0:s,s:b$1(t,r),l:b$1(n,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l:n,alpha:e}=this.toHsl(r);return e<1?`hsl(${o} ${t}% ${n}% / ${e})`:`hsl(${o} ${t}% ${n}%)`}toOklab(){let{l:r,a:o,b:t,alpha:n}=b$4(this._rgb);return {l:b$1(r,4),a:b$1(o,4),b:b$1(t,4),alpha:n}}toOklabString(){let{l:r,a:o,b:t,alpha:n}=this.toOklab();return n<1?`oklab(${r} ${o} ${t} / ${n})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:n}=W(this._rgb);return {l:b$1(r,4),c:b$1(o,4),h:b$1(t,2),alpha:n}}toOklchString(){let{l:r,c:o,h:t,alpha:n}=this.toOklch(),e=o===0?"none":t;return n<1?`oklch(${r} ${o} ${e} / ${n})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return b$1((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:l._make({...this._rgb,alpha:b$1(a$1(r,0,1),3)})}hue(r){let{h:o,s:t,l:n,alpha:e}=R(this._rgb);if(r===void 0){let s=b$1(o,2);return s>=360?0:s}return l._make(k({h:r,s:t,l:n,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:l._make(A({...o,l:a$1(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:l._make(A({...o,c:a$1(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?e*(1+r):e+r*100;return l._make(k({h:t,s:n,l:a$1(a,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?n*(1+r):n+r*100;return l._make(k({h:t,s:a$1(a,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:n}=this._rgb;return l._make({r:255-r,g:255-o,b:255-t,alpha:n})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new l(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:l._make({r:a$1(r,0,255),g:a$1(o,0,255),b:a$1(t,0,255),alpha:n})}mapSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,a]=a$2(a$3(r/255),a$3(o/255),a$3(t/255)),b=e>1-1e-7?1:e<1e-7?0:e,C=b$5({l:b,a:s,b:a,alpha:n});return C!==null?l._makeFromOklab(C):this}static toGamutSrgb},fr=l=>new g(l),kr=l=>{l.forEach(r=>r(g,L,F));},xr=(l,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:n}=new g(l).toOklab(),e=1/0,s=r[0];for(let a of r){let{l:b,a:C,b:d}=new g(a).toOklab(),x=(b-o)**2+(C-t)**2+(d-n)**2;x<e&&(e=x,s=a);}return s},_r=()=>new g({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});g.toGamutSrgb=l=>{let r=b$5(l);return r!==null?g._makeFromOklab(r):new g(l)};export{g as Colordx,fr as colordx,kr as extend,dr as getFormat,xr as nearest,_r as random};//# sourceMappingURL=index.mjs.map | ||
| //# sourceMappingURL=index.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","HSL_RE","NUM_OR_NONE","NUM","parseHslString","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): number => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n};\n\nexport const hslToRgb = ({ h, s, l, alpha }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = (((h % 360) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\n// Legacy comma form requires `%` on s/l and disallows `none`. Modern space form\n// allows optional `%` and the CSS Color 4 `none` keyword on any channel.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<l_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<l_s>${NUM_OR_NONE})(?<lp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSL_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null; // legacy syntax has no `none`\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const l = parseNum((g.l_c ?? g.l_s)!);\n const rawA = g.al_c ?? g.al_s;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n sanitize,\n} from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE = new RegExp(\n `^oklch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const C = Math.max(0, g.cp ? parseNum(g.c!) * 0.004 : parseNum(g.c!)); // 100% = 0.4\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const H = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgb(${ri} ${gi} ${bi} / ${alpha})` : `rgb(${ri} ${gi} ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsl(${h} ${s}% ${l}% / ${alpha})` : `hsl(${h} ${s}% ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","HSL_RE","NUM_OR_NONE","NUM","parseHslString","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): number => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n};\n\nexport const hslToRgb = ({ h, s, l, alpha }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = (((h % 360) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\n// Legacy comma form requires `%` on s/l and disallows `none`. Modern space form\n// allows optional `%` and the CSS Color 4 `none` keyword on any channel.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<l_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<l_s>${NUM_OR_NONE})(?<lp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSL_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null; // legacy syntax has no `none`\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const l = parseNum((g.l_c ?? g.l_s)!);\n const rawA = g.al_c ?? g.al_s;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n sanitize,\n} from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE = new RegExp(\n `^oklch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const C = Math.max(0, g.cp ? parseNum(g.c!) * 0.004 : parseNum(g.c!)); // 100% = 0.4\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const H = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n return;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n // Single chokepoint for alpha precision: parsers and _make() callers may hand us\n // raw floats (e.g. 1/255, 0.1+0.2). Snapping here keeps every formatter consistent.\n this._rgb.alpha = clamp(round(this._rgb.alpha, 3), 0, 1);\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgb(${ri} ${gi} ${bi} / ${alpha})` : `rgb(${ri} ${gi} ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsl(${h} ${s}% ${l}% / ${alpha})` : `hsl(${h} ${s}% ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} |
+1
-1
| { | ||
| "name": "@colordx/core", | ||
| "version": "5.3.1", | ||
| "version": "5.3.2", | ||
| "description": "A high-performance color library with extended support for modern color spaces including OKLCH, OKLAB, Display-P3, and more", | ||
@@ -5,0 +5,0 @@ "author": "Dmitrii Kriaklin", |
618394
0.1%