@kecan0406/ttheme 1.0.44 → 1.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/ttheme.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as Cd}from"node:module";var Ld=Object.create;var{getPrototypeOf:Ad,defineProperty:Sc,getOwnPropertyNames:Td}=Object;var Gd=Object.prototype.hasOwnProperty;function Ud(e){return this[e]}var jd,Jd,Wi=(e,n,t)=>{var r=e!=null&&typeof e==="object";if(r){var i=n?jd??=new WeakMap:Jd??=new WeakMap,o=i.get(e);if(o)return o}t=e!=null?Ld(Ad(e)):{};let s=n||!e||!e.__esModule?Sc(t,"default",{value:e,enumerable:!0}):t;for(let u of Td(e))if(!Gd.call(s,u))Sc(s,u,{get:Ud.bind(e,u),enumerable:!0});if(r)i.set(e,s);return s};var Me=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var We=Cd(import.meta.url);var Jc=Me((sE,no)=>{var jc=jc||function(e){return Buffer.from(e).toString("base64")};function Bd(e){var n=this,t=Math.round,r=Math.floor,i=Array(64),o=Array(64),s=Array(64),u=Array(64),c,a,h,f,l=Array(65535),g=Array(65535),m=Array(64),d=Array(64),b=[],y=0,I=7,k=Array(64),S=Array(64),p=Array(64),P=Array(256),E=Array(2048),R,N=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],H=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],A=[0,1,2,3,4,5,6,7,8,9,10,11],X=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],j=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],Ae=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],D=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],Oe=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function Ee(w){var T=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99];for(var K=0;K<64;K++){var U=r((T[K]*w+50)/100);if(U<1)U=1;else if(U>255)U=255;i[N[K]]=U}var q=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99];for(var Y=0;Y<64;Y++){var se=r((q[Y]*w+50)/100);if(se<1)se=1;else if(se>255)se=255;o[N[Y]]=se}var ue=[1,1.387039845,1.306562965,1.175875602,1,0.785694958,0.5411961,0.275899379],Fe=0;for(var ve=0;ve<8;ve++)for(var M=0;M<8;M++)s[Fe]=1/(i[N[Fe]]*ue[ve]*ue[M]*8),u[Fe]=1/(o[N[Fe]]*ue[ve]*ue[M]*8),Fe++}function ee(w,T){var K=0,U=0,q=[];for(var Y=1;Y<=16;Y++){for(var se=1;se<=w[Y];se++)q[T[U]]=[],q[T[U]][0]=K,q[T[U]][1]=Y,U++,K++;K*=2}return q}function Te(){c=ee(H,A),a=ee(Ae,C),h=ee(X,j),f=ee(D,Oe)}function ce(){var w=1,T=2;for(var K=1;K<=15;K++){for(var U=w;U<T;U++)g[32767+U]=K,l[32767+U]=[],l[32767+U][1]=K,l[32767+U][0]=U;for(var q=-(T-1);q<=-w;q++)g[32767+q]=K,l[32767+q]=[],l[32767+q][1]=K,l[32767+q][0]=T-1+q;w<<=1,T<<=1}}function te(){for(var w=0;w<256;w++)E[w]=19595*w,E[w+256>>0]=38470*w,E[w+512>>0]=7471*w+32768,E[w+768>>0]=-11059*w,E[w+1024>>0]=-21709*w,E[w+1280>>0]=32768*w+8421375,E[w+1536>>0]=-27439*w,E[w+1792>>0]=-5329*w}function V(w){var T=w[0],K=w[1]-1;while(K>=0){if(T&1<<K)y|=1<<I;if(K--,I--,I<0){if(y==255)$(255),$(0);else $(y);I=7,y=0}}}function $(w){b.push(w)}function G(w){$(w>>8&255),$(w&255)}function me(w,T){var K,U,q,Y,se,ue,Fe,ve,M=0,L,Q=8,Re=64;for(L=0;L<Q;++L){K=w[M],U=w[M+1],q=w[M+2],Y=w[M+3],se=w[M+4],ue=w[M+5],Fe=w[M+6],ve=w[M+7];var Z=K+ve,ne=K-ve,we=U+Fe,W=U-Fe,he=q+ue,Ce=q-ue,Ne=Y+se,on=Y-se,yn=Z+Ne,gt=Z-Ne,jt=we+he,Jt=we-he;w[M]=yn+jt,w[M+4]=yn-jt;var yr=(Jt+gt)*0.707106781;w[M+2]=gt+yr,w[M+6]=gt-yr,yn=on+Ce,jt=Ce+W,Jt=W+ne;var Sr=(yn-Jt)*0.382683433,ji=0.5411961*yn+Sr,vr=1.306562965*Jt+Sr,Mr=jt*0.707106781,Ir=ne+Mr,Nr=ne-Mr;w[M+5]=Nr+ji,w[M+3]=Nr-ji,w[M+1]=Ir+vr,w[M+7]=Ir-vr,M+=8}M=0;for(L=0;L<Q;++L){K=w[M],U=w[M+8],q=w[M+16],Y=w[M+24],se=w[M+32],ue=w[M+40],Fe=w[M+48],ve=w[M+56];var hc=K+ve,ls=K-ve,fc=U+Fe,lc=U-Fe,gc=q+ue,dc=q-ue,mc=Y+se,Hd=Y-se,Or=hc+mc,gs=hc-mc,Ji=fc+gc,Ci=fc-gc;w[M]=Or+Ji,w[M+32]=Or-Ji;var pc=(Ci+gs)*0.707106781;w[M+16]=gs+pc,w[M+48]=gs-pc,Or=Hd+dc,Ji=dc+lc,Ci=lc+ls;var wc=(Or-Ci)*0.382683433,$c=0.5411961*Or+wc,bc=1.306562965*Ci+wc,kc=Ji*0.707106781,Ec=ls+kc,yc=ls-kc;w[M+40]=yc+$c,w[M+24]=yc-$c,w[M+8]=Ec+bc,w[M+56]=Ec-bc,M++}var Ki;for(L=0;L<Re;++L)Ki=w[L]*T[L],m[L]=Ki>0?Ki+0.5|0:Ki-0.5|0;return m}function pe(){G(65504),G(16),$(74),$(70),$(73),$(70),$(0),$(1),$(1),$(0),G(1),G(1),$(0),$(0)}function re(w){if(!w)return;if(G(65505),w[0]===69&&w[1]===120&&w[2]===105&&w[3]===102)G(w.length+2);else G(w.length+5+2),$(69),$(120),$(105),$(102),$(0);for(var T=0;T<w.length;T++)$(w[T])}function ie(w,T){G(65472),G(17),$(8),G(T),G(w),$(3),$(1),$(17),$(0),$(2),$(17),$(1),$(3),$(17),$(1)}function z(){G(65499),G(132),$(0);for(var w=0;w<64;w++)$(i[w]);$(1);for(var T=0;T<64;T++)$(o[T])}function F(){G(65476),G(418),$(0);for(var w=0;w<16;w++)$(H[w+1]);for(var T=0;T<=11;T++)$(A[T]);$(16);for(var K=0;K<16;K++)$(X[K+1]);for(var U=0;U<=161;U++)$(j[U]);$(1);for(var q=0;q<16;q++)$(Ae[q+1]);for(var Y=0;Y<=11;Y++)$(C[Y]);$(17);for(var se=0;se<16;se++)$(D[se+1]);for(var ue=0;ue<=161;ue++)$(Oe[ue])}function O(w){if(typeof w>"u"||w.constructor!==Array)return;w.forEach((T)=>{if(typeof T!=="string")return;G(65534);var K=T.length;G(K+2);var U;for(U=0;U<K;U++)$(T.charCodeAt(U))})}function Se(){G(65498),G(12),$(3),$(1),$(0),$(2),$(17),$(3),$(17),$(0),$(63),$(0)}function _(w,T,K,U,q){var Y=q[0],se=q[240],ue,Fe=16,ve=63,M=64,L=me(w,T);for(var Q=0;Q<M;++Q)d[N[Q]]=L[Q];var Re=d[0]-K;if(K=d[0],Re==0)V(U[0]);else ue=32767+Re,V(U[g[ue]]),V(l[ue]);var Z=63;for(;Z>0&&d[Z]==0;Z--);if(Z==0)return V(Y),K;var ne=1,we;while(ne<=Z){var W=ne;for(;d[ne]==0&&ne<=Z;++ne);var he=ne-W;if(he>=Fe){we=he>>4;for(var Ce=1;Ce<=we;++Ce)V(se);he=he&15}ue=32767+d[ne],V(q[(he<<4)+g[ue]]),V(l[ue]),ne++}if(Z!=ve)V(Y);return K}function B(){var w=String.fromCharCode;for(var T=0;T<256;T++)P[T]=w(T)}this.encode=function(w,T){var K=new Date().getTime();if(T)rn(T);b=[],y=0,I=7,G(65496),pe(),O(w.comments),re(w.exifBuffer),z(),ie(w.width,w.height),F(),Se();var U=0,q=0,Y=0;y=0,I=7,this.encode.displayName="_encode_";var{data:se,width:ue,height:Fe}=w,ve=ue*4,M=ue*3,L,Q=0,Re,Z,ne,we,W,he,Ce,Ne;while(Q<Fe){L=0;while(L<ve){we=ve*Q+L,W=we,he=-1,Ce=0;for(Ne=0;Ne<64;Ne++){if(Ce=Ne>>3,he=(Ne&7)*4,W=we+Ce*ve+he,Q+Ce>=Fe)W-=ve*(Q+1+Ce-Fe);if(L+he>=ve)W-=L+he-ve+4;Re=se[W++],Z=se[W++],ne=se[W++],k[Ne]=(E[Re]+E[Z+256>>0]+E[ne+512>>0]>>16)-128,S[Ne]=(E[Re+768>>0]+E[Z+1024>>0]+E[ne+1280>>0]>>16)-128,p[Ne]=(E[Re+1280>>0]+E[Z+1536>>0]+E[ne+1792>>0]>>16)-128}U=_(k,s,U,c,h),q=_(S,u,q,a,f),Y=_(p,u,Y,a,f),L+=32}Q+=8}if(I>=0){var on=[];on[1]=I+1,on[0]=(1<<I+1)-1,V(on)}if(G(65497),typeof no>"u")return new Uint8Array(b);return Buffer.from(b);var yn,gt};function rn(w){if(w<=0)w=1;if(w>100)w=100;if(R==w)return;var T=0;if(w<50)T=Math.floor(5000/w);else T=Math.floor(200-w*2);Ee(T),R=w}function ln(){var w=new Date().getTime();if(!e)e=50;B(),Te(),ce(),te(),rn(e);var T=new Date().getTime()-w}ln()}if(typeof no<"u")no.exports=Uc;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].encode=Uc;function Uc(e,n){if(typeof n>"u")n=50;var t=new Bd(n),r=t.encode(e,n);return{data:r,width:e.width,height:e.height}}});var Kc=Me((uE,Ss)=>{var ys=function(){var n=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,r=799,i=3406,o=2276,s=1567,u=3784,c=5793,a=2896;function h(){}function f(I,k){var S=0,p=[],P,E,R=16;while(R>0&&!I[R-1])R--;p.push({children:[],index:0});var N=p[0],H;for(P=0;P<R;P++){for(E=0;E<I[P];E++){N=p.pop(),N.children[N.index]=k[S];while(N.index>0){if(p.length===0)throw Error("Could not recreate Huffman Table");N=p.pop()}N.index++,p.push(N);while(p.length<=P)p.push(H={children:[],index:0}),N.children[N.index]=H.children,N=H;S++}if(P+1<R)p.push(H={children:[],index:0}),N.children[N.index]=H.children,N=H}return p[0].children}function l(I,k,S,p,P,E,R,N,H,A){var{precision:X,samplesPerLine:j,scanLines:Ae,mcusPerLine:C,progressive:D,maxH:Oe,maxV:Ee}=S,ee=k,Te=0,ce=0;function te(){if(ce>0)return ce--,Te>>ce&1;if(Te=I[k++],Te==255){var M=I[k++];if(M)throw Error("unexpected marker: "+(Te<<8|M).toString(16))}return ce=7,Te>>>7}function V(M){var L=M,Q;while((Q=te())!==null){if(L=L[Q],typeof L==="number")return L;if(typeof L!=="object")throw Error("invalid huffman sequence")}return null}function $(M){var L=0;while(M>0){var Q=te();if(Q===null)return;L=L<<1|Q,M--}return L}function G(M){var L=$(M);if(L>=1<<M-1)return L;return L+(-1<<M)+1}function me(M,L){var Q=V(M.huffmanTableDC),Re=Q===0?0:G(Q);L[0]=M.pred+=Re;var Z=1;while(Z<64){var ne=V(M.huffmanTableAC),we=ne&15,W=ne>>4;if(we===0){if(W<15)break;Z+=16;continue}Z+=W;var he=n[Z];L[he]=G(we),Z++}}function pe(M,L){var Q=V(M.huffmanTableDC),Re=Q===0?0:G(Q)<<H;L[0]=M.pred+=Re}function re(M,L){L[0]|=te()<<H}var ie=0;function z(M,L){if(ie>0){ie--;return}var Q=E,Re=R;while(Q<=Re){var Z=V(M.huffmanTableAC),ne=Z&15,we=Z>>4;if(ne===0){if(we<15){ie=$(we)+(1<<we)-1;break}Q+=16;continue}Q+=we;var W=n[Q];L[W]=G(ne)*(1<<H),Q++}}var F=0,O;function Se(M,L){var Q=E,Re=R,Z=0;while(Q<=Re){var ne=n[Q],we=L[ne]<0?-1:1;switch(F){case 0:var W=V(M.huffmanTableAC),he=W&15,Z=W>>4;if(he===0)if(Z<15)ie=$(Z)+(1<<Z),F=4;else Z=16,F=1;else{if(he!==1)throw Error("invalid ACn encoding");O=G(he),F=Z?2:3}continue;case 1:case 2:if(L[ne])L[ne]+=(te()<<H)*we;else if(Z--,Z===0)F=F==2?3:0;break;case 3:if(L[ne])L[ne]+=(te()<<H)*we;else L[ne]=O<<H,F=0;break;case 4:if(L[ne])L[ne]+=(te()<<H)*we;break}Q++}if(F===4){if(ie--,ie===0)F=0}}function _(M,L,Q,Re,Z){var ne=Q/C|0,we=Q%C,W=ne*M.v+Re,he=we*M.h+Z;if(M.blocks[W]===void 0&&A.tolerantDecoding)return;L(M,M.blocks[W][he])}function B(M,L,Q){var Re=Q/M.blocksPerLine|0,Z=Q%M.blocksPerLine;if(M.blocks[Re]===void 0&&A.tolerantDecoding)return;L(M,M.blocks[Re][Z])}var rn=p.length,ln,w,T,K,U,q;if(D)if(E===0)q=N===0?pe:re;else q=N===0?z:Se;else q=me;var Y=0,se,ue;if(rn==1)ue=p[0].blocksPerLine*p[0].blocksPerColumn;else ue=C*S.mcusPerColumn;if(!P)P=ue;var Fe,ve;while(Y<ue){for(w=0;w<rn;w++)p[w].pred=0;if(ie=0,rn==1){ln=p[0];for(U=0;U<P;U++)B(ln,q,Y),Y++}else for(U=0;U<P;U++){for(w=0;w<rn;w++){ln=p[w],Fe=ln.h,ve=ln.v;for(T=0;T<ve;T++)for(K=0;K<Fe;K++)_(ln,q,Y,T,K)}if(Y++,Y===ue)break}if(Y===ue)do{if(I[k]===255){if(I[k+1]!==0)break}k+=1}while(k<I.length-2);if(ce=0,se=I[k]<<8|I[k+1],se<65280)throw Error("marker was not found");if(se>=65488&&se<=65495)k+=2;else break}return k-ee}function g(I,k){var S=[],p=k.blocksPerLine,P=k.blocksPerColumn,E=p<<3,R=new Int32Array(64),N=new Uint8Array(64);function H(ee,Te,ce){var te=k.quantizationTable,V,$,G,me,pe,re,ie,z,F,O=ce,Se;for(Se=0;Se<64;Se++)O[Se]=ee[Se]*te[Se];for(Se=0;Se<8;++Se){var _=8*Se;if(O[1+_]==0&&O[2+_]==0&&O[3+_]==0&&O[4+_]==0&&O[5+_]==0&&O[6+_]==0&&O[7+_]==0){F=c*O[0+_]+512>>10,O[0+_]=F,O[1+_]=F,O[2+_]=F,O[3+_]=F,O[4+_]=F,O[5+_]=F,O[6+_]=F,O[7+_]=F;continue}V=c*O[0+_]+128>>8,$=c*O[4+_]+128>>8,G=O[2+_],me=O[6+_],pe=a*(O[1+_]-O[7+_])+128>>8,z=a*(O[1+_]+O[7+_])+128>>8,re=O[3+_]<<4,ie=O[5+_]<<4,F=V-$+1>>1,V=V+$+1>>1,$=F,F=G*u+me*s+128>>8,G=G*s-me*u+128>>8,me=F,F=pe-ie+1>>1,pe=pe+ie+1>>1,ie=F,F=z+re+1>>1,re=z-re+1>>1,z=F,F=V-me+1>>1,V=V+me+1>>1,me=F,F=$-G+1>>1,$=$+G+1>>1,G=F,F=pe*o+z*i+2048>>12,pe=pe*i-z*o+2048>>12,z=F,F=re*r+ie*t+2048>>12,re=re*t-ie*r+2048>>12,ie=F,O[0+_]=V+z,O[7+_]=V-z,O[1+_]=$+ie,O[6+_]=$-ie,O[2+_]=G+re,O[5+_]=G-re,O[3+_]=me+pe,O[4+_]=me-pe}for(Se=0;Se<8;++Se){var B=Se;if(O[8+B]==0&&O[16+B]==0&&O[24+B]==0&&O[32+B]==0&&O[40+B]==0&&O[48+B]==0&&O[56+B]==0){F=c*ce[Se+0]+8192>>14,O[0+B]=F,O[8+B]=F,O[16+B]=F,O[24+B]=F,O[32+B]=F,O[40+B]=F,O[48+B]=F,O[56+B]=F;continue}V=c*O[0+B]+2048>>12,$=c*O[32+B]+2048>>12,G=O[16+B],me=O[48+B],pe=a*(O[8+B]-O[56+B])+2048>>12,z=a*(O[8+B]+O[56+B])+2048>>12,re=O[24+B],ie=O[40+B],F=V-$+1>>1,V=V+$+1>>1,$=F,F=G*u+me*s+2048>>12,G=G*s-me*u+2048>>12,me=F,F=pe-ie+1>>1,pe=pe+ie+1>>1,ie=F,F=z+re+1>>1,re=z-re+1>>1,z=F,F=V-me+1>>1,V=V+me+1>>1,me=F,F=$-G+1>>1,$=$+G+1>>1,G=F,F=pe*o+z*i+2048>>12,pe=pe*i-z*o+2048>>12,z=F,F=re*r+ie*t+2048>>12,re=re*t-ie*r+2048>>12,ie=F,O[0+B]=V+z,O[56+B]=V-z,O[8+B]=$+ie,O[48+B]=$-ie,O[16+B]=G+re,O[40+B]=G-re,O[24+B]=me+pe,O[32+B]=me-pe}for(Se=0;Se<64;++Se){var rn=128+(O[Se]+8>>4);Te[Se]=rn<0?0:rn>255?255:rn}}y(E*P*8);var A,X;for(var j=0;j<P;j++){var Ae=j<<3;for(A=0;A<8;A++)S.push(new Uint8Array(E));for(var C=0;C<p;C++){H(k.blocks[j][C],N,R);var D=0,Oe=C<<3;for(X=0;X<8;X++){var Ee=S[Ae+X];for(A=0;A<8;A++)Ee[Oe+A]=N[D++]}}}return S}function m(I){return I<0?0:I>255?255:I}h.prototype={load:function(k){var S=new XMLHttpRequest;S.open("GET",k,!0),S.responseType="arraybuffer",S.onload=function(){var p=new Uint8Array(S.response||S.mozResponseArrayBuffer);if(this.parse(p),this.onload)this.onload()}.bind(this),S.send(null)},parse:function(k){var S=this.opts.maxResolutionInMP*1000*1000,p=0,P=k.length;function E(){var W=k[p]<<8|k[p+1];return p+=2,W}function R(){var W=E(),he=k.subarray(p,p+W-2);return p+=he.length,he}function N(W){var he=1,Ce=1,Ne,on;for(on in W.components)if(W.components.hasOwnProperty(on)){if(Ne=W.components[on],he<Ne.h)he=Ne.h;if(Ce<Ne.v)Ce=Ne.v}var yn=Math.ceil(W.samplesPerLine/8/he),gt=Math.ceil(W.scanLines/8/Ce);for(on in W.components)if(W.components.hasOwnProperty(on)){Ne=W.components[on];var jt=Math.ceil(Math.ceil(W.samplesPerLine/8)*Ne.h/he),Jt=Math.ceil(Math.ceil(W.scanLines/8)*Ne.v/Ce),yr=yn*Ne.h,Sr=gt*Ne.v,ji=Sr*yr,vr=[];y(ji*256);for(var Mr=0;Mr<Sr;Mr++){var Ir=[];for(var Nr=0;Nr<yr;Nr++)Ir.push(new Int32Array(64));vr.push(Ir)}Ne.blocksPerLine=jt,Ne.blocksPerColumn=Jt,Ne.blocks=vr}W.maxH=he,W.maxV=Ce,W.mcusPerLine=yn,W.mcusPerColumn=gt}var H=null,A=null,X=null,j,Ae,C=[],D=[],Oe=[],Ee=[],ee=E(),Te=-1;if(this.comments=[],ee!=65496)throw Error("SOI not found");ee=E();while(ee!=65497){var ce,te,V;switch(ee){case 65280:break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var $=R();if(ee===65534){var G=String.fromCharCode.apply(null,$);this.comments.push(G)}if(ee===65504){if($[0]===74&&$[1]===70&&$[2]===73&&$[3]===70&&$[4]===0)H={version:{major:$[5],minor:$[6]},densityUnits:$[7],xDensity:$[8]<<8|$[9],yDensity:$[10]<<8|$[11],thumbWidth:$[12],thumbHeight:$[13],thumbData:$.subarray(14,14+3*$[12]*$[13])}}if(ee===65505){if($[0]===69&&$[1]===120&&$[2]===105&&$[3]===102&&$[4]===0)this.exifBuffer=$.subarray(5,$.length)}if(ee===65518){if($[0]===65&&$[1]===100&&$[2]===111&&$[3]===98&&$[4]===101&&$[5]===0)A={version:$[6],flags0:$[7]<<8|$[8],flags1:$[9]<<8|$[10],transformCode:$[11]}}break;case 65499:var me=E(),pe=me+p-2;while(p<pe){var re=k[p++];y(256);var ie=new Int32Array(64);if(re>>4===0)for(te=0;te<64;te++){var z=n[te];ie[z]=k[p++]}else if(re>>4===1)for(te=0;te<64;te++){var z=n[te];ie[z]=E()}else throw Error("DQT: invalid table spec");C[re&15]=ie}break;case 65472:case 65473:case 65474:E(),j={},j.extended=ee===65473,j.progressive=ee===65474,j.precision=k[p++],j.scanLines=E(),j.samplesPerLine=E(),j.components={},j.componentsOrder=[];var F=j.scanLines*j.samplesPerLine;if(F>S){var O=Math.ceil((F-S)/1e6);throw Error(`maxResolutionInMP limit exceeded by ${O}MP`)}var Se=k[p++],_,B=0,rn=0;for(ce=0;ce<Se;ce++){_=k[p];var ln=k[p+1]>>4,w=k[p+1]&15,T=k[p+2];if(ln<=0||w<=0)throw Error("Invalid sampling factor, expected values above 0");j.componentsOrder.push(_),j.components[_]={h:ln,v:w,quantizationIdx:T},p+=3}N(j),D.push(j);break;case 65476:var K=E();for(ce=2;ce<K;){var U=k[p++],q=new Uint8Array(16),Y=0;for(te=0;te<16;te++,p++)Y+=q[te]=k[p];y(16+Y);var se=new Uint8Array(Y);for(te=0;te<Y;te++,p++)se[te]=k[p];ce+=17+Y,(U>>4===0?Ee:Oe)[U&15]=f(q,se)}break;case 65501:E(),Ae=E();break;case 65500:E(),E();break;case 65498:var ue=E(),Fe=k[p++],ve=[],M;for(ce=0;ce<Fe;ce++){M=j.components[k[p++]];var L=k[p++];M.huffmanTableDC=Ee[L>>4],M.huffmanTableAC=Oe[L&15],ve.push(M)}var Q=k[p++],Re=k[p++],Z=k[p++],ne=l(k,p,j,ve,Ae,Q,Re,Z>>4,Z&15,this.opts);p+=ne;break;case 65535:if(k[p]!==255)p--;break;default:if(k[p-3]==255&&k[p-2]>=192&&k[p-2]<=254){p-=3;break}else if(ee===224||ee==225){if(Te!==-1)throw Error(`first unknown JPEG marker at offset ${Te.toString(16)}, second unknown JPEG marker ${ee.toString(16)} at offset ${(p-1).toString(16)}`);Te=p-1;let W=E();if(k[p+W-2]===255){p+=W-2;break}}throw Error("unknown JPEG marker "+ee.toString(16))}ee=E()}if(D.length!=1)throw Error("only single frame JPEGs supported");for(var ce=0;ce<D.length;ce++){var we=D[ce].components;for(var te in we)we[te].quantizationTable=C[we[te].quantizationIdx],delete we[te].quantizationIdx}this.width=j.samplesPerLine,this.height=j.scanLines,this.jfif=H,this.adobe=A,this.components=[];for(var ce=0;ce<j.componentsOrder.length;ce++){var M=j.components[j.componentsOrder[ce]];this.components.push({lines:g(j,M),scaleX:M.h/j.maxH,scaleY:M.v/j.maxV})}},getData:function(k,S){var p=this.width/k,P=this.height/S,E,R,N,H,A,X,j,Ae,C,D,Oe=0,Ee,ee,Te,ce,te,V,$,G,me,pe,re,ie=k*S*this.components.length;y(ie);var z=new Uint8Array(ie);switch(this.components.length){case 1:E=this.components[0];for(D=0;D<S;D++){A=E.lines[0|D*E.scaleY*P];for(C=0;C<k;C++)Ee=A[0|C*E.scaleX*p],z[Oe++]=Ee}break;case 2:E=this.components[0],R=this.components[1];for(D=0;D<S;D++){A=E.lines[0|D*E.scaleY*P],X=R.lines[0|D*R.scaleY*P];for(C=0;C<k;C++)Ee=A[0|C*E.scaleX*p],z[Oe++]=Ee,Ee=X[0|C*R.scaleX*p],z[Oe++]=Ee}break;case 3:if(re=!0,this.adobe&&this.adobe.transformCode)re=!0;else if(typeof this.opts.colorTransform<"u")re=!!this.opts.colorTransform;E=this.components[0],R=this.components[1],N=this.components[2];for(D=0;D<S;D++){A=E.lines[0|D*E.scaleY*P],X=R.lines[0|D*R.scaleY*P],j=N.lines[0|D*N.scaleY*P];for(C=0;C<k;C++){if(!re)G=A[0|C*E.scaleX*p],me=X[0|C*R.scaleX*p],pe=j[0|C*N.scaleX*p];else Ee=A[0|C*E.scaleX*p],ee=X[0|C*R.scaleX*p],Te=j[0|C*N.scaleX*p],G=m(Ee+1.402*(Te-128)),me=m(Ee-0.3441363*(ee-128)-0.71413636*(Te-128)),pe=m(Ee+1.772*(ee-128));z[Oe++]=G,z[Oe++]=me,z[Oe++]=pe}}break;case 4:if(!this.adobe)throw Error("Unsupported color mode (4 components)");if(re=!1,this.adobe&&this.adobe.transformCode)re=!0;else if(typeof this.opts.colorTransform<"u")re=!!this.opts.colorTransform;E=this.components[0],R=this.components[1],N=this.components[2],H=this.components[3];for(D=0;D<S;D++){A=E.lines[0|D*E.scaleY*P],X=R.lines[0|D*R.scaleY*P],j=N.lines[0|D*N.scaleY*P],Ae=H.lines[0|D*H.scaleY*P];for(C=0;C<k;C++){if(!re)te=A[0|C*E.scaleX*p],V=X[0|C*R.scaleX*p],$=j[0|C*N.scaleX*p],ce=Ae[0|C*H.scaleX*p];else Ee=A[0|C*E.scaleX*p],ee=X[0|C*R.scaleX*p],Te=j[0|C*N.scaleX*p],ce=Ae[0|C*H.scaleX*p],te=255-m(Ee+1.402*(Te-128)),V=255-m(Ee-0.3441363*(ee-128)-0.71413636*(Te-128)),$=255-m(Ee+1.772*(ee-128));z[Oe++]=255-te,z[Oe++]=255-V,z[Oe++]=255-$,z[Oe++]=255-ce}}break;default:throw Error("Unsupported color mode")}return z},copyToImageData:function(k,S){var{width:p,height:P,data:E}=k,R=this.getData(p,P),N=0,H=0,A,X,j,Ae,C,D,Oe,Ee,ee;switch(this.components.length){case 1:for(X=0;X<P;X++)for(A=0;A<p;A++)if(j=R[N++],E[H++]=j,E[H++]=j,E[H++]=j,S)E[H++]=255;break;case 3:for(X=0;X<P;X++)for(A=0;A<p;A++)if(Oe=R[N++],Ee=R[N++],ee=R[N++],E[H++]=Oe,E[H++]=Ee,E[H++]=ee,S)E[H++]=255;break;case 4:for(X=0;X<P;X++)for(A=0;A<p;A++)if(C=R[N++],D=R[N++],j=R[N++],Ae=R[N++],Oe=255-m(C*(1-Ae/255)+Ae),Ee=255-m(D*(1-Ae/255)+Ae),ee=255-m(j*(1-Ae/255)+Ae),E[H++]=Oe,E[H++]=Ee,E[H++]=ee,S)E[H++]=255;break;default:throw Error("Unsupported color mode")}}};var d=0,b=0;function y(I=0){var k=d+I;if(k>b){var S=Math.ceil((k-b)/1024/1024);throw Error(`maxMemoryUsageInMB limit exceeded by at least ${S}MB`)}d=k}return h.resetMaxMemoryUsage=function(I){d=0,b=I},h.getBytesAllocated=function(){return d},h.requestMemoryAllocation=y,h}();if(typeof Ss<"u")Ss.exports=Cc;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].decode=Cc;function Cc(e,n={}){var t={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512},r={...t,...n},i=new Uint8Array(e),o=new ys;o.opts=r,ys.resetMaxMemoryUsage(r.maxMemoryUsageInMB*1024*1024),o.parse(i);var s=r.formatAsRGBA?4:3,u=o.width*o.height*s;try{ys.requestMemoryAllocation(u);var c={width:o.width,height:o.height,exifBuffer:o.exifBuffer,data:r.useTArray?new Uint8Array(u):Buffer.alloc(u)};if(o.comments.length>0)c.comments=o.comments}catch(a){if(a instanceof RangeError)throw Error("Could not allocate enough memory for the image. Required: "+u);if(a instanceof ReferenceError){if(a.message==="Buffer is not defined")throw Error("Buffer is not globally defined in this environment. Consider setting useTArray to true")}throw a}return o.copyToImageData(c,r.formatAsRGBA),c}});var _c=Me((cE,Wc)=>{var Dd=Jc(),xd=Kc();Wc.exports={encode:Dd,decode:xd}});var vs=Me((aE,qc)=>{var em=We("util"),Qc=We("stream"),mn=qc.exports=function(){Qc.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};em.inherits(mn,Qc);mn.prototype.read=function(e,n){this._reads.push({length:Math.abs(e),allowLess:e<0,func:n}),process.nextTick(function(){if(this._process(),this._paused&&this._reads&&this._reads.length>0)this._paused=!1,this.emit("drain")}.bind(this))};mn.prototype.write=function(e,n){if(!this.writable)return this.emit("error",Error("Stream not writable")),!1;let t;if(Buffer.isBuffer(e))t=e;else t=Buffer.from(e,n||this._encoding);if(this._buffers.push(t),this._buffered+=t.length,this._process(),this._reads&&this._reads.length===0)this._paused=!0;return this.writable&&!this._paused};mn.prototype.end=function(e,n){if(e)this.write(e,n);if(this.writable=!1,!this._buffers)return;if(this._buffers.length===0)this._end();else this._buffers.push(null),this._process()};mn.prototype.destroySoon=mn.prototype.end;mn.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};mn.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};mn.prototype._processReadAllowingLess=function(e){this._reads.shift();let n=this._buffers[0];if(n.length>e.length)this._buffered-=e.length,this._buffers[0]=n.slice(e.length),e.func.call(this,n.slice(0,e.length));else this._buffered-=n.length,this._buffers.shift(),e.func.call(this,n)};mn.prototype._processRead=function(e){this._reads.shift();let n=0,t=0,r=Buffer.alloc(e.length);while(n<e.length){let i=this._buffers[t++],o=Math.min(i.length,e.length-n);if(i.copy(r,n,0,o),n+=o,o!==i.length)this._buffers[--t]=i.slice(o)}if(t>0)this._buffers.splice(0,t);this._buffered-=e.length,e.func.call(this,r)};mn.prototype._process=function(){try{while(this._buffered>0&&this._reads&&this._reads.length>0){let e=this._reads[0];if(e.allowLess)this._processReadAllowingLess(e);else if(this._buffered>=e.length)this._processRead(e);else break}if(this._buffers&&!this.writable)this._end()}catch(e){this.emit("error",e)}}});var Ms=Me((nm)=>{var zn=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];nm.getImagePasses=function(e,n){let t=[],r=e%8,i=n%8,o=(e-r)/8,s=(n-i)/8;for(let u=0;u<zn.length;u++){let c=zn[u],a=o*c.x.length,h=s*c.y.length;for(let f=0;f<c.x.length;f++)if(c.x[f]<r)a++;else break;for(let f=0;f<c.y.length;f++)if(c.y[f]<i)h++;else break;if(a>0&&h>0)t.push({width:a,height:h,index:u})}return t};nm.getInterlaceIterator=function(e){return function(n,t,r){let i=n%zn[r].x.length,o=(n-i)/zn[r].x.length*8+zn[r].x[i],s=t%zn[r].y.length,u=(t-s)/zn[r].y.length*8+zn[r].y[s];return o*4+u*e*4}}});var Is=Me((fE,Yc)=>{Yc.exports=function(n,t,r){let i=n+t-r,o=Math.abs(i-n),s=Math.abs(i-t),u=Math.abs(i-r);if(o<=s&&o<=u)return n;if(s<=u)return t;return r}});var Ns=Me((lE,Xc)=>{var im=Ms(),om=Is();function Zc(e,n,t){let r=e*n;if(t!==8)r=Math.ceil(r/(8/t));return r}var Qt=Xc.exports=function(e,n){let{width:t,height:r,interlace:i,bpp:o,depth:s}=e;if(this.read=n.read,this.write=n.write,this.complete=n.complete,this._imageIndex=0,this._images=[],i){let u=im.getImagePasses(t,r);for(let c=0;c<u.length;c++)this._images.push({byteWidth:Zc(u[c].width,o,s),height:u[c].height,lineIndex:0})}else this._images.push({byteWidth:Zc(t,o,s),height:r,lineIndex:0});if(s===8)this._xComparison=o;else if(s===16)this._xComparison=o*2;else this._xComparison=1};Qt.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Qt.prototype._unFilterType1=function(e,n,t){let r=this._xComparison,i=r-1;for(let o=0;o<t;o++){let s=e[1+o],u=o>i?n[o-r]:0;n[o]=s+u}};Qt.prototype._unFilterType2=function(e,n,t){let r=this._lastLine;for(let i=0;i<t;i++){let o=e[1+i],s=r?r[i]:0;n[i]=o+s}};Qt.prototype._unFilterType3=function(e,n,t){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<t;s++){let u=e[1+s],c=o?o[s]:0,a=s>i?n[s-r]:0,h=Math.floor((a+c)/2);n[s]=u+h}};Qt.prototype._unFilterType4=function(e,n,t){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<t;s++){let u=e[1+s],c=o?o[s]:0,a=s>i?n[s-r]:0,h=s>i&&o?o[s-r]:0,f=om(a,c,h);n[s]=u+f}};Qt.prototype._reverseFilterLine=function(e){let n=e[0],t,r=this._images[this._imageIndex],i=r.byteWidth;if(n===0)t=e.slice(1,i+1);else switch(t=Buffer.alloc(i),n){case 1:this._unFilterType1(e,t,i);break;case 2:this._unFilterType2(e,t,i);break;case 3:this._unFilterType3(e,t,i);break;case 4:this._unFilterType4(e,t,i);break;default:throw Error("Unrecognised filter type - "+n)}if(this.write(t),r.lineIndex++,r.lineIndex>=r.height)this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex];else this._lastLine=t;if(r)this.read(r.byteWidth+1,this._reverseFilterLine.bind(this));else this._lastLine=null,this.complete()}});var Bc=Me((gE,zc)=>{var sm=We("util"),Vc=vs(),um=Ns(),cm=zc.exports=function(e){Vc.call(this);let n=[],t=this;this._filter=new um(e,{read:this.read.bind(this),write:function(r){n.push(r)},complete:function(){t.emit("complete",Buffer.concat(n))}}),this._filter.start()};sm.inherits(cm,Vc)});var qt=Me((dE,Dc)=>{Dc.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var Fs=Me((mE,xc)=>{var Os=[];(function(){for(let e=0;e<256;e++){let n=e;for(let t=0;t<8;t++)if(n&1)n=3988292384^n>>>1;else n=n>>>1;Os[e]=n}})();var Rs=xc.exports=function(){this._crc=-1};Rs.prototype.write=function(e){for(let n=0;n<e.length;n++)this._crc=Os[(this._crc^e[n])&255]^this._crc>>>8;return!0};Rs.prototype.crc32=function(){return this._crc^-1};Rs.crc32=function(e){let n=-1;for(let t=0;t<e.length;t++)n=Os[(n^e[t])&255]^n>>>8;return n^-1}});var Ps=Me((pE,ea)=>{var Ue=qt(),am=Fs(),Je=ea.exports=function(e,n){this._options=e,e.checkCRC=e.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[Ue.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Ue.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Ue.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Ue.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Ue.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Ue.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=n.read,this.error=n.error,this.metadata=n.metadata,this.gamma=n.gamma,this.transColor=n.transColor,this.palette=n.palette,this.parsed=n.parsed,this.inflateData=n.inflateData,this.finished=n.finished,this.simpleTransparency=n.simpleTransparency,this.headersFinished=n.headersFinished||function(){}};Je.prototype.start=function(){this.read(Ue.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Je.prototype._parseSignature=function(e){let n=Ue.PNG_SIGNATURE;for(let t=0;t<n.length;t++)if(e[t]!==n[t]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};Je.prototype._parseChunkBegin=function(e){let n=e.readUInt32BE(0),t=e.readUInt32BE(4),r="";for(let o=4;o<8;o++)r+=String.fromCharCode(e[o]);let i=Boolean(e[4]&32);if(!this._hasIHDR&&t!==Ue.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new am,this._crc.write(Buffer.from(r)),this._chunks[t])return this._chunks[t](n);if(!i){this.error(Error("Unsupported critical chunk type "+r));return}this.read(n+4,this._skipChunk.bind(this))};Je.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Je.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Je.prototype._parseChunkEnd=function(e){let n=e.readInt32BE(0),t=this._crc.crc32();if(this._options.checkCRC&&t!==n){this.error(Error("Crc error - "+n+" - "+t));return}if(!this._hasIEND)this.read(8,this._parseChunkBegin.bind(this))};Je.prototype._handleIHDR=function(e){this.read(e,this._parseIHDR.bind(this))};Je.prototype._parseIHDR=function(e){this._crc.write(e);let n=e.readUInt32BE(0),t=e.readUInt32BE(4),r=e[8],i=e[9],o=e[10],s=e[11],u=e[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(Error("Unsupported bit depth "+r));return}if(!(i in Ue.COLORTYPE_TO_BPP_MAP)){this.error(Error("Unsupported color type"));return}if(o!==0){this.error(Error("Unsupported compression method"));return}if(s!==0){this.error(Error("Unsupported filter method"));return}if(u!==0&&u!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let c=Ue.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:n,height:t,depth:r,interlace:Boolean(u),palette:Boolean(i&Ue.COLORTYPE_PALETTE),color:Boolean(i&Ue.COLORTYPE_COLOR),alpha:Boolean(i&Ue.COLORTYPE_ALPHA),bpp:c,colorType:i}),this._handleChunkEnd()};Je.prototype._handlePLTE=function(e){this.read(e,this._parsePLTE.bind(this))};Je.prototype._parsePLTE=function(e){this._crc.write(e);let n=Math.floor(e.length/3);for(let t=0;t<n;t++)this._palette.push([e[t*3],e[t*3+1],e[t*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};Je.prototype._handleTRNS=function(e){this.simpleTransparency(),this.read(e,this._parseTRNS.bind(this))};Je.prototype._parseTRNS=function(e){if(this._crc.write(e),this._colorType===Ue.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error("Transparency chunk must be after palette"));return}if(e.length>this._palette.length){this.error(Error("More transparent colors than palette size"));return}for(let n=0;n<e.length;n++)this._palette[n][3]=e[n];this.palette(this._palette)}if(this._colorType===Ue.COLORTYPE_GRAYSCALE)this.transColor([e.readUInt16BE(0)]);if(this._colorType===Ue.COLORTYPE_COLOR)this.transColor([e.readUInt16BE(0),e.readUInt16BE(2),e.readUInt16BE(4)]);this._handleChunkEnd()};Je.prototype._handleGAMA=function(e){this.read(e,this._parseGAMA.bind(this))};Je.prototype._parseGAMA=function(e){this._crc.write(e),this.gamma(e.readUInt32BE(0)/Ue.GAMMA_DIVISION),this._handleChunkEnd()};Je.prototype._handleIDAT=function(e){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-e,this._parseIDAT.bind(this,e))};Je.prototype._parseIDAT=function(e,n){if(this._crc.write(n),this._colorType===Ue.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(n);let t=e-n.length;if(t>0)this._handleIDAT(t);else this._handleChunkEnd()};Je.prototype._handleIEND=function(e){this.read(e,this._parseIEND.bind(this))};Je.prototype._parseIEND=function(e){if(this._crc.write(e),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var Hs=Me((mm)=>{var na=Ms(),hm=[function(){},function(e,n,t,r){if(r===n.length)throw Error("Ran out of data");let i=n[r];e[t]=i,e[t+1]=i,e[t+2]=i,e[t+3]=255},function(e,n,t,r){if(r+1>=n.length)throw Error("Ran out of data");let i=n[r];e[t]=i,e[t+1]=i,e[t+2]=i,e[t+3]=n[r+1]},function(e,n,t,r){if(r+2>=n.length)throw Error("Ran out of data");e[t]=n[r],e[t+1]=n[r+1],e[t+2]=n[r+2],e[t+3]=255},function(e,n,t,r){if(r+3>=n.length)throw Error("Ran out of data");e[t]=n[r],e[t+1]=n[r+1],e[t+2]=n[r+2],e[t+3]=n[r+3]}],fm=[function(){},function(e,n,t,r){let i=n[0];e[t]=i,e[t+1]=i,e[t+2]=i,e[t+3]=r},function(e,n,t){let r=n[0];e[t]=r,e[t+1]=r,e[t+2]=r,e[t+3]=n[1]},function(e,n,t,r){e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=r},function(e,n,t){e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3]}];function lm(e,n){let t=[],r=0;function i(){if(r===e.length)throw Error("Ran out of data");let o=e[r];r++;let s,u,c,a,h,f,l,g;switch(n){default:throw Error("unrecognised depth");case 16:l=e[r],r++,t.push((o<<8)+l);break;case 4:l=o&15,g=o>>4,t.push(g,l);break;case 2:h=o&3,f=o>>2&3,l=o>>4&3,g=o>>6&3,t.push(g,l,f,h);break;case 1:s=o&1,u=o>>1&1,c=o>>2&1,a=o>>3&1,h=o>>4&1,f=o>>5&1,l=o>>6&1,g=o>>7&1,t.push(g,l,f,h,a,c,u,s);break}}return{get:function(o){while(t.length<o)i();let s=t.slice(0,o);return t=t.slice(o),s},resetAfterLine:function(){t.length=0},end:function(){if(r!==e.length)throw Error("extra data found")}}}function gm(e,n,t,r,i,o){let{width:s,height:u,index:c}=e;for(let a=0;a<u;a++)for(let h=0;h<s;h++){let f=t(h,a,c);hm[r](n,i,f,o),o+=r}return o}function dm(e,n,t,r,i,o){let{width:s,height:u,index:c}=e;for(let a=0;a<u;a++){for(let h=0;h<s;h++){let f=i.get(r),l=t(h,a,c);fm[r](n,f,l,o)}i.resetAfterLine()}}mm.dataToBitMap=function(e,n){let{width:t,height:r,depth:i,bpp:o,interlace:s}=n,u;if(i!==8)u=lm(e,i);let c;if(i<=8)c=Buffer.alloc(t*r*4);else c=new Uint16Array(t*r*4);let a=Math.pow(2,i)-1,h=0,f,l;if(s)f=na.getImagePasses(t,r),l=na.getInterlaceIterator(t,r);else{let g=0;l=function(){let m=g;return g+=4,m},f=[{width:t,height:r}]}for(let g=0;g<f.length;g++)if(i===8)h=gm(f[g],c,l,o,e,h);else dm(f[g],c,l,o,u,a);if(i===8){if(h!==e.length)throw Error("extra data found")}else u.end();return c}});var Ls=Me(($E,ta)=>{function wm(e,n,t,r,i){let o=0;for(let s=0;s<r;s++)for(let u=0;u<t;u++){let c=i[e[o]];if(!c)throw Error("index "+e[o]+" not in palette");for(let a=0;a<4;a++)n[o+a]=c[a];o+=4}}function $m(e,n,t,r,i){let o=0;for(let s=0;s<r;s++)for(let u=0;u<t;u++){let c=!1;if(i.length===1){if(i[0]===e[o])c=!0}else if(i[0]===e[o]&&i[1]===e[o+1]&&i[2]===e[o+2])c=!0;if(c)for(let a=0;a<4;a++)n[o+a]=0;o+=4}}function bm(e,n,t,r,i){let o=255,s=Math.pow(2,i)-1,u=0;for(let c=0;c<r;c++)for(let a=0;a<t;a++){for(let h=0;h<4;h++)n[u+h]=Math.floor(e[u+h]*o/s+0.5);u+=4}}ta.exports=function(e,n,t=!1){let{depth:r,width:i,height:o,colorType:s,transColor:u,palette:c}=n,a=e;if(s===3)wm(e,a,i,o,c);else{if(u)$m(e,a,i,o,u);if(r!==8&&!t){if(r===16)a=Buffer.alloc(i*o*4);bm(e,a,i,o,r)}}return a}});var oa=Me((bE,ia)=>{var km=We("util"),As=We("zlib"),ra=vs(),Em=Bc(),ym=Ps(),Sm=Hs(),vm=Ls(),Sn=ia.exports=function(e){ra.call(this),this._parser=new ym(e,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=e,this.writable=!0,this._parser.start()};km.inherits(Sn,ra);Sn.prototype._handleError=function(e){if(this.emit("error",e),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy)this._inflate.destroy();if(this._filter)this._filter.destroy(),this._filter.on("error",function(){});this.errord=!0};Sn.prototype._inflateData=function(e){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=As.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let t=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(t,As.Z_MIN_CHUNK);this._inflate=As.createInflate({chunkSize:r});let i=t,o=this.emit.bind(this,"error");this._inflate.on("error",function(u){if(!i)return;o(u)}),this._filter.on("complete",this._complete.bind(this));let s=this._filter.write.bind(this._filter);this._inflate.on("data",function(u){if(!i)return;if(u.length>i)u=u.slice(0,i);i-=u.length,s(u)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(e)};Sn.prototype._handleMetaData=function(e){this._metaData=e,this._bitmapInfo=Object.create(e),this._filter=new Em(this._bitmapInfo)};Sn.prototype._handleTransColor=function(e){this._bitmapInfo.transColor=e};Sn.prototype._handlePalette=function(e){this._bitmapInfo.palette=e};Sn.prototype._simpleTransparency=function(){this._metaData.alpha=!0};Sn.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};Sn.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};Sn.prototype._complete=function(e){if(this.errord)return;let n;try{let t=Sm.dataToBitMap(e,this._bitmapInfo);n=vm(t,this._bitmapInfo,this._options.skipRescale),t=null}catch(t){this._handleError(t);return}this.emit("parsed",n)}});var ua=Me((kE,sa)=>{var sn=qt();sa.exports=function(e,n,t,r){let i=[sn.COLORTYPE_COLOR_ALPHA,sn.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let m=function(){let d=new ArrayBuffer(2);return new DataView(d).setInt16(0,256,!0),new Int16Array(d)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&m)return e}let o=r.bitDepth!==16?e:new Uint16Array(e.buffer),s=255,u=sn.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(u===4&&!r.inputHasAlpha)u=3;let c=sn.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)s=65535,c*=2;let a=Buffer.alloc(n*t*c),h=0,f=0,l=r.bgColor||{};if(l.red===void 0)l.red=s;if(l.green===void 0)l.green=s;if(l.blue===void 0)l.blue=s;function g(){let m,d,b,y=s;switch(r.inputColorType){case sn.COLORTYPE_COLOR_ALPHA:y=o[h+3],m=o[h],d=o[h+1],b=o[h+2];break;case sn.COLORTYPE_COLOR:m=o[h],d=o[h+1],b=o[h+2];break;case sn.COLORTYPE_ALPHA:y=o[h+1],m=o[h],d=m,b=m;break;case sn.COLORTYPE_GRAYSCALE:m=o[h],d=m,b=m;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)y/=s,m=Math.min(Math.max(Math.round((1-y)*l.red+y*m),0),s),d=Math.min(Math.max(Math.round((1-y)*l.green+y*d),0),s),b=Math.min(Math.max(Math.round((1-y)*l.blue+y*b),0),s)}return{red:m,green:d,blue:b,alpha:y}}for(let m=0;m<t;m++)for(let d=0;d<n;d++){let b=g(o,h);switch(r.colorType){case sn.COLORTYPE_COLOR_ALPHA:case sn.COLORTYPE_COLOR:if(r.bitDepth===8){if(a[f]=b.red,a[f+1]=b.green,a[f+2]=b.blue,i)a[f+3]=b.alpha}else if(a.writeUInt16BE(b.red,f),a.writeUInt16BE(b.green,f+2),a.writeUInt16BE(b.blue,f+4),i)a.writeUInt16BE(b.alpha,f+6);break;case sn.COLORTYPE_ALPHA:case sn.COLORTYPE_GRAYSCALE:{let y=(b.red+b.green+b.blue)/3;if(r.bitDepth===8){if(a[f]=y,i)a[f+1]=b.alpha}else if(a.writeUInt16BE(y,f),i)a.writeUInt16BE(b.alpha,f+2);break}default:throw Error("unrecognised color Type "+r.colorType)}h+=u,f+=c}return a}});var ha=Me((EE,aa)=>{var ca=Is();function Mm(e,n,t,r,i){for(let o=0;o<t;o++)r[i+o]=e[n+o]}function Im(e,n,t){let r=0,i=n+t;for(let o=n;o<i;o++)r+=Math.abs(e[o]);return r}function Nm(e,n,t,r,i,o){for(let s=0;s<t;s++){let u=s>=o?e[n+s-o]:0,c=e[n+s]-u;r[i+s]=c}}function Om(e,n,t,r){let i=0;for(let o=0;o<t;o++){let s=o>=r?e[n+o-r]:0,u=e[n+o]-s;i+=Math.abs(u)}return i}function Rm(e,n,t,r,i){for(let o=0;o<t;o++){let s=n>0?e[n+o-t]:0,u=e[n+o]-s;r[i+o]=u}}function Fm(e,n,t){let r=0,i=n+t;for(let o=n;o<i;o++){let s=n>0?e[o-t]:0,u=e[o]-s;r+=Math.abs(u)}return r}function Pm(e,n,t,r,i,o){for(let s=0;s<t;s++){let u=s>=o?e[n+s-o]:0,c=n>0?e[n+s-t]:0,a=e[n+s]-(u+c>>1);r[i+s]=a}}function Hm(e,n,t,r){let i=0;for(let o=0;o<t;o++){let s=o>=r?e[n+o-r]:0,u=n>0?e[n+o-t]:0,c=e[n+o]-(s+u>>1);i+=Math.abs(c)}return i}function Lm(e,n,t,r,i,o){for(let s=0;s<t;s++){let u=s>=o?e[n+s-o]:0,c=n>0?e[n+s-t]:0,a=n>0&&s>=o?e[n+s-(t+o)]:0,h=e[n+s]-ca(u,c,a);r[i+s]=h}}function Am(e,n,t,r){let i=0;for(let o=0;o<t;o++){let s=o>=r?e[n+o-r]:0,u=n>0?e[n+o-t]:0,c=n>0&&o>=r?e[n+o-(t+r)]:0,a=e[n+o]-ca(s,u,c);i+=Math.abs(a)}return i}var Tm={0:Mm,1:Nm,2:Rm,3:Pm,4:Lm},Gm={0:Im,1:Om,2:Fm,3:Hm,4:Am};aa.exports=function(e,n,t,r,i){let o;if(!("filterType"in r)||r.filterType===-1)o=[0,1,2,3,4];else if(typeof r.filterType==="number")o=[r.filterType];else throw Error("unrecognised filter types");if(r.bitDepth===16)i*=2;let s=n*i,u=0,c=0,a=Buffer.alloc((s+1)*t),h=o[0];for(let f=0;f<t;f++){if(o.length>1){let l=1/0;for(let g=0;g<o.length;g++){let m=Gm[o[g]](e,c,s,i);if(m<l)h=o[g],l=m}}a[u]=h,u++,Tm[h](e,c,s,a,u,i),u+=s,c+=s}return a}});var Ts=Me((yE,fa)=>{var Qe=qt(),Um=Fs(),jm=ua(),Jm=ha(),Cm=We("zlib"),Bn=fa.exports=function(e){if(this._options=e,e.deflateChunkSize=e.deflateChunkSize||32768,e.deflateLevel=e.deflateLevel!=null?e.deflateLevel:9,e.deflateStrategy=e.deflateStrategy!=null?e.deflateStrategy:3,e.inputHasAlpha=e.inputHasAlpha!=null?e.inputHasAlpha:!0,e.deflateFactory=e.deflateFactory||Cm.createDeflate,e.bitDepth=e.bitDepth||8,e.colorType=typeof e.colorType==="number"?e.colorType:Qe.COLORTYPE_COLOR_ALPHA,e.inputColorType=typeof e.inputColorType==="number"?e.inputColorType:Qe.COLORTYPE_COLOR_ALPHA,[Qe.COLORTYPE_GRAYSCALE,Qe.COLORTYPE_COLOR,Qe.COLORTYPE_COLOR_ALPHA,Qe.COLORTYPE_ALPHA].indexOf(e.colorType)===-1)throw Error("option color type:"+e.colorType+" is not supported at present");if([Qe.COLORTYPE_GRAYSCALE,Qe.COLORTYPE_COLOR,Qe.COLORTYPE_COLOR_ALPHA,Qe.COLORTYPE_ALPHA].indexOf(e.inputColorType)===-1)throw Error("option input color type:"+e.inputColorType+" is not supported at present");if(e.bitDepth!==8&&e.bitDepth!==16)throw Error("option bit depth:"+e.bitDepth+" is not supported at present")};Bn.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Bn.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Bn.prototype.filterData=function(e,n,t){let r=jm(e,n,t,this._options),i=Qe.COLORTYPE_TO_BPP_MAP[this._options.colorType];return Jm(r,n,t,this._options,i)};Bn.prototype._packChunk=function(e,n){let t=n?n.length:0,r=Buffer.alloc(t+12);if(r.writeUInt32BE(t,0),r.writeUInt32BE(e,4),n)n.copy(r,8);return r.writeInt32BE(Um.crc32(r.slice(4,r.length-4)),r.length-4),r};Bn.prototype.packGAMA=function(e){let n=Buffer.alloc(4);return n.writeUInt32BE(Math.floor(e*Qe.GAMMA_DIVISION),0),this._packChunk(Qe.TYPE_gAMA,n)};Bn.prototype.packIHDR=function(e,n){let t=Buffer.alloc(13);return t.writeUInt32BE(e,0),t.writeUInt32BE(n,4),t[8]=this._options.bitDepth,t[9]=this._options.colorType,t[10]=0,t[11]=0,t[12]=0,this._packChunk(Qe.TYPE_IHDR,t)};Bn.prototype.packIDAT=function(e){return this._packChunk(Qe.TYPE_IDAT,e)};Bn.prototype.packIEND=function(){return this._packChunk(Qe.TYPE_IEND,null)}});var ma=Me((SE,da)=>{var Km=We("util"),la=We("stream"),Wm=qt(),_m=Ts(),ga=da.exports=function(e){la.call(this);let n=e||{};this._packer=new _m(n),this._deflate=this._packer.createDeflate(),this.readable=!0};Km.inherits(ga,la);ga.prototype.pack=function(e,n,t,r){if(this.emit("data",Buffer.from(Wm.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(n,t)),r)this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(e,n,t);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(o){this.emit("data",this._packer.packIDAT(o))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(i)}});var Ea=Me((Lr,ka)=>{var pa=We("assert").ok,Yt=We("zlib"),Qm=We("util"),wa=We("buffer").kMaxLength;function pt(e){if(!(this instanceof pt))return new pt(e);if(e&&e.chunkSize<Yt.Z_MIN_CHUNK)e.chunkSize=Yt.Z_MIN_CHUNK;if(Yt.Inflate.call(this,e),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,e&&e.maxLength!=null)this._maxLength=e.maxLength}function qm(e){return new pt(e)}function $a(e,n){if(n)process.nextTick(n);if(!e._handle)return;e._handle.close(),e._handle=null}pt.prototype._processChunk=function(e,n,t){if(typeof t==="function")return Yt.Inflate._processChunk.call(this,e,n,t);let r=this,i=e&&e.length,o=this._chunkSize-this._offset,s=this._maxLength,u=0,c=[],a=0,h;this.on("error",function(m){h=m});function f(m,d){if(r._hadError)return;let b=o-d;if(pa(b>=0,"have should not go down"),b>0){let y=r._buffer.slice(r._offset,r._offset+b);if(r._offset+=b,y.length>s)y=y.slice(0,s);if(c.push(y),a+=y.length,s-=y.length,s===0)return!1}if(d===0||r._offset>=r._chunkSize)o=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if(d===0)return u+=i-m,i=m,!0;return!1}pa(this._handle,"zlib binding closed");let l;do l=this._handle.writeSync(n,e,u,i,this._buffer,this._offset,o),l=l||this._writeState;while(!this._hadError&&f(l[0],l[1]));if(this._hadError)throw h;if(a>=wa)throw $a(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+wa.toString(16)+" bytes");let g=Buffer.concat(c,a);return $a(this),g};Qm.inherits(pt,Yt.Inflate);function Ym(e,n){if(typeof n==="string")n=Buffer.from(n);if(!(n instanceof Buffer))throw TypeError("Not a string or buffer");let t=e._finishFlushFlag;if(t==null)t=Yt.Z_FINISH;return e._processChunk(n,t)}function ba(e,n){return Ym(new pt(n),e)}ka.exports=Lr=ba;Lr.Inflate=pt;Lr.createInflate=qm;Lr.inflateSync=ba});var Gs=Me((vE,Sa)=>{var ya=Sa.exports=function(e){this._buffer=e,this._reads=[]};ya.prototype.read=function(e,n){this._reads.push({length:Math.abs(e),allowLess:e<0,func:n})};ya.prototype.process=function(){while(this._reads.length>0&&this._buffer.length){let e=this._reads[0];if(this._buffer.length&&(this._buffer.length>=e.length||e.allowLess)){this._reads.shift();let n=this._buffer;this._buffer=n.slice(e.length),e.func.call(this,n.slice(0,e.length))}else break}if(this._reads.length>0)throw Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)throw Error("unrecognised content at end of stream")}});var va=Me((Vm)=>{var Zm=Gs(),Xm=Ns();Vm.process=function(e,n){let t=[],r=new Zm(e);return new Xm(n,{read:r.read.bind(r),write:function(o){t.push(o)},complete:function(){}}).start(),r.process(),Buffer.concat(t)}});var Oa=Me((IE,Na)=>{var Ma=!0,Ia=We("zlib"),Bm=Ea();if(!Ia.deflateSync)Ma=!1;var Dm=Gs(),xm=va(),ep=Ps(),np=Hs(),tp=Ls();Na.exports=function(e,n){if(!Ma)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let t;function r(S){t=S}let i;function o(S){i=S}function s(S){i.transColor=S}function u(S){i.palette=S}function c(){i.alpha=!0}let a;function h(S){a=S}let f=[];function l(S){f.push(S)}let g=new Dm(e);if(new ep(n,{read:g.read.bind(g),error:r,metadata:o,gamma:h,palette:u,transColor:s,inflateData:l,simpleTransparency:c}).start(),g.process(),t)throw t;let d=Buffer.concat(f);f.length=0;let b;if(i.interlace)b=Ia.inflateSync(d);else{let p=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;b=Bm(d,{chunkSize:p,maxLength:p})}if(d=null,!b||!b.length)throw Error("bad png - invalid inflate data response");let y=xm.process(b,i);d=null;let I=np.dataToBitMap(y,i);y=null;let k=tp(I,i,n.skipRescale);return i.data=k,i.gamma=a||0,i}});var Ha=Me((NE,Pa)=>{var Ra=!0,Fa=We("zlib");if(!Fa.deflateSync)Ra=!1;var rp=qt(),ip=Ts();Pa.exports=function(e,n){if(!Ra)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new ip(n||{}),i=[];if(i.push(Buffer.from(rp.PNG_SIGNATURE)),i.push(r.packIHDR(e.width,e.height)),e.gamma)i.push(r.packGAMA(e.gamma));let o=r.filterData(e.data,e.width,e.height),s=Fa.deflateSync(o,r.getDeflateOptions());if(o=null,!s||!s.length)throw Error("bad png - invalid compressed data response");return i.push(r.packIDAT(s)),i.push(r.packIEND()),Buffer.concat(i)}});var La=Me((up)=>{var op=Oa(),sp=Ha();up.read=function(e,n){return op(e,n||{})};up.write=function(e,n){return sp(e,n)}});var Ta=Me((dp)=>{var hp=We("util"),Aa=We("stream"),fp=oa(),lp=ma(),gp=La(),Ye=dp.PNG=function(e){if(Aa.call(this),e=e||{},this.width=e.width|0,this.height=e.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,e.fill&&this.data)this.data.fill(0);this.gamma=0,this.readable=this.writable=!0,this._parser=new fp(e),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(n){this.data=n,this.emit("parsed",n)}.bind(this)),this._packer=new lp(e),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};hp.inherits(Ye,Aa);Ye.sync=gp;Ye.prototype.pack=function(){if(!this.data||!this.data.length)return this.emit("error","No data provided"),this;return process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this};Ye.prototype.parse=function(e,n){if(n){let t,r;t=function(i){this.removeListener("error",r),this.data=i,n(null,this)}.bind(this),r=function(i){this.removeListener("parsed",t),n(i,null)}.bind(this),this.once("parsed",t),this.once("error",r)}return this.end(e),this};Ye.prototype.write=function(e){return this._parser.write(e),!0};Ye.prototype.end=function(e){this._parser.end(e)};Ye.prototype._metadata=function(e){this.width=e.width,this.height=e.height,this.emit("metadata",e)};Ye.prototype._gamma=function(e){this.gamma=e};Ye.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};Ye.bitblt=function(e,n,t,r,i,o,s,u){if(t|=0,r|=0,i|=0,o|=0,s|=0,u|=0,t>e.width||r>e.height||t+i>e.width||r+o>e.height)throw Error("bitblt reading outside image");if(s>n.width||u>n.height||s+i>n.width||u+o>n.height)throw Error("bitblt writing outside image");for(let c=0;c<o;c++)e.data.copy(n.data,(u+c)*n.width+s<<2,(r+c)*e.width+t<<2,(r+c)*e.width+t+i<<2)};Ye.prototype.bitblt=function(e,n,t,r,i,o,s){return Ye.bitblt(this,e,n,t,r,i,o,s),this};Ye.adjustGamma=function(e){if(e.gamma){for(let n=0;n<e.height;n++)for(let t=0;t<e.width;t++){let r=e.width*n+t<<2;for(let i=0;i<3;i++){let o=e.data[r+i]/255;o=Math.pow(o,0.45454545454545453/e.gamma),e.data[r+i]=Math.round(o*255)}}e.gamma=0}};Ye.prototype.adjustGamma=function(){Ye.adjustGamma(this)}});var fu=Me((oS,Lf)=>{var hu={to(e,n){if(!n)return`\x1B[${e+1}G`;return`\x1B[${n+1};${e+1}H`},move(e,n){let t="";if(e<0)t+=`\x1B[${-e}D`;else if(e>0)t+=`\x1B[${e}C`;if(n<0)t+=`\x1B[${-n}A`;else if(n>0)t+=`\x1B[${n}B`;return t},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},o0={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},s0={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let n="";for(let t=0;t<e;t++)n+=this.line+(t<e-1?hu.up():"");if(e)n+=hu.left;return n}};Lf.exports={cursor:hu,scroll:o0,erase:s0,beep:"\x07"}});import{spawnSync as S1}from"node:child_process";import{isMainThread as v1}from"node:worker_threads";import{parseArgs as $1}from"node:util";var _e={name:"@kecan0406/ttheme",version:"1.0.44",type:"module",bin:{ttheme:"bin/ttheme.js"},files:["bin","dist/manifest.json","shell","!shell/check.zsh"],description:"Character terminal palettes for Ghostty, kitty, Alacritty, WezTerm, iTerm2, Windows Terminal and Warp",license:"MIT",author:"kecan0406",repository:{type:"git",url:"git+https://github.com/kecan0406/ttheme.git"},homepage:"https://github.com/kecan0406/ttheme#readme",bugs:"https://github.com/kecan0406/ttheme/issues",keywords:["terminal","theme","ghostty","kitty","alacritty","wezterm","iterm2"],devDependencies:{"@biomejs/biome":"^2.3.0","@clack/core":"^1.4.3","@clack/prompts":"^1.7.0","@material/material-color-utilities":"^0.4.0","@types/bun":"^1.3.0","@types/pngjs":"6.0.5","jpeg-js":"^0.4.4",pngjs:"7.0.0","smol-toml":"^1.9.0",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=20.11"}};import{rmSync as wf}from"node:fs";import{basename as _w,join as gi}from"node:path";var Wd=/^#[0-9a-f]{6}$/;function Ct(e){return Wd.test(e)}function Ke(e){let n=Number.parseInt(e.slice(1),16);return[n>>16&255,n>>8&255,n&255]}function qe(e){let[n,t,r]=Ke(e).map((i)=>{let o=i/255;return o<=0.03928?o/12.92:((o+0.055)/1.055)**2.4});return 0.2126*n+0.7152*t+0.0722*r}function Be(e,n){let t=qe(e),r=qe(n);return(Math.max(t,r)+0.05)/(Math.min(t,r)+0.05)}function _i(e,n){return Math.round(Be(e,n)*100)/100}function _d(e){let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4}function gn(e){let[n,t,r]=Ke(e).map(_d),i=Math.cbrt(0.4122214708*n+0.5363325363*t+0.0514459929*r),o=Math.cbrt(0.2119034982*n+0.6806995451*t+0.1073969566*r),s=Math.cbrt(0.0883024619*n+0.2817188376*t+0.6299787005*r),u=1.9779984951*i-2.428592205*o+0.4505937099*s,c=0.0259040371*i+0.7827717662*o-0.808675766*s;return{l:0.2104542553*i+0.793617785*o-0.0040720468*s,c:Math.hypot(u,c),h:(Math.atan2(c,u)*180/Math.PI+360)%360}}var Zn=7,vc=3,ds=0.15,Mc=1.6,ps=[1,2,3,4,5,6,9,10,11,12,13,14],Ic=[7,15],Kt=[1,2,3,4,5,6],Fr={1:{name:"red",center:19,width:25},2:{name:"green",center:132,width:35},3:{name:"yellow",center:88,width:35},4:{name:"blue",center:250,width:60},5:{name:"magenta",center:329,width:40},6:{name:"cyan",center:197,width:60}},ws=0.03,dt=25,Zi=15,Xi=0.08;function An(e,n){let t=e.ansi[n];if(t===void 0)throw Error(`${e.name}: missing ANSI ${n}`);return t}function ms(e,n,t){let r=e.background;return n.flatMap((i)=>{let o=An(e,i);return Be(o,r)<t?[`ANSI ${i} ${o} on ${r} is ${_i(o,r)}:1, needs ${t}:1`]:[]})}function Nc(e,n){return Math.min(...n.map((t)=>Be(An(e,t),e.background)))}var Oc=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:Zn,measure:({foreground:e,background:n})=>Be(e,n),check:({foreground:e,background:n})=>Be(e,n)<Zn?[`foreground ${e} on ${n} is ${_i(e,n)}:1, needs ${Zn}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:vc,measure:(e)=>Nc(e,ps),check:(e)=>ms(e,ps,vc)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:ds,measure:(e)=>qe(An(e,0)),check:(e)=>{let n=An(e,0);return qe(n)>ds?[`ANSI 0 ${n} has luminance ${qe(n).toFixed(3)}, needs <= ${ds}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:Zn,measure:(e)=>Nc(e,Ic),check:(e)=>ms(e,Ic,Zn)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:Mc,measure:(e)=>Be(An(e,8),e.background),check:(e)=>ms(e,[8],Mc)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:Zn,measure:({foreground:e,selectionBackground:n})=>n===void 0?Number.NaN:Be(e,n),check:({foreground:e,selectionBackground:n})=>n!==void 0&&Be(e,n)<Zn?[`foreground ${e} on selection ${n} is ${_i(e,n)}:1, needs ${Zn}:1`]:[]}];function Xn(e,n){let t=Math.abs(e-n)%360;return Math.min(t,360-t)}var Wt=(e)=>e>8?e-8:e;function Vi(e){let n=e.signatureSlots.filter((t)=>t.startsWith("ansi")).map((t)=>Number(t.slice(4)));return new Set(n.flatMap((t)=>Kt.includes(Wt(t))?[t,t>8?t-8:t+8]:[t]))}function Rr(e,n){let t=gn(An(e,n));return t.c<ws?void 0:t}function Qi(e){let n=Vi(e);return ps.flatMap((t)=>{let r=Rr(e,t),i=Fr[Wt(t)];if(r===void 0||i===void 0||n.has(t))return[];let o=Xn(r.h,i.center)-i.width;return o>0?[{slot:t,hue:r.h,over:o}]:[]})}function qi(e){let n=new Set(e.signatureSlots);return Kt.flatMap((t)=>{let r=Rr(e,t),i=Rr(e,t+8);if(r===void 0||i===void 0||n.has(`ansi${t}`)&&n.has(`ansi${t+8}`))return[];return[{normal:t,gap:Xn(r.h,i.h)}]})}function Yi(e){let n=Vi(e);return[0,8].flatMap((t)=>Kt.flatMap((r)=>Kt.filter((i)=>i>r).flatMap((i)=>{let[o,s]=[t+r,t+i],u=Rr(e,o),c=Rr(e,s);if(u===void 0||c===void 0||n.has(o)&&n.has(s))return[];return Xn(u.h,c.h)<Zi&&Math.abs(u.l-c.l)<Xi?[[o,s]]:[]})))}var Qd=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(e)=>Math.max(0,...Qi(e).map((n)=>n.over)),check:(e)=>Qi(e).map(({slot:n,hue:t,over:r})=>{let i=Fr[Wt(n)];return`ANSI ${n} ${An(e,n)} has hue ${t.toFixed(0)}°, ${r.toFixed(0)}° outside ${i.name} (${i.center}±${i.width}°)`})},{rule:"bright-follows",label:"widest normal to bright hue gap",unit:"degrees",max:dt,measure:(e)=>Math.max(0,...qi(e).map((n)=>n.gap)),check:(e)=>qi(e).filter((n)=>n.gap>dt).map(({normal:n,gap:t})=>`ANSI ${n+8} is ${t.toFixed(0)}° from ANSI ${n}, needs <= ${dt}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(e)=>Yi(e).length,check:(e)=>Yi(e).map(([n,t])=>`ANSI ${n} ${An(e,n)} and ANSI ${t} ${An(e,t)} are within ${Zi}° hue and ${Xi} lightness`)}],zi=[...Oc,...Qd],$s=zi.map((e)=>e.rule),mt=zi.map(({rule:e,label:n,unit:t,min:r,max:i})=>({rule:e,label:n,unit:t,...r===void 0?{}:{min:r},...i===void 0?{}:{max:i}}));function _t(e){return zi.map((n)=>Math.round(n.measure(e)*1000)/1000)}function Rc(e,n){return e.filter((t)=>!n.waive.includes(t.rule)).flatMap((t)=>t.check(n).map((r)=>({theme:n.name,rule:t.rule,detail:r})))}function Bi(e){return Rc(zi,e)}function Fc(e){return Rc(Oc,e)}function Pc(e){return e.flatMap(Bi)}import{readdirSync as Zp,readFileSync as gh}from"node:fs";import{basename as Xp,join as dh}from"node:path";/*!
2
+ import{createRequire as Dg}from"node:module";var Qg=Object.create;var{getPrototypeOf:Zg,defineProperty:Fc,getOwnPropertyNames:Yg}=Object;var Xg=Object.prototype.hasOwnProperty;function Vg(e){return this[e]}var zg,Bg,Ci=(e,n,t)=>{var r=e!=null&&typeof e==="object";if(r){var i=n?zg??=new WeakMap:Bg??=new WeakMap,o=i.get(e);if(o)return o}t=e!=null?Qg(Zg(e)):{};let s=n||!e||!e.__esModule?Fc(t,"default",{value:e,enumerable:!0}):t;for(let u of Yg(e))if(!Xg.call(s,u))Fc(s,u,{get:Vg.bind(e,u),enumerable:!0});if(r)i.set(e,s);return s};var Me=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var Ke=Dg(import.meta.url);var Zc=Me(($E,xi)=>{var Qc=Qc||function(e){return Buffer.from(e).toString("base64")};function am(e){var n=this,t=Math.round,r=Math.floor,i=Array(64),o=Array(64),s=Array(64),u=Array(64),c,a,h,f,l=Array(65535),d=Array(65535),g=Array(64),m=Array(64),b=[],S=0,I=7,k=Array(64),y=Array(64),p=Array(64),P=Array(256),E=Array(2048),R,N=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],H=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],A=[0,1,2,3,4,5,6,7,8,9,10,11],X=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],j=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],Le=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],D=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],Oe=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function Ee(w){var T=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99];for(var W=0;W<64;W++){var U=r((T[W]*w+50)/100);if(U<1)U=1;else if(U>255)U=255;i[N[W]]=U}var Q=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99];for(var Z=0;Z<64;Z++){var se=r((Q[Z]*w+50)/100);if(se<1)se=1;else if(se>255)se=255;o[N[Z]]=se}var ue=[1,1.387039845,1.306562965,1.175875602,1,0.785694958,0.5411961,0.275899379],Fe=0;for(var ve=0;ve<8;ve++)for(var M=0;M<8;M++)s[Fe]=1/(i[N[Fe]]*ue[ve]*ue[M]*8),u[Fe]=1/(o[N[Fe]]*ue[ve]*ue[M]*8),Fe++}function ee(w,T){var W=0,U=0,Q=[];for(var Z=1;Z<=16;Z++){for(var se=1;se<=w[Z];se++)Q[T[U]]=[],Q[T[U]][0]=W,Q[T[U]][1]=Z,U++,W++;W*=2}return Q}function Ae(){c=ee(H,A),a=ee(Le,C),h=ee(X,j),f=ee(D,Oe)}function ce(){var w=1,T=2;for(var W=1;W<=15;W++){for(var U=w;U<T;U++)d[32767+U]=W,l[32767+U]=[],l[32767+U][1]=W,l[32767+U][0]=U;for(var Q=-(T-1);Q<=-w;Q++)d[32767+Q]=W,l[32767+Q]=[],l[32767+Q][1]=W,l[32767+Q][0]=T-1+Q;w<<=1,T<<=1}}function te(){for(var w=0;w<256;w++)E[w]=19595*w,E[w+256>>0]=38470*w,E[w+512>>0]=7471*w+32768,E[w+768>>0]=-11059*w,E[w+1024>>0]=-21709*w,E[w+1280>>0]=32768*w+8421375,E[w+1536>>0]=-27439*w,E[w+1792>>0]=-5329*w}function V(w){var T=w[0],W=w[1]-1;while(W>=0){if(T&1<<W)S|=1<<I;if(W--,I--,I<0){if(S==255)$(255),$(0);else $(S);I=7,S=0}}}function $(w){b.push(w)}function G(w){$(w>>8&255),$(w&255)}function me(w,T){var W,U,Q,Z,se,ue,Fe,ve,M=0,L,q=8,Re=64;for(L=0;L<q;++L){W=w[M],U=w[M+1],Q=w[M+2],Z=w[M+3],se=w[M+4],ue=w[M+5],Fe=w[M+6],ve=w[M+7];var Y=W+ve,ne=W-ve,we=U+Fe,K=U-Fe,he=Q+ue,Ce=Q-ue,Ne=Z+se,sn=Z-se,yn=Y+Ne,lt=Y-Ne,Jt=we+he,Ct=we-he;w[M]=yn+Jt,w[M+4]=yn-Jt;var kr=(Ct+lt)*0.707106781;w[M+2]=lt+kr,w[M+6]=lt-kr,yn=sn+Ce,Jt=Ce+K,Ct=K+ne;var Er=(yn-Ct)*0.382683433,Gi=0.5411961*yn+Er,yr=1.306562965*Ct+Er,Sr=Jt*0.707106781,vr=ne+Sr,Mr=ne-Sr;w[M+5]=Mr+Gi,w[M+3]=Mr-Gi,w[M+1]=vr+yr,w[M+7]=vr-yr,M+=8}M=0;for(L=0;L<q;++L){W=w[M],U=w[M+8],Q=w[M+16],Z=w[M+24],se=w[M+32],ue=w[M+40],Fe=w[M+48],ve=w[M+56];var wc=W+ve,ls=W-ve,$c=U+Fe,bc=U-Fe,kc=Q+ue,Ec=Q-ue,yc=Z+se,qg=Z-se,Ir=wc+yc,ds=wc-yc,Ui=$c+kc,ji=$c-kc;w[M]=Ir+Ui,w[M+32]=Ir-Ui;var Sc=(ji+ds)*0.707106781;w[M+16]=ds+Sc,w[M+48]=ds-Sc,Ir=qg+Ec,Ui=Ec+bc,ji=bc+ls;var vc=(Ir-ji)*0.382683433,Mc=0.5411961*Ir+vc,Ic=1.306562965*ji+vc,Nc=Ui*0.707106781,Oc=ls+Nc,Rc=ls-Nc;w[M+40]=Rc+Mc,w[M+24]=Rc-Mc,w[M+8]=Oc+Ic,w[M+56]=Oc-Ic,M++}var Ji;for(L=0;L<Re;++L)Ji=w[L]*T[L],g[L]=Ji>0?Ji+0.5|0:Ji-0.5|0;return g}function pe(){G(65504),G(16),$(74),$(70),$(73),$(70),$(0),$(1),$(1),$(0),G(1),G(1),$(0),$(0)}function re(w){if(!w)return;if(G(65505),w[0]===69&&w[1]===120&&w[2]===105&&w[3]===102)G(w.length+2);else G(w.length+5+2),$(69),$(120),$(105),$(102),$(0);for(var T=0;T<w.length;T++)$(w[T])}function ie(w,T){G(65472),G(17),$(8),G(T),G(w),$(3),$(1),$(17),$(0),$(2),$(17),$(1),$(3),$(17),$(1)}function z(){G(65499),G(132),$(0);for(var w=0;w<64;w++)$(i[w]);$(1);for(var T=0;T<64;T++)$(o[T])}function F(){G(65476),G(418),$(0);for(var w=0;w<16;w++)$(H[w+1]);for(var T=0;T<=11;T++)$(A[T]);$(16);for(var W=0;W<16;W++)$(X[W+1]);for(var U=0;U<=161;U++)$(j[U]);$(1);for(var Q=0;Q<16;Q++)$(Le[Q+1]);for(var Z=0;Z<=11;Z++)$(C[Z]);$(17);for(var se=0;se<16;se++)$(D[se+1]);for(var ue=0;ue<=161;ue++)$(Oe[ue])}function O(w){if(typeof w>"u"||w.constructor!==Array)return;w.forEach((T)=>{if(typeof T!=="string")return;G(65534);var W=T.length;G(W+2);var U;for(U=0;U<W;U++)$(T.charCodeAt(U))})}function Se(){G(65498),G(12),$(3),$(1),$(0),$(2),$(17),$(3),$(17),$(0),$(63),$(0)}function _(w,T,W,U,Q){var Z=Q[0],se=Q[240],ue,Fe=16,ve=63,M=64,L=me(w,T);for(var q=0;q<M;++q)m[N[q]]=L[q];var Re=m[0]-W;if(W=m[0],Re==0)V(U[0]);else ue=32767+Re,V(U[d[ue]]),V(l[ue]);var Y=63;for(;Y>0&&m[Y]==0;Y--);if(Y==0)return V(Z),W;var ne=1,we;while(ne<=Y){var K=ne;for(;m[ne]==0&&ne<=Y;++ne);var he=ne-K;if(he>=Fe){we=he>>4;for(var Ce=1;Ce<=we;++Ce)V(se);he=he&15}ue=32767+m[ne],V(Q[(he<<4)+d[ue]]),V(l[ue]),ne++}if(Y!=ve)V(Z);return W}function B(){var w=String.fromCharCode;for(var T=0;T<256;T++)P[T]=w(T)}this.encode=function(w,T){var W=new Date().getTime();if(T)on(T);b=[],S=0,I=7,G(65496),pe(),O(w.comments),re(w.exifBuffer),z(),ie(w.width,w.height),F(),Se();var U=0,Q=0,Z=0;S=0,I=7,this.encode.displayName="_encode_";var{data:se,width:ue,height:Fe}=w,ve=ue*4,M=ue*3,L,q=0,Re,Y,ne,we,K,he,Ce,Ne;while(q<Fe){L=0;while(L<ve){we=ve*q+L,K=we,he=-1,Ce=0;for(Ne=0;Ne<64;Ne++){if(Ce=Ne>>3,he=(Ne&7)*4,K=we+Ce*ve+he,q+Ce>=Fe)K-=ve*(q+1+Ce-Fe);if(L+he>=ve)K-=L+he-ve+4;Re=se[K++],Y=se[K++],ne=se[K++],k[Ne]=(E[Re]+E[Y+256>>0]+E[ne+512>>0]>>16)-128,y[Ne]=(E[Re+768>>0]+E[Y+1024>>0]+E[ne+1280>>0]>>16)-128,p[Ne]=(E[Re+1280>>0]+E[Y+1536>>0]+E[ne+1792>>0]>>16)-128}U=_(k,s,U,c,h),Q=_(y,u,Q,a,f),Z=_(p,u,Z,a,f),L+=32}q+=8}if(I>=0){var sn=[];sn[1]=I+1,sn[0]=(1<<I+1)-1,V(sn)}if(G(65497),typeof xi>"u")return new Uint8Array(b);return Buffer.from(b);var yn,lt};function on(w){if(w<=0)w=1;if(w>100)w=100;if(R==w)return;var T=0;if(w<50)T=Math.floor(5000/w);else T=Math.floor(200-w*2);Ee(T),R=w}function ln(){var w=new Date().getTime();if(!e)e=50;B(),Ae(),ce(),te(),on(e);var T=new Date().getTime()-w}ln()}if(typeof xi<"u")xi.exports=qc;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].encode=qc;function qc(e,n){if(typeof n>"u")n=50;var t=new am(n),r=t.encode(e,n);return{data:r,width:e.width,height:e.height}}});var Xc=Me((bE,Ss)=>{var ys=function(){var n=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,r=799,i=3406,o=2276,s=1567,u=3784,c=5793,a=2896;function h(){}function f(I,k){var y=0,p=[],P,E,R=16;while(R>0&&!I[R-1])R--;p.push({children:[],index:0});var N=p[0],H;for(P=0;P<R;P++){for(E=0;E<I[P];E++){N=p.pop(),N.children[N.index]=k[y];while(N.index>0){if(p.length===0)throw Error("Could not recreate Huffman Table");N=p.pop()}N.index++,p.push(N);while(p.length<=P)p.push(H={children:[],index:0}),N.children[N.index]=H.children,N=H;y++}if(P+1<R)p.push(H={children:[],index:0}),N.children[N.index]=H.children,N=H}return p[0].children}function l(I,k,y,p,P,E,R,N,H,A){var{precision:X,samplesPerLine:j,scanLines:Le,mcusPerLine:C,progressive:D,maxH:Oe,maxV:Ee}=y,ee=k,Ae=0,ce=0;function te(){if(ce>0)return ce--,Ae>>ce&1;if(Ae=I[k++],Ae==255){var M=I[k++];if(M)throw Error("unexpected marker: "+(Ae<<8|M).toString(16))}return ce=7,Ae>>>7}function V(M){var L=M,q;while((q=te())!==null){if(L=L[q],typeof L==="number")return L;if(typeof L!=="object")throw Error("invalid huffman sequence")}return null}function $(M){var L=0;while(M>0){var q=te();if(q===null)return;L=L<<1|q,M--}return L}function G(M){var L=$(M);if(L>=1<<M-1)return L;return L+(-1<<M)+1}function me(M,L){var q=V(M.huffmanTableDC),Re=q===0?0:G(q);L[0]=M.pred+=Re;var Y=1;while(Y<64){var ne=V(M.huffmanTableAC),we=ne&15,K=ne>>4;if(we===0){if(K<15)break;Y+=16;continue}Y+=K;var he=n[Y];L[he]=G(we),Y++}}function pe(M,L){var q=V(M.huffmanTableDC),Re=q===0?0:G(q)<<H;L[0]=M.pred+=Re}function re(M,L){L[0]|=te()<<H}var ie=0;function z(M,L){if(ie>0){ie--;return}var q=E,Re=R;while(q<=Re){var Y=V(M.huffmanTableAC),ne=Y&15,we=Y>>4;if(ne===0){if(we<15){ie=$(we)+(1<<we)-1;break}q+=16;continue}q+=we;var K=n[q];L[K]=G(ne)*(1<<H),q++}}var F=0,O;function Se(M,L){var q=E,Re=R,Y=0;while(q<=Re){var ne=n[q],we=L[ne]<0?-1:1;switch(F){case 0:var K=V(M.huffmanTableAC),he=K&15,Y=K>>4;if(he===0)if(Y<15)ie=$(Y)+(1<<Y),F=4;else Y=16,F=1;else{if(he!==1)throw Error("invalid ACn encoding");O=G(he),F=Y?2:3}continue;case 1:case 2:if(L[ne])L[ne]+=(te()<<H)*we;else if(Y--,Y===0)F=F==2?3:0;break;case 3:if(L[ne])L[ne]+=(te()<<H)*we;else L[ne]=O<<H,F=0;break;case 4:if(L[ne])L[ne]+=(te()<<H)*we;break}q++}if(F===4){if(ie--,ie===0)F=0}}function _(M,L,q,Re,Y){var ne=q/C|0,we=q%C,K=ne*M.v+Re,he=we*M.h+Y;if(M.blocks[K]===void 0&&A.tolerantDecoding)return;L(M,M.blocks[K][he])}function B(M,L,q){var Re=q/M.blocksPerLine|0,Y=q%M.blocksPerLine;if(M.blocks[Re]===void 0&&A.tolerantDecoding)return;L(M,M.blocks[Re][Y])}var on=p.length,ln,w,T,W,U,Q;if(D)if(E===0)Q=N===0?pe:re;else Q=N===0?z:Se;else Q=me;var Z=0,se,ue;if(on==1)ue=p[0].blocksPerLine*p[0].blocksPerColumn;else ue=C*y.mcusPerColumn;if(!P)P=ue;var Fe,ve;while(Z<ue){for(w=0;w<on;w++)p[w].pred=0;if(ie=0,on==1){ln=p[0];for(U=0;U<P;U++)B(ln,Q,Z),Z++}else for(U=0;U<P;U++){for(w=0;w<on;w++){ln=p[w],Fe=ln.h,ve=ln.v;for(T=0;T<ve;T++)for(W=0;W<Fe;W++)_(ln,Q,Z,T,W)}if(Z++,Z===ue)break}if(Z===ue)do{if(I[k]===255){if(I[k+1]!==0)break}k+=1}while(k<I.length-2);if(ce=0,se=I[k]<<8|I[k+1],se<65280)throw Error("marker was not found");if(se>=65488&&se<=65495)k+=2;else break}return k-ee}function d(I,k){var y=[],p=k.blocksPerLine,P=k.blocksPerColumn,E=p<<3,R=new Int32Array(64),N=new Uint8Array(64);function H(ee,Ae,ce){var te=k.quantizationTable,V,$,G,me,pe,re,ie,z,F,O=ce,Se;for(Se=0;Se<64;Se++)O[Se]=ee[Se]*te[Se];for(Se=0;Se<8;++Se){var _=8*Se;if(O[1+_]==0&&O[2+_]==0&&O[3+_]==0&&O[4+_]==0&&O[5+_]==0&&O[6+_]==0&&O[7+_]==0){F=c*O[0+_]+512>>10,O[0+_]=F,O[1+_]=F,O[2+_]=F,O[3+_]=F,O[4+_]=F,O[5+_]=F,O[6+_]=F,O[7+_]=F;continue}V=c*O[0+_]+128>>8,$=c*O[4+_]+128>>8,G=O[2+_],me=O[6+_],pe=a*(O[1+_]-O[7+_])+128>>8,z=a*(O[1+_]+O[7+_])+128>>8,re=O[3+_]<<4,ie=O[5+_]<<4,F=V-$+1>>1,V=V+$+1>>1,$=F,F=G*u+me*s+128>>8,G=G*s-me*u+128>>8,me=F,F=pe-ie+1>>1,pe=pe+ie+1>>1,ie=F,F=z+re+1>>1,re=z-re+1>>1,z=F,F=V-me+1>>1,V=V+me+1>>1,me=F,F=$-G+1>>1,$=$+G+1>>1,G=F,F=pe*o+z*i+2048>>12,pe=pe*i-z*o+2048>>12,z=F,F=re*r+ie*t+2048>>12,re=re*t-ie*r+2048>>12,ie=F,O[0+_]=V+z,O[7+_]=V-z,O[1+_]=$+ie,O[6+_]=$-ie,O[2+_]=G+re,O[5+_]=G-re,O[3+_]=me+pe,O[4+_]=me-pe}for(Se=0;Se<8;++Se){var B=Se;if(O[8+B]==0&&O[16+B]==0&&O[24+B]==0&&O[32+B]==0&&O[40+B]==0&&O[48+B]==0&&O[56+B]==0){F=c*ce[Se+0]+8192>>14,O[0+B]=F,O[8+B]=F,O[16+B]=F,O[24+B]=F,O[32+B]=F,O[40+B]=F,O[48+B]=F,O[56+B]=F;continue}V=c*O[0+B]+2048>>12,$=c*O[32+B]+2048>>12,G=O[16+B],me=O[48+B],pe=a*(O[8+B]-O[56+B])+2048>>12,z=a*(O[8+B]+O[56+B])+2048>>12,re=O[24+B],ie=O[40+B],F=V-$+1>>1,V=V+$+1>>1,$=F,F=G*u+me*s+2048>>12,G=G*s-me*u+2048>>12,me=F,F=pe-ie+1>>1,pe=pe+ie+1>>1,ie=F,F=z+re+1>>1,re=z-re+1>>1,z=F,F=V-me+1>>1,V=V+me+1>>1,me=F,F=$-G+1>>1,$=$+G+1>>1,G=F,F=pe*o+z*i+2048>>12,pe=pe*i-z*o+2048>>12,z=F,F=re*r+ie*t+2048>>12,re=re*t-ie*r+2048>>12,ie=F,O[0+B]=V+z,O[56+B]=V-z,O[8+B]=$+ie,O[48+B]=$-ie,O[16+B]=G+re,O[40+B]=G-re,O[24+B]=me+pe,O[32+B]=me-pe}for(Se=0;Se<64;++Se){var on=128+(O[Se]+8>>4);Ae[Se]=on<0?0:on>255?255:on}}S(E*P*8);var A,X;for(var j=0;j<P;j++){var Le=j<<3;for(A=0;A<8;A++)y.push(new Uint8Array(E));for(var C=0;C<p;C++){H(k.blocks[j][C],N,R);var D=0,Oe=C<<3;for(X=0;X<8;X++){var Ee=y[Le+X];for(A=0;A<8;A++)Ee[Oe+A]=N[D++]}}}return y}function g(I){return I<0?0:I>255?255:I}h.prototype={load:function(k){var y=new XMLHttpRequest;y.open("GET",k,!0),y.responseType="arraybuffer",y.onload=function(){var p=new Uint8Array(y.response||y.mozResponseArrayBuffer);if(this.parse(p),this.onload)this.onload()}.bind(this),y.send(null)},parse:function(k){var y=this.opts.maxResolutionInMP*1000*1000,p=0,P=k.length;function E(){var K=k[p]<<8|k[p+1];return p+=2,K}function R(){var K=E(),he=k.subarray(p,p+K-2);return p+=he.length,he}function N(K){var he=1,Ce=1,Ne,sn;for(sn in K.components)if(K.components.hasOwnProperty(sn)){if(Ne=K.components[sn],he<Ne.h)he=Ne.h;if(Ce<Ne.v)Ce=Ne.v}var yn=Math.ceil(K.samplesPerLine/8/he),lt=Math.ceil(K.scanLines/8/Ce);for(sn in K.components)if(K.components.hasOwnProperty(sn)){Ne=K.components[sn];var Jt=Math.ceil(Math.ceil(K.samplesPerLine/8)*Ne.h/he),Ct=Math.ceil(Math.ceil(K.scanLines/8)*Ne.v/Ce),kr=yn*Ne.h,Er=lt*Ne.v,Gi=Er*kr,yr=[];S(Gi*256);for(var Sr=0;Sr<Er;Sr++){var vr=[];for(var Mr=0;Mr<kr;Mr++)vr.push(new Int32Array(64));yr.push(vr)}Ne.blocksPerLine=Jt,Ne.blocksPerColumn=Ct,Ne.blocks=yr}K.maxH=he,K.maxV=Ce,K.mcusPerLine=yn,K.mcusPerColumn=lt}var H=null,A=null,X=null,j,Le,C=[],D=[],Oe=[],Ee=[],ee=E(),Ae=-1;if(this.comments=[],ee!=65496)throw Error("SOI not found");ee=E();while(ee!=65497){var ce,te,V;switch(ee){case 65280:break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var $=R();if(ee===65534){var G=String.fromCharCode.apply(null,$);this.comments.push(G)}if(ee===65504){if($[0]===74&&$[1]===70&&$[2]===73&&$[3]===70&&$[4]===0)H={version:{major:$[5],minor:$[6]},densityUnits:$[7],xDensity:$[8]<<8|$[9],yDensity:$[10]<<8|$[11],thumbWidth:$[12],thumbHeight:$[13],thumbData:$.subarray(14,14+3*$[12]*$[13])}}if(ee===65505){if($[0]===69&&$[1]===120&&$[2]===105&&$[3]===102&&$[4]===0)this.exifBuffer=$.subarray(5,$.length)}if(ee===65518){if($[0]===65&&$[1]===100&&$[2]===111&&$[3]===98&&$[4]===101&&$[5]===0)A={version:$[6],flags0:$[7]<<8|$[8],flags1:$[9]<<8|$[10],transformCode:$[11]}}break;case 65499:var me=E(),pe=me+p-2;while(p<pe){var re=k[p++];S(256);var ie=new Int32Array(64);if(re>>4===0)for(te=0;te<64;te++){var z=n[te];ie[z]=k[p++]}else if(re>>4===1)for(te=0;te<64;te++){var z=n[te];ie[z]=E()}else throw Error("DQT: invalid table spec");C[re&15]=ie}break;case 65472:case 65473:case 65474:E(),j={},j.extended=ee===65473,j.progressive=ee===65474,j.precision=k[p++],j.scanLines=E(),j.samplesPerLine=E(),j.components={},j.componentsOrder=[];var F=j.scanLines*j.samplesPerLine;if(F>y){var O=Math.ceil((F-y)/1e6);throw Error(`maxResolutionInMP limit exceeded by ${O}MP`)}var Se=k[p++],_,B=0,on=0;for(ce=0;ce<Se;ce++){_=k[p];var ln=k[p+1]>>4,w=k[p+1]&15,T=k[p+2];if(ln<=0||w<=0)throw Error("Invalid sampling factor, expected values above 0");j.componentsOrder.push(_),j.components[_]={h:ln,v:w,quantizationIdx:T},p+=3}N(j),D.push(j);break;case 65476:var W=E();for(ce=2;ce<W;){var U=k[p++],Q=new Uint8Array(16),Z=0;for(te=0;te<16;te++,p++)Z+=Q[te]=k[p];S(16+Z);var se=new Uint8Array(Z);for(te=0;te<Z;te++,p++)se[te]=k[p];ce+=17+Z,(U>>4===0?Ee:Oe)[U&15]=f(Q,se)}break;case 65501:E(),Le=E();break;case 65500:E(),E();break;case 65498:var ue=E(),Fe=k[p++],ve=[],M;for(ce=0;ce<Fe;ce++){M=j.components[k[p++]];var L=k[p++];M.huffmanTableDC=Ee[L>>4],M.huffmanTableAC=Oe[L&15],ve.push(M)}var q=k[p++],Re=k[p++],Y=k[p++],ne=l(k,p,j,ve,Le,q,Re,Y>>4,Y&15,this.opts);p+=ne;break;case 65535:if(k[p]!==255)p--;break;default:if(k[p-3]==255&&k[p-2]>=192&&k[p-2]<=254){p-=3;break}else if(ee===224||ee==225){if(Ae!==-1)throw Error(`first unknown JPEG marker at offset ${Ae.toString(16)}, second unknown JPEG marker ${ee.toString(16)} at offset ${(p-1).toString(16)}`);Ae=p-1;let K=E();if(k[p+K-2]===255){p+=K-2;break}}throw Error("unknown JPEG marker "+ee.toString(16))}ee=E()}if(D.length!=1)throw Error("only single frame JPEGs supported");for(var ce=0;ce<D.length;ce++){var we=D[ce].components;for(var te in we)we[te].quantizationTable=C[we[te].quantizationIdx],delete we[te].quantizationIdx}this.width=j.samplesPerLine,this.height=j.scanLines,this.jfif=H,this.adobe=A,this.components=[];for(var ce=0;ce<j.componentsOrder.length;ce++){var M=j.components[j.componentsOrder[ce]];this.components.push({lines:d(j,M),scaleX:M.h/j.maxH,scaleY:M.v/j.maxV})}},getData:function(k,y){var p=this.width/k,P=this.height/y,E,R,N,H,A,X,j,Le,C,D,Oe=0,Ee,ee,Ae,ce,te,V,$,G,me,pe,re,ie=k*y*this.components.length;S(ie);var z=new Uint8Array(ie);switch(this.components.length){case 1:E=this.components[0];for(D=0;D<y;D++){A=E.lines[0|D*E.scaleY*P];for(C=0;C<k;C++)Ee=A[0|C*E.scaleX*p],z[Oe++]=Ee}break;case 2:E=this.components[0],R=this.components[1];for(D=0;D<y;D++){A=E.lines[0|D*E.scaleY*P],X=R.lines[0|D*R.scaleY*P];for(C=0;C<k;C++)Ee=A[0|C*E.scaleX*p],z[Oe++]=Ee,Ee=X[0|C*R.scaleX*p],z[Oe++]=Ee}break;case 3:if(re=!0,this.adobe&&this.adobe.transformCode)re=!0;else if(typeof this.opts.colorTransform<"u")re=!!this.opts.colorTransform;E=this.components[0],R=this.components[1],N=this.components[2];for(D=0;D<y;D++){A=E.lines[0|D*E.scaleY*P],X=R.lines[0|D*R.scaleY*P],j=N.lines[0|D*N.scaleY*P];for(C=0;C<k;C++){if(!re)G=A[0|C*E.scaleX*p],me=X[0|C*R.scaleX*p],pe=j[0|C*N.scaleX*p];else Ee=A[0|C*E.scaleX*p],ee=X[0|C*R.scaleX*p],Ae=j[0|C*N.scaleX*p],G=g(Ee+1.402*(Ae-128)),me=g(Ee-0.3441363*(ee-128)-0.71413636*(Ae-128)),pe=g(Ee+1.772*(ee-128));z[Oe++]=G,z[Oe++]=me,z[Oe++]=pe}}break;case 4:if(!this.adobe)throw Error("Unsupported color mode (4 components)");if(re=!1,this.adobe&&this.adobe.transformCode)re=!0;else if(typeof this.opts.colorTransform<"u")re=!!this.opts.colorTransform;E=this.components[0],R=this.components[1],N=this.components[2],H=this.components[3];for(D=0;D<y;D++){A=E.lines[0|D*E.scaleY*P],X=R.lines[0|D*R.scaleY*P],j=N.lines[0|D*N.scaleY*P],Le=H.lines[0|D*H.scaleY*P];for(C=0;C<k;C++){if(!re)te=A[0|C*E.scaleX*p],V=X[0|C*R.scaleX*p],$=j[0|C*N.scaleX*p],ce=Le[0|C*H.scaleX*p];else Ee=A[0|C*E.scaleX*p],ee=X[0|C*R.scaleX*p],Ae=j[0|C*N.scaleX*p],ce=Le[0|C*H.scaleX*p],te=255-g(Ee+1.402*(Ae-128)),V=255-g(Ee-0.3441363*(ee-128)-0.71413636*(Ae-128)),$=255-g(Ee+1.772*(ee-128));z[Oe++]=255-te,z[Oe++]=255-V,z[Oe++]=255-$,z[Oe++]=255-ce}}break;default:throw Error("Unsupported color mode")}return z},copyToImageData:function(k,y){var{width:p,height:P,data:E}=k,R=this.getData(p,P),N=0,H=0,A,X,j,Le,C,D,Oe,Ee,ee;switch(this.components.length){case 1:for(X=0;X<P;X++)for(A=0;A<p;A++)if(j=R[N++],E[H++]=j,E[H++]=j,E[H++]=j,y)E[H++]=255;break;case 3:for(X=0;X<P;X++)for(A=0;A<p;A++)if(Oe=R[N++],Ee=R[N++],ee=R[N++],E[H++]=Oe,E[H++]=Ee,E[H++]=ee,y)E[H++]=255;break;case 4:for(X=0;X<P;X++)for(A=0;A<p;A++)if(C=R[N++],D=R[N++],j=R[N++],Le=R[N++],Oe=255-g(C*(1-Le/255)+Le),Ee=255-g(D*(1-Le/255)+Le),ee=255-g(j*(1-Le/255)+Le),E[H++]=Oe,E[H++]=Ee,E[H++]=ee,y)E[H++]=255;break;default:throw Error("Unsupported color mode")}}};var m=0,b=0;function S(I=0){var k=m+I;if(k>b){var y=Math.ceil((k-b)/1024/1024);throw Error(`maxMemoryUsageInMB limit exceeded by at least ${y}MB`)}m=k}return h.resetMaxMemoryUsage=function(I){m=0,b=I},h.getBytesAllocated=function(){return m},h.requestMemoryAllocation=S,h}();if(typeof Ss<"u")Ss.exports=Yc;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].decode=Yc;function Yc(e,n={}){var t={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512},r={...t,...n},i=new Uint8Array(e),o=new ys;o.opts=r,ys.resetMaxMemoryUsage(r.maxMemoryUsageInMB*1024*1024),o.parse(i);var s=r.formatAsRGBA?4:3,u=o.width*o.height*s;try{ys.requestMemoryAllocation(u);var c={width:o.width,height:o.height,exifBuffer:o.exifBuffer,data:r.useTArray?new Uint8Array(u):Buffer.alloc(u)};if(o.comments.length>0)c.comments=o.comments}catch(a){if(a instanceof RangeError)throw Error("Could not allocate enough memory for the image. Required: "+u);if(a instanceof ReferenceError){if(a.message==="Buffer is not defined")throw Error("Buffer is not globally defined in this environment. Consider setting useTArray to true")}throw a}return o.copyToImageData(c,r.formatAsRGBA),c}});var zc=Me((kE,Vc)=>{var hm=Zc(),fm=Xc();Vc.exports={encode:hm,decode:fm}});var vs=Me((EE,Dc)=>{var lm=Ke("util"),Bc=Ke("stream"),mn=Dc.exports=function(){Bc.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};lm.inherits(mn,Bc);mn.prototype.read=function(e,n){this._reads.push({length:Math.abs(e),allowLess:e<0,func:n}),process.nextTick(function(){if(this._process(),this._paused&&this._reads&&this._reads.length>0)this._paused=!1,this.emit("drain")}.bind(this))};mn.prototype.write=function(e,n){if(!this.writable)return this.emit("error",Error("Stream not writable")),!1;let t;if(Buffer.isBuffer(e))t=e;else t=Buffer.from(e,n||this._encoding);if(this._buffers.push(t),this._buffered+=t.length,this._process(),this._reads&&this._reads.length===0)this._paused=!0;return this.writable&&!this._paused};mn.prototype.end=function(e,n){if(e)this.write(e,n);if(this.writable=!1,!this._buffers)return;if(this._buffers.length===0)this._end();else this._buffers.push(null),this._process()};mn.prototype.destroySoon=mn.prototype.end;mn.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};mn.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};mn.prototype._processReadAllowingLess=function(e){this._reads.shift();let n=this._buffers[0];if(n.length>e.length)this._buffered-=e.length,this._buffers[0]=n.slice(e.length),e.func.call(this,n.slice(0,e.length));else this._buffered-=n.length,this._buffers.shift(),e.func.call(this,n)};mn.prototype._processRead=function(e){this._reads.shift();let n=0,t=0,r=Buffer.alloc(e.length);while(n<e.length){let i=this._buffers[t++],o=Math.min(i.length,e.length-n);if(i.copy(r,n,0,o),n+=o,o!==i.length)this._buffers[--t]=i.slice(o)}if(t>0)this._buffers.splice(0,t);this._buffered-=e.length,e.func.call(this,r)};mn.prototype._process=function(){try{while(this._buffered>0&&this._reads&&this._reads.length>0){let e=this._reads[0];if(e.allowLess)this._processReadAllowingLess(e);else if(this._buffered>=e.length)this._processRead(e);else break}if(this._buffers&&!this.writable)this._end()}catch(e){this.emit("error",e)}}});var Ms=Me((dm)=>{var zn=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];dm.getImagePasses=function(e,n){let t=[],r=e%8,i=n%8,o=(e-r)/8,s=(n-i)/8;for(let u=0;u<zn.length;u++){let c=zn[u],a=o*c.x.length,h=s*c.y.length;for(let f=0;f<c.x.length;f++)if(c.x[f]<r)a++;else break;for(let f=0;f<c.y.length;f++)if(c.y[f]<i)h++;else break;if(a>0&&h>0)t.push({width:a,height:h,index:u})}return t};dm.getInterlaceIterator=function(e){return function(n,t,r){let i=n%zn[r].x.length,o=(n-i)/zn[r].x.length*8+zn[r].x[i],s=t%zn[r].y.length,u=(t-s)/zn[r].y.length*8+zn[r].y[s];return o*4+u*e*4}}});var Is=Me((SE,xc)=>{xc.exports=function(n,t,r){let i=n+t-r,o=Math.abs(i-n),s=Math.abs(i-t),u=Math.abs(i-r);if(o<=s&&o<=u)return n;if(s<=u)return t;return r}});var Ns=Me((vE,na)=>{var pm=Ms(),wm=Is();function ea(e,n,t){let r=e*n;if(t!==8)r=Math.ceil(r/(8/t));return r}var Qt=na.exports=function(e,n){let{width:t,height:r,interlace:i,bpp:o,depth:s}=e;if(this.read=n.read,this.write=n.write,this.complete=n.complete,this._imageIndex=0,this._images=[],i){let u=pm.getImagePasses(t,r);for(let c=0;c<u.length;c++)this._images.push({byteWidth:ea(u[c].width,o,s),height:u[c].height,lineIndex:0})}else this._images.push({byteWidth:ea(t,o,s),height:r,lineIndex:0});if(s===8)this._xComparison=o;else if(s===16)this._xComparison=o*2;else this._xComparison=1};Qt.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Qt.prototype._unFilterType1=function(e,n,t){let r=this._xComparison,i=r-1;for(let o=0;o<t;o++){let s=e[1+o],u=o>i?n[o-r]:0;n[o]=s+u}};Qt.prototype._unFilterType2=function(e,n,t){let r=this._lastLine;for(let i=0;i<t;i++){let o=e[1+i],s=r?r[i]:0;n[i]=o+s}};Qt.prototype._unFilterType3=function(e,n,t){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<t;s++){let u=e[1+s],c=o?o[s]:0,a=s>i?n[s-r]:0,h=Math.floor((a+c)/2);n[s]=u+h}};Qt.prototype._unFilterType4=function(e,n,t){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<t;s++){let u=e[1+s],c=o?o[s]:0,a=s>i?n[s-r]:0,h=s>i&&o?o[s-r]:0,f=wm(a,c,h);n[s]=u+f}};Qt.prototype._reverseFilterLine=function(e){let n=e[0],t,r=this._images[this._imageIndex],i=r.byteWidth;if(n===0)t=e.slice(1,i+1);else switch(t=Buffer.alloc(i),n){case 1:this._unFilterType1(e,t,i);break;case 2:this._unFilterType2(e,t,i);break;case 3:this._unFilterType3(e,t,i);break;case 4:this._unFilterType4(e,t,i);break;default:throw Error("Unrecognised filter type - "+n)}if(this.write(t),r.lineIndex++,r.lineIndex>=r.height)this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex];else this._lastLine=t;if(r)this.read(r.byteWidth+1,this._reverseFilterLine.bind(this));else this._lastLine=null,this.complete()}});var ia=Me((ME,ra)=>{var $m=Ke("util"),ta=vs(),bm=Ns(),km=ra.exports=function(e){ta.call(this);let n=[],t=this;this._filter=new bm(e,{read:this.read.bind(this),write:function(r){n.push(r)},complete:function(){t.emit("complete",Buffer.concat(n))}}),this._filter.start()};$m.inherits(km,ta)});var Zt=Me((IE,oa)=>{oa.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var Fs=Me((NE,sa)=>{var Os=[];(function(){for(let e=0;e<256;e++){let n=e;for(let t=0;t<8;t++)if(n&1)n=3988292384^n>>>1;else n=n>>>1;Os[e]=n}})();var Rs=sa.exports=function(){this._crc=-1};Rs.prototype.write=function(e){for(let n=0;n<e.length;n++)this._crc=Os[(this._crc^e[n])&255]^this._crc>>>8;return!0};Rs.prototype.crc32=function(){return this._crc^-1};Rs.crc32=function(e){let n=-1;for(let t=0;t<e.length;t++)n=Os[(n^e[t])&255]^n>>>8;return n^-1}});var Ps=Me((OE,ua)=>{var je=Zt(),Em=Fs(),Je=ua.exports=function(e,n){this._options=e,e.checkCRC=e.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[je.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[je.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[je.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[je.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[je.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[je.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=n.read,this.error=n.error,this.metadata=n.metadata,this.gamma=n.gamma,this.transColor=n.transColor,this.palette=n.palette,this.parsed=n.parsed,this.inflateData=n.inflateData,this.finished=n.finished,this.simpleTransparency=n.simpleTransparency,this.headersFinished=n.headersFinished||function(){}};Je.prototype.start=function(){this.read(je.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Je.prototype._parseSignature=function(e){let n=je.PNG_SIGNATURE;for(let t=0;t<n.length;t++)if(e[t]!==n[t]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};Je.prototype._parseChunkBegin=function(e){let n=e.readUInt32BE(0),t=e.readUInt32BE(4),r="";for(let o=4;o<8;o++)r+=String.fromCharCode(e[o]);let i=Boolean(e[4]&32);if(!this._hasIHDR&&t!==je.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new Em,this._crc.write(Buffer.from(r)),this._chunks[t])return this._chunks[t](n);if(!i){this.error(Error("Unsupported critical chunk type "+r));return}this.read(n+4,this._skipChunk.bind(this))};Je.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Je.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Je.prototype._parseChunkEnd=function(e){let n=e.readInt32BE(0),t=this._crc.crc32();if(this._options.checkCRC&&t!==n){this.error(Error("Crc error - "+n+" - "+t));return}if(!this._hasIEND)this.read(8,this._parseChunkBegin.bind(this))};Je.prototype._handleIHDR=function(e){this.read(e,this._parseIHDR.bind(this))};Je.prototype._parseIHDR=function(e){this._crc.write(e);let n=e.readUInt32BE(0),t=e.readUInt32BE(4),r=e[8],i=e[9],o=e[10],s=e[11],u=e[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(Error("Unsupported bit depth "+r));return}if(!(i in je.COLORTYPE_TO_BPP_MAP)){this.error(Error("Unsupported color type"));return}if(o!==0){this.error(Error("Unsupported compression method"));return}if(s!==0){this.error(Error("Unsupported filter method"));return}if(u!==0&&u!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let c=je.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:n,height:t,depth:r,interlace:Boolean(u),palette:Boolean(i&je.COLORTYPE_PALETTE),color:Boolean(i&je.COLORTYPE_COLOR),alpha:Boolean(i&je.COLORTYPE_ALPHA),bpp:c,colorType:i}),this._handleChunkEnd()};Je.prototype._handlePLTE=function(e){this.read(e,this._parsePLTE.bind(this))};Je.prototype._parsePLTE=function(e){this._crc.write(e);let n=Math.floor(e.length/3);for(let t=0;t<n;t++)this._palette.push([e[t*3],e[t*3+1],e[t*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};Je.prototype._handleTRNS=function(e){this.simpleTransparency(),this.read(e,this._parseTRNS.bind(this))};Je.prototype._parseTRNS=function(e){if(this._crc.write(e),this._colorType===je.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error("Transparency chunk must be after palette"));return}if(e.length>this._palette.length){this.error(Error("More transparent colors than palette size"));return}for(let n=0;n<e.length;n++)this._palette[n][3]=e[n];this.palette(this._palette)}if(this._colorType===je.COLORTYPE_GRAYSCALE)this.transColor([e.readUInt16BE(0)]);if(this._colorType===je.COLORTYPE_COLOR)this.transColor([e.readUInt16BE(0),e.readUInt16BE(2),e.readUInt16BE(4)]);this._handleChunkEnd()};Je.prototype._handleGAMA=function(e){this.read(e,this._parseGAMA.bind(this))};Je.prototype._parseGAMA=function(e){this._crc.write(e),this.gamma(e.readUInt32BE(0)/je.GAMMA_DIVISION),this._handleChunkEnd()};Je.prototype._handleIDAT=function(e){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-e,this._parseIDAT.bind(this,e))};Je.prototype._parseIDAT=function(e,n){if(this._crc.write(n),this._colorType===je.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(n);let t=e-n.length;if(t>0)this._handleIDAT(t);else this._handleChunkEnd()};Je.prototype._handleIEND=function(e){this.read(e,this._parseIEND.bind(this))};Je.prototype._parseIEND=function(e){if(this._crc.write(e),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var Hs=Me((Nm)=>{var ca=Ms(),ym=[function(){},function(e,n,t,r){if(r===n.length)throw Error("Ran out of data");let i=n[r];e[t]=i,e[t+1]=i,e[t+2]=i,e[t+3]=255},function(e,n,t,r){if(r+1>=n.length)throw Error("Ran out of data");let i=n[r];e[t]=i,e[t+1]=i,e[t+2]=i,e[t+3]=n[r+1]},function(e,n,t,r){if(r+2>=n.length)throw Error("Ran out of data");e[t]=n[r],e[t+1]=n[r+1],e[t+2]=n[r+2],e[t+3]=255},function(e,n,t,r){if(r+3>=n.length)throw Error("Ran out of data");e[t]=n[r],e[t+1]=n[r+1],e[t+2]=n[r+2],e[t+3]=n[r+3]}],Sm=[function(){},function(e,n,t,r){let i=n[0];e[t]=i,e[t+1]=i,e[t+2]=i,e[t+3]=r},function(e,n,t){let r=n[0];e[t]=r,e[t+1]=r,e[t+2]=r,e[t+3]=n[1]},function(e,n,t,r){e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=r},function(e,n,t){e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3]}];function vm(e,n){let t=[],r=0;function i(){if(r===e.length)throw Error("Ran out of data");let o=e[r];r++;let s,u,c,a,h,f,l,d;switch(n){default:throw Error("unrecognised depth");case 16:l=e[r],r++,t.push((o<<8)+l);break;case 4:l=o&15,d=o>>4,t.push(d,l);break;case 2:h=o&3,f=o>>2&3,l=o>>4&3,d=o>>6&3,t.push(d,l,f,h);break;case 1:s=o&1,u=o>>1&1,c=o>>2&1,a=o>>3&1,h=o>>4&1,f=o>>5&1,l=o>>6&1,d=o>>7&1,t.push(d,l,f,h,a,c,u,s);break}}return{get:function(o){while(t.length<o)i();let s=t.slice(0,o);return t=t.slice(o),s},resetAfterLine:function(){t.length=0},end:function(){if(r!==e.length)throw Error("extra data found")}}}function Mm(e,n,t,r,i,o){let{width:s,height:u,index:c}=e;for(let a=0;a<u;a++)for(let h=0;h<s;h++){let f=t(h,a,c);ym[r](n,i,f,o),o+=r}return o}function Im(e,n,t,r,i,o){let{width:s,height:u,index:c}=e;for(let a=0;a<u;a++){for(let h=0;h<s;h++){let f=i.get(r),l=t(h,a,c);Sm[r](n,f,l,o)}i.resetAfterLine()}}Nm.dataToBitMap=function(e,n){let{width:t,height:r,depth:i,bpp:o,interlace:s}=n,u;if(i!==8)u=vm(e,i);let c;if(i<=8)c=Buffer.alloc(t*r*4);else c=new Uint16Array(t*r*4);let a=Math.pow(2,i)-1,h=0,f,l;if(s)f=ca.getImagePasses(t,r),l=ca.getInterlaceIterator(t,r);else{let d=0;l=function(){let g=d;return d+=4,g},f=[{width:t,height:r}]}for(let d=0;d<f.length;d++)if(i===8)h=Mm(f[d],c,l,o,e,h);else Im(f[d],c,l,o,u,a);if(i===8){if(h!==e.length)throw Error("extra data found")}else u.end();return c}});var Ls=Me((FE,aa)=>{function Rm(e,n,t,r,i){let o=0;for(let s=0;s<r;s++)for(let u=0;u<t;u++){let c=i[e[o]];if(!c)throw Error("index "+e[o]+" not in palette");for(let a=0;a<4;a++)n[o+a]=c[a];o+=4}}function Fm(e,n,t,r,i){let o=0;for(let s=0;s<r;s++)for(let u=0;u<t;u++){let c=!1;if(i.length===1){if(i[0]===e[o])c=!0}else if(i[0]===e[o]&&i[1]===e[o+1]&&i[2]===e[o+2])c=!0;if(c)for(let a=0;a<4;a++)n[o+a]=0;o+=4}}function Pm(e,n,t,r,i){let o=255,s=Math.pow(2,i)-1,u=0;for(let c=0;c<r;c++)for(let a=0;a<t;a++){for(let h=0;h<4;h++)n[u+h]=Math.floor(e[u+h]*o/s+0.5);u+=4}}aa.exports=function(e,n,t=!1){let{depth:r,width:i,height:o,colorType:s,transColor:u,palette:c}=n,a=e;if(s===3)Rm(e,a,i,o,c);else{if(u)Fm(e,a,i,o,u);if(r!==8&&!t){if(r===16)a=Buffer.alloc(i*o*4);Pm(e,a,i,o,r)}}return a}});var la=Me((PE,fa)=>{var Hm=Ke("util"),As=Ke("zlib"),ha=vs(),Lm=ia(),Am=Ps(),Tm=Hs(),Gm=Ls(),Sn=fa.exports=function(e){ha.call(this),this._parser=new Am(e,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=e,this.writable=!0,this._parser.start()};Hm.inherits(Sn,ha);Sn.prototype._handleError=function(e){if(this.emit("error",e),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy)this._inflate.destroy();if(this._filter)this._filter.destroy(),this._filter.on("error",function(){});this.errord=!0};Sn.prototype._inflateData=function(e){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=As.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let t=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(t,As.Z_MIN_CHUNK);this._inflate=As.createInflate({chunkSize:r});let i=t,o=this.emit.bind(this,"error");this._inflate.on("error",function(u){if(!i)return;o(u)}),this._filter.on("complete",this._complete.bind(this));let s=this._filter.write.bind(this._filter);this._inflate.on("data",function(u){if(!i)return;if(u.length>i)u=u.slice(0,i);i-=u.length,s(u)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(e)};Sn.prototype._handleMetaData=function(e){this._metaData=e,this._bitmapInfo=Object.create(e),this._filter=new Lm(this._bitmapInfo)};Sn.prototype._handleTransColor=function(e){this._bitmapInfo.transColor=e};Sn.prototype._handlePalette=function(e){this._bitmapInfo.palette=e};Sn.prototype._simpleTransparency=function(){this._metaData.alpha=!0};Sn.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};Sn.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};Sn.prototype._complete=function(e){if(this.errord)return;let n;try{let t=Tm.dataToBitMap(e,this._bitmapInfo);n=Gm(t,this._bitmapInfo,this._options.skipRescale),t=null}catch(t){this._handleError(t);return}this.emit("parsed",n)}});var ga=Me((HE,da)=>{var un=Zt();da.exports=function(e,n,t,r){let i=[un.COLORTYPE_COLOR_ALPHA,un.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let g=function(){let m=new ArrayBuffer(2);return new DataView(m).setInt16(0,256,!0),new Int16Array(m)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&g)return e}let o=r.bitDepth!==16?e:new Uint16Array(e.buffer),s=255,u=un.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(u===4&&!r.inputHasAlpha)u=3;let c=un.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)s=65535,c*=2;let a=Buffer.alloc(n*t*c),h=0,f=0,l=r.bgColor||{};if(l.red===void 0)l.red=s;if(l.green===void 0)l.green=s;if(l.blue===void 0)l.blue=s;function d(){let g,m,b,S=s;switch(r.inputColorType){case un.COLORTYPE_COLOR_ALPHA:S=o[h+3],g=o[h],m=o[h+1],b=o[h+2];break;case un.COLORTYPE_COLOR:g=o[h],m=o[h+1],b=o[h+2];break;case un.COLORTYPE_ALPHA:S=o[h+1],g=o[h],m=g,b=g;break;case un.COLORTYPE_GRAYSCALE:g=o[h],m=g,b=g;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)S/=s,g=Math.min(Math.max(Math.round((1-S)*l.red+S*g),0),s),m=Math.min(Math.max(Math.round((1-S)*l.green+S*m),0),s),b=Math.min(Math.max(Math.round((1-S)*l.blue+S*b),0),s)}return{red:g,green:m,blue:b,alpha:S}}for(let g=0;g<t;g++)for(let m=0;m<n;m++){let b=d(o,h);switch(r.colorType){case un.COLORTYPE_COLOR_ALPHA:case un.COLORTYPE_COLOR:if(r.bitDepth===8){if(a[f]=b.red,a[f+1]=b.green,a[f+2]=b.blue,i)a[f+3]=b.alpha}else if(a.writeUInt16BE(b.red,f),a.writeUInt16BE(b.green,f+2),a.writeUInt16BE(b.blue,f+4),i)a.writeUInt16BE(b.alpha,f+6);break;case un.COLORTYPE_ALPHA:case un.COLORTYPE_GRAYSCALE:{let S=(b.red+b.green+b.blue)/3;if(r.bitDepth===8){if(a[f]=S,i)a[f+1]=b.alpha}else if(a.writeUInt16BE(S,f),i)a.writeUInt16BE(b.alpha,f+2);break}default:throw Error("unrecognised color Type "+r.colorType)}h+=u,f+=c}return a}});var wa=Me((LE,pa)=>{var ma=Is();function Um(e,n,t,r,i){for(let o=0;o<t;o++)r[i+o]=e[n+o]}function jm(e,n,t){let r=0,i=n+t;for(let o=n;o<i;o++)r+=Math.abs(e[o]);return r}function Jm(e,n,t,r,i,o){for(let s=0;s<t;s++){let u=s>=o?e[n+s-o]:0,c=e[n+s]-u;r[i+s]=c}}function Cm(e,n,t,r){let i=0;for(let o=0;o<t;o++){let s=o>=r?e[n+o-r]:0,u=e[n+o]-s;i+=Math.abs(u)}return i}function Wm(e,n,t,r,i){for(let o=0;o<t;o++){let s=n>0?e[n+o-t]:0,u=e[n+o]-s;r[i+o]=u}}function Km(e,n,t){let r=0,i=n+t;for(let o=n;o<i;o++){let s=n>0?e[o-t]:0,u=e[o]-s;r+=Math.abs(u)}return r}function _m(e,n,t,r,i,o){for(let s=0;s<t;s++){let u=s>=o?e[n+s-o]:0,c=n>0?e[n+s-t]:0,a=e[n+s]-(u+c>>1);r[i+s]=a}}function qm(e,n,t,r){let i=0;for(let o=0;o<t;o++){let s=o>=r?e[n+o-r]:0,u=n>0?e[n+o-t]:0,c=e[n+o]-(s+u>>1);i+=Math.abs(c)}return i}function Qm(e,n,t,r,i,o){for(let s=0;s<t;s++){let u=s>=o?e[n+s-o]:0,c=n>0?e[n+s-t]:0,a=n>0&&s>=o?e[n+s-(t+o)]:0,h=e[n+s]-ma(u,c,a);r[i+s]=h}}function Zm(e,n,t,r){let i=0;for(let o=0;o<t;o++){let s=o>=r?e[n+o-r]:0,u=n>0?e[n+o-t]:0,c=n>0&&o>=r?e[n+o-(t+r)]:0,a=e[n+o]-ma(s,u,c);i+=Math.abs(a)}return i}var Ym={0:Um,1:Jm,2:Wm,3:_m,4:Qm},Xm={0:jm,1:Cm,2:Km,3:qm,4:Zm};pa.exports=function(e,n,t,r,i){let o;if(!("filterType"in r)||r.filterType===-1)o=[0,1,2,3,4];else if(typeof r.filterType==="number")o=[r.filterType];else throw Error("unrecognised filter types");if(r.bitDepth===16)i*=2;let s=n*i,u=0,c=0,a=Buffer.alloc((s+1)*t),h=o[0];for(let f=0;f<t;f++){if(o.length>1){let l=1/0;for(let d=0;d<o.length;d++){let g=Xm[o[d]](e,c,s,i);if(g<l)h=o[d],l=g}}a[u]=h,u++,Ym[h](e,c,s,a,u,i),u+=s,c+=s}return a}});var Ts=Me((AE,$a)=>{var qe=Zt(),Vm=Fs(),zm=ga(),Bm=wa(),Dm=Ke("zlib"),Bn=$a.exports=function(e){if(this._options=e,e.deflateChunkSize=e.deflateChunkSize||32768,e.deflateLevel=e.deflateLevel!=null?e.deflateLevel:9,e.deflateStrategy=e.deflateStrategy!=null?e.deflateStrategy:3,e.inputHasAlpha=e.inputHasAlpha!=null?e.inputHasAlpha:!0,e.deflateFactory=e.deflateFactory||Dm.createDeflate,e.bitDepth=e.bitDepth||8,e.colorType=typeof e.colorType==="number"?e.colorType:qe.COLORTYPE_COLOR_ALPHA,e.inputColorType=typeof e.inputColorType==="number"?e.inputColorType:qe.COLORTYPE_COLOR_ALPHA,[qe.COLORTYPE_GRAYSCALE,qe.COLORTYPE_COLOR,qe.COLORTYPE_COLOR_ALPHA,qe.COLORTYPE_ALPHA].indexOf(e.colorType)===-1)throw Error("option color type:"+e.colorType+" is not supported at present");if([qe.COLORTYPE_GRAYSCALE,qe.COLORTYPE_COLOR,qe.COLORTYPE_COLOR_ALPHA,qe.COLORTYPE_ALPHA].indexOf(e.inputColorType)===-1)throw Error("option input color type:"+e.inputColorType+" is not supported at present");if(e.bitDepth!==8&&e.bitDepth!==16)throw Error("option bit depth:"+e.bitDepth+" is not supported at present")};Bn.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Bn.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Bn.prototype.filterData=function(e,n,t){let r=zm(e,n,t,this._options),i=qe.COLORTYPE_TO_BPP_MAP[this._options.colorType];return Bm(r,n,t,this._options,i)};Bn.prototype._packChunk=function(e,n){let t=n?n.length:0,r=Buffer.alloc(t+12);if(r.writeUInt32BE(t,0),r.writeUInt32BE(e,4),n)n.copy(r,8);return r.writeInt32BE(Vm.crc32(r.slice(4,r.length-4)),r.length-4),r};Bn.prototype.packGAMA=function(e){let n=Buffer.alloc(4);return n.writeUInt32BE(Math.floor(e*qe.GAMMA_DIVISION),0),this._packChunk(qe.TYPE_gAMA,n)};Bn.prototype.packIHDR=function(e,n){let t=Buffer.alloc(13);return t.writeUInt32BE(e,0),t.writeUInt32BE(n,4),t[8]=this._options.bitDepth,t[9]=this._options.colorType,t[10]=0,t[11]=0,t[12]=0,this._packChunk(qe.TYPE_IHDR,t)};Bn.prototype.packIDAT=function(e){return this._packChunk(qe.TYPE_IDAT,e)};Bn.prototype.packIEND=function(){return this._packChunk(qe.TYPE_IEND,null)}});var ya=Me((TE,Ea)=>{var xm=Ke("util"),ba=Ke("stream"),ep=Zt(),np=Ts(),ka=Ea.exports=function(e){ba.call(this);let n=e||{};this._packer=new np(n),this._deflate=this._packer.createDeflate(),this.readable=!0};xm.inherits(ka,ba);ka.prototype.pack=function(e,n,t,r){if(this.emit("data",Buffer.from(ep.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(n,t)),r)this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(e,n,t);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(o){this.emit("data",this._packer.packIDAT(o))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(i)}});var Oa=Me((Pr,Na)=>{var Sa=Ke("assert").ok,Yt=Ke("zlib"),tp=Ke("util"),va=Ke("buffer").kMaxLength;function mt(e){if(!(this instanceof mt))return new mt(e);if(e&&e.chunkSize<Yt.Z_MIN_CHUNK)e.chunkSize=Yt.Z_MIN_CHUNK;if(Yt.Inflate.call(this,e),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,e&&e.maxLength!=null)this._maxLength=e.maxLength}function rp(e){return new mt(e)}function Ma(e,n){if(n)process.nextTick(n);if(!e._handle)return;e._handle.close(),e._handle=null}mt.prototype._processChunk=function(e,n,t){if(typeof t==="function")return Yt.Inflate._processChunk.call(this,e,n,t);let r=this,i=e&&e.length,o=this._chunkSize-this._offset,s=this._maxLength,u=0,c=[],a=0,h;this.on("error",function(g){h=g});function f(g,m){if(r._hadError)return;let b=o-m;if(Sa(b>=0,"have should not go down"),b>0){let S=r._buffer.slice(r._offset,r._offset+b);if(r._offset+=b,S.length>s)S=S.slice(0,s);if(c.push(S),a+=S.length,s-=S.length,s===0)return!1}if(m===0||r._offset>=r._chunkSize)o=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if(m===0)return u+=i-g,i=g,!0;return!1}Sa(this._handle,"zlib binding closed");let l;do l=this._handle.writeSync(n,e,u,i,this._buffer,this._offset,o),l=l||this._writeState;while(!this._hadError&&f(l[0],l[1]));if(this._hadError)throw h;if(a>=va)throw Ma(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+va.toString(16)+" bytes");let d=Buffer.concat(c,a);return Ma(this),d};tp.inherits(mt,Yt.Inflate);function ip(e,n){if(typeof n==="string")n=Buffer.from(n);if(!(n instanceof Buffer))throw TypeError("Not a string or buffer");let t=e._finishFlushFlag;if(t==null)t=Yt.Z_FINISH;return e._processChunk(n,t)}function Ia(e,n){return ip(new mt(n),e)}Na.exports=Pr=Ia;Pr.Inflate=mt;Pr.createInflate=rp;Pr.inflateSync=Ia});var Gs=Me((GE,Fa)=>{var Ra=Fa.exports=function(e){this._buffer=e,this._reads=[]};Ra.prototype.read=function(e,n){this._reads.push({length:Math.abs(e),allowLess:e<0,func:n})};Ra.prototype.process=function(){while(this._reads.length>0&&this._buffer.length){let e=this._reads[0];if(this._buffer.length&&(this._buffer.length>=e.length||e.allowLess)){this._reads.shift();let n=this._buffer;this._buffer=n.slice(e.length),e.func.call(this,n.slice(0,e.length))}else break}if(this._reads.length>0)throw Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)throw Error("unrecognised content at end of stream")}});var Pa=Me((up)=>{var op=Gs(),sp=Ns();up.process=function(e,n){let t=[],r=new op(e);return new sp(n,{read:r.read.bind(r),write:function(o){t.push(o)},complete:function(){}}).start(),r.process(),Buffer.concat(t)}});var Ta=Me((jE,Aa)=>{var Ha=!0,La=Ke("zlib"),ap=Oa();if(!La.deflateSync)Ha=!1;var hp=Gs(),fp=Pa(),lp=Ps(),dp=Hs(),gp=Ls();Aa.exports=function(e,n){if(!Ha)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let t;function r(y){t=y}let i;function o(y){i=y}function s(y){i.transColor=y}function u(y){i.palette=y}function c(){i.alpha=!0}let a;function h(y){a=y}let f=[];function l(y){f.push(y)}let d=new hp(e);if(new lp(n,{read:d.read.bind(d),error:r,metadata:o,gamma:h,palette:u,transColor:s,inflateData:l,simpleTransparency:c}).start(),d.process(),t)throw t;let m=Buffer.concat(f);f.length=0;let b;if(i.interlace)b=La.inflateSync(m);else{let p=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;b=ap(m,{chunkSize:p,maxLength:p})}if(m=null,!b||!b.length)throw Error("bad png - invalid inflate data response");let S=fp.process(b,i);m=null;let I=dp.dataToBitMap(S,i);S=null;let k=gp(I,i,n.skipRescale);return i.data=k,i.gamma=a||0,i}});var Ja=Me((JE,ja)=>{var Ga=!0,Ua=Ke("zlib");if(!Ua.deflateSync)Ga=!1;var mp=Zt(),pp=Ts();ja.exports=function(e,n){if(!Ga)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new pp(n||{}),i=[];if(i.push(Buffer.from(mp.PNG_SIGNATURE)),i.push(r.packIHDR(e.width,e.height)),e.gamma)i.push(r.packGAMA(e.gamma));let o=r.filterData(e.data,e.width,e.height),s=Ua.deflateSync(o,r.getDeflateOptions());if(o=null,!s||!s.length)throw Error("bad png - invalid compressed data response");return i.push(r.packIDAT(s)),i.push(r.packIEND()),Buffer.concat(i)}});var Ca=Me((bp)=>{var wp=Ta(),$p=Ja();bp.read=function(e,n){return wp(e,n||{})};bp.write=function(e,n){return $p(e,n)}});var Ka=Me((Ip)=>{var yp=Ke("util"),Wa=Ke("stream"),Sp=la(),vp=ya(),Mp=Ca(),Ze=Ip.PNG=function(e){if(Wa.call(this),e=e||{},this.width=e.width|0,this.height=e.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,e.fill&&this.data)this.data.fill(0);this.gamma=0,this.readable=this.writable=!0,this._parser=new Sp(e),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(n){this.data=n,this.emit("parsed",n)}.bind(this)),this._packer=new vp(e),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};yp.inherits(Ze,Wa);Ze.sync=Mp;Ze.prototype.pack=function(){if(!this.data||!this.data.length)return this.emit("error","No data provided"),this;return process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this};Ze.prototype.parse=function(e,n){if(n){let t,r;t=function(i){this.removeListener("error",r),this.data=i,n(null,this)}.bind(this),r=function(i){this.removeListener("parsed",t),n(i,null)}.bind(this),this.once("parsed",t),this.once("error",r)}return this.end(e),this};Ze.prototype.write=function(e){return this._parser.write(e),!0};Ze.prototype.end=function(e){this._parser.end(e)};Ze.prototype._metadata=function(e){this.width=e.width,this.height=e.height,this.emit("metadata",e)};Ze.prototype._gamma=function(e){this.gamma=e};Ze.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};Ze.bitblt=function(e,n,t,r,i,o,s,u){if(t|=0,r|=0,i|=0,o|=0,s|=0,u|=0,t>e.width||r>e.height||t+i>e.width||r+o>e.height)throw Error("bitblt reading outside image");if(s>n.width||u>n.height||s+i>n.width||u+o>n.height)throw Error("bitblt writing outside image");for(let c=0;c<o;c++)e.data.copy(n.data,(u+c)*n.width+s<<2,(r+c)*e.width+t<<2,(r+c)*e.width+t+i<<2)};Ze.prototype.bitblt=function(e,n,t,r,i,o,s){return Ze.bitblt(this,e,n,t,r,i,o,s),this};Ze.adjustGamma=function(e){if(e.gamma){for(let n=0;n<e.height;n++)for(let t=0;t<e.width;t++){let r=e.width*n+t<<2;for(let i=0;i<3;i++){let o=e.data[r+i]/255;o=Math.pow(o,0.45454545454545453/e.gamma),e.data[r+i]=Math.round(o*255)}}e.gamma=0}};Ze.prototype.adjustGamma=function(){Ze.adjustGamma(this)}});var lu=Me((wS,Jf)=>{var fu={to(e,n){if(!n)return`\x1B[${e+1}G`;return`\x1B[${n+1};${e+1}H`},move(e,n){let t="";if(e<0)t+=`\x1B[${-e}D`;else if(e>0)t+=`\x1B[${e}C`;if(n<0)t+=`\x1B[${-n}A`;else if(n>0)t+=`\x1B[${n}B`;return t},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},b0={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},k0={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let n="";for(let t=0;t<e;t++)n+=this.line+(t<e-1?fu.up():"");if(e)n+=fu.left;return n}};Jf.exports={cursor:fu,scroll:b0,erase:k0,beep:"\x07"}});import{spawnSync as T1}from"node:child_process";import{isMainThread as G1}from"node:worker_threads";import{parseArgs as F1}from"node:util";var _e={name:"@kecan0406/ttheme",version:"1.0.46",type:"module",bin:{ttheme:"bin/ttheme.js"},files:["bin","dist/manifest.json","shell","!shell/check.zsh"],description:"Character terminal palettes for Ghostty, kitty, Alacritty, WezTerm, iTerm2, Windows Terminal and Warp",license:"MIT",author:"kecan0406",repository:{type:"git",url:"git+https://github.com/kecan0406/ttheme.git"},homepage:"https://github.com/kecan0406/ttheme#readme",bugs:"https://github.com/kecan0406/ttheme/issues",keywords:["terminal","theme","ghostty","kitty","alacritty","wezterm","iterm2"],devDependencies:{"@biomejs/biome":"^2.3.0","@clack/core":"^1.4.3","@clack/prompts":"^1.7.0","@material/material-color-utilities":"^0.4.0","@types/bun":"^1.3.0","@types/pngjs":"6.0.5","jpeg-js":"^0.4.4",pngjs:"7.0.0","smol-toml":"^1.9.0",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=20.11"}};import{rmSync as Sf}from"node:fs";import{basename as r0,join as fi}from"node:path";var em=/^#[0-9a-f]{6}$/;function Wt(e){return em.test(e)}function We(e){let n=Number.parseInt(e.slice(1),16);return[n>>16&255,n>>8&255,n&255]}function Qe(e){let[n,t,r]=We(e).map((i)=>{let o=i/255;return o<=0.03928?o/12.92:((o+0.055)/1.055)**2.4});return 0.2126*n+0.7152*t+0.0722*r}function Be(e,n){let t=Qe(e),r=Qe(n);return(Math.max(t,r)+0.05)/(Math.min(t,r)+0.05)}function Wi(e,n){return Math.round(Be(e,n)*100)/100}function nm(e){let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4}function dn(e){let[n,t,r]=We(e).map(nm),i=Math.cbrt(0.4122214708*n+0.5363325363*t+0.0514459929*r),o=Math.cbrt(0.2119034982*n+0.6806995451*t+0.1073969566*r),s=Math.cbrt(0.0883024619*n+0.2817188376*t+0.6299787005*r),u=1.9779984951*i-2.428592205*o+0.4505937099*s,c=0.0259040371*i+0.7827717662*o-0.808675766*s;return{l:0.2104542553*i+0.793617785*o-0.0040720468*s,c:Math.hypot(u,c),h:(Math.atan2(c,u)*180/Math.PI+360)%360}}var Yn=7,Pc=3,gs=0.15,Hc=1.6,ps=[1,2,3,4,5,6,9,10,11,12,13,14],Lc=[7,15],Kt=[1,2,3,4,5,6],Or={1:{name:"red",center:19,width:25},2:{name:"green",center:132,width:35},3:{name:"yellow",center:88,width:35},4:{name:"blue",center:250,width:60},5:{name:"magenta",center:329,width:40},6:{name:"cyan",center:197,width:60}},ws=0.03,dt=25,Qi=15,Zi=0.08;function Tn(e,n){let t=e.ansi[n];if(t===void 0)throw Error(`${e.name}: missing ANSI ${n}`);return t}function ms(e,n,t){let r=e.background;return n.flatMap((i)=>{let o=Tn(e,i);return Be(o,r)<t?[`ANSI ${i} ${o} on ${r} is ${Wi(o,r)}:1, needs ${t}:1`]:[]})}function Ac(e,n){return Math.min(...n.map((t)=>Be(Tn(e,t),e.background)))}var Tc=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:Yn,measure:({foreground:e,background:n})=>Be(e,n),check:({foreground:e,background:n})=>Be(e,n)<Yn?[`foreground ${e} on ${n} is ${Wi(e,n)}:1, needs ${Yn}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:Pc,measure:(e)=>Ac(e,ps),check:(e)=>ms(e,ps,Pc)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:gs,measure:(e)=>Qe(Tn(e,0)),check:(e)=>{let n=Tn(e,0);return Qe(n)>gs?[`ANSI 0 ${n} has luminance ${Qe(n).toFixed(3)}, needs <= ${gs}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:Yn,measure:(e)=>Ac(e,Lc),check:(e)=>ms(e,Lc,Yn)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:Hc,measure:(e)=>Be(Tn(e,8),e.background),check:(e)=>ms(e,[8],Hc)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:Yn,measure:({foreground:e,selectionBackground:n})=>n===void 0?Number.NaN:Be(e,n),check:({foreground:e,selectionBackground:n})=>n!==void 0&&Be(e,n)<Yn?[`foreground ${e} on selection ${n} is ${Wi(e,n)}:1, needs ${Yn}:1`]:[]}];function Xn(e,n){let t=Math.abs(e-n)%360;return Math.min(t,360-t)}var _t=(e)=>e>8?e-8:e;function Yi(e){let n=e.signatureSlots.filter((t)=>t.startsWith("ansi")).map((t)=>Number(t.slice(4)));return new Set(n.flatMap((t)=>Kt.includes(_t(t))?[t,t>8?t-8:t+8]:[t]))}function Nr(e,n){let t=dn(Tn(e,n));return t.c<ws?void 0:t}function Ki(e){let n=Yi(e);return ps.flatMap((t)=>{let r=Nr(e,t),i=Or[_t(t)];if(r===void 0||i===void 0||n.has(t))return[];let o=Xn(r.h,i.center)-i.width;return o>0?[{slot:t,hue:r.h,over:o}]:[]})}function _i(e){let n=new Set(e.signatureSlots);return Kt.flatMap((t)=>{let r=Nr(e,t),i=Nr(e,t+8);if(r===void 0||i===void 0||n.has(`ansi${t}`)&&n.has(`ansi${t+8}`))return[];return[{normal:t,gap:Xn(r.h,i.h)}]})}function qi(e){let n=Yi(e);return[0,8].flatMap((t)=>Kt.flatMap((r)=>Kt.filter((i)=>i>r).flatMap((i)=>{let[o,s]=[t+r,t+i],u=Nr(e,o),c=Nr(e,s);if(u===void 0||c===void 0||n.has(o)&&n.has(s))return[];return Xn(u.h,c.h)<Qi&&Math.abs(u.l-c.l)<Zi?[[o,s]]:[]})))}var tm=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(e)=>Math.max(0,...Ki(e).map((n)=>n.over)),check:(e)=>Ki(e).map(({slot:n,hue:t,over:r})=>{let i=Or[_t(n)];return`ANSI ${n} ${Tn(e,n)} has hue ${t.toFixed(0)}°, ${r.toFixed(0)}° outside ${i.name} (${i.center}±${i.width}°)`})},{rule:"bright-follows",label:"widest normal to bright hue gap",unit:"degrees",max:dt,measure:(e)=>Math.max(0,..._i(e).map((n)=>n.gap)),check:(e)=>_i(e).filter((n)=>n.gap>dt).map(({normal:n,gap:t})=>`ANSI ${n+8} is ${t.toFixed(0)}° from ANSI ${n}, needs <= ${dt}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(e)=>qi(e).length,check:(e)=>qi(e).map(([n,t])=>`ANSI ${n} ${Tn(e,n)} and ANSI ${t} ${Tn(e,t)} are within ${Qi}° hue and ${Zi} lightness`)}],Xi=[...Tc,...tm],$s=Xi.map((e)=>e.rule),gt=Xi.map(({rule:e,label:n,unit:t,min:r,max:i})=>({rule:e,label:n,unit:t,...r===void 0?{}:{min:r},...i===void 0?{}:{max:i}}));function qt(e){return Xi.map((n)=>Math.round(n.measure(e)*1000)/1000)}function Gc(e,n){return e.filter((t)=>!n.waive.includes(t.rule)).flatMap((t)=>t.check(n).map((r)=>({theme:n.name,rule:t.rule,detail:r})))}function Vi(e){return Gc(Xi,e)}function Uc(e){return Gc(Tc,e)}function jc(e){return e.flatMap(Vi)}import{readdirSync as ow,readFileSync as bh}from"node:fs";import{basename as sw,join as kh}from"node:path";/*!
3
3
  * Copyright (c) Squirrel Chat et al., All rights reserved.
4
4
  * SPDX-License-Identifier: BSD-3-Clause
5
5
  *
@@ -25,9 +25,9 @@ import{createRequire as Cd}from"node:module";var Ld=Object.create;var{getPrototy
25
25
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
26
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
27
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
- */function qd(e,n){let t=e.slice(0,n).split(/\r?\n/);return[t.length,t.pop().length+1]}function Yd(e,n,t){let r=e.split(/\r?\n/),i="",o=(Math.log10(n+1)|0)+1;for(let s=n-1;s<=n+1;s++){let u=r[s-1];if(!u)continue;if(i+=s.toString().padEnd(o," "),i+=": ",i+=u,i+=`
28
+ */function rm(e,n){let t=e.slice(0,n).split(/\r?\n/);return[t.length,t.pop().length+1]}function im(e,n,t){let r=e.split(/\r?\n/),i="",o=(Math.log10(n+1)|0)+1;for(let s=n-1;s<=n+1;s++){let u=r[s-1];if(!u)continue;if(i+=s.toString().padEnd(o," "),i+=": ",i+=u,i+=`
29
29
  `,s===n)i+=" ".repeat(o+t+2),i+=`^
30
- `}return i}class J extends Error{line;column;codeblock;constructor(e,n){let[t,r]=qd(n.toml,n.ptr),i=Yd(n.toml,t,r);super(`Invalid TOML document: ${e}
30
+ `}return i}class J extends Error{line;column;codeblock;constructor(e,n){let[t,r]=rm(n.toml,n.ptr),i=im(n.toml,t,r);super(`Invalid TOML document: ${e}
31
31
 
32
32
  ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(e,{toml:n.s,ptr:t??n.p})}}/*!
33
33
  * Copyright (c) Squirrel Chat et al., All rights reserved.
@@ -55,7 +55,7 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
55
55
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
56
56
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
57
57
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
58
- */function Di(e){let n=e.p,t=e.s.charCodeAt(e.p++),r=t,i=t===39,o=t===e.s.charCodeAt(e.p)&&t===e.s.charCodeAt(e.p+1);if(o){if((t=e.s.charCodeAt(e.p+=2))===10)e.p++;else if(t===13&&e.s.charCodeAt(e.p+1)===10)e.p+=2}let s="",u=e.p,c=0;for(;e.p<e.s.length;e.p++)if(t=e.s.charCodeAt(e.p),o&&(t===10||t===13&&e.s.charCodeAt(e.p+1)===10))c=c&&3;else if(t<32&&t!==9||t===127)J.x("control characters are not allowed in strings",e);else if((!c||c===3)&&t===r&&(!o||e.s.charCodeAt(e.p+1)===r&&e.s.charCodeAt(e.p+2)===r)){if(o){if(e.s.charCodeAt(e.p+3)===r)e.p++;if(e.s.charCodeAt(e.p+3)===r)e.p++}if(!c){let a=e.s.slice(u,e.p);s=s?s+a:a}return e.p+=o?3:1,s}else if(!c){if(!i&&t===92)s+=e.s.slice(u,u=e.p),c=1}else if(c===1)if(t===120||t===117||t===85){let a=e.p++-1,h=0,f=t===120?2:t===117?4:8;for(let l=0;l<f;l++,e.p++){let g=e.s.charCodeAt(e.p),m=g>=48&&g<=57?g-48:g>=65&&g<=70?g-65+10:g>=97&&g<=102?g-97+10:-1;if(m<0)J.x("invalid non-hex character in unicode escape",e);h=h<<4|m}if(h<0||h>1114111||h>=55296&&h<=57343)J.x("invalid unicode escape",e,a);s+=String.fromCodePoint(h),u=e.p--,c=0}else if(o&&(t===32||t===9))c=2;else{if(t===98)s+="\b";else if(t===116)s+="\t";else if(t===110)s+=`
58
+ */function zi(e){let n=e.p,t=e.s.charCodeAt(e.p++),r=t,i=t===39,o=t===e.s.charCodeAt(e.p)&&t===e.s.charCodeAt(e.p+1);if(o){if((t=e.s.charCodeAt(e.p+=2))===10)e.p++;else if(t===13&&e.s.charCodeAt(e.p+1)===10)e.p+=2}let s="",u=e.p,c=0;for(;e.p<e.s.length;e.p++)if(t=e.s.charCodeAt(e.p),o&&(t===10||t===13&&e.s.charCodeAt(e.p+1)===10))c=c&&3;else if(t<32&&t!==9||t===127)J.x("control characters are not allowed in strings",e);else if((!c||c===3)&&t===r&&(!o||e.s.charCodeAt(e.p+1)===r&&e.s.charCodeAt(e.p+2)===r)){if(o){if(e.s.charCodeAt(e.p+3)===r)e.p++;if(e.s.charCodeAt(e.p+3)===r)e.p++}if(!c){let a=e.s.slice(u,e.p);s=s?s+a:a}return e.p+=o?3:1,s}else if(!c){if(!i&&t===92)s+=e.s.slice(u,u=e.p),c=1}else if(c===1)if(t===120||t===117||t===85){let a=e.p++-1,h=0,f=t===120?2:t===117?4:8;for(let l=0;l<f;l++,e.p++){let d=e.s.charCodeAt(e.p),g=d>=48&&d<=57?d-48:d>=65&&d<=70?d-65+10:d>=97&&d<=102?d-97+10:-1;if(g<0)J.x("invalid non-hex character in unicode escape",e);h=h<<4|g}if(h<0||h>1114111||h>=55296&&h<=57343)J.x("invalid unicode escape",e,a);s+=String.fromCodePoint(h),u=e.p--,c=0}else if(o&&(t===32||t===9))c=2;else{if(t===98)s+="\b";else if(t===116)s+="\t";else if(t===110)s+=`
59
59
  `;else if(t===102)s+="\f";else if(t===114)s+="\r";else if(t===101)s+="\x1B";else if(t===34)s+='"';else if(t===92)s+="\\";else J.x("unrecognised escape sequence",e);u=e.p+1,c=0}else if(t!==32&&t!==9){if(c===2)J.x("invalid escape: only line-ending whitespace may be escaped",e,u);c=!i&&t===92?1:0,u=e.p}J.x("unfinished string",e,n)}/*!
60
60
  * Copyright (c) Squirrel Chat et al., All rights reserved.
61
61
  * SPDX-License-Identifier: BSD-3-Clause
@@ -82,7 +82,7 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
82
82
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
83
83
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
84
84
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
85
- */var Zd=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;class Vn extends Date{#n=!1;#t=!1;#e=null;constructor(e,n,t){let r=!0,i=!0,o="Z",s;if(typeof e==="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}if(n===2)o=null,e+="Z";else if((s=e.charCodeAt(e.length-1))!==90&&s!==122)o=e.slice(e.length-6);if(t)e=e.slice(0,10)+"T"+e.slice(11)}else if(n===4)e=+e.slice(0,2)>23?"":`0000-01-01T${e}Z`;r=n!==4,i=n!==3}else{let u=e.match(Zd);if(u){if(!u[1])r=!1,e=`0000-01-01T${e}`;if(i=!!u[2],i&&e[10]===" "&&(e=e.replace(" ","T")),u[2]&&+u[2]>23)e="";else if(o=u[3]||null,!o&&i)e+="Z"}else e=""}super(e);if(!isNaN(this.getTime()))this.#n=r,this.#t=i,this.#e=o}isDateTime(){return this.#n&&this.#t}isLocal(){return!this.#n||!this.#t||!this.#e}isDate(){return this.#n&&!this.#t}isTime(){return this.#t&&!this.#n}isValid(){return this.#n||this.#t}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z"||this.#e==="z")return e;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*60000).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,n="Z"){let t=new Vn(e);return t.#e=n,t}static wrapAsLocalDateTime(e){let n=new Vn(e);return n.#e=null,n}static wrapAsLocalDate(e){let n=new Vn(e);return n.#t=!1,n.#e=null,n}static wrapAsLocalTime(e){let n=new Vn(e);return n.#n=!1,n.#e=null,n}}/*!
85
+ */var om=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;class Vn extends Date{#n=!1;#t=!1;#e=null;constructor(e,n,t){let r=!0,i=!0,o="Z",s;if(typeof e==="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}if(n===2)o=null,e+="Z";else if((s=e.charCodeAt(e.length-1))!==90&&s!==122)o=e.slice(e.length-6);if(t)e=e.slice(0,10)+"T"+e.slice(11)}else if(n===4)e=+e.slice(0,2)>23?"":`0000-01-01T${e}Z`;r=n!==4,i=n!==3}else{let u=e.match(om);if(u){if(!u[1])r=!1,e=`0000-01-01T${e}`;if(i=!!u[2],i&&e[10]===" "&&(e=e.replace(" ","T")),u[2]&&+u[2]>23)e="";else if(o=u[3]||null,!o&&i)e+="Z"}else e=""}super(e);if(!isNaN(this.getTime()))this.#n=r,this.#t=i,this.#e=o}isDateTime(){return this.#n&&this.#t}isLocal(){return!this.#n||!this.#t||!this.#e}isDate(){return this.#n&&!this.#t}isTime(){return this.#t&&!this.#n}isValid(){return this.#n||this.#t}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z"||this.#e==="z")return e;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*60000).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,n="Z"){let t=new Vn(e);return t.#e=n,t}static wrapAsLocalDateTime(e){let n=new Vn(e);return n.#e=null,n}static wrapAsLocalDate(e){let n=new Vn(e);return n.#t=!1,n.#e=null,n}static wrapAsLocalTime(e){let n=new Vn(e);return n.#n=!1,n.#e=null,n}}/*!
86
86
  * Copyright (c) Squirrel Chat et al., All rights reserved.
87
87
  * SPDX-License-Identifier: BSD-3-Clause
88
88
  *
@@ -108,7 +108,7 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
108
108
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
109
109
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
110
110
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
111
- */function De(e,n=10){return n===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+n}function ks(e,n){return e===32||e===9||e===10||e===13||n&&(e===n||e===44)||e===35}function Hr(e,n){let t=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||J.x("document contains excessively nested structures. aborting.",e);let i=r===91?Ac(e):Lc(e);return e.d++,i}if(r===34||r===39)return Di(e);if(r===116){if(e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)J.x("invalid value",e,t);return e.p++,!0}if(r===102){if(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)J.x("invalid value",e,t);return e.p++,!1}if(r===43||r===45)return xi(e,e.p,e.s.charCodeAt(++e.p),44-r,n);if(e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45)return Xd(e,r,n);if(e.s.charCodeAt(e.p+2)===58)return Vd(e,r,n);return xi(e,e.p,r,0,n)}function xi(e,n,t,r,i){let o=t,s=0,u=!1;if(o===105){if(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)J.x("invalid value",e,n);return e.p++,(r||1)/0}if(o===110){if(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)J.x("invalid value",e,n);return e.p++,NaN}if(o===48){if(++e.p>=e.s.length||ks(o=e.s.charCodeAt(e.p),i))return e.bi===!0?0n:0;if(!r){if(o===120)return bs(e,n,16,i);else if(o===98)return bs(e,n,2,i);else if(o===111)return bs(e,n,8,i)}if(o===46)s=2;else if(o===101||o===69)s=4;else J.x("illegal leading zero",e,n)}else if(!De(o))J.x("invalid value",e,n);while(++e.p<e.s.length&&(o=e.s.charCodeAt(e.p),!ks(o,i))){if(!s)s=1;if(o===95){if(!(s&1))J.x("illegal underscore",e);s+=11,u=!0}else if(s===1&&o===46)s=2;else if((s===1||s===3)&&(o===101||o===69))s=4;else if(s===4&&(o===43||o===45));else if(!De(o))J.x("illegal character in numeric literal",e);else if(s>9)s-=11;else if(!(s&1))s++}if(!s){let a=(t-48)*(r||1);return e.bi===!0?BigInt(a):a}if(!(s&1))J.x("unfinished numeric value",e,n);let c=e.s.slice(n,e.p);if(u)c=c.replaceAll("_","");return s>1?parseFloat(c):Hc(e,c,10,n)}function bs(e,n,t,r){let i,o=1;while(++e.p<e.s.length&&(i=e.s.charCodeAt(e.p),!ks(i,r)))if(i===95){if(o&1)J.x("illegal underscore",e);o=3}else if(!De(i,t))J.x("illegal character in numeric literal",e);else if(o&1)o--;if(o&1)J.x("unfinished numeric value",e);let s=e.s.slice(n+2,e.p);if(o)s=s.replaceAll("_","");return Hc(e,s,t,n)}function Hc(e,n,t,r){if(e.bi!==!0)e:{let i=parseInt(n,t);if(!Number.isSafeInteger(i)){if(e.bi)break e;J.x("integer value cannot be represented losslessly",e,r)}return i}return t===10?BigInt(n):BigInt((t===2?"0b":t===8?"0o":"0x")+n)}function Xd(e,n,t){let r=e.p++,i;if(!De(n)||!De(e.s.charCodeAt(e.p++))||!De(e.s.charCodeAt(e.p++))||!De(e.s.charCodeAt(e.p++)))return xi(e,e.p=r,n,0,t);if(e.p+=5,!De(e.s.charCodeAt(e.p++)))J.x("invalid date-time: date part is malformed",e,r);if(e.p>=e.s.length||((n=e.s.charCodeAt(e.p))!==32||(i=!0,!De(e.s.charCodeAt(e.p+1))))&&n!==84&&n!==116){let s=e.s.slice(r,e.p);return Pr(e,s,3,!1,r)}if(e.s.charCodeAt(e.p+=3)!==58)J.x("invalid date-time: time part is malformed",e,r);if(e.s.charCodeAt(e.p+=3)===58)e.p+=3;if(e.s.charCodeAt(e.p)===46)while(De(e.s.charCodeAt(++e.p)));if(n=e.s.charCodeAt(e.p)){if(n===90||n===122){let s=e.s.slice(r,++e.p);return Pr(e,s,1,i,r,"[+00:00]")}if(n===43||n===45){let s=e.s.slice(r,e.p+=6);return Pr(e,s,1,i,r,!e.ld&&"["+e.s.slice(e.p-6,e.p)+"]")}}let o=e.s.slice(r,e.p);return Pr(e,o,2,i,r)}function Vd(e,n,t){let r=e.p;if(!De(n)||!De(e.s.charCodeAt(++e.p)))return xi(e,--e.p,n,0,t);if(e.s.charCodeAt(e.p+=4)===58)e.p+=3;if(e.s.charCodeAt(e.p)===46)while(De(e.s.charCodeAt(++e.p)));let i=e.s.slice(r,e.p);return Pr(e,i,4,!1,r)}function Pr(e,n,t,r,i,o){if(e.ld){let s=new Vn(n,t,r);if(!s.isValid())J.x("invalid date",e,i);return s}try{if(o)n+=o;switch(t){case 1:return Temporal.ZonedDateTime.from(n);case 2:return Temporal.PlainDateTime.from(n);case 3:return Temporal.PlainDate.from(n);case 4:return Temporal.PlainTime.from(n)}}catch(s){J.x(s instanceof Error?s.message:""+s,e,i)}}/*!
111
+ */function De(e,n=10){return n===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+n}function ks(e,n){return e===32||e===9||e===10||e===13||n&&(e===n||e===44)||e===35}function Fr(e,n){let t=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||J.x("document contains excessively nested structures. aborting.",e);let i=r===91?Wc(e):Cc(e);return e.d++,i}if(r===34||r===39)return zi(e);if(r===116){if(e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)J.x("invalid value",e,t);return e.p++,!0}if(r===102){if(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)J.x("invalid value",e,t);return e.p++,!1}if(r===43||r===45)return Bi(e,e.p,e.s.charCodeAt(++e.p),44-r,n);if(e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45)return sm(e,r,n);if(e.s.charCodeAt(e.p+2)===58)return um(e,r,n);return Bi(e,e.p,r,0,n)}function Bi(e,n,t,r,i){let o=t,s=0,u=!1;if(o===105){if(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)J.x("invalid value",e,n);return e.p++,(r||1)/0}if(o===110){if(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)J.x("invalid value",e,n);return e.p++,NaN}if(o===48){if(++e.p>=e.s.length||ks(o=e.s.charCodeAt(e.p),i))return e.bi===!0?0n:0;if(!r){if(o===120)return bs(e,n,16,i);else if(o===98)return bs(e,n,2,i);else if(o===111)return bs(e,n,8,i)}if(o===46)s=2;else if(o===101||o===69)s=4;else J.x("illegal leading zero",e,n)}else if(!De(o))J.x("invalid value",e,n);while(++e.p<e.s.length&&(o=e.s.charCodeAt(e.p),!ks(o,i))){if(!s)s=1;if(o===95){if(!(s&1))J.x("illegal underscore",e);s+=11,u=!0}else if(s===1&&o===46)s=2;else if((s===1||s===3)&&(o===101||o===69))s=4;else if(s===4&&(o===43||o===45));else if(!De(o))J.x("illegal character in numeric literal",e);else if(s>9)s-=11;else if(!(s&1))s++}if(!s){let a=(t-48)*(r||1);return e.bi===!0?BigInt(a):a}if(!(s&1))J.x("unfinished numeric value",e,n);let c=e.s.slice(n,e.p);if(u)c=c.replaceAll("_","");return s>1?parseFloat(c):Jc(e,c,10,n)}function bs(e,n,t,r){let i,o=1;while(++e.p<e.s.length&&(i=e.s.charCodeAt(e.p),!ks(i,r)))if(i===95){if(o&1)J.x("illegal underscore",e);o=3}else if(!De(i,t))J.x("illegal character in numeric literal",e);else if(o&1)o--;if(o&1)J.x("unfinished numeric value",e);let s=e.s.slice(n+2,e.p);if(o)s=s.replaceAll("_","");return Jc(e,s,t,n)}function Jc(e,n,t,r){if(e.bi!==!0)e:{let i=parseInt(n,t);if(!Number.isSafeInteger(i)){if(e.bi)break e;J.x("integer value cannot be represented losslessly",e,r)}return i}return t===10?BigInt(n):BigInt((t===2?"0b":t===8?"0o":"0x")+n)}function sm(e,n,t){let r=e.p++,i;if(!De(n)||!De(e.s.charCodeAt(e.p++))||!De(e.s.charCodeAt(e.p++))||!De(e.s.charCodeAt(e.p++)))return Bi(e,e.p=r,n,0,t);if(e.p+=5,!De(e.s.charCodeAt(e.p++)))J.x("invalid date-time: date part is malformed",e,r);if(e.p>=e.s.length||((n=e.s.charCodeAt(e.p))!==32||(i=!0,!De(e.s.charCodeAt(e.p+1))))&&n!==84&&n!==116){let s=e.s.slice(r,e.p);return Rr(e,s,3,!1,r)}if(e.s.charCodeAt(e.p+=3)!==58)J.x("invalid date-time: time part is malformed",e,r);if(e.s.charCodeAt(e.p+=3)===58)e.p+=3;if(e.s.charCodeAt(e.p)===46)while(De(e.s.charCodeAt(++e.p)));if(n=e.s.charCodeAt(e.p)){if(n===90||n===122){let s=e.s.slice(r,++e.p);return Rr(e,s,1,i,r,"[+00:00]")}if(n===43||n===45){let s=e.s.slice(r,e.p+=6);return Rr(e,s,1,i,r,!e.ld&&"["+e.s.slice(e.p-6,e.p)+"]")}}let o=e.s.slice(r,e.p);return Rr(e,o,2,i,r)}function um(e,n,t){let r=e.p;if(!De(n)||!De(e.s.charCodeAt(++e.p)))return Bi(e,--e.p,n,0,t);if(e.s.charCodeAt(e.p+=4)===58)e.p+=3;if(e.s.charCodeAt(e.p)===46)while(De(e.s.charCodeAt(++e.p)));let i=e.s.slice(r,e.p);return Rr(e,i,4,!1,r)}function Rr(e,n,t,r,i,o){if(e.ld){let s=new Vn(n,t,r);if(!s.isValid())J.x("invalid date",e,i);return s}try{if(o)n+=o;switch(t){case 1:return Temporal.ZonedDateTime.from(n);case 2:return Temporal.PlainDateTime.from(n);case 3:return Temporal.PlainDate.from(n);case 4:return Temporal.PlainTime.from(n)}}catch(s){J.x(s instanceof Error?s.message:""+s,e,i)}}/*!
112
112
  * Copyright (c) Squirrel Chat et al., All rights reserved.
113
113
  * SPDX-License-Identifier: BSD-3-Clause
114
114
  *
@@ -134,7 +134,7 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
134
134
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
135
135
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
136
136
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
137
- */function zd(e){for(;e.p<e.s.length;e.p++){let n=e.s.charCodeAt(e.p);if(n===10)break;if(n===13&&e.s.charCodeAt(e.p+1)===10){e.p++;break}if(n<32&&n!==9||n===127)J.x("control characters are not allowed in comments",e)}}function dn(e,n,t){let r;while(e.p<e.s.length){while(e.p<e.s.length&&((r=e.s.charCodeAt(e.p))===32||r===9||!n&&(r===10||r===13&&e.s.charCodeAt(e.p+1)===10)))e.p++;if(t||r!==35)break;zd(e)}}/*!
137
+ */function cm(e){for(;e.p<e.s.length;e.p++){let n=e.s.charCodeAt(e.p);if(n===10)break;if(n===13&&e.s.charCodeAt(e.p+1)===10){e.p++;break}if(n<32&&n!==9||n===127)J.x("control characters are not allowed in comments",e)}}function gn(e,n,t){let r;while(e.p<e.s.length){while(e.p<e.s.length&&((r=e.s.charCodeAt(e.p))===32||r===9||!n&&(r===10||r===13&&e.s.charCodeAt(e.p+1)===10)))e.p++;if(t||r!==35)break;cm(e)}}/*!
138
138
  * Copyright (c) Squirrel Chat et al., All rights reserved.
139
139
  * SPDX-License-Identifier: BSD-3-Clause
140
140
  *
@@ -160,7 +160,7 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
160
160
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
161
161
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
162
162
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
163
- */function eo(e,n=61){let t,r=0,i=[],o,s=e.s.charCodeAt(t=e.p);do if(s===n){if(!r)J.x("unexpected end of key",e);if(r===1)i.push(e.s.slice(o,e.p));return e.p++,i}else if(s===46){if(!r)J.x("illegal empty bare key",e);if(r===1)i.push(e.s.slice(o,e.p));r=0}else if(!r&&(s===34||s===39)){if(s===e.s.charCodeAt(e.p+1)&&s===e.s.charCodeAt(e.p+2))J.x("illegal quoted key: multiline strings are not allowed",e);i.push(Di(e)),r=2,e.p--}else if(s===32||s===9){if(r===1)i.push(e.s.slice(o,e.p)),r=2}else if(r===2||s<48&&s!==45||s>57&&s<65||s>90&&s<97&&s!==95||s>122)J.x("illegal character in key",e);else if(!r)r=1,o=e.p;while(s=e.s.charCodeAt(++e.p));J.x("incomplete key-value: cannot find end of key",e,t)}function Lc(e){let n=e.p++,t=Object.create(null),r=new Set,i;while(e.p<e.s.length){if(dn(e),(i=e.s.charCodeAt(e.p))===125)return e.p++,t;let o,s=t,u=!1,c=e.p,a=eo(e);for(let f=0;f<a.length;f++){if(f)s=u?s[o]:s[o]=Object.create(null);if(o=a[f],(u=Object.hasOwn(s,o))&&(typeof s[o]!=="object"||r.has(s[o])))J.x("trying to redefine an already defined value",e,c);let l=o==="__proto__";if(e.uk&&(l||o==="constructor")){s=e.uk!==1&&J.x("document contains an unsafe property",e,c);break}if(!u&&l)Object.defineProperty(s,o,{enumerable:!0,configurable:!0,writable:!0})}if(u)J.x("trying to redefine an already defined value",e,c);dn(e,!0,!0);let h=Hr(e,125);if(s&&typeof(s[o]=h)==="object")r.add(h);if(dn(e),(i=e.s.charCodeAt(e.p++))===125)return t;if(i!==44)J.x("expected comma or end of structure",e,e.p-1)}J.x("unfinished table",e,n)}function Ac(e){let n=e.p++,t=[],r;while(e.p<e.s.length){if(dn(e),(r=e.s.charCodeAt(e.p))===93)return e.p++,t;if(t.push(Hr(e,93)),dn(e),(r=e.s.charCodeAt(e.p++))===93)return t;if(r!==44)J.x("expected comma or end of structure",e,e.p-1)}J.x("unfinished array",e,n)}/*!
163
+ */function Di(e,n=61){let t,r=0,i=[],o,s=e.s.charCodeAt(t=e.p);do if(s===n){if(!r)J.x("unexpected end of key",e);if(r===1)i.push(e.s.slice(o,e.p));return e.p++,i}else if(s===46){if(!r)J.x("illegal empty bare key",e);if(r===1)i.push(e.s.slice(o,e.p));r=0}else if(!r&&(s===34||s===39)){if(s===e.s.charCodeAt(e.p+1)&&s===e.s.charCodeAt(e.p+2))J.x("illegal quoted key: multiline strings are not allowed",e);i.push(zi(e)),r=2,e.p--}else if(s===32||s===9){if(r===1)i.push(e.s.slice(o,e.p)),r=2}else if(r===2||s<48&&s!==45||s>57&&s<65||s>90&&s<97&&s!==95||s>122)J.x("illegal character in key",e);else if(!r)r=1,o=e.p;while(s=e.s.charCodeAt(++e.p));J.x("incomplete key-value: cannot find end of key",e,t)}function Cc(e){let n=e.p++,t=Object.create(null),r=new Set,i;while(e.p<e.s.length){if(gn(e),(i=e.s.charCodeAt(e.p))===125)return e.p++,t;let o,s=t,u=!1,c=e.p,a=Di(e);for(let f=0;f<a.length;f++){if(f)s=u?s[o]:s[o]=Object.create(null);if(o=a[f],(u=Object.hasOwn(s,o))&&(typeof s[o]!=="object"||r.has(s[o])))J.x("trying to redefine an already defined value",e,c);let l=o==="__proto__";if(e.uk&&(l||o==="constructor")){s=e.uk!==1&&J.x("document contains an unsafe property",e,c);break}if(!u&&l)Object.defineProperty(s,o,{enumerable:!0,configurable:!0,writable:!0})}if(u)J.x("trying to redefine an already defined value",e,c);gn(e,!0,!0);let h=Fr(e,125);if(s&&typeof(s[o]=h)==="object")r.add(h);if(gn(e),(i=e.s.charCodeAt(e.p++))===125)return t;if(i!==44)J.x("expected comma or end of structure",e,e.p-1)}J.x("unfinished table",e,n)}function Wc(e){let n=e.p++,t=[],r;while(e.p<e.s.length){if(gn(e),(r=e.s.charCodeAt(e.p))===93)return e.p++,t;if(t.push(Fr(e,93)),gn(e),(r=e.s.charCodeAt(e.p++))===93)return t;if(r!==44)J.x("expected comma or end of structure",e,e.p-1)}J.x("unfinished array",e,n)}/*!
164
164
  * Copyright (c) Squirrel Chat et al., All rights reserved.
165
165
  * SPDX-License-Identifier: BSD-3-Clause
166
166
  *
@@ -186,7 +186,7 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
186
186
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
187
187
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
188
188
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
189
- */function Tc(e,n,t,r,i){let o=t,s=r,u,c=!1,a;for(let h=0;h<n.length;h++){if(h){if(o=c?o[u]:o[u]=Object.create(null),s=(a=s[u]).c,i===0&&(a.t===1||a.t===2))return null;if(a.t===2){let f=o.length-1;o=o[f],s=s[f].c}}if(u=n[h],(c=Object.hasOwn(o,u))&&s[u]?.t===0&&s[u]?.d)return null;if(!c){let f=u==="__proto__";if(e.uk&&(f||u==="constructor"))return!1;if(f)Object.defineProperty(o,u,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(s,u,{enumerable:!0,configurable:!0,writable:!0});s[u]={t:h<n.length-1&&i===2?3:i,d:!1,i:0,c:Object.create(null)}}}if(a=s[u],a.t!==i&&!(i===1&&a.t===3))return null;if(i===2){if(!a.d)a.d=!0,o[u]=[];o[u].push(o=Object.create(null)),a.c[a.i++]=a={t:1,d:!1,i:0,c:Object.create(null)}}if(a.d)return null;if(a.d=!0,i===1)o=c?o[u]:o[u]=Object.create(null);else if(i===0&&c)return null;return[u,o,a.c]}function Gc(e,n,t){if(n===null||e.uk===2)J.x(n===null?"trying to redefine an already defined table or value":"document contains an unsafe property",e,t)}function Es(e,n={}){let t={s:e,p:0,d:n.maxDepth??1000,bi:n.integersAsBigInt??!1,ld:n.useLegacyDate??!0,uk:n.unsafeKeyBehaviour==="throw"?2:n.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),i=Object.create(null),o,s=!1,u=r,c=i;if(e.charCodeAt(0)===65279)t.p++;dn(t);while(t.p<e.length){if(e.charCodeAt(t.p)===91){let a=e.charCodeAt(++t.p)===91;o=t.p+=+a,s=!1;let h=eo(t,93);if(a){if(e.charCodeAt(t.p)!==93)J.x("expected end of table array declaration",t);t.p++}let f=Tc(t,h,r,i,a?2:1);if(!f)Gc(t,f,o),s=!0;else c=f[2],u=f[1]}else{o=t.p;let a=eo(t),h=Tc(t,a,u,c,0);if(!h&&!s)Gc(t,h,o);dn(t,!0,!0);let f=Hr(t,void 0);if(h&&!s)h[1][h[0]]=f}if(dn(t,!0),t.p<e.length&&(o=e.charCodeAt(t.p))!==10&&(o!==13||e.charCodeAt(t.p+1)!==10))J.x("each key-value declaration must be followed by an end-of-line",t);dn(t)}return r}/*!
189
+ */function Kc(e,n,t,r,i){let o=t,s=r,u,c=!1,a;for(let h=0;h<n.length;h++){if(h){if(o=c?o[u]:o[u]=Object.create(null),s=(a=s[u]).c,i===0&&(a.t===1||a.t===2))return null;if(a.t===2){let f=o.length-1;o=o[f],s=s[f].c}}if(u=n[h],(c=Object.hasOwn(o,u))&&s[u]?.t===0&&s[u]?.d)return null;if(!c){let f=u==="__proto__";if(e.uk&&(f||u==="constructor"))return!1;if(f)Object.defineProperty(o,u,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(s,u,{enumerable:!0,configurable:!0,writable:!0});s[u]={t:h<n.length-1&&i===2?3:i,d:!1,i:0,c:Object.create(null)}}}if(a=s[u],a.t!==i&&!(i===1&&a.t===3))return null;if(i===2){if(!a.d)a.d=!0,o[u]=[];o[u].push(o=Object.create(null)),a.c[a.i++]=a={t:1,d:!1,i:0,c:Object.create(null)}}if(a.d)return null;if(a.d=!0,i===1)o=c?o[u]:o[u]=Object.create(null);else if(i===0&&c)return null;return[u,o,a.c]}function _c(e,n,t){if(n===null||e.uk===2)J.x(n===null?"trying to redefine an already defined table or value":"document contains an unsafe property",e,t)}function Es(e,n={}){let t={s:e,p:0,d:n.maxDepth??1000,bi:n.integersAsBigInt??!1,ld:n.useLegacyDate??!0,uk:n.unsafeKeyBehaviour==="throw"?2:n.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),i=Object.create(null),o,s=!1,u=r,c=i;if(e.charCodeAt(0)===65279)t.p++;gn(t);while(t.p<e.length){if(e.charCodeAt(t.p)===91){let a=e.charCodeAt(++t.p)===91;o=t.p+=+a,s=!1;let h=Di(t,93);if(a){if(e.charCodeAt(t.p)!==93)J.x("expected end of table array declaration",t);t.p++}let f=Kc(t,h,r,i,a?2:1);if(!f)_c(t,f,o),s=!0;else c=f[2],u=f[1]}else{o=t.p;let a=Di(t),h=Kc(t,a,u,c,0);if(!h&&!s)_c(t,h,o);gn(t,!0,!0);let f=Fr(t,void 0);if(h&&!s)h[1][h[0]]=f}if(gn(t,!0),t.p<e.length&&(o=e.charCodeAt(t.p))!==10&&(o!==13||e.charCodeAt(t.p+1)!==10))J.x("each key-value declaration must be followed by an end-of-line",t);gn(t)}return r}/*!
190
190
  * Copyright (c) Squirrel Chat et al., All rights reserved.
191
191
  * SPDX-License-Identifier: BSD-3-Clause
192
192
  *
@@ -212,7 +212,7 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
212
212
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
213
213
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
214
214
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
215
- */var D1=!!"".isWellFormed;/*!
215
+ */var hE=!!"".isWellFormed;/*!
216
216
  * Copyright (c) Squirrel Chat et al., All rights reserved.
217
217
  * SPDX-License-Identifier: BSD-3-Clause
218
218
  *
@@ -238,147 +238,147 @@ ${i}`,n);this.line=t,this.column=r,this.codeblock=i}static x(e,n,t){throw new J(
238
238
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
239
239
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
240
240
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
241
- */import{readdirSync as pp,rmSync as wp,statSync as $p}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as bp}from"node:net";import{homedir as kp}from"node:os";import{join as jr}from"node:path";import{setTimeout as Ep}from"node:timers/promises";var ja=Wi(_c(),1),to=Wi(Ta(),1),Ga=[137,80,78,71,13,10,26,10],Ja=13;function Ar(e){return e.length>=Ga.length&&Ga.every((n,t)=>e[t]===n)}function Us(e){let n=to.PNG.sync.read(Buffer.from(e));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function Tr(e,n){if(Ar(e)){let t=Gr(e);if(t&&t.width*t.height>n)throw Error(`${t.width}×${t.height} is over ${n/1e6} megapixels`);return Us(e)}if(e[0]===255&&e[1]===216){let t=ja.decode(e,{useTArray:!0,formatAsRGBA:!0,maxResolutionInMP:n/1e6,maxMemoryUsageInMB:1024});return{width:t.width,height:t.height,data:t.data}}throw Error("not a PNG or JPEG image")}function wt(e){let n=new to.PNG({width:e.width,height:e.height});return n.data=Buffer.from(e.data),to.PNG.sync.write(n)}function Ua(e,n){for(let t=0;t+n.length<=e.length;t++){let r=!0;for(let i=0;i<n.length&&r;i++)r=e[t+i]===n.charCodeAt(i);if(r)return t}return-1}function Gr(e){if(e.length<33||!Ar(e))return null;let n=new DataView(e.buffer,e.byteOffset,e.byteLength),t=n.getUint32(16),r=n.getUint32(20);if(e[25]===4||e[25]===6)return{width:t,height:r,alpha:!0};let i=Ua(e,"IDAT");return{width:t,height:r,alpha:Ua(i===-1?e:e.subarray(0,i),"tRNS")!==-1}}function Ca(e,n=Ja){let{width:t,height:r}=e,i=-1,o=-1;for(let s=0;s<e.height;s++)for(let u=0;u<e.width;u++)if((e.data[(s*e.width+u)*4+3]??0)>=n)t=Math.min(t,u),i=Math.max(i,u),r=Math.min(r,s),o=Math.max(o,s);return i<0?null:{x:t,y:r,w:i-t+1,h:o-r+1}}function Dn(e,n={x:0,y:0,w:e.width,h:e.height}){let t=0;for(let r=n.y;r<n.y+n.h;r++)for(let i=n.x;i<n.x+n.w;i++)if((e.data[(r*e.width+i)*4+3]??0)<Ja)t++;return Math.round(t*100/(n.w*n.h))}function mp(e,n){if(n<=1)return e;let t=Math.max(1,Math.floor(e.width/n)),r=Math.max(1,Math.floor(e.height/n)),i=new Uint8Array(t*r*4),o=e.data;for(let s=0;s<r;s++)for(let u=0;u<t;u++){let c=0,a=0,h=0,f=0;for(let g=0;g<n;g++)for(let m=0;m<n;m++){let d=((s*n+g)*e.width+u*n+m)*4,b=o[d+3]??0;c+=(o[d]??0)*b,a+=(o[d+1]??0)*b,h+=(o[d+2]??0)*b,f+=b}let l=(s*t+u)*4;if(f>0)i[l]=Math.round(c/f),i[l+1]=Math.round(a/f),i[l+2]=Math.round(h/f);i[l+3]=Math.round(f/(n*n))}return{width:t,height:r,data:i}}function Ka(e,n,t){let r=Math.min(n/e.width,t/e.height),i=Math.max(1,Math.round(e.width*r)),o=Math.max(1,Math.round(e.height*r)),s=ro(e,{x:0,y:0,w:e.width,h:e.height},i,o),u=new Uint8Array(n*t*4),c=Math.floor((n-i)/2),a=Math.floor((t-o)/2);for(let h=0;h<o;h++)u.set(s.data.subarray(h*i*4,(h+1)*i*4),((a+h)*n+c)*4);return{width:n,height:t,data:u}}function ro(e,n,t,r){let i=Math.max(1,Math.floor(Math.min(n.w/t,n.h/r))),o=mp(e,i),s=o.data,u=new Uint8Array(t*r*4);for(let c=0;c<r;c++){let a=Math.min(o.height-1,Math.max(0,n.y/i+(c+0.5)*n.h/i/r-0.5)),h=Math.floor(a),f=Math.min(o.height-1,h+1),l=a-h;for(let g=0;g<t;g++){let m=Math.min(o.width-1,Math.max(0,n.x/i+(g+0.5)*n.w/i/t-0.5)),d=Math.floor(m),b=Math.min(o.width-1,d+1),y=m-d,I=(h*o.width+d)*4,k=(h*o.width+b)*4,S=(f*o.width+d)*4,p=(f*o.width+b)*4,P=(s[I+3]??0)*(1-y)*(1-l),E=(s[k+3]??0)*y*(1-l),R=(s[S+3]??0)*(1-y)*l,N=(s[p+3]??0)*y*l,H=P+E+R+N,A=(c*t+g)*4;if(H>0)for(let X=0;X<3;X++){let j=(s[I+X]??0)*P+(s[k+X]??0)*E+(s[S+X]??0)*R+(s[p+X]??0)*N;u[A+X]=Math.round(j/H)}u[A+3]=Math.round(H)}}return{width:t,height:r,data:u}}var $t=100,vn=25000000,yp=536870912,Jr=["safe","questionable","explicit"],bt=["nudity","underwear"],Sp={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},Ur={safe:"s",questionable:"q",explicit:"e"},vp=8191,Mp=20000,Ip=5000,Wa=3000,_a=8,Np=3000,Za=60000,Qa=3,Js=`ttheme/${_e.version} (+${_e.homepage})`,Op=["orig","tile","thumb","cut"],Xa=new Map,Rp=Jp(process.env.TTHEME_FIND_HOSTS),Fp=jp(process.env.TTHEME_FIND_CUTOUTS);bp(Np);function qa(e){try{return pp(e)}catch{return[]}}function io(e){return e.startsWith("//")?`https:${e}`:e}function Cr(e){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(e)?.[1]??"").toLowerCase()}function Kr(e){let n=e.trim();if(!n)return[];let t=JSON.parse(n);if(Array.isArray(t))return t;let r=t.posts;return Array.isArray(r)?r:[]}function Pp(e){let n=e.trim(),r=(n?JSON.parse(n):{}).tags??{};return new Map(Object.entries(r).map(([i,o])=>[i,String(o)]))}function js(e,n,t){let r=io(String(e??""));return{file:r,width:Number(n)||0,height:Number(t)||0,ext:Cr(r)}}function Va(e,n){let t=io(String(n.preview??""));if(!n.file||!t||!Number(e.id))return[];let r=Number(e.width??e.image_width)||0,i=Number(e.height??e.image_height)||0;return[{id:Number(e.id),width:r,height:i,file:n.file,preview:t,ext:n.ext,owner:String(n.owner??""),artist:n.artist,score:Number(e.score)||0,rating:String(e.rating??""),md5:String(n.md5??""),source:String(e.source??""),tags:n.tags.split(/\s+/).filter(Boolean),solo:n.solo,family:Number(e.parent_id)||(e.has_children===!0?Number(e.id):0),smaller:n.versions.filter((o)=>o.file&&o.width>0&&o.height>0&&o.width*o.height<r*i)}]}function Hp(e){let n=Pp(e);return Kr(e).flatMap((t)=>{let r=io(String(t.file_url??"")),i=String(t.tags??"");return Va(t,{preview:t.preview_url,file:r,ext:String(t.file_ext||Cr(r)).toLowerCase(),owner:t.author,artist:i.split(/\s+/).find((o)=>n.get(o)==="artist")??"",md5:t.md5,tags:i,solo:void 0,versions:[js(t.jpeg_url,t.jpeg_width,t.jpeg_height),js(t.sample_url,t.sample_width,t.sample_height)]})})}function Lp(e){return Kr(e).flatMap((n)=>{let t=io(String(n.file_url??"")),r=String(n.tag_string??""),i=n.media_asset??{};return Va(n,{preview:i.variants?.find((o)=>o.type==="360x360")?.url??n.preview_file_url,file:t,ext:String(n.file_ext||Cr(t)).toLowerCase(),owner:"",artist:String(n.tag_string_artist??"").split(/\s+/)[0]??"",md5:n.md5,tags:r,solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((o)=>js(o.url,o.width,o.height)).filter((o)=>o.ext==="jpg"||o.ext==="png").sort((o,s)=>s.width*s.height-o.width*o.height)})})}function Ap(e){return Kr(e).flatMap((n)=>{let t=String(n.value??"");return t?[{value:t,count:Number(n.post_count)||0}]:[]})}function Tp(e){return Kr(e).flatMap((n)=>{let t=String(n.name??"");return t?[{value:t,count:Number(n.count)||0}]:[]})}function Gp(e){return Number(/count="(\d+)"/.exec(e)?.[1]??0)}function Up(e){let n=e.trim()?JSON.parse(e):{};return Number(n.counts?.posts)||0}function jp(e){let n=new Map;for(let t of(e??"").split(/\s+/).filter(Boolean)){let r=t.indexOf("=");if(r>0)n.set(t.slice(0,r),t.slice(r+1).split(",").filter(Boolean))}return n}function Jp(e){let n=new Map;for(let t of(e??"").split(/[\s,]+/).filter(Boolean)){let r=t.indexOf("="),i=t.slice(0,r);try{let o=new URL(t.slice(r+1));if(i&&o.protocol==="https:")n.set(i,o.origin)}catch{}}return n}function za(e,n,t,r){let i=(e??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let o=n.filter((s)=>i.includes(s));return o.length>0?o:[...t]}function Zt(e){return za(e,Jr,["safe"])}function Xt(e){return za(e,bt,bt,"none")}function Ba(e,n,t){return{safe:new Set(e),questionable:new Set(n),explicit:new Set(t)}}function Da(e){let n=Rp.get(e.key),t=Fp.get(e.key);return{...e,origin:n??e.origin,moved:n!==void 0&&n!==e.origin,cutouts:t??e.cutouts,vouched:e.vouched&&t===void 0}}function xa(e){return e.length<2?e.join(""):e.map((n)=>`~${n}`).join(" ")}function Ya(e){let n=Da(e),t=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...n,cutouts:xa(n.cutouts),ratings:Ba([Ur.safe],[Ur.questionable],[Ur.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${Ur[i]}`;let o=Jr.filter((u)=>!r.includes(u)),[s]=o;return o.length===1&&s?`-rating:${Ur[s]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,postsUrl:(r,i)=>`${n.origin}/post.json?${t({limit:String($t),page:String(i+1),tags:r})}`,countUrl:(r)=>`${n.origin}/post.xml?${new URLSearchParams({limit:"1",tags:r})}`,postUrl:(r)=>`${n.origin}/post.json?${t({tags:`id:${r}`})}`,pageUrl:(r)=>`${n.origin}/post/show/${r}`,parse:Hp,count:Gp}}function Cp(e){let n=Da(e),t=Ba(["g"],["s","q"],["e"]);return{...n,cutouts:xa(n.cutouts),ratings:t,rate:(r)=>r.length===Jr.length?"":`rating:${r.flatMap((i)=>[...t[i]]).join(",")}`,best:"order:score",tagBudget:2,postsUrl:(r,i)=>`${n.origin}/posts.json?${new URLSearchParams({limit:String($t),page:String(i+1),tags:r})}`,countUrl:(r)=>`${n.origin}/counts/posts.json?${new URLSearchParams({tags:r})}`,postUrl:(r)=>`${n.origin}/posts.json?${new URLSearchParams({limit:"1",tags:`id:${r}`})}`,pageUrl:(r)=>`${n.origin}/posts/${r}`,parse:Lp,count:Up}}function Kp(e){return x.find((n)=>n.key===e||n.name===e||new URL(n.origin).host===e)}function Cs(e){return e.split(/\s+/).filter((n)=>n&&!n.startsWith("rating:")).length}function oo(e,n){let t=e.trim();if(/^\d+$/.test(t))return{site:n,id:Number(t)};let r=/^([\w.]+):(\d+)$/.exec(t);if(r){let u=x.find((c)=>c.key===r[1]||c.name===r[1]);return u&&{site:u,id:Number(r[2])}}let i;try{i=new URL(t)}catch{return}let o=Kp(i.host),s=Number(i.searchParams.get("id")??i.pathname.split("/").filter(Boolean).at(-1));return o&&s>0?{site:o,id:s}:void 0}var x=[Cp({key:"danbooru",name:"danbooru",origin:"https://danbooru.donmai.us",cutouts:["transparent_background"],vouched:!1,tunneled:!0,ansi:2}),Ya({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,tunneled:!1,ansi:6}),Ya({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,tunneled:!1,ansi:5})],Tn=134217728;function Mn(e,n){let t=x.indexOf(e);return(t===-1?x.length:t)*Tn+n}function Ks(e){let n;try{n=new URL(e).hostname}catch{return""}return n.split(".").slice(-2).join(".")}function eh(){return x.filter((e)=>!e.tunneled).map((e)=>Ks(e.origin)).flatMap((e)=>[e,`.${e}`]).join(",")}function so(e,n=bt){return e.tags.filter((t)=>n.some((r)=>Sp[r].has(t)))}function uo(e,n,t=["safe"]){return t.some((r)=>e.ratings[r].has(n.rating))}function kt(e){return[e,...e.smaller].find((n)=>n.width*n.height<=vn)}function nh(e){let n=new Map;for(let[t,r]of[...e].sort(([i],[o])=>i<o?-1:1)){if(r==="")continue;n.set(r,[...n.get(r)??[],t])}return n}function co(){return jr(process.env.XDG_CACHE_HOME??jr(kp(),".cache"),"ttheme")}function pn(e){return jr(co(),e.key)}function th(e=yp,n=co()){let t=[],r=0;for(let i of qa(n))for(let o of Op){let s=jr(n,i,o);for(let u of qa(s)){let c=jr(s,u);try{let{size:a,mtimeMs:h}=$p(c);t.push({path:c,size:a,at:h}),r+=a}catch{}}}t.sort((i,o)=>i.at-o.at);for(let i of t){if(r<=e)return;try{wp(i.path,{force:!0}),r-=i.size}catch{}}}function Wp(e,n){if(e!==null&&/^\s*\d+\s*$/.test(e))return Number(e)*1000;let t=e===null?Number.NaN:Date.parse(e);return Number.isNaN(t)?Za:Math.max(0,t-n)}function xn(e){return Xa.get(e.key)??0}function _p(e){for(let n=e;n instanceof Error;n=n.cause)if(n.code==="ECONNRESET")return!0;return!1}function Qp(e){return(e.headers.get("server")??"").startsWith("cloudflare")&&e.headers.get("cf-mitigated")==="challenge"}async function et(e,n,t,r={},i=Mp){for(let o=1;;o++){let s=xn(e)-Date.now();if(s>0)await Ep(s,void 0,{signal:t});let u;try{u=await fetch(n,{headers:{"User-Agent":Js,Referer:`${e.origin}/`,...r},signal:i?AbortSignal.any([t,AbortSignal.timeout(i)]):t})}catch(c){if(o<Qa&&!t.aborted&&_p(c))continue;throw c}if(u.status===429&&o<Qa){await u.body?.cancel();let c=Wp(u.headers.get("retry-after"),Date.now());if(c>Za)throw Error(`${e.name} asks to wait ${Math.ceil(c/1000)}s`);Xa.set(e.key,Math.max(xn(e),Date.now()+c));continue}if(!u.ok)throw await u.body?.cancel(),Error(Qp(u)?`${e.name} is behind a Cloudflare challenge`:`${e.name} answered ${u.status}`);return u}}async function rh(e,n,t,r){return e.parse(await(await et(e,e.postsUrl(n,t),r)).text())}async function ih(e,n,t){return e.count(await(await et(e,e.countUrl(n),t)).text())}async function Wr(e,n,t){let[r]=e.parse(await(await et(e,e.postUrl(n),t)).text());return r}function qp(e){let n=x.find((r)=>r.key==="danbooru"),t=new URLSearchParams({limit:String(2*$t),only:"md5,tag_string",tags:`md5:${e.join(",")}`});return`${n.origin}/posts.json?${t}`}function Yp(e){return new Map(Kr(e).flatMap((n)=>{let t=String(n.md5??"");return t?[[t,String(n.tag_string??"").split(/\s+/).filter(Boolean)]]:[]}))}function oh(e,n){for(let t of e){let r=n.get(t.md5);if(r)t.tags=[...new Set([...t.tags,...r])],t.solo=r.includes("solo")}}async function sh(e,n){let t=x.find((i)=>i.key==="danbooru"),r=new Map;if(xn(t)>Date.now())return r;for(let i=0;i<e.length;i+=$t){let o=await(await et(t,qp(e.slice(i,i+$t)),n,{},Ip)).text();for(let[s,u]of Yp(o))r.set(s,u)}return r}async function uh(e,n){let t=x.find((o)=>o.key==="danbooru");if(xn(t)<=Date.now())try{let o=new URLSearchParams({"search[query]":e,"search[type]":"tag_query",limit:String(_a)}),s=`${t.origin}/autocomplete.json?${o}`;return Ap(await(await et(t,s,n,{},Wa)).text())}catch(o){if(n.aborted)throw o}let r=x.find((o)=>o.key==="yande"),i=new URLSearchParams({name:e,order:"count",limit:String(_a)});return Tp(await(await et(r,`${r.origin}/tag.json?${i}`,n,{},Wa)).text())}async function ch(e,n,t){let r=await et(e,n,t,{Range:`bytes=0-${vp}`});return Gr(new Uint8Array(await r.arrayBuffer()))}async function ao(e,n,t,r){let i=await et(e,n,t,{},0),o=Number(i.headers.get("content-length"))||0,s=i.body?.getReader();if(!s)return new Uint8Array(await i.arrayBuffer());let u=[],c=0;for(;;){let{done:f,value:l}=await s.read();if(f)break;u.push(l),c+=l.length,r?.(c,o)}let a=new Uint8Array(c),h=0;for(let f of u)a.set(f,h),h+=f.length;return a}var yt=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right"],_r="Original",Vp=1e6,In="_groups.toml",ah=3,hh=8,fh="[a-z0-9]+(?:-[a-z0-9]+)*",zp=new RegExp(`^(${fh})(?:@(${fh}))?$`),mh=["background","foreground","cursor","selection"];function ae(e,n){throw Error(`${e}: ${n}`)}function Et(e,n,t){if(typeof t!=="string"||!Ct(t))ae(e,`${n} must be "#rrggbb" (lowercase), got ${JSON.stringify(t)}`);return t}function Qr(e,n,t){if(typeof t!=="string"||t.length===0)ae(e,`${n} must be a non-empty string`);return t}function nt(e){return e.replace("@","--")}function je(e){let n=e.indexOf("@");return n<0?void 0:e.slice(n+1)}function fo(e){let n=e.indexOf("@");return n<0?e:e.slice(0,n)}function Gn(e){let n=zp.exec(e);if(!n)return"takes lowercase letters, digits and single hyphens, as <palette> or <palette>@<owner>";if((n[2]?.length??0)>39)return"has an owner longer than a GitHub handle can be";return(n[1]?.length??0)>40?"is longer than 40 characters":void 0}function Ws(e){if(/[\p{Cc}"$`\\]/u.test(e))return"holds a control character, a quote, $, ` or \\";return e.length>80?"is longer than 80 characters":void 0}function ho(e,n,t){let r=Qr(e,n,t),i=Ws(r);if(i)ae(e,`${n} ${JSON.stringify(r)} ${i}`);return r}function lh(e,n,t){let r=Qr(e,n,t),i=Gn(r);if(i)ae(e,`${n} "${r}" ${i}`);return r}function Vt(e){return e&&typeof e==="object"?e:{}}function Bp(e,n,t){if(n===void 0)return[t.cursor,t.selectionBackground,t.background];let r=Array.isArray(n)?n:[n];if(r.length===0)ae(e,"ghostty.icon_screen must not be empty");return r.map((i,o)=>Et(e,`ghostty.icon_screen[${o}]`,i))}function Dp(e,n,t){let r=Vt(n);return{iconGhost:r.icon_ghost===void 0?t.cursor:Et(e,"ghostty.icon_ghost",r.icon_ghost),iconScreen:Bp(e,r.icon_screen,t)}}function xp(e){return new Map([...mh.map((n)=>[n,e[n]]),...e.ansi.map((n,t)=>[`ansi${t}`,n])])}function ew(e,n,t){if(!Array.isArray(n)||n.length!==ah)ae(e,`meta.signature must name exactly ${ah} palette slots`);let r=xp(t),i=[],o=[];for(let[s,u]of n.entries()){let c=`meta.signature[${s}]`,a=Qr(e,c,u),h=r.get(a);if(h===void 0)ae(e,`${c} ${JSON.stringify(u)} is not a palette slot — use ${mh.join(", ")} or ansi0-ansi15`);i.push(a),o.push(h)}if(new Set(o).size!==o.length)ae(e,"meta.signature slots must resolve to three different colors");return{names:i,colors:o}}function nw(e,n,t){if(n===void 0)return;if(!t)ae(e,"meta.booru_sites renames meta.booru per site, so it needs meta.booru");if(!n||typeof n!=="object"||Array.isArray(n))ae(e,'meta.booru_sites must be a table of site = "tag" or site = ["tag", ...]');let r={};for(let[i,o]of Object.entries(n)){let s=x.find((c)=>c.key===i);if(!s)ae(e,`meta.booru_sites.${i} is not a find site — use ${x.map((c)=>c.key).join(", ")}`);let u=typeof o==="string"?[o]:Array.isArray(o)?o:void 0;if(!u||u.some((c)=>typeof c!=="string"||c===""||/\s/.test(c)))ae(e,`meta.booru_sites.${i} must be one tag or a list of tags, got ${JSON.stringify(o)}`);if(u.length>1&&Number.isFinite(s.tagBudget))ae(e,`meta.booru_sites.${i} takes one tag — ${s.name} searches ${s.tagBudget} tags at a time`);r[i]=u}return r}function tw(e,n){if(n===void 0)return;if(!Array.isArray(n)||n.length===0||n.length>hh)ae(e,`[[picture]] holds 1 to ${hh} pictures`);return n.map((t,r)=>{let i=Vt(t),o=`picture[${r}]`,s=x.find((h)=>h.key===i.site);if(!s)ae(e,`${o}.site must be one of ${x.map((h)=>h.key).join(", ")}`);if(typeof i.id!=="number"||!Number.isSafeInteger(i.id)||i.id<=0)ae(e,`${o}.id must be the post's number on ${s.name}`);let{size:u,position:c,opacity:a}=i;if(u!==void 0&&u!=="fill"&&!(Number.isInteger(u)&&Number(u)>=20&&Number(u)<=999))ae(e,`${o}.size must be "fill" or a percentage from 20 to 999`);if(c!==void 0&&!yt.includes(c))ae(e,`${o}.position must be one of ${yt.join(", ")}`);if(a!==void 0&&!(typeof a==="number"&&a>=0&&a<=1))ae(e,`${o}.opacity must be a number from 0 to 1`);return{site:s.key,id:i.id,...u!==void 0?{size:u}:{},...c!==void 0?{position:c}:{},...a!==void 0?{opacity:a}:{}}})}function ph(e,n){try{return Es(n)}catch(t){ae(e,`is not valid TOML — ${(t instanceof Error?t.message:String(t)).split(`
242
- `)[0]}`)}}function rw(e){let t=ph(In,gh(dh(e,In),"utf8")).group;if(!Array.isArray(t)||t.length===0)ae(In,"needs at least one [[group]] table");return t.map((r)=>{let i=Vt(r);return{name:ho(In,"group.name",i.name),native:i.native===void 0?void 0:ho(In,"group.native",i.native),lead:Qr(In,"group.lead",i.lead)}})}function _s(e,n,t){let r=ph(e,n),i=Vt(r.meta),o=Vt(r.colors),s=Vt(r.contrast),u=o.ansi;if(!Array.isArray(u)||u.length!==16)ae(e,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(u)?u.length:typeof u}`);let c=lh(e,"meta.name",i.name);if(c!==t.name)ae(e,`meta.name "${c}" does not match its file — it lives at ${t.name}`);let a=t.open===!0;for(let N of["order","role"])if(a&&i[N]!==void 0)ae(e,`meta.${N} is for the official palettes — a market palette follows its base`);let h=i.role;if(h!==void 0&&h!=="default")ae(e,`meta.role must be "default", got ${JSON.stringify(h)}`);let f=i.base===void 0?void 0:lh(e,"meta.base",i.base);if(f!==void 0&&!a)ae(e,"meta.base is for market palettes");let l=f===void 0?void 0:t.bases?.get(f),g=a&&i.group===void 0?l?.group??_r:ho(e,"meta.group",i.group),m=t.groups.get(g);if(!m&&!(a&&(g===_r||t.open)))ae(e,`meta.group "${g}" has no [[group]] table in ${In}`);let d=Et(e,"colors.background",o.background),b=Et(e,"colors.foreground",o.foreground),y=Et(e,"colors.cursor",o.cursor),I=Et(e,"colors.selection_background",o.selection_background),k=u.map((N,H)=>Et(e,`colors.ansi[${H}]`,N)),S=ew(e,i.signature,{background:d,foreground:b,cursor:y,selection:I,ansi:k}),p=i.booru===void 0?void 0:Qr(e,"meta.booru",i.booru);if(p!==void 0&&/[\s\p{Cc}]/u.test(p))ae(e,`meta.booru must be a single booru tag, got ${JSON.stringify(p)}`);let P=nw(e,i.booru_sites,p),E=Array.isArray(s.waive)?s.waive.map(String):[];if(E.length>0&&typeof s.reason!=="string")ae(e,"contrast.waive needs a contrast.reason explaining why");let R=tw(e,r.picture);return{name:c,...f?{base:f}:{},group:g,native:m?.native,lead:!a&&m?.lead===c,order:a?l?.order??Vp:Number(i.order),role:h,ansiSource:a&&i.ansi_source===void 0?f??"original":ho(e,"meta.ansi_source",i.ansi_source),...p?{booru:p}:{},...P?{booruSites:P}:{},background:d,foreground:b,cursor:y,selectionBackground:I,ansi:k,signature:S.colors,signatureSlots:S.names,ghostty:Dp(e,r.ghostty,{background:d,cursor:y,selectionBackground:I}),waive:E,waiveReason:typeof s.reason==="string"?s.reason:void 0,...R?{pictures:R}:{}}}function wh(e){let n=rw(e),t=new Map(n.map((o)=>[o.name,o]));if(t.size!==n.length)ae(In,"group.name must be unique");let r=Zp(e).filter((o)=>o.endsWith(".toml")&&!o.startsWith("_")).map((o)=>_s(o,gh(dh(e,o),"utf8"),{name:Xp(o,".toml"),groups:t})).sort((o,s)=>o.order-s.order);if(new Set(r.map((o)=>o.order)).size!==r.length)throw Error("themes: meta.order must be unique across all themes");for(let o of n){let s=r.filter((u)=>u.group===o.name);if(s.length===0)ae(In,`group "${o.name}" has no themes`);if(!s.some((u)=>u.name===o.lead))ae(In,`group "${o.name}" lead "${o.lead}" is not one of its themes`)}return r}function $h(e){return e.filter((n)=>n.role===void 0)}function qr(e){let n=(r,i)=>r<i?-1:r>i?1:0,t=(r)=>r.base??r.name;return[...e].sort((r,i)=>n(r.group.toLowerCase(),i.group.toLowerCase())||n(t(r),t(i))||Number(r.base!==void 0)-Number(i.base!==void 0)||n(r.name,i.name))}var iw=["black","red","green","yellow","blue","magenta","cyan","white"];function bh(e,n){return[e,...iw.map((t,r)=>`${t} = '${n[r]}'`),""].join(`
243
- `)}var Yr={id:"alacritty",limits:"no runtime color API (OSC only)",emit(e){let n=[...zt(e),"","[colors.primary]",`background = '${e.background}'`,`foreground = '${e.foreground}'`,"","[colors.cursor]",`cursor = '${e.cursor}'`,`text = '${e.background}'`,"","[colors.selection]",`background = '${e.selectionBackground}'`,`text = '${e.foreground}'`,"",bh("[colors.normal]",e.ansi.slice(0,8)),bh("[colors.bright]",e.ansi.slice(8,16))].join(`
244
- `);return[{path:`alacritty/themes/${fe(e.name)}.toml`,content:n}]}};var Zr={id:"ghostty",emit(e){let n=[...zt(e),`background = ${e.background}`,`foreground = ${e.foreground}`,`cursor-color = ${e.cursor}`,`selection-background = ${e.selectionBackground}`,`selection-foreground = ${e.foreground}`,...e.ansi.map((t,r)=>`palette = ${r}=${t}`),"palette-generate = true","","macos-icon = custom-style",`macos-icon-ghost-color = ${e.ghostty.iconGhost}`,`macos-icon-screen-color = ${e.ghostty.iconScreen.join(",")}`,"macos-icon-frame = chrome",""].join(`
245
- `);return[{path:`ghostty/themes/${fe(e.name)}`,content:n}]}};function tt(e){let[n,t,r]=Ke(e);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":t/255,"Red Component":n/255}}function kh(e){return{...Object.fromEntries(e.ansi.map((n,t)=>[`Ansi ${t} Color`,tt(n)])),"Background Color":tt(e.background),"Bold Color":tt(e.foreground),"Cursor Color":tt(e.cursor),"Cursor Text Color":tt(e.background),"Foreground Color":tt(e.foreground),"Selected Text Color":tt(e.foreground),"Selection Color":tt(e.selectionBackground)}}function ow(e){return e?{"Background Image Location":e.image,"Background Image Mode":e.cover?2:3,Blend:e.opacity}:{"Background Image Location":""}}function Eh(e,n,t,r){let i=(s,u)=>({Name:`ttheme · ${u}`,Guid:fe(u),...r?{"Dynamic Profile Parent GUID":r}:{},"Use Separate Colors for Light and Dark Mode":!1,"Harmonize 256 Colors":!0,...ow(n.get(s.name)),...kh(s)}),o=[...t?[i(t,"default")]:[],...e.map((s)=>i(s,s.name))];return`${JSON.stringify({Profiles:o},null,2)}
246
- `}function sw(e,n){return[` <key>${e}</key>`,"\t<dict>",...Object.entries(n).flatMap(([t,r])=>[` <key>${t}</key>`,typeof r==="string"?` <string>${r}</string>`:` <real>${r}</real>`]),"\t</dict>"].join(`
247
- `)}var Xr={id:"iterm2",limits:"colors are Display P3, the space iTerm2 reads OSC colors in",emit(e){let n=['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>",...Object.entries(kh(e)).map(([t,r])=>sw(t,r)),"</dict>","</plist>",""].join(`
248
- `);return[{path:`iterm2/${fe(e.name)}.itermcolors`,content:n}]}};var Vr={id:"kitty",emit(e){let n=[...zt(e),`background ${e.background}`,`foreground ${e.foreground}`,`cursor ${e.cursor}`,`cursor_text_color ${e.background}`,`selection_background ${e.selectionBackground}`,`selection_foreground ${e.foreground}`,...e.ansi.map((t,r)=>`color${r} ${t}`),""].join(`
249
- `);return[{path:`kitty/themes/${fe(e.name)}.conf`,content:n}]}};function yh(e){return["# Generated by ttheme — rewritten on every add, remove and default; do not edit.","import os","",`THEMES = ${JSON.stringify(e.themes)}`,`BACKGROUNDS = ${JSON.stringify(e.backgrounds)}`,"PLACES = {"," 'top-left': 'top-left', 'top-center': 'top', 'top-right': 'top-right',"," 'center-left': 'left', 'center': 'center', 'center-center': 'center', 'center-right': 'right',"," 'bottom-left': 'bottom-left', 'bottom-center': 'bottom', 'bottom-right': 'bottom-right',","}","","shown = {}","faded = {}","worn = {}","","","def locate(path):"," if path.startswith('~/'):"," return os.path.expanduser(path)"," return path if os.path.isabs(path) else os.path.join(BACKGROUNDS, path)","","","def read(path, into):"," try:"," with open(path, encoding='utf-8') as f:"," lines = f.read().splitlines()"," except OSError:"," return False"," for line in lines:"," key, sep, value = line.partition('=')"," key, value = key.strip(), value.strip()"," if not sep or not key or key.startswith('#'):"," continue"," if key == 'config-file':"," read(locate(value.lstrip('?')), into)"," else:"," into[key] = value"," return True","","","def logo(palette):"," c = {}"," if not palette or not read(os.path.join(BACKGROUNDS, palette.replace('@', '--', 1) + '.conf'), c):"," return None"," image = c.get('background-image', '')"," try:"," opacity = min(float(c.get('background-image-opacity', '1')), 1.0)"," except ValueError:"," opacity = 1.0"," if not image or opacity <= 0:"," return None"," return locate(image), PLACES.get(c.get('background-image-position', 'center'), 'center'), opacity","","","def fade(path, opacity):"," key = f'{path}#{opacity}'"," if key not in faded:"," from kitty.fast_data_types import load_png_data, png_from_32bit_rgba_data"," with open(path, 'rb') as f:"," rgba, width, height = load_png_data(f.read())"," data = bytearray(rgba)"," data[3::4] = data[3::4].translate(bytes(round(a * opacity) for a in range(256)))"," if len(faded) > 8:"," faded.clear()"," faded[key] = png_from_32bit_rgba_data(bytes(data), width, height)"," return key, faded[key]","","","def show(window):"," want = logo(window.user_vars.get('ttheme_shown') or '')"," if window.id in shown and shown[window.id] == want:"," return"," shown[window.id] = want"," try:"," if want is None:"," window.set_logo('')"," elif want[2] < 1:"," key, png = fade(want[0], want[2])"," window.set_logo(key, want[1], 1, png)"," else:"," window.set_logo(want[0], want[1], 1)"," except Exception:"," shown.pop(window.id, None)","","","def theme(palette):"," path = os.path.join(THEMES, 'ttheme-' + palette.replace('@', '--', 1) + '.conf')"," if not palette or not os.path.exists(path):"," return None"," from kitty.colors import parse_colors"," return parse_colors([path])","","","def wear(palette):"," colors = theme(palette) if worn.get('startup') != palette else None"," if colors is None:"," return"," from kitty.colors import patch_colors"," patch_colors(colors[0], colors[1], True, ())"," worn['startup'] = palette","","","def rewear(boss):"," from kitty.colors import patch_colors"," for window in tuple(boss.all_windows):"," colors = theme(window.user_vars.get('ttheme_worn') or '')"," if colors is not None:"," patch_colors(colors[0], colors[1], False, (window,))","","","def on_load(boss, data):"," if getattr(boss, 'ttheme_rewears', False):"," return"," load = boss.load_config_file",""," def reload(*args, **kwargs):"," load(*args, **kwargs)"," worn.pop('startup', None)"," rewear(boss)",""," boss.load_config_file = reload"," boss.ttheme_rewears = True","","","def on_set_user_var(boss, window, data):"," if data['key'] == 'ttheme_shown':"," show(window)"," elif data['key'] == 'ttheme_startup':"," wear(data['value'] or '')","","","def on_focus_change(boss, window, data):"," if data['focused']:"," show(window)","","","def on_close(boss, window, data):"," shown.pop(window.id, None)",""].join(`
250
- `)}import{createHash as pw}from"node:crypto";import{existsSync as Ph,mkdirSync as ww,readdirSync as $w,readFileSync as Hh,renameSync as Lh,rmSync as Dt}from"node:fs";import{basename as Ah,isAbsolute as bw,join as oe}from"node:path";import{chmodSync as uw,copyFileSync as cw,existsSync as Bt,mkdirSync as aw,readFileSync as Qs,realpathSync as hw,renameSync as fw,rmSync as Sh,statSync as lw,writeFileSync as gw}from"node:fs";import{dirname as dw}from"node:path";function vh(e){return`${e}.ttheme.bak`}var mw=/^(?:#|--) ttheme begin$|path = "ttheme-/m;function qs(e){let n=vh(e);if(Bt(e)&&!Bt(n)&&!mw.test(Qs(e,"utf8")))cw(e,n)}function $e(e,n){let t=Bt(e)?hw(e):e;aw(dw(t),{recursive:!0});let r=`${t}.ttheme-${process.pid}`;if(gw(r,n),Bt(t))uw(r,lw(t).mode&4095);fw(r,t)}function zr(e,n){if((Bt(e)?Qs(e,"utf8"):void 0)===n)return!1;return qs(e),$e(e,n),!0}function Mh(e,n){let t=vh(e),r=Bt(t)?Qs(t,"utf8"):void 0;if(n===""&&r===void 0)return Sh(e,{force:!0}),"removed";if($e(e,n),r===void 0||r===n)return Sh(t,{force:!0}),"restored";return"kept backup"}var Ys={width:2560,height:1550},kw=2560,Ew=0.1,Un={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},yw=qe(Xs("#19161e","#9b86c8",0.2)),Sw="shelf",lo="originals",vw="images.json",Zs=1;function Xs(e,n,t){let r=Ke(e),i=Ke(n);return`#${r.map((o,s)=>Math.round(o+((i[s]??0)-o)*t).toString(16).padStart(2,"0")).join("")}`}function Mw(e,n){if(n==="background"||n==="foreground"||n==="cursor")return e[n];if(n==="selection"&&e.selection)return e.selection;let t=/^ansi(\d|1[0-5])$/.exec(n),r=t?e.ansi[Number(t[1])]:void 0;if(!r)throw Error(`${e.name} has no slot ${n}`);return r}function Ih(e){if(e(1))return 1;let n=0,t=1;for(let r=0;r<40;r++){let i=(n+t)/2;if(e(i))n=i;else t=i}return n}function Nh(e,n){let t=Mw(e,n),i=Ih((a)=>Fc({name:e.name,background:Xs(e.background,t,a),foreground:e.foreground,ansi:e.ansi,waive:e.waived??[]}).length===0),o=Ih((a)=>qe(Xs(e.background,t,a))<=yw),s=Math.floor(Math.min(i,o)*1000)/1000,u=Ke(e.background),c=Math.hypot(...Ke(t).map((a,h)=>(a-(u[h]??0))*s));return{slot:n,color:t,cap:i,matched:o,opacity:s,reach:c}}function xt(e,n){let t=Nh(e,"cursor");if(t.opacity>=Ew)return t;return n.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>Nh(e,r)).reduce((r,i)=>i.reach>r.reach?i:r,t)}function Vs(e,n,t){let r=Ke(n),i=Ke(t),o=e.data;for(let s=0;s<o.length;s+=4){let u=(0.299*(o[s]??0)+0.587*(o[s+1]??0)+0.114*(o[s+2]??0))/255;for(let c=0;c<3;c++)o[s+c]=Math.round((r[c]??0)+((i[c]??0)-(r[c]??0))*u)}return e}function Iw(e,n,t){let r=Ke(n),i=e.data,o=new Uint8Array(i.length);for(let s=0;s<i.length;s+=4){let u=(i[s+3]??0)/255*t;for(let c=0;c<3;c++)o[s+c]=Math.round((r[c]??0)*(1-u)+(i[s+c]??0)*u);o[s+3]=255}return{width:e.width,height:e.height,data:o}}function Th(e){return Ca(e)??{x:0,y:0,w:e.width,h:e.height}}function Nw(e,n){if(e<=0||n<=0)return Ys;let t=Math.min(1,Ys.width/Math.max(e,n));return{width:Math.round(e*t),height:Math.round(n*t)}}function Ow(e,n){let t=Math.min(1,kw/Math.max(n.w,n.h));return ro(e,n,Math.round(n.w*t),Math.round(n.h*t))}function Gh(e,n,t,r){if(r<Un.stands){let c=e.w*t>e.h*n?{x:e.x+(e.w-e.h*n/t)/2,y:e.y,w:e.h*n/t,h:e.h}:{x:e.x,y:e.y,w:e.w,h:e.w*t/n};return{crop:c,at:{x:0,y:0,w:n,h:t},focus:(c.y-e.y+c.h/2)/e.h}}let i=Math.max(Un.tall*t,Un.reach*n*e.h/e.w),o=i*e.w/e.h;if(o>Un.widest*n)o=Un.widest*n,i=o*e.h/e.w;let s=Un.headroom*t,u=Math.min(1,(t-s)/i);return{crop:{x:e.x,y:e.y,w:e.w,h:e.h*u},at:{x:n*(1-Un.margin)-o,y:s,w:o,h:i*u},focus:Math.min(1,(t/2-s)/i)}}function Ds(e,n,t,r){let i=Math.max(1,Math.round(n.at.w)),o=Math.max(1,Math.round(n.at.h)),s=ro(e,n.crop,i,o),u=new Uint8Array(t*r*4),c=Math.round(n.at.x),a=Math.round(n.at.y);for(let h=0;h<o;h++){let f=a+h,l=Math.max(0,-c),g=Math.min(i,t-c);if(f<0||f>=r||g<=l)continue;u.set(s.data.subarray((h*i+l)*4,(h*i+g)*4),(f*t+c+l)*4)}return{width:t,height:r,data:u}}function Uh(e,n,t,r,i){let o=Th(e),s=Ds(e,Gh(o,r,i,Dn(e,o)),r,i);return Iw(Vs(s,n.background,t.color),n.background,t.opacity)}function Ze(e){return oe(e,"ttheme","backgrounds")}function zs(e){return oe(e,vw)}function Br(e){try{return Hh(e,"utf8")}catch{return}}function rt(e){try{return $w(e)}catch{return[]}}function Nn(e){let n=Br(zs(e));if(n===void 0)return Fw(e);let t=JSON.parse(n);if(t.version!==Zs)throw Error(`${zs(e)} is version ${t.version} — this ttheme reads version ${Zs}`);return t}function Rw(e,n){let t=n.pictures.findIndex((i)=>i.key===n.active),r=n.pictures[t];return[...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${t+1}/${n.pictures.length}`,`background-image = ${oe(e,r.fill)}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${r.opacity}`,`config-file = ?${r.stem}.tune.conf`,`config-file = ?${r.stem}.off.conf`,""].join(`
251
- `)}function Dr(e,n,t){$e(zs(e),`${JSON.stringify(n,null,2)}
252
- `);for(let r of t){let i=n.palettes[r],o=oe(e,`${nt(r)}.conf`);if(i)$e(o,Rw(e,i));else Dt(o,{force:!0})}}function jh(e,n){for(let t of rt(e))if(t.startsWith(`${n.stem}.`)||t.startsWith(`${n.stem}@`))Dt(oe(e,t),{force:!0});if(n.original)Dt(oe(e,n.original),{force:!0})}function Oh(e,n,t,r){let i=Ah(/^background-image\s*=\s*(.*?)\s*$/m.exec(n??"")?.[1]??"");if(!i.startsWith(`${e}.`)||!/^\.[0-9a-f]{8}@fill-\d+\.png$/.test(i.slice(e.length)))return;let o=i.slice(0,i.indexOf("@")),s=r??/^# image (\S+)$/m.exec(n??"")?.[1]??`picture_${o.slice(e.length+1)}`,u=/^# from (.+)$/m.exec(n??"")?.[1],c=Number(/^background-image-opacity\s*=\s*(\S+)/m.exec(n??"")?.[1]??1),a=t.find((h)=>h.startsWith(`${e}-${s}.`));return{key:s,stem:o,fill:i,opacity:Number.isFinite(c)?c:1,...u?{from:u}:{},...a?{original:oe(lo,a)}:{}}}function Rh(e,n){if(Ph(e))Lh(e,n)}function Fw(e){let n={version:Zs,palettes:{}};if(!Ph(e))return n;let t=rt(oe(e,lo)),r=rt(e).filter((o)=>o.endsWith(".conf")&&o!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(o)).map((o)=>o.slice(0,-5)),i=oe(e,Sw);for(let o of new Set([...r,...rt(i)])){let s=[],u=Oh(o,Br(oe(e,`${o}.conf`)),t);if(u)Rh(oe(e,`${o}.tune.conf`),oe(e,`${u.stem}.tune.conf`)),Rh(oe(e,`${o}.off.conf`),oe(e,`${u.stem}.off.conf`)),s.push(u);for(let c of rt(oe(i,o))){let a=oe(i,o,c),h=Oh(o,Br(oe(a,".conf")),t,c);if(!h)continue;for(let f of rt(a)){let l=f===".tune.conf"||f===".off.conf"?`${h.stem}${f}`:`${o}${f}`;if(f!==".conf")Lh(oe(a,f),oe(e,l))}Dt(a,{recursive:!0}),s.push(h)}if(rt(oe(i,o)).length===0)Dt(oe(i,o),{recursive:!0,force:!0});if(s.length>0)s.sort((c,a)=>c.key<a.key?-1:c.key>a.key?1:0),n.palettes[o]={active:(u??s[0]).key,pictures:s}}if(rt(i).length===0)Dt(i,{recursive:!0,force:!0});return Dr(e,n,Object.keys(n.palettes)),n}function Fh(e,n,t){return n.startsWith("~/")?oe(t,n.slice(2)):bw(n)?n:oe(e,n)}function Jh(e,n,t){let r=new Map,i=(u,c)=>{let a=Br(u);if(a===void 0)return!1;for(let h of a.split(`
253
- `)){let f=/^([a-z-]+)\s*=\s*(.*?)\s*$/.exec(h);if(f?.[1]==="config-file"&&c<4)i(Fh(e,f[2].replace(/^\?/,""),t),c+1);else if(f&&/^background-image(?:-fit|-opacity)?$/.test(f[1]))r.set(f[1],f[2])}return!0};if(!i(oe(e,`${nt(n)}.conf`),0))return;let o=r.get("background-image")??"";if(o==="")return;let s=Number(r.get("background-image-opacity")??1);return{image:Fh(e,o,t),opacity:Number.isFinite(s)?s:1,cover:r.get("background-image-fit")==="cover"}}function St(e){return`${e.site}_${e.id}`}function Ch(e,n,t){let r=Ze(e),i=Nn(r),o=i.palettes[n];if(!o||o.pictures.length<2)throw Error(`${n} has no other image`);let s=o.pictures.length,u=(o.pictures.findIndex((c)=>c.key===o.active)+t+s)%s;return o.active=o.pictures[u].key,Dr(r,i,[n]),{key:o.active,at:u+1,of:s}}function Kh(e,n){let t=Ze(e),r=Nn(t),i=r.palettes[n];if(!i)throw Error(`${n} has no image`);let o=i.pictures.findIndex((c)=>c.key===i.active),[s]=i.pictures.splice(o,1);jh(t,s);let u=i.pictures[o%Math.max(i.pictures.length,1)];if(u)i.active=u.key;else delete r.palettes[n];return Dr(t,r,[n]),{key:s.key,left:i.pictures.length}}function go(e,n,t,r,i,o){let s=Ze(e),u=n.name,c=St(i),a=Nn(s),h=a.palettes[u]??{active:c,pictures:[]},f=Th(r),{width:l,height:g}=Nw(o.width,o.height),m=Gh(f,l,g,Dn(r,f)),d=wt(Vs(Ow(r,f),n.background,t.color)),b=wt(Vs(Ds(r,m,l,g),n.background,t.color)),y=`${nt(u)}.${pw("sha1").update(d).update(b).digest("hex").slice(0,8)}`,I={key:c,stem:y,fill:`${y}@fill-${Math.round(m.focus*100)}.png`,opacity:t.opacity,...i.from?{from:i.from}:{},original:oe(lo,`${nt(u)}-${c}.${i.ext}`)},k=h.pictures.find((p)=>p.key===c);if(k)jh(s,k);let S=[oe(s,`${y}.png`),oe(s,I.fill),oe(s,I.original)];return ww(oe(s,lo),{recursive:!0}),$e(S[0],d),$e(S[1],b),$e(S[2],i.bytes),h.pictures=k?h.pictures.map((p)=>p===k?I:p):[...h.pictures,I],h.active=c,a.palettes[u]=h,Dr(s,a,[u]),[...S,oe(s,`${nt(u)}.conf`)]}function Wh(e,n,t){let r=Ze(e),i=Nn(r),o=i.palettes[n];if(o?.pictures.some((s)=>s.key===t)&&o.active!==t)o.active=t,Dr(r,i,[n])}function xr(e,n){let t=Nn(Ze(e)).palettes[n];if(!t)return[];return[...t.pictures.filter((i)=>i.key===t.active),...t.pictures.filter((i)=>i.key!==t.active)]}var Bs="top-right";function Pw(e,n,t,r,i,o,s,u=-1){let c=Math.trunc,a=(o-1)%3,h=c((o-1)/3),f=t*n>=r*e!==!s,l=f?c(i*t/100):c(i*r*e/(100*n)),g=f?c(i*t*n/(100*e)):c(i*r/100),m=c(a*(t-l)/2),d=c(h*(r-g)/2);if(u>=0){if(l>t)m=c((t-l)/2);if(g>r)d=Math.max(r-g,Math.min(0,c(r/2)-c(u*g/100)))}return{x:m,y:d,w:l,h:g}}function _h(e,n){let t=Br(oe(e,`${n.stem}.tune.conf`));if(t===void 0)return{};let r=(a)=>new RegExp(`^${a}\\s*=\\s*(.*?)\\s*$`,"m").exec(t)?.[1]??"",i=Ah(r("background-image")),o=/@(\d+)-/.exec(i)?.[1],s=/@fill-\d+\.png$/.test(i)?"fill":o?Number(o):r("background-image-fit")==="cover"?"fill":100,u=r("background-image-position").replace("center-center","center")||"center",c=Number(r("background-image-opacity")||1);return{...s!=="fill"?{size:s}:{},...u!==Bs?{position:u}:{},...Number.isFinite(c)&&c!==n.opacity?{opacity:c}:{}}}function Qh(e,n,t,r,i){let o=t.size??"fill",s=t.position??Bs,u=t.opacity??n.opacity;if(o==="fill"&&s===Bs&&u===n.opacity)return;let c=yt.indexOf(s)+1,a=oe(e,`${n.stem}.png`),h=oe(e,n.fill),f=!0,l=typeof o==="number"&&(o>100||!r&&s!=="center");if(o===100&&!l)h=a,f=!1;else if(typeof o==="number"){let m=Us(new Uint8Array(Hh(a))),{width:d,height:b}=l?Ys:m,y=l?Number(/@fill-(\d+)\.png$/.exec(n.fill)?.[1]??50):-1,I=Pw(m.width,m.height,d,b,o,c,!1,y);h=oe(e,`${n.stem}@${o}-${s}${l?`-${d}x${b}`:""}.png`);let k=Ds(m,{crop:{x:0,y:0,w:m.width,h:m.height},at:I,focus:y},d,b);$e(h,wt(k)),f=l}let g=oe(e,`${n.stem}.tune.conf`);return $e(g,[`background-image = ${h.startsWith(`${i}/`)?`~${h.slice(i.length)}`:h}`,`background-image-fit = ${f?"cover":"contain"}`,`background-image-position = ${s}`,`background-image-opacity = ${u}`,""].join(`
254
- `)),g}function qh(e){let n=new Map;for(let[t,r]of Object.entries(Nn(Ze(e)).palettes)){let[,i,o]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&o)n.set(t,{site:i,id:Number(o)})}return n}function wn(e){let{slot:n,color:t,opacity:r}=xt({name:e.name,background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selectionBackground,ansi:e.ansi,waived:e.waive},e.signatureSlots);return{name:e.name,...e.base?{base:e.base}:{},group:e.group,...e.native?{native:e.native}:{},...e.lead?{lead:!0}:{},order:e.order,ansiSource:e.ansiSource,...e.booru?{booru:e.booru}:{},...e.booruSites?{booruSites:e.booruSites}:{},...e.role==="default"?{default:!0}:{},background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selectionBackground,signature:e.signature,signatureSlots:e.signatureSlots,ansi:e.ansi,gate:_t(e),...e.waive.length>0?{waived:e.waive}:{},backdrop:{slot:n,color:t,opacity:r},...e.pictures?{pictures:e.pictures}:{}}}function un(e){return{name:e.name,...e.base?{base:e.base}:{},group:e.group,...e.native?{native:e.native}:{},lead:e.lead===!0,order:e.order,...e.default?{role:"default"}:{},ansiSource:e.ansiSource,...e.booru?{booru:e.booru}:{},...e.booruSites?{booruSites:e.booruSites}:{},background:e.background,foreground:e.foreground,cursor:e.cursor,selectionBackground:e.selection,ansi:e.ansi,signature:e.signature,signatureSlots:e.signatureSlots,ghostty:{iconGhost:e.cursor,iconScreen:[e.cursor,e.selection,e.background]},waive:e.waived??[],...e.pictures?{pictures:e.pictures}:{}}}function cn(e){return e.filter((n)=>n.default!==!0)}function ei(){return{version:_e.version,gate:mt,placement:Un,palettes:[]}}function Hw(e){let[n]=e;if(!n)throw Error("manifest needs at least one theme");return{...ei(),palettes:e.map(wn)}}var xs={id:"meta",emitShared(e){return[{path:"manifest.json",content:`${JSON.stringify(Hw(e),null,2)}
255
- `}]}};var Lw=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],Aw=[{section:"tab",title:"This tab"},{section:"startup",title:"New tabs"},{section:"catalog",title:"Palettes"},{section:"own",title:"Your own"},{section:"setup",title:"Setup"}],ti=[{name:"preview",args:[],about:"browse live — focus repaints, enter keeps (this tab or default), esc restores, ? lists keys",section:"tab",start:"try every palette live — enter keeps the one you land on",shell:!0},{name:"use",args:["<palette>"],about:"paint this tab — a unique prefix works: ttheme use ho",section:"tab",start:"paint this tab with one — ttheme use homura",shell:!0},{name:"next",args:[],about:"advance this tab to the next palette",section:"tab",shell:!0},{name:"default",args:["<palette>"],about:"make a palette the one new tabs open with",section:"startup"},{name:"on",args:[],about:"wear the default palette in new tabs again",section:"startup"},{name:"off",args:[],about:"take the palette and picture off every tab — the terminal's own colors until `ttheme on`",section:"startup"},{name:"pin",args:[],about:"pick a palette for this directory — cd into it repaints, cd out restores",section:"tab",shell:!0},{name:"unpin",args:[],about:"drop the palette pinned to this directory",section:"tab",shell:!0},{name:"config",args:[],about:"edit settings in $EDITOR — they apply in new tabs",section:"startup",shell:!0},{name:"browse",args:[],about:"pick palettes from the catalog in a live picker",section:"catalog",start:"install or drop palettes — every market you added, in one picker"},{name:"list",args:["[query]"],about:"show the catalog, marking what is installed",section:"catalog",flags:{json:{type:"boolean",about:"print the matches as JSON: name, group, installed"}}},{name:"add",args:["<palette...>"],about:"install palettes from the catalog, or from a share code: ttheme add tt1:…",section:"catalog"},{name:"remove",args:["<palette...>"],about:"uninstall palettes",section:"catalog"},{name:"update",args:[],about:"refresh every market you added",section:"catalog"},{name:"market",args:["[action]","[source]"],about:"the markets you added — add, remove and search them; init makes one of your own",actions:[["(none)","list the markets you added, with how many palettes each holds"],["add <source>","add one: a GitHub handle (alice/ttheme-palettes), owner/repo, a folder, or official"],["remove <name>","drop one — the palettes you installed from it keep working"],["search [query]","repositories on GitHub with the ttheme-market topic"],["init [folder]","make a market of your own, ~/.config/ttheme/market when no folder is given"]],section:"catalog"},{name:"new",args:["<name>"],about:"make a palette of your own, <name>@<you>, in your local market — installed at once",section:"own",flags:{from:{type:"string",value:"<palette>",about:"the palette to start from — the default one when left out"},in:{type:"string",value:"<market>",about:"the local market to put it in, when you have more than one"}}},{name:"edit",args:["<palette>"],about:"change one of your palettes in $EDITOR — the contrast gate advises, never refuses",section:"own"},{name:"check",args:["<palette>"],about:"measure a palette against the contrast gate and suggest colors that pass",section:"own",flags:{fix:{type:"boolean",about:"write the suggested colors into your palette"}}},{name:"share",args:["<palette>"],about:"print a share code — ttheme add <code> installs it anywhere, pictures included",section:"own"},{name:"init",args:[],about:"install the shell layer and wire your terminal configs",section:"setup",flags:{yes:{type:"boolean",short:"y",about:"accept every default without prompting"}}},{name:"uninstall",args:[],about:"take ttheme out of every terminal config and delete what it wrote",section:"setup",flags:{yes:{type:"boolean",short:"y",about:"remove without asking"}}},{name:"build",args:[],about:"emit dist/ for every terminal, plus the zsh palette table — from a checkout",section:"setup",hidden:!0,flags:{only:{type:"string",multiple:!0,value:"<terminal>",choices:Lw,about:"rebuild just this terminal — repeat it for more"}}},{name:"find",args:["<palette>"],about:"pick a booru background for a palette — preview opens this on tab",section:"setup",hidden:!0},{name:"image",args:["<palette>","<action>"],about:"switch a palette between its saved backgrounds, remove the one shown, or pass on tuning — preview calls this",section:"setup",hidden:!0}];function ni(e){let n=Object.entries(e.flags??{}).map(([t,{value:r}])=>`[--${t}${r?` ${r}`:""}]`);return[e.name,...n,...e.args].join(" ")}function eu(e,n=Math.max(...e.map(([t])=>t.length))){return e.map(([t,r])=>` ${t.padEnd(n)} ${r}`)}var Tw=[["npx @kecan0406/ttheme init -y","wire the terminals found here, no prompts"],["ttheme add homura madoka","install two palettes"],["ttheme use homura","paint this tab with one"],["ttheme list --json madoka","the madoka series as JSON"],["ttheme market add alice","palettes from alice's market — ttheme add dusk@alice"],["ttheme new dusk --from madoka","your own palette, dusk@<you>, to edit and share"]];function ri(e,n=!1){let t=ti.filter((s)=>!s.hidden&&!(n&&s.section==="setup")),r=Aw.filter(({section:s})=>t.some((u)=>u.section===s)),i=[...n?["ttheme alone lists every installed palette, grouped, with previews"]:[],e?"ttheme help <command> describes one command · ttheme --version prints the version":"ttheme help <command> describes one · ttheme help all lists every command with what it does","https://kecan0406.github.io/ttheme"];if(!e){let s=t.filter((c)=>c.start),u=Math.max(...r.map(({title:c})=>c.length));return["Usage: ttheme <command>","",_e.description,"","Start here",...eu(s.map((c)=>[ni(c),c.start])),"",...r.map(({section:c,title:a})=>`${a.padEnd(u)} ${t.filter((h)=>h.section===c).map((h)=>h.name).join(" · ")}`),"",...i].join(`
256
- `)}let o=Math.max(...t.map((s)=>ni(s).length));return["Usage: ttheme <command>","",_e.description,...r.flatMap(({section:s,title:u})=>["",u,...eu(t.filter((c)=>c.section===s).map((c)=>[ni(c),c.about]),o)]),"","Examples",...eu(Tw),"",...i].join(`
257
- `)}var mo=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],Vh="# ttheme begin",zh="# ttheme end",ii=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function oi(e,n){let t=`${Vh}
241
+ */import{readdirSync as Op,rmSync as Rp,statSync as Fp}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as Pp}from"node:net";import{homedir as Hp}from"node:os";import{join as Gr}from"node:path";import{setTimeout as Lp}from"node:timers/promises";var Qa=Ci(zc(),1),eo=Ci(Ka(),1),_a=[137,80,78,71,13,10,26,10],Za=13;function Hr(e){return e.length>=_a.length&&_a.every((n,t)=>e[t]===n)}function Us(e){let n=eo.PNG.sync.read(Buffer.from(e));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function Lr(e,n){if(Hr(e)){let t=Ar(e);if(t&&t.width*t.height>n)throw Error(`${t.width}×${t.height} is over ${n/1e6} megapixels`);return Us(e)}if(e[0]===255&&e[1]===216){let t=Qa.decode(e,{useTArray:!0,formatAsRGBA:!0,maxResolutionInMP:n/1e6,maxMemoryUsageInMB:1024});return{width:t.width,height:t.height,data:t.data}}throw Error("not a PNG or JPEG image")}function pt(e){let n=new eo.PNG({width:e.width,height:e.height});return n.data=Buffer.from(e.data),eo.PNG.sync.write(n)}function qa(e,n){for(let t=0;t+n.length<=e.length;t++){let r=!0;for(let i=0;i<n.length&&r;i++)r=e[t+i]===n.charCodeAt(i);if(r)return t}return-1}function Ar(e){if(e.length<33||!Hr(e))return null;let n=new DataView(e.buffer,e.byteOffset,e.byteLength),t=n.getUint32(16),r=n.getUint32(20);if(e[25]===4||e[25]===6)return{width:t,height:r,alpha:!0};let i=qa(e,"IDAT");return{width:t,height:r,alpha:qa(i===-1?e:e.subarray(0,i),"tRNS")!==-1}}function Ya(e,n=Za){let{width:t,height:r}=e,i=-1,o=-1;for(let s=0;s<e.height;s++)for(let u=0;u<e.width;u++)if((e.data[(s*e.width+u)*4+3]??0)>=n)t=Math.min(t,u),i=Math.max(i,u),r=Math.min(r,s),o=Math.max(o,s);return i<0?null:{x:t,y:r,w:i-t+1,h:o-r+1}}function Dn(e,n={x:0,y:0,w:e.width,h:e.height}){let t=0;for(let r=n.y;r<n.y+n.h;r++)for(let i=n.x;i<n.x+n.w;i++)if((e.data[(r*e.width+i)*4+3]??0)<Za)t++;return Math.round(t*100/(n.w*n.h))}function Np(e,n){if(n<=1)return e;let t=Math.max(1,Math.floor(e.width/n)),r=Math.max(1,Math.floor(e.height/n)),i=new Uint8Array(t*r*4),o=e.data;for(let s=0;s<r;s++)for(let u=0;u<t;u++){let c=0,a=0,h=0,f=0;for(let d=0;d<n;d++)for(let g=0;g<n;g++){let m=((s*n+d)*e.width+u*n+g)*4,b=o[m+3]??0;c+=(o[m]??0)*b,a+=(o[m+1]??0)*b,h+=(o[m+2]??0)*b,f+=b}let l=(s*t+u)*4;if(f>0)i[l]=Math.round(c/f),i[l+1]=Math.round(a/f),i[l+2]=Math.round(h/f);i[l+3]=Math.round(f/(n*n))}return{width:t,height:r,data:i}}function Xa(e,n,t){let r=Math.min(n/e.width,t/e.height),i=Math.max(1,Math.round(e.width*r)),o=Math.max(1,Math.round(e.height*r)),s=no(e,{x:0,y:0,w:e.width,h:e.height},i,o),u=new Uint8Array(n*t*4),c=Math.floor((n-i)/2),a=Math.floor((t-o)/2);for(let h=0;h<o;h++)u.set(s.data.subarray(h*i*4,(h+1)*i*4),((a+h)*n+c)*4);return{width:n,height:t,data:u}}function no(e,n,t,r){let i=Math.max(1,Math.floor(Math.min(n.w/t,n.h/r))),o=Np(e,i),s=o.data,u=new Uint8Array(t*r*4);for(let c=0;c<r;c++){let a=Math.min(o.height-1,Math.max(0,n.y/i+(c+0.5)*n.h/i/r-0.5)),h=Math.floor(a),f=Math.min(o.height-1,h+1),l=a-h;for(let d=0;d<t;d++){let g=Math.min(o.width-1,Math.max(0,n.x/i+(d+0.5)*n.w/i/t-0.5)),m=Math.floor(g),b=Math.min(o.width-1,m+1),S=g-m,I=(h*o.width+m)*4,k=(h*o.width+b)*4,y=(f*o.width+m)*4,p=(f*o.width+b)*4,P=(s[I+3]??0)*(1-S)*(1-l),E=(s[k+3]??0)*S*(1-l),R=(s[y+3]??0)*(1-S)*l,N=(s[p+3]??0)*S*l,H=P+E+R+N,A=(c*t+d)*4;if(H>0)for(let X=0;X<3;X++){let j=(s[I+X]??0)*P+(s[k+X]??0)*E+(s[y+X]??0)*R+(s[p+X]??0)*N;u[A+X]=Math.round(j/H)}u[A+3]=Math.round(H)}}return{width:t,height:r,data:u}}var wt=100,vn=25000000,Ap=536870912,Ur=["safe","questionable","explicit"],$t=["nudity","underwear"],Tp={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},Tr={safe:"s",questionable:"q",explicit:"e"},Gp=8191,Up=20000,jp=5000,Va=3000,za=8,Jp=3000,eh=60000,Ba=3,Js=`ttheme/${_e.version} (+${_e.homepage})`,Cp=["orig","tile","thumb","cut"],nh=new Map,Wp=Bp(process.env.TTHEME_FIND_HOSTS),Kp=zp(process.env.TTHEME_FIND_CUTOUTS);Pp(Jp);function Da(e){try{return Op(e)}catch{return[]}}function to(e){return e.startsWith("//")?`https:${e}`:e}function jr(e){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(e)?.[1]??"").toLowerCase()}function Jr(e){let n=e.trim();if(!n)return[];let t=JSON.parse(n);if(Array.isArray(t))return t;let r=t.posts;return Array.isArray(r)?r:[]}function _p(e){let n=e.trim(),r=(n?JSON.parse(n):{}).tags??{};return new Map(Object.entries(r).map(([i,o])=>[i,String(o)]))}function js(e,n,t){let r=to(String(e??""));return{file:r,width:Number(n)||0,height:Number(t)||0,ext:jr(r)}}function th(e,n){let t=to(String(n.preview??""));if(!n.file||!t||!Number(e.id))return[];let r=Number(e.width??e.image_width)||0,i=Number(e.height??e.image_height)||0;return[{id:Number(e.id),width:r,height:i,file:n.file,preview:t,ext:n.ext,owner:String(n.owner??""),artist:n.artist,score:Number(e.score)||0,rating:String(e.rating??""),md5:String(n.md5??""),source:String(e.source??""),tags:n.tags.split(/\s+/).filter(Boolean),solo:n.solo,family:Number(e.parent_id)||(e.has_children===!0?Number(e.id):0),smaller:n.versions.filter((o)=>o.file&&o.width>0&&o.height>0&&o.width*o.height<r*i)}]}function qp(e){let n=_p(e);return Jr(e).flatMap((t)=>{let r=to(String(t.file_url??"")),i=String(t.tags??"");return th(t,{preview:t.preview_url,file:r,ext:String(t.file_ext||jr(r)).toLowerCase(),owner:t.author,artist:i.split(/\s+/).find((o)=>n.get(o)==="artist")??"",md5:t.md5,tags:i,solo:void 0,versions:[js(t.jpeg_url,t.jpeg_width,t.jpeg_height),js(t.sample_url,t.sample_width,t.sample_height)]})})}function Qp(e){return Jr(e).flatMap((n)=>{let t=to(String(n.file_url??"")),r=String(n.tag_string??""),i=n.media_asset??{};return th(n,{preview:i.variants?.find((o)=>o.type==="360x360")?.url??n.preview_file_url,file:t,ext:String(n.file_ext||jr(t)).toLowerCase(),owner:"",artist:String(n.tag_string_artist??"").split(/\s+/)[0]??"",md5:n.md5,tags:r,solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((o)=>js(o.url,o.width,o.height)).filter((o)=>o.ext==="jpg"||o.ext==="png").sort((o,s)=>s.width*s.height-o.width*o.height)})})}function Zp(e){return Jr(e).flatMap((n)=>{let t=String(n.value??"");return t?[{value:t,count:Number(n.post_count)||0}]:[]})}function Yp(e){return Jr(e).flatMap((n)=>{let t=String(n.name??"");return t?[{value:t,count:Number(n.count)||0}]:[]})}function Xp(e){return Number(/count="(\d+)"/.exec(e)?.[1]??0)}function Vp(e){let n=e.trim()?JSON.parse(e):{};return Number(n.counts?.posts)||0}function zp(e){let n=new Map;for(let t of(e??"").split(/\s+/).filter(Boolean)){let r=t.indexOf("=");if(r>0)n.set(t.slice(0,r),t.slice(r+1).split(",").filter(Boolean))}return n}function Bp(e){let n=new Map;for(let t of(e??"").split(/[\s,]+/).filter(Boolean)){let r=t.indexOf("="),i=t.slice(0,r);try{let o=new URL(t.slice(r+1));if(i&&o.protocol==="https:")n.set(i,o.origin)}catch{}}return n}function rh(e,n,t,r){let i=(e??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let o=n.filter((s)=>i.includes(s));return o.length>0?o:[...t]}function Xt(e){return rh(e,Ur,["safe"])}function Vt(e){return rh(e,$t,$t,"none")}function ih(e,n,t){return{safe:new Set(e),questionable:new Set(n),explicit:new Set(t)}}function oh(e){let n=Wp.get(e.key),t=Kp.get(e.key);return{...e,origin:n??e.origin,moved:n!==void 0&&n!==e.origin,cutouts:t??e.cutouts,vouched:e.vouched&&t===void 0}}function sh(e){return e.length<2?e.join(""):e.map((n)=>`~${n}`).join(" ")}function xa(e){let n=oh(e),t=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...n,cutouts:sh(n.cutouts),ratings:ih([Tr.safe],[Tr.questionable],[Tr.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${Tr[i]}`;let o=Ur.filter((u)=>!r.includes(u)),[s]=o;return o.length===1&&s?`-rating:${Tr[s]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,postsUrl:(r,i)=>`${n.origin}/post.json?${t({limit:String(wt),page:String(i+1),tags:r})}`,countUrl:(r)=>`${n.origin}/post.xml?${new URLSearchParams({limit:"1",tags:r})}`,postUrl:(r)=>`${n.origin}/post.json?${t({tags:`id:${r}`})}`,pageUrl:(r)=>`${n.origin}/post/show/${r}`,parse:qp,count:Xp}}function Dp(e){let n=oh(e),t=ih(["g"],["s","q"],["e"]);return{...n,cutouts:sh(n.cutouts),ratings:t,rate:(r)=>r.length===Ur.length?"":`rating:${r.flatMap((i)=>[...t[i]]).join(",")}`,best:"order:score",tagBudget:2,postsUrl:(r,i)=>`${n.origin}/posts.json?${new URLSearchParams({limit:String(wt),page:String(i+1),tags:r})}`,countUrl:(r)=>`${n.origin}/counts/posts.json?${new URLSearchParams({tags:r})}`,postUrl:(r)=>`${n.origin}/posts.json?${new URLSearchParams({limit:"1",tags:`id:${r}`})}`,pageUrl:(r)=>`${n.origin}/posts/${r}`,parse:Qp,count:Vp}}function xp(e){return x.find((n)=>n.key===e||n.name===e||new URL(n.origin).host===e)}function Cs(e){return e.split(/\s+/).filter((n)=>n&&!n.startsWith("rating:")).length}function ro(e,n){let t=e.trim();if(/^\d+$/.test(t))return{site:n,id:Number(t)};let r=/^([\w.]+):(\d+)$/.exec(t);if(r){let u=x.find((c)=>c.key===r[1]||c.name===r[1]);return u&&{site:u,id:Number(r[2])}}let i;try{i=new URL(t)}catch{return}let o=xp(i.host),s=Number(i.searchParams.get("id")??i.pathname.split("/").filter(Boolean).at(-1));return o&&s>0?{site:o,id:s}:void 0}var x=[Dp({key:"danbooru",name:"danbooru",origin:"https://danbooru.donmai.us",cutouts:["transparent_background"],vouched:!1,tunneled:!0,ansi:2}),xa({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,tunneled:!1,ansi:6}),xa({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,tunneled:!1,ansi:5})],Gn=134217728;function Mn(e,n){let t=x.indexOf(e);return(t===-1?x.length:t)*Gn+n}function Ws(e){let n;try{n=new URL(e).hostname}catch{return""}return n.split(".").slice(-2).join(".")}function uh(){return x.filter((e)=>!e.tunneled).map((e)=>Ws(e.origin)).flatMap((e)=>[e,`.${e}`]).join(",")}function io(e,n=$t){return e.tags.filter((t)=>n.some((r)=>Tp[r].has(t)))}function oo(e,n,t=["safe"]){return t.some((r)=>e.ratings[r].has(n.rating))}function bt(e){return[e,...e.smaller].find((n)=>n.width*n.height<=vn)}function ch(e){let n=new Map;for(let[t,r]of[...e].sort(([i],[o])=>i<o?-1:1)){if(r==="")continue;n.set(r,[...n.get(r)??[],t])}return n}function so(){return Gr(process.env.XDG_CACHE_HOME??Gr(Hp(),".cache"),"ttheme")}function pn(e){return Gr(so(),e.key)}function ah(e=Ap,n=so()){let t=[],r=0;for(let i of Da(n))for(let o of Cp){let s=Gr(n,i,o);for(let u of Da(s)){let c=Gr(s,u);try{let{size:a,mtimeMs:h}=Fp(c);t.push({path:c,size:a,at:h}),r+=a}catch{}}}t.sort((i,o)=>i.at-o.at);for(let i of t){if(r<=e)return;try{Rp(i.path,{force:!0}),r-=i.size}catch{}}}function ew(e,n){if(e!==null&&/^\s*\d+\s*$/.test(e))return Number(e)*1000;let t=e===null?Number.NaN:Date.parse(e);return Number.isNaN(t)?eh:Math.max(0,t-n)}function xn(e){return nh.get(e.key)??0}function nw(e){for(let n=e;n instanceof Error;n=n.cause)if(n.code==="ECONNRESET")return!0;return!1}function tw(e){return(e.headers.get("server")??"").startsWith("cloudflare")&&e.headers.get("cf-mitigated")==="challenge"}async function et(e,n,t,r={},i=Up){for(let o=1;;o++){let s=xn(e)-Date.now();if(s>0)await Lp(s,void 0,{signal:t});let u;try{u=await fetch(n,{headers:{"User-Agent":Js,Referer:`${e.origin}/`,...r},signal:i?AbortSignal.any([t,AbortSignal.timeout(i)]):t})}catch(c){if(o<Ba&&!t.aborted&&nw(c))continue;throw c}if(u.status===429&&o<Ba){await u.body?.cancel();let c=ew(u.headers.get("retry-after"),Date.now());if(c>eh)throw Error(`${e.name} asks to wait ${Math.ceil(c/1000)}s`);nh.set(e.key,Math.max(xn(e),Date.now()+c));continue}if(!u.ok)throw await u.body?.cancel(),Error(tw(u)?`${e.name} is behind a Cloudflare challenge`:`${e.name} answered ${u.status}`);return u}}async function hh(e,n,t,r){return e.parse(await(await et(e,e.postsUrl(n,t),r)).text())}async function fh(e,n,t){return e.count(await(await et(e,e.countUrl(n),t)).text())}async function Cr(e,n,t){let[r]=e.parse(await(await et(e,e.postUrl(n),t)).text());return r}function rw(e){let n=x.find((r)=>r.key==="danbooru"),t=new URLSearchParams({limit:String(2*wt),only:"md5,tag_string",tags:`md5:${e.join(",")}`});return`${n.origin}/posts.json?${t}`}function iw(e){return new Map(Jr(e).flatMap((n)=>{let t=String(n.md5??"");return t?[[t,String(n.tag_string??"").split(/\s+/).filter(Boolean)]]:[]}))}function lh(e,n){for(let t of e){let r=n.get(t.md5);if(r)t.tags=[...new Set([...t.tags,...r])],t.solo=r.includes("solo")}}async function dh(e,n){let t=x.find((i)=>i.key==="danbooru"),r=new Map;if(xn(t)>Date.now())return r;for(let i=0;i<e.length;i+=wt){let o=await(await et(t,rw(e.slice(i,i+wt)),n,{},jp)).text();for(let[s,u]of iw(o))r.set(s,u)}return r}async function gh(e,n){let t=x.find((o)=>o.key==="danbooru");if(xn(t)<=Date.now())try{let o=new URLSearchParams({"search[query]":e,"search[type]":"tag_query",limit:String(za)}),s=`${t.origin}/autocomplete.json?${o}`;return Zp(await(await et(t,s,n,{},Va)).text())}catch(o){if(n.aborted)throw o}let r=x.find((o)=>o.key==="yande"),i=new URLSearchParams({name:e,order:"count",limit:String(za)});return Yp(await(await et(r,`${r.origin}/tag.json?${i}`,n,{},Va)).text())}async function mh(e,n,t){let r=await et(e,n,t,{Range:`bytes=0-${Gp}`});return Ar(new Uint8Array(await r.arrayBuffer()))}async function uo(e,n,t,r){let i=await et(e,n,t,{},0),o=Number(i.headers.get("content-length"))||0,s=i.body?.getReader();if(!s)return new Uint8Array(await i.arrayBuffer());let u=[],c=0;for(;;){let{done:f,value:l}=await s.read();if(f)break;u.push(l),c+=l.length,r?.(c,o)}let a=new Uint8Array(c),h=0;for(let f of u)a.set(f,h),h+=f.length;return a}var Et=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right"],Wr="Original",uw=1e6,In="_groups.toml",ph=3,wh=8,Ks="[a-z0-9]+(?:-[a-z0-9]+)*",cw=new RegExp(`^(?:(${Ks})@(${Ks})/)?(${Ks})$`),Eh=["background","foreground","cursor","selection"];function ae(e,n){throw Error(`${e}: ${n}`)}function kt(e,n,t){if(typeof t!=="string"||!Wt(t))ae(e,`${n} must be "#rrggbb" (lowercase), got ${JSON.stringify(t)}`);return t}function Kr(e,n,t){if(typeof t!=="string"||t.length===0)ae(e,`${n} must be a non-empty string`);return t}function nt(e){return e.replace("@","--").replace("/","--")}function Te(e){let n=e.indexOf("/");return n<0?void 0:e.slice(0,n)}function ao(e){return e.slice(e.indexOf("/")+1)}function Nn(e){let n=cw.exec(e);if(!n)return"takes lowercase letters, digits and single hyphens, as <palette> or <owner>@<market>/<palette>";if((n[1]?.length??0)>39)return"has an owner longer than a GitHub handle can be";return(n[2]?.length??0)>40||(n[3]?.length??0)>40?"is longer than 40 characters":void 0}function _s(e){if(/[\p{Cc}"$`\\]/u.test(e))return"holds a control character, a quote, $, ` or \\";return e.length>80?"is longer than 80 characters":void 0}function co(e,n,t){let r=Kr(e,n,t),i=_s(r);if(i)ae(e,`${n} ${JSON.stringify(r)} ${i}`);return r}function $h(e,n,t){let r=Kr(e,n,t),i=Nn(r);if(i)ae(e,`${n} "${r}" ${i}`);return r}function zt(e){return e&&typeof e==="object"?e:{}}function aw(e,n,t){if(n===void 0)return[t.cursor,t.selectionBackground,t.background];let r=Array.isArray(n)?n:[n];if(r.length===0)ae(e,"ghostty.icon_screen must not be empty");return r.map((i,o)=>kt(e,`ghostty.icon_screen[${o}]`,i))}function hw(e,n,t){let r=zt(n);return{iconGhost:r.icon_ghost===void 0?t.cursor:kt(e,"ghostty.icon_ghost",r.icon_ghost),iconScreen:aw(e,r.icon_screen,t)}}function fw(e){return new Map([...Eh.map((n)=>[n,e[n]]),...e.ansi.map((n,t)=>[`ansi${t}`,n])])}function lw(e,n,t){if(!Array.isArray(n)||n.length!==ph)ae(e,`meta.signature must name exactly ${ph} palette slots`);let r=fw(t),i=[],o=[];for(let[s,u]of n.entries()){let c=`meta.signature[${s}]`,a=Kr(e,c,u),h=r.get(a);if(h===void 0)ae(e,`${c} ${JSON.stringify(u)} is not a palette slot — use ${Eh.join(", ")} or ansi0-ansi15`);i.push(a),o.push(h)}if(new Set(o).size!==o.length)ae(e,"meta.signature slots must resolve to three different colors");return{names:i,colors:o}}function dw(e,n,t){if(n===void 0)return;if(!t)ae(e,"meta.booru_sites renames meta.booru per site, so it needs meta.booru");if(!n||typeof n!=="object"||Array.isArray(n))ae(e,'meta.booru_sites must be a table of site = "tag" or site = ["tag", ...]');let r={};for(let[i,o]of Object.entries(n)){let s=x.find((c)=>c.key===i);if(!s)ae(e,`meta.booru_sites.${i} is not a find site — use ${x.map((c)=>c.key).join(", ")}`);let u=typeof o==="string"?[o]:Array.isArray(o)?o:void 0;if(!u||u.some((c)=>typeof c!=="string"||c===""||/\s/.test(c)))ae(e,`meta.booru_sites.${i} must be one tag or a list of tags, got ${JSON.stringify(o)}`);if(u.length>1&&Number.isFinite(s.tagBudget))ae(e,`meta.booru_sites.${i} takes one tag — ${s.name} searches ${s.tagBudget} tags at a time`);r[i]=u}return r}function gw(e,n){if(n===void 0)return;if(!Array.isArray(n)||n.length===0||n.length>wh)ae(e,`[[picture]] holds 1 to ${wh} pictures`);return n.map((t,r)=>{let i=zt(t),o=`picture[${r}]`,s=x.find((h)=>h.key===i.site);if(!s)ae(e,`${o}.site must be one of ${x.map((h)=>h.key).join(", ")}`);if(typeof i.id!=="number"||!Number.isSafeInteger(i.id)||i.id<=0)ae(e,`${o}.id must be the post's number on ${s.name}`);let{size:u,position:c,opacity:a}=i;if(u!==void 0&&u!=="fill"&&!(Number.isInteger(u)&&Number(u)>=20&&Number(u)<=999))ae(e,`${o}.size must be "fill" or a percentage from 20 to 999`);if(c!==void 0&&!Et.includes(c))ae(e,`${o}.position must be one of ${Et.join(", ")}`);if(a!==void 0&&!(typeof a==="number"&&a>=0&&a<=1))ae(e,`${o}.opacity must be a number from 0 to 1`);return{site:s.key,id:i.id,...u!==void 0?{size:u}:{},...c!==void 0?{position:c}:{},...a!==void 0?{opacity:a}:{}}})}function yh(e,n){try{return Es(n)}catch(t){ae(e,`is not valid TOML — ${(t instanceof Error?t.message:String(t)).split(`
242
+ `)[0]}`)}}function mw(e){let t=yh(In,bh(kh(e,In),"utf8")).group;if(!Array.isArray(t)||t.length===0)ae(In,"needs at least one [[group]] table");return t.map((r)=>{let i=zt(r);return{name:co(In,"group.name",i.name),native:i.native===void 0?void 0:co(In,"group.native",i.native),lead:Kr(In,"group.lead",i.lead)}})}function qs(e,n,t){let r=yh(e,n),i=zt(r.meta),o=zt(r.colors),s=zt(r.contrast),u=o.ansi;if(!Array.isArray(u)||u.length!==16)ae(e,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(u)?u.length:typeof u}`);let c=$h(e,"meta.name",i.name);if(c!==t.name)ae(e,`meta.name "${c}" does not match its file — it lives at ${t.name}`);let a=t.open===!0;for(let N of["order","role"])if(a&&i[N]!==void 0)ae(e,`meta.${N} is for the official palettes — a market palette follows its base`);let h=i.role;if(h!==void 0&&h!=="default")ae(e,`meta.role must be "default", got ${JSON.stringify(h)}`);let f=i.base===void 0?void 0:$h(e,"meta.base",i.base);if(f!==void 0&&!a)ae(e,"meta.base is for market palettes");let l=f===void 0?void 0:t.bases?.get(f),d=a&&i.group===void 0?l?.group??Wr:co(e,"meta.group",i.group),g=t.groups.get(d);if(!g&&!(a&&(d===Wr||t.open)))ae(e,`meta.group "${d}" has no [[group]] table in ${In}`);let m=kt(e,"colors.background",o.background),b=kt(e,"colors.foreground",o.foreground),S=kt(e,"colors.cursor",o.cursor),I=kt(e,"colors.selection_background",o.selection_background),k=u.map((N,H)=>kt(e,`colors.ansi[${H}]`,N)),y=lw(e,i.signature,{background:m,foreground:b,cursor:S,selection:I,ansi:k}),p=i.booru===void 0?void 0:Kr(e,"meta.booru",i.booru);if(p!==void 0&&/[\s\p{Cc}]/u.test(p))ae(e,`meta.booru must be a single booru tag, got ${JSON.stringify(p)}`);let P=dw(e,i.booru_sites,p),E=Array.isArray(s.waive)?s.waive.map(String):[];if(E.length>0&&typeof s.reason!=="string")ae(e,"contrast.waive needs a contrast.reason explaining why");let R=gw(e,r.picture);return{name:c,...f?{base:f}:{},group:d,native:g?.native,lead:!a&&g?.lead===c,order:a?l?.order??uw:Number(i.order),role:h,ansiSource:a&&i.ansi_source===void 0?f??"original":co(e,"meta.ansi_source",i.ansi_source),...p?{booru:p}:{},...P?{booruSites:P}:{},background:m,foreground:b,cursor:S,selectionBackground:I,ansi:k,signature:y.colors,signatureSlots:y.names,ghostty:hw(e,r.ghostty,{background:m,cursor:S,selectionBackground:I}),waive:E,waiveReason:typeof s.reason==="string"?s.reason:void 0,...R?{pictures:R}:{}}}function Sh(e){let n=mw(e),t=new Map(n.map((o)=>[o.name,o]));if(t.size!==n.length)ae(In,"group.name must be unique");let r=ow(e).filter((o)=>o.endsWith(".toml")&&!o.startsWith("_")).map((o)=>qs(o,bh(kh(e,o),"utf8"),{name:sw(o,".toml"),groups:t})).sort((o,s)=>o.order-s.order);if(new Set(r.map((o)=>o.order)).size!==r.length)throw Error("themes: meta.order must be unique across all themes");for(let o of n){let s=r.filter((u)=>u.group===o.name);if(s.length===0)ae(In,`group "${o.name}" has no themes`);if(!s.some((u)=>u.name===o.lead))ae(In,`group "${o.name}" lead "${o.lead}" is not one of its themes`)}return r}function vh(e){return e.filter((n)=>n.role===void 0)}function _r(e){let n=(r,i)=>r<i?-1:r>i?1:0,t=(r)=>Te(r.name)?r.name:r.base??r.name;return[...e].sort((r,i)=>Number(Te(r.name)!==void 0)-Number(Te(i.name)!==void 0)||n(r.group.toLowerCase(),i.group.toLowerCase())||n(t(r),t(i))||Number(r.base!==void 0)-Number(i.base!==void 0)||n(r.name,i.name))}var pw=["black","red","green","yellow","blue","magenta","cyan","white"];function Mh(e,n){return[e,...pw.map((t,r)=>`${t} = '${n[r]}'`),""].join(`
243
+ `)}var qr={id:"alacritty",limits:"no runtime color API (OSC only)",emit(e){let n=[...Bt(e),"","[colors.primary]",`background = '${e.background}'`,`foreground = '${e.foreground}'`,"","[colors.cursor]",`cursor = '${e.cursor}'`,`text = '${e.background}'`,"","[colors.selection]",`background = '${e.selectionBackground}'`,`text = '${e.foreground}'`,"",Mh("[colors.normal]",e.ansi.slice(0,8)),Mh("[colors.bright]",e.ansi.slice(8,16))].join(`
244
+ `);return[{path:`alacritty/themes/${fe(e.name)}.toml`,content:n}]}};var Qr={id:"ghostty",emit(e){let n=[...Bt(e),`background = ${e.background}`,`foreground = ${e.foreground}`,`cursor-color = ${e.cursor}`,`selection-background = ${e.selectionBackground}`,`selection-foreground = ${e.foreground}`,...e.ansi.map((t,r)=>`palette = ${r}=${t}`),"palette-generate = true","","macos-icon = custom-style",`macos-icon-ghost-color = ${e.ghostty.iconGhost}`,`macos-icon-screen-color = ${e.ghostty.iconScreen.join(",")}`,"macos-icon-frame = chrome",""].join(`
245
+ `);return[{path:`ghostty/themes/${fe(e.name)}`,content:n}]}};function tt(e){let[n,t,r]=We(e);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":t/255,"Red Component":n/255}}function Ih(e){return{...Object.fromEntries(e.ansi.map((n,t)=>[`Ansi ${t} Color`,tt(n)])),"Background Color":tt(e.background),"Bold Color":tt(e.foreground),"Cursor Color":tt(e.cursor),"Cursor Text Color":tt(e.background),"Foreground Color":tt(e.foreground),"Selected Text Color":tt(e.foreground),"Selection Color":tt(e.selectionBackground)}}function ww(e){return e?{"Background Image Location":e.image,"Background Image Mode":e.cover?2:3,Blend:e.opacity}:{"Background Image Location":""}}function Nh(e,n,t,r){let i=(s,u)=>({Name:`ttheme · ${u}`,Guid:fe(u),...r?{"Dynamic Profile Parent GUID":r}:{},"Use Separate Colors for Light and Dark Mode":!1,"Harmonize 256 Colors":!0,...ww(n.get(s.name)),...Ih(s)}),o=[...t?[i(t,"default")]:[],...e.map((s)=>i(s,s.name))];return`${JSON.stringify({Profiles:o},null,2)}
246
+ `}function $w(e,n){return[` <key>${e}</key>`,"\t<dict>",...Object.entries(n).flatMap(([t,r])=>[` <key>${t}</key>`,typeof r==="string"?` <string>${r}</string>`:` <real>${r}</real>`]),"\t</dict>"].join(`
247
+ `)}var Zr={id:"iterm2",limits:"colors are Display P3, the space iTerm2 reads OSC colors in",emit(e){let n=['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>",...Object.entries(Ih(e)).map(([t,r])=>$w(t,r)),"</dict>","</plist>",""].join(`
248
+ `);return[{path:`iterm2/${fe(e.name)}.itermcolors`,content:n}]}};var Yr={id:"kitty",emit(e){let n=[...Bt(e),`background ${e.background}`,`foreground ${e.foreground}`,`cursor ${e.cursor}`,`cursor_text_color ${e.background}`,`selection_background ${e.selectionBackground}`,`selection_foreground ${e.foreground}`,...e.ansi.map((t,r)=>`color${r} ${t}`),""].join(`
249
+ `);return[{path:`kitty/themes/${fe(e.name)}.conf`,content:n}]}};function Oh(e){return["# Generated by ttheme — rewritten on every add, remove and default; do not edit.","import os","",`THEMES = ${JSON.stringify(e.themes)}`,`BACKGROUNDS = ${JSON.stringify(e.backgrounds)}`,"PLACES = {"," 'top-left': 'top-left', 'top-center': 'top', 'top-right': 'top-right',"," 'center-left': 'left', 'center': 'center', 'center-center': 'center', 'center-right': 'right',"," 'bottom-left': 'bottom-left', 'bottom-center': 'bottom', 'bottom-right': 'bottom-right',","}","","shown = {}","faded = {}","worn = {}","","","def locate(path):"," if path.startswith('~/'):"," return os.path.expanduser(path)"," return path if os.path.isabs(path) else os.path.join(BACKGROUNDS, path)","","","def read(path, into):"," try:"," with open(path, encoding='utf-8') as f:"," lines = f.read().splitlines()"," except OSError:"," return False"," for line in lines:"," key, sep, value = line.partition('=')"," key, value = key.strip(), value.strip()"," if not sep or not key or key.startswith('#'):"," continue"," if key == 'config-file':"," read(locate(value.lstrip('?')), into)"," else:"," into[key] = value"," return True","","","def logo(palette):"," c = {}"," if not palette or not read(os.path.join(BACKGROUNDS, palette.replace('@', '--', 1).replace('/', '--', 1) + '.conf'), c):"," return None"," image = c.get('background-image', '')"," try:"," opacity = min(float(c.get('background-image-opacity', '1')), 1.0)"," except ValueError:"," opacity = 1.0"," if not image or opacity <= 0:"," return None"," return locate(image), PLACES.get(c.get('background-image-position', 'center'), 'center'), opacity","","","def fade(path, opacity):"," key = f'{path}#{opacity}'"," if key not in faded:"," from kitty.fast_data_types import load_png_data, png_from_32bit_rgba_data"," with open(path, 'rb') as f:"," rgba, width, height = load_png_data(f.read())"," data = bytearray(rgba)"," data[3::4] = data[3::4].translate(bytes(round(a * opacity) for a in range(256)))"," if len(faded) > 8:"," faded.clear()"," faded[key] = png_from_32bit_rgba_data(bytes(data), width, height)"," return key, faded[key]","","","def show(window):"," want = logo(window.user_vars.get('ttheme_shown') or '')"," if window.id in shown and shown[window.id] == want:"," return"," shown[window.id] = want"," try:"," if want is None:"," window.set_logo('')"," elif want[2] < 1:"," key, png = fade(want[0], want[2])"," window.set_logo(key, want[1], 1, png)"," else:"," window.set_logo(want[0], want[1], 1)"," except Exception:"," shown.pop(window.id, None)","","","def theme(palette):"," path = os.path.join(THEMES, 'ttheme-' + palette.replace('@', '--', 1).replace('/', '--', 1) + '.conf')"," if not palette or not os.path.exists(path):"," return None"," from kitty.colors import parse_colors"," return parse_colors([path])","","","def wear(palette):"," colors = theme(palette) if worn.get('startup') != palette else None"," if colors is None:"," return"," from kitty.colors import patch_colors"," patch_colors(colors[0], colors[1], True, ())"," worn['startup'] = palette","","","def rewear(boss):"," from kitty.colors import patch_colors"," for window in tuple(boss.all_windows):"," colors = theme(window.user_vars.get('ttheme_worn') or '')"," if colors is not None:"," patch_colors(colors[0], colors[1], False, (window,))","","","def on_load(boss, data):"," if getattr(boss, 'ttheme_rewears', False):"," return"," load = boss.load_config_file",""," def reload(*args, **kwargs):"," load(*args, **kwargs)"," worn.pop('startup', None)"," rewear(boss)",""," boss.load_config_file = reload"," boss.ttheme_rewears = True","","","def on_set_user_var(boss, window, data):"," if data['key'] == 'ttheme_shown':"," show(window)"," elif data['key'] == 'ttheme_startup':"," wear(data['value'] or '')","","","def on_focus_change(boss, window, data):"," if data['focused']:"," show(window)","","","def on_close(boss, window, data):"," shown.pop(window.id, None)",""].join(`
250
+ `)}import{createHash as Ow}from"node:crypto";import{existsSync as Uh,mkdirSync as Rw,readdirSync as Fw,readFileSync as jh,renameSync as Jh,rmSync as xt}from"node:fs";import{basename as Ch,isAbsolute as Pw,join as oe}from"node:path";import{chmodSync as bw,copyFileSync as kw,existsSync as Dt,mkdirSync as Ew,readFileSync as Qs,realpathSync as yw,renameSync as Sw,rmSync as Rh,statSync as vw,writeFileSync as Mw}from"node:fs";import{dirname as Iw}from"node:path";function Fh(e){return`${e}.ttheme.bak`}var Nw=/^(?:#|--) ttheme begin$|path = "ttheme-/m;function Zs(e){let n=Fh(e);if(Dt(e)&&!Dt(n)&&!Nw.test(Qs(e,"utf8")))kw(e,n)}function $e(e,n){let t=Dt(e)?yw(e):e;Ew(Iw(t),{recursive:!0});let r=`${t}.ttheme-${process.pid}`;if(Mw(r,n),Dt(t))bw(r,vw(t).mode&4095);Sw(r,t)}function Xr(e,n){if((Dt(e)?Qs(e,"utf8"):void 0)===n)return!1;return Zs(e),$e(e,n),!0}function Ph(e,n){let t=Fh(e),r=Dt(t)?Qs(t,"utf8"):void 0;if(n===""&&r===void 0)return Rh(e,{force:!0}),"removed";if($e(e,n),r===void 0||r===n)return Rh(t,{force:!0}),"restored";return"kept backup"}var Ys={width:2560,height:1550},Hw=2560,Lw=0.1,Un={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Aw=Qe(Vs("#19161e","#9b86c8",0.2)),Tw="shelf",ho="originals",Gw="images.json",Xs=1;function Vs(e,n,t){let r=We(e),i=We(n);return`#${r.map((o,s)=>Math.round(o+((i[s]??0)-o)*t).toString(16).padStart(2,"0")).join("")}`}function Uw(e,n){if(n==="background"||n==="foreground"||n==="cursor")return e[n];if(n==="selection"&&e.selection)return e.selection;let t=/^ansi(\d|1[0-5])$/.exec(n),r=t?e.ansi[Number(t[1])]:void 0;if(!r)throw Error(`${e.name} has no slot ${n}`);return r}function Hh(e){if(e(1))return 1;let n=0,t=1;for(let r=0;r<40;r++){let i=(n+t)/2;if(e(i))n=i;else t=i}return n}function Lh(e,n){let t=Uw(e,n),i=Hh((a)=>Uc({name:e.name,background:Vs(e.background,t,a),foreground:e.foreground,ansi:e.ansi,waive:e.waived??[]}).length===0),o=Hh((a)=>Qe(Vs(e.background,t,a))<=Aw),s=Math.floor(Math.min(i,o)*1000)/1000,u=We(e.background),c=Math.hypot(...We(t).map((a,h)=>(a-(u[h]??0))*s));return{slot:n,color:t,cap:i,matched:o,opacity:s,reach:c}}function er(e,n){let t=Lh(e,"cursor");if(t.opacity>=Lw)return t;return n.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>Lh(e,r)).reduce((r,i)=>i.reach>r.reach?i:r,t)}function zs(e,n,t){let r=We(n),i=We(t),o=e.data;for(let s=0;s<o.length;s+=4){let u=(0.299*(o[s]??0)+0.587*(o[s+1]??0)+0.114*(o[s+2]??0))/255;for(let c=0;c<3;c++)o[s+c]=Math.round((r[c]??0)+((i[c]??0)-(r[c]??0))*u)}return e}function jw(e,n,t){let r=We(n),i=e.data,o=new Uint8Array(i.length);for(let s=0;s<i.length;s+=4){let u=(i[s+3]??0)/255*t;for(let c=0;c<3;c++)o[s+c]=Math.round((r[c]??0)*(1-u)+(i[s+c]??0)*u);o[s+3]=255}return{width:e.width,height:e.height,data:o}}function Wh(e){return Ya(e)??{x:0,y:0,w:e.width,h:e.height}}function Jw(e,n){if(e<=0||n<=0)return Ys;let t=Math.min(1,Ys.width/Math.max(e,n));return{width:Math.round(e*t),height:Math.round(n*t)}}function Cw(e,n){let t=Math.min(1,Hw/Math.max(n.w,n.h));return no(e,n,Math.round(n.w*t),Math.round(n.h*t))}function Kh(e,n,t,r){if(r<Un.stands){let c=e.w*t>e.h*n?{x:e.x+(e.w-e.h*n/t)/2,y:e.y,w:e.h*n/t,h:e.h}:{x:e.x,y:e.y,w:e.w,h:e.w*t/n};return{crop:c,at:{x:0,y:0,w:n,h:t},focus:(c.y-e.y+c.h/2)/e.h}}let i=Math.max(Un.tall*t,Un.reach*n*e.h/e.w),o=i*e.w/e.h;if(o>Un.widest*n)o=Un.widest*n,i=o*e.h/e.w;let s=Un.headroom*t,u=Math.min(1,(t-s)/i);return{crop:{x:e.x,y:e.y,w:e.w,h:e.h*u},at:{x:n*(1-Un.margin)-o,y:s,w:o,h:i*u},focus:Math.min(1,(t/2-s)/i)}}function xs(e,n,t,r){let i=Math.max(1,Math.round(n.at.w)),o=Math.max(1,Math.round(n.at.h)),s=no(e,n.crop,i,o),u=new Uint8Array(t*r*4),c=Math.round(n.at.x),a=Math.round(n.at.y);for(let h=0;h<o;h++){let f=a+h,l=Math.max(0,-c),d=Math.min(i,t-c);if(f<0||f>=r||d<=l)continue;u.set(s.data.subarray((h*i+l)*4,(h*i+d)*4),(f*t+c+l)*4)}return{width:t,height:r,data:u}}function _h(e,n,t,r,i){let o=Wh(e),s=xs(e,Kh(o,r,i,Dn(e,o)),r,i);return jw(zs(s,n.background,t.color),n.background,t.opacity)}function Ye(e){return oe(e,"ttheme","backgrounds")}function Bs(e){return oe(e,Gw)}function Vr(e){try{return jh(e,"utf8")}catch{return}}function rt(e){try{return Fw(e)}catch{return[]}}function On(e){let n=Vr(Bs(e));if(n===void 0)return Kw(e);let t=JSON.parse(n);if(t.version!==Xs)throw Error(`${Bs(e)} is version ${t.version} — this ttheme reads version ${Xs}`);return t}function Ww(e,n){let t=n.pictures.findIndex((i)=>i.key===n.active),r=n.pictures[t];return[...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${t+1}/${n.pictures.length}`,`background-image = ${oe(e,r.fill)}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${r.opacity}`,`config-file = ?${r.stem}.tune.conf`,`config-file = ?${r.stem}.off.conf`,""].join(`
251
+ `)}function zr(e,n,t){$e(Bs(e),`${JSON.stringify(n,null,2)}
252
+ `);for(let r of t){let i=n.palettes[r],o=oe(e,`${nt(r)}.conf`);if(i)$e(o,Ww(e,i));else xt(o,{force:!0})}}function qh(e,n){for(let t of rt(e))if(t.startsWith(`${n.stem}.`)||t.startsWith(`${n.stem}@`))xt(oe(e,t),{force:!0});if(n.original)xt(oe(e,n.original),{force:!0})}function Ah(e,n,t,r){let i=Ch(/^background-image\s*=\s*(.*?)\s*$/m.exec(n??"")?.[1]??"");if(!i.startsWith(`${e}.`)||!/^\.[0-9a-f]{8}@fill-\d+\.png$/.test(i.slice(e.length)))return;let o=i.slice(0,i.indexOf("@")),s=r??/^# image (\S+)$/m.exec(n??"")?.[1]??`picture_${o.slice(e.length+1)}`,u=/^# from (.+)$/m.exec(n??"")?.[1],c=Number(/^background-image-opacity\s*=\s*(\S+)/m.exec(n??"")?.[1]??1),a=t.find((h)=>h.startsWith(`${e}-${s}.`));return{key:s,stem:o,fill:i,opacity:Number.isFinite(c)?c:1,...u?{from:u}:{},...a?{original:oe(ho,a)}:{}}}function Th(e,n){if(Uh(e))Jh(e,n)}function Kw(e){let n={version:Xs,palettes:{}};if(!Uh(e))return n;let t=rt(oe(e,ho)),r=rt(e).filter((o)=>o.endsWith(".conf")&&o!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(o)).map((o)=>o.slice(0,-5)),i=oe(e,Tw);for(let o of new Set([...r,...rt(i)])){let s=[],u=Ah(o,Vr(oe(e,`${o}.conf`)),t);if(u)Th(oe(e,`${o}.tune.conf`),oe(e,`${u.stem}.tune.conf`)),Th(oe(e,`${o}.off.conf`),oe(e,`${u.stem}.off.conf`)),s.push(u);for(let c of rt(oe(i,o))){let a=oe(i,o,c),h=Ah(o,Vr(oe(a,".conf")),t,c);if(!h)continue;for(let f of rt(a)){let l=f===".tune.conf"||f===".off.conf"?`${h.stem}${f}`:`${o}${f}`;if(f!==".conf")Jh(oe(a,f),oe(e,l))}xt(a,{recursive:!0}),s.push(h)}if(rt(oe(i,o)).length===0)xt(oe(i,o),{recursive:!0,force:!0});if(s.length>0)s.sort((c,a)=>c.key<a.key?-1:c.key>a.key?1:0),n.palettes[o]={active:(u??s[0]).key,pictures:s}}if(rt(i).length===0)xt(i,{recursive:!0,force:!0});return zr(e,n,Object.keys(n.palettes)),n}function Gh(e,n,t){return n.startsWith("~/")?oe(t,n.slice(2)):Pw(n)?n:oe(e,n)}function Qh(e,n,t){let r=new Map,i=(u,c)=>{let a=Vr(u);if(a===void 0)return!1;for(let h of a.split(`
253
+ `)){let f=/^([a-z-]+)\s*=\s*(.*?)\s*$/.exec(h);if(f?.[1]==="config-file"&&c<4)i(Gh(e,f[2].replace(/^\?/,""),t),c+1);else if(f&&/^background-image(?:-fit|-opacity)?$/.test(f[1]))r.set(f[1],f[2])}return!0};if(!i(oe(e,`${nt(n)}.conf`),0))return;let o=r.get("background-image")??"";if(o==="")return;let s=Number(r.get("background-image-opacity")??1);return{image:Gh(e,o,t),opacity:Number.isFinite(s)?s:1,cover:r.get("background-image-fit")==="cover"}}function yt(e){return`${e.site}_${e.id}`}function Zh(e,n,t){let r=Ye(e),i=On(r),o=i.palettes[n];if(!o||o.pictures.length<2)throw Error(`${n} has no other image`);let s=o.pictures.length,u=(o.pictures.findIndex((c)=>c.key===o.active)+t+s)%s;return o.active=o.pictures[u].key,zr(r,i,[n]),{key:o.active,at:u+1,of:s}}function Yh(e,n){let t=Ye(e),r=On(t),i=r.palettes[n];if(!i)throw Error(`${n} has no image`);let o=i.pictures.findIndex((c)=>c.key===i.active),[s]=i.pictures.splice(o,1);qh(t,s);let u=i.pictures[o%Math.max(i.pictures.length,1)];if(u)i.active=u.key;else delete r.palettes[n];return zr(t,r,[n]),{key:s.key,left:i.pictures.length}}function fo(e,n,t,r,i,o){let s=Ye(e),u=n.name,c=yt(i),a=On(s),h=a.palettes[u]??{active:c,pictures:[]},f=Wh(r),{width:l,height:d}=Jw(o.width,o.height),g=Kh(f,l,d,Dn(r,f)),m=pt(zs(Cw(r,f),n.background,t.color)),b=pt(zs(xs(r,g,l,d),n.background,t.color)),S=`${nt(u)}.${Ow("sha1").update(m).update(b).digest("hex").slice(0,8)}`,I={key:c,stem:S,fill:`${S}@fill-${Math.round(g.focus*100)}.png`,opacity:t.opacity,...i.from?{from:i.from}:{},original:oe(ho,`${nt(u)}-${c}.${i.ext}`)},k=h.pictures.find((p)=>p.key===c);if(k)qh(s,k);let y=[oe(s,`${S}.png`),oe(s,I.fill),oe(s,I.original)];return Rw(oe(s,ho),{recursive:!0}),$e(y[0],m),$e(y[1],b),$e(y[2],i.bytes),h.pictures=k?h.pictures.map((p)=>p===k?I:p):[...h.pictures,I],h.active=c,a.palettes[u]=h,zr(s,a,[u]),[...y,oe(s,`${nt(u)}.conf`)]}function Xh(e,n,t){let r=Ye(e),i=On(r),o=i.palettes[n];if(o?.pictures.some((s)=>s.key===t)&&o.active!==t)o.active=t,zr(r,i,[n])}function Br(e,n){let t=On(Ye(e)).palettes[n];if(!t)return[];return[...t.pictures.filter((i)=>i.key===t.active),...t.pictures.filter((i)=>i.key!==t.active)]}var Ds="top-right";function _w(e,n,t,r,i,o,s,u=-1){let c=Math.trunc,a=(o-1)%3,h=c((o-1)/3),f=t*n>=r*e!==!s,l=f?c(i*t/100):c(i*r*e/(100*n)),d=f?c(i*t*n/(100*e)):c(i*r/100),g=c(a*(t-l)/2),m=c(h*(r-d)/2);if(u>=0){if(l>t)g=c((t-l)/2);if(d>r)m=Math.max(r-d,Math.min(0,c(r/2)-c(u*d/100)))}return{x:g,y:m,w:l,h:d}}function Vh(e,n){let t=Vr(oe(e,`${n.stem}.tune.conf`));if(t===void 0)return{};let r=(a)=>new RegExp(`^${a}\\s*=\\s*(.*?)\\s*$`,"m").exec(t)?.[1]??"",i=Ch(r("background-image")),o=/@(\d+)-/.exec(i)?.[1],s=/@fill-\d+\.png$/.test(i)?"fill":o?Number(o):r("background-image-fit")==="cover"?"fill":100,u=r("background-image-position").replace("center-center","center")||"center",c=Number(r("background-image-opacity")||1);return{...s!=="fill"?{size:s}:{},...u!==Ds?{position:u}:{},...Number.isFinite(c)&&c!==n.opacity?{opacity:c}:{}}}function zh(e,n,t,r,i){let o=t.size??"fill",s=t.position??Ds,u=t.opacity??n.opacity;if(o==="fill"&&s===Ds&&u===n.opacity)return;let c=Et.indexOf(s)+1,a=oe(e,`${n.stem}.png`),h=oe(e,n.fill),f=!0,l=typeof o==="number"&&(o>100||!r&&s!=="center");if(o===100&&!l)h=a,f=!1;else if(typeof o==="number"){let g=Us(new Uint8Array(jh(a))),{width:m,height:b}=l?Ys:g,S=l?Number(/@fill-(\d+)\.png$/.exec(n.fill)?.[1]??50):-1,I=_w(g.width,g.height,m,b,o,c,!1,S);h=oe(e,`${n.stem}@${o}-${s}${l?`-${m}x${b}`:""}.png`);let k=xs(g,{crop:{x:0,y:0,w:g.width,h:g.height},at:I,focus:S},m,b);$e(h,pt(k)),f=l}let d=oe(e,`${n.stem}.tune.conf`);return $e(d,[`background-image = ${h.startsWith(`${i}/`)?`~${h.slice(i.length)}`:h}`,`background-image-fit = ${f?"cover":"contain"}`,`background-image-position = ${s}`,`background-image-opacity = ${u}`,""].join(`
254
+ `)),d}function Bh(e){let n=new Map;for(let[t,r]of Object.entries(On(Ye(e)).palettes)){let[,i,o]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&o)n.set(t,{site:i,id:Number(o)})}return n}function wn(e){let{slot:n,color:t,opacity:r}=er({name:e.name,background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selectionBackground,ansi:e.ansi,waived:e.waive},e.signatureSlots);return{name:e.name,...e.base?{base:e.base}:{},group:e.group,...e.native?{native:e.native}:{},...e.lead?{lead:!0}:{},order:e.order,ansiSource:e.ansiSource,...e.booru?{booru:e.booru}:{},...e.booruSites?{booruSites:e.booruSites}:{},...e.role==="default"?{default:!0}:{},background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selectionBackground,signature:e.signature,signatureSlots:e.signatureSlots,ansi:e.ansi,gate:qt(e),...e.waive.length>0?{waived:e.waive}:{},backdrop:{slot:n,color:t,opacity:r},...e.pictures?{pictures:e.pictures}:{}}}function cn(e){return{name:e.name,...e.base?{base:e.base}:{},group:e.group,...e.native?{native:e.native}:{},lead:e.lead===!0,order:e.order,...e.default?{role:"default"}:{},ansiSource:e.ansiSource,...e.booru?{booru:e.booru}:{},...e.booruSites?{booruSites:e.booruSites}:{},background:e.background,foreground:e.foreground,cursor:e.cursor,selectionBackground:e.selection,ansi:e.ansi,signature:e.signature,signatureSlots:e.signatureSlots,ghostty:{iconGhost:e.cursor,iconScreen:[e.cursor,e.selection,e.background]},waive:e.waived??[],...e.pictures?{pictures:e.pictures}:{}}}var qw=6,Qw=["ansi1","ansi2","ansi4","ansi3","ansi5","ansi6"];function lo(e){let n=(o)=>o.startsWith("ansi")?e.ansi[Number(o.slice(4))]:o==="foreground"?e.foreground:o==="cursor"?e.cursor:o==="selection"?e.selection:void 0,t=(o)=>o.startsWith("ansi")?`ansi${Number(o.slice(4))%8}`:o,r=new Set,i=[];for(let o of["foreground",...e.signatureSlots,...Qw]){let s=n(o);if(i.length===qw||!s||r.has(t(o))||i.includes(s))continue;r.add(t(o)),i.push(s)}return i}function an(e){return e.filter((n)=>n.default!==!0)}function Dr(){return{version:_e.version,gate:gt,placement:Un,palettes:[]}}function Zw(e){let[n]=e;if(!n)throw Error("manifest needs at least one theme");return{...Dr(),palettes:e.map(wn)}}var eu={id:"meta",emitShared(e){return[{path:"manifest.json",content:`${JSON.stringify(Zw(e),null,2)}
255
+ `}]}};var Yw=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],Xw=[{section:"tab",title:"This tab"},{section:"startup",title:"New tabs"},{section:"catalog",title:"Palettes"},{section:"own",title:"Your own"},{section:"setup",title:"Setup"}],ei=[{name:"preview",args:[],about:"browse live — focus repaints, enter keeps (this tab or default), esc restores, ? lists keys",section:"tab",start:"try every palette live — enter keeps the one you land on",shell:!0},{name:"use",args:["<palette>"],about:"paint this tab — a unique prefix works: ttheme use ho",section:"tab",start:"paint this tab with one — ttheme use homura",shell:!0},{name:"next",args:[],about:"advance this tab to the next palette",section:"tab",shell:!0},{name:"default",args:["<palette>"],about:"make a palette the one new tabs open with",section:"startup"},{name:"on",args:[],about:"wear the default palette in new tabs again",section:"startup"},{name:"off",args:[],about:"take the palette and picture off every tab — the terminal's own colors until `ttheme on`",section:"startup"},{name:"pin",args:[],about:"pick a palette for this directory — cd into it repaints, cd out restores",section:"tab",shell:!0},{name:"unpin",args:[],about:"drop the palette pinned to this directory",section:"tab",shell:!0},{name:"config",args:[],about:"edit settings in $EDITOR — they apply in new tabs",section:"startup",shell:!0},{name:"browse",args:[],about:"pick palettes from the catalog in a live picker",section:"catalog",start:"install or drop palettes — every market you added, in one picker"},{name:"list",args:["[query]"],about:"show the catalog, marking what is installed",section:"catalog",flags:{json:{type:"boolean",about:"print the matches as JSON: name, group, installed"}}},{name:"add",args:["<palette...>"],about:"install palettes from the catalog, or from a share code: ttheme add tt1:…",section:"catalog"},{name:"remove",args:["<palette...>"],about:"uninstall palettes",section:"catalog"},{name:"update",args:[],about:"refresh every market you added",section:"catalog"},{name:"market",args:["[action]","[source]"],about:"the markets you added — add, remove and search them; init makes one of your own",actions:[["(none)","list the markets you added, with how many palettes each holds"],["add <source>","add one: a repository (alice/ttheme-pastel), a folder, or official"],["remove <market>","drop one by its name (alice@pastel) — the palettes you installed from it keep working"],["search [query]","repositories on GitHub with the ttheme-market topic"],["init [name]","make a market of your own, <you>@<name>, in ~/.config/ttheme/market/<name> (or give a folder)"]],section:"catalog"},{name:"new",args:["<name>"],about:"make a palette of your own, <you>@<market>/<name>, in your local market — installed at once",section:"own",flags:{from:{type:"string",value:"<palette>",about:"the palette to start from — the default one when left out"},in:{type:"string",value:"<market>",about:"the local market to put it in, when you have more than one"}}},{name:"edit",args:["<palette>"],about:"change one of your palettes in $EDITOR — the contrast gate advises, never refuses",section:"own"},{name:"check",args:["<palette>"],about:"measure a palette against the contrast gate and suggest colors that pass",section:"own",flags:{fix:{type:"boolean",about:"write the suggested colors into your palette"}}},{name:"share",args:["<palette>"],about:"print a share code — ttheme add <code> installs it anywhere, pictures included",section:"own"},{name:"init",args:[],about:"install the shell layer and wire your terminal configs",section:"setup",flags:{yes:{type:"boolean",short:"y",about:"accept every default without prompting"}}},{name:"uninstall",args:[],about:"take ttheme out of every terminal config and delete what it wrote",section:"setup",flags:{yes:{type:"boolean",short:"y",about:"remove without asking"}}},{name:"build",args:[],about:"emit dist/ for every terminal, plus the zsh palette table — from a checkout",section:"setup",hidden:!0,flags:{only:{type:"string",multiple:!0,value:"<terminal>",choices:Yw,about:"rebuild just this terminal — repeat it for more"}}},{name:"find",args:["<palette>"],about:"pick a booru background for a palette — preview opens this on tab",section:"setup",hidden:!0},{name:"image",args:["<palette>","<action>"],about:"switch a palette between its saved backgrounds, remove the one shown, or pass on tuning — preview calls this",section:"setup",hidden:!0}];function xr(e){let n=Object.entries(e.flags??{}).map(([t,{value:r}])=>`[--${t}${r?` ${r}`:""}]`);return[e.name,...n,...e.args].join(" ")}function nu(e,n=Math.max(...e.map(([t])=>t.length))){return e.map(([t,r])=>` ${t.padEnd(n)} ${r}`)}var Vw=[["npx @kecan0406/ttheme init -y","wire the terminals found here, no prompts"],["ttheme add homura madoka","install two palettes"],["ttheme use homura","paint this tab with one"],["ttheme list --json madoka","the madoka series as JSON"],["ttheme market add alice/ttheme-pastel","alice's market, alice@pastel — ttheme add alice@pastel/dusk"],["ttheme new rei --from rei","your own rei, <you>@<market>/rei, to edit and share"]];function ni(e,n=!1){let t=ei.filter((s)=>!s.hidden&&!(n&&s.section==="setup")),r=Xw.filter(({section:s})=>t.some((u)=>u.section===s)),i=[...n?["ttheme alone lists every installed palette, grouped, with previews"]:[],e?"ttheme help <command> describes one command · ttheme --version prints the version":"ttheme help <command> describes one · ttheme help all lists every command with what it does","https://kecan0406.github.io/ttheme"];if(!e){let s=t.filter((c)=>c.start),u=Math.max(...r.map(({title:c})=>c.length));return["Usage: ttheme <command>","",_e.description,"","Start here",...nu(s.map((c)=>[xr(c),c.start])),"",...r.map(({section:c,title:a})=>`${a.padEnd(u)} ${t.filter((h)=>h.section===c).map((h)=>h.name).join(" · ")}`),"",...i].join(`
256
+ `)}let o=Math.max(...t.map((s)=>xr(s).length));return["Usage: ttheme <command>","",_e.description,...r.flatMap(({section:s,title:u})=>["",u,...nu(t.filter((c)=>c.section===s).map((c)=>[xr(c),c.about]),o)]),"","Examples",...nu(Vw),"",...i].join(`
257
+ `)}var go=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],nf="# ttheme begin",tf="# ttheme end",ti=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function ri(e,n){let t=`${nf}
258
258
  ${n}
259
- ${zh}
260
- `;if(ii.test(e))return e.replace(ii,t);if(e==="")return t;return`${e.replace(/\n*$/,`
259
+ ${tf}
260
+ `;if(ti.test(e))return e.replace(ti,t);if(e==="")return t;return`${e.replace(/\n*$/,`
261
261
  `)}
262
- ${t}`}function si(e){let n=e.replace(/\n?# ttheme begin\n[\s\S]*?# ttheme end(?=\n|$)/,"");if(n===e)return e;return n.trim()===""?"":n.replace(/\n*$/,`
263
- `)}function vt(e,n){let t=e.replace(ii,"");return new RegExp(String.raw`^[ \t]*${n}(?:[ \t]*=|[ \t]+\S)`,"m").test(t)}function po(e){if(e.TERM_PROGRAM==="WarpTerminal")return"warp";if(e.GHOSTTY_RESOURCES_DIR||e.TERM_PROGRAM==="ghostty")return"ghostty";if(e.KITTY_WINDOW_ID)return"kitty";if(e.WEZTERM_PANE)return"wezterm";if(e.ALACRITTY_WINDOW_ID)return"alacritty";if(e.ITERM_SESSION_ID||e.TERM_PROGRAM==="iTerm.app")return"iterm2";if(e.TERM_PROGRAM==="Apple_Terminal")return"terminal-app";if(e.WT_SESSION&&!e.TERM_PROGRAM)return"windows-terminal";if(e.TERM?.startsWith("foot"))return"foot";return"unknown"}function Bh(e,n,t=""){let r=[];if(!vt(t,"command")){if(r.push(`command = ${e}/launch-tab.zsh`),!vt(t,"shell-integration"))r.push("shell-integration = zsh")}if(n)r.push(`theme = ${fe(n)}`);return r.push(`config-file = ?${e}/backgrounds/shown.conf`),r.join(`
264
- `)}function Dh(e){return`source ${e}/ttheme.zsh`}var Gw="# ttheme settings — uncomment a line to change it; exported variables win over this file",ui={TTHEME_TAB_PALETTE:{doc:"# new tabs: off keeps the configured terminal theme, seq rotates through the palettes (default off)",default:"off"},TTHEME_ANNOUNCE:{doc:'# the palette notice under "Last login:": 1 shows it, 0 silences it (default 1)',default:"1"},TTHEME_FX:{doc:"# search hint animation: typewriter, decode or glitch (default typewriter)",default:"typewriter"},TTHEME_SORT:{doc:"# series and palettes in ttheme and preview: abc sorts them by name, series keeps the order they were added (default abc)",default:"abc"},TTHEME_FIND_RATING:{doc:"# the ratings find lists, any of safe, questionable and explicit, each booru read in its own rating vocabulary (default safe)",default:"safe"},TTHEME_FIND_BLOCK:{doc:'# the posts find drops by tag: nudity, underwear, both, or none to keep them all (default "nudity underwear")',default:"nudity underwear"},TTHEME_FIND_POSTS:{doc:"# what find lists first: all is every post of the character, cutouts are the transparent ones (default all)",default:"all"},TTHEME_FIND_SOLO:{doc:"# on keeps the danbooru posts tagged solo, the character alone; off lists every post (default on)",default:"on"},TTHEME_FIND_CUTOUTS:{doc:'# the tags find calls a transparent cutout, per site as key=tag,tag pairs — e.g. "konachan=transparent,vector yande=transparent_png" (default the built-in tags)',default:""},TTHEME_FIND_ORDER:{doc:"# the order find lists posts in: fit ranks each page by how well it makes a backdrop, newest or score (default fit)",default:"fit"},TTHEME_FIND_SETS:{doc:"# runs of the same picture at the same size from one uploader: fold shows them as one tile, show lists each (default fold)",default:"fold"},TTHEME_FIND_REMOVE_BG:{doc:"# an opaque picture tried on in find: on cuts the character out with macOS Vision, off leaves it as it is (default on)",default:"on"},TTHEME_FIND_UNBLOCK:{doc:"# when a network blocks a booru by name, 1 sends find through a local proxy that splits the TLS handshake — find offers to turn it on (default 0)",default:"0"},TTHEME_FIND_HOSTS:{doc:'# send a find site somewhere else, as key=https://host pairs — e.g. "danbooru=https://safebooru.donmai.us" (default none)',default:""}};function nu(e,n){let t=`: \${${e}:=${n}}`;return ui[e]?.default===n?`# ${t}`:t}function xh(e){return new RegExp(String.raw`^#? ?: \$\{${e}[^\n]*$`,"m")}function Uw(e,n){if(xh(n).test(e))return e;let t=ui[n];return`${e.replace(/\n*$/,`
262
+ ${t}`}function ii(e){let n=e.replace(/\n?# ttheme begin\n[\s\S]*?# ttheme end(?=\n|$)/,"");if(n===e)return e;return n.trim()===""?"":n.replace(/\n*$/,`
263
+ `)}function St(e,n){let t=e.replace(ti,"");return new RegExp(String.raw`^[ \t]*${n}(?:[ \t]*=|[ \t]+\S)`,"m").test(t)}function mo(e){if(e.TERM_PROGRAM==="WarpTerminal")return"warp";if(e.GHOSTTY_RESOURCES_DIR||e.TERM_PROGRAM==="ghostty")return"ghostty";if(e.KITTY_WINDOW_ID)return"kitty";if(e.WEZTERM_PANE)return"wezterm";if(e.ALACRITTY_WINDOW_ID)return"alacritty";if(e.ITERM_SESSION_ID||e.TERM_PROGRAM==="iTerm.app")return"iterm2";if(e.TERM_PROGRAM==="Apple_Terminal")return"terminal-app";if(e.WT_SESSION&&!e.TERM_PROGRAM)return"windows-terminal";if(e.TERM?.startsWith("foot"))return"foot";return"unknown"}function rf(e,n,t=""){let r=[];if(!St(t,"command")){if(r.push(`command = ${e}/launch-tab.zsh`),!St(t,"shell-integration"))r.push("shell-integration = zsh")}if(n)r.push(`theme = ${fe(n)}`);return r.push(`config-file = ?${e}/backgrounds/shown.conf`),r.join(`
264
+ `)}function of(e){return`source ${e}/ttheme.zsh`}var zw="# ttheme settings — uncomment a line to change it; exported variables win over this file",oi={TTHEME_TAB_PALETTE:{doc:"# new tabs: off keeps the configured terminal theme, seq rotates through the palettes (default off)",default:"off"},TTHEME_ANNOUNCE:{doc:'# the palette notice under "Last login:": 1 shows it, 0 silences it (default 1)',default:"1"},TTHEME_FX:{doc:"# search hint animation: typewriter, decode or glitch (default typewriter)",default:"typewriter"},TTHEME_SORT:{doc:"# series and palettes in ttheme and preview: abc sorts them by name, series keeps the order they were added (default abc)",default:"abc"},TTHEME_FIND_RATING:{doc:"# the ratings find lists, any of safe, questionable and explicit, each booru read in its own rating vocabulary (default safe)",default:"safe"},TTHEME_FIND_BLOCK:{doc:'# the posts find drops by tag: nudity, underwear, both, or none to keep them all (default "nudity underwear")',default:"nudity underwear"},TTHEME_FIND_POSTS:{doc:"# what find lists first: all is every post of the character, cutouts are the transparent ones (default all)",default:"all"},TTHEME_FIND_SOLO:{doc:"# on keeps the danbooru posts tagged solo, the character alone; off lists every post (default on)",default:"on"},TTHEME_FIND_CUTOUTS:{doc:'# the tags find calls a transparent cutout, per site as key=tag,tag pairs — e.g. "konachan=transparent,vector yande=transparent_png" (default the built-in tags)',default:""},TTHEME_FIND_ORDER:{doc:"# the order find lists posts in: fit ranks each page by how well it makes a backdrop, newest or score (default fit)",default:"fit"},TTHEME_FIND_SETS:{doc:"# runs of the same picture at the same size from one uploader: fold shows them as one tile, show lists each (default fold)",default:"fold"},TTHEME_FIND_REMOVE_BG:{doc:"# an opaque picture tried on in find: on cuts the character out with macOS Vision, off leaves it as it is (default on)",default:"on"},TTHEME_FIND_UNBLOCK:{doc:"# when a network blocks a booru by name, 1 sends find through a local proxy that splits the TLS handshake — find offers to turn it on (default 0)",default:"0"},TTHEME_FIND_HOSTS:{doc:'# send a find site somewhere else, as key=https://host pairs — e.g. "danbooru=https://safebooru.donmai.us" (default none)',default:""}};function tu(e,n){let t=`: \${${e}:=${n}}`;return oi[e]?.default===n?`# ${t}`:t}function sf(e){return new RegExp(String.raw`^#? ?: \$\{${e}[^\n]*$`,"m")}function Bw(e,n){if(sf(n).test(e))return e;let t=oi[n];return`${e.replace(/\n*$/,`
265
265
  `)}
266
266
  ${t.doc}
267
- ${nu(n,t.default)}
268
- `}var ef=Object.keys(ui);function tu(){let e=Object.entries(ui).map(([n,t])=>`${t.doc}
269
- ${nu(n,t.default)}`);return`${[Gw,...e].join(`
267
+ ${tu(n,t.default)}
268
+ `}var uf=Object.keys(oi);function ru(){let e=Object.entries(oi).map(([n,t])=>`${t.doc}
269
+ ${tu(n,t.default)}`);return`${[zw,...e].join(`
270
270
 
271
271
  `)}
272
- `}function nf(e,n,t){let r=nu(n,t),i=xh(n);if(i.test(e))return e.replace(i,r);return`${e.replace(/\n*$/,`
272
+ `}function cf(e,n,t){let r=tu(n,t),i=sf(n);if(i.test(e))return e.replace(i,r);return`${e.replace(/\n*$/,`
273
273
  `)}
274
274
  ${r}
275
- `}function tf(e){if(e==="")return tu();return Object.keys(ui).reduce(Uw,e)}function rf(e,n,t=""){return[...e?[`include themes/${fe(e)}.conf`]:[],`watcher ${n}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!vt(t,r.split(" ")[0]))].join(`
276
- `)}function of(e){let n=e.replace(ii,"");return/^[ \t]*\[colors[\].]/m.test(n)||/^[ \t]*colors[ \t]*[.=]/m.test(n)}var jw=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,Yh=/^[ \t]*\[/m,Zh=/^[ \t]*import[ \t]*=/m,Jw=/^[ \t]*general[ \t]*[.=]/m;function Cw(e){return e?`[general]
277
- import = ["${e}"]`:""}function ci(e,n){let t=e.replace(ii,""),r=jw.exec(t);if(!r){let c=t.search(Yh),a=c<0?t:t.slice(0,c);if(Jw.test(t)||Zh.test(a))return;return oi(e,Cw(n))}let i=r.index+r[0].length,o=t.slice(i),s=o.search(Yh);if(Zh.test(s<0?o:o.slice(0,s)))return;let u=n?`import = ["${n}"]
275
+ `}function af(e){if(e==="")return ru();return Object.keys(oi).reduce(Bw,e)}function hf(e,n,t=""){return[...e?[`include themes/${fe(e)}.conf`]:[],`watcher ${n}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!St(t,r.split(" ")[0]))].join(`
276
+ `)}function ff(e){let n=e.replace(ti,"");return/^[ \t]*\[colors[\].]/m.test(n)||/^[ \t]*colors[ \t]*[.=]/m.test(n)}var Dw=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,Dh=/^[ \t]*\[/m,xh=/^[ \t]*import[ \t]*=/m,xw=/^[ \t]*general[ \t]*[.=]/m;function e0(e){return e?`[general]
277
+ import = ["${e}"]`:""}function si(e,n){let t=e.replace(ti,""),r=Dw.exec(t);if(!r){let c=t.search(Dh),a=c<0?t:t.slice(0,c);if(xw.test(t)||xh.test(a))return;return ri(e,e0(n))}let i=r.index+r[0].length,o=t.slice(i),s=o.search(Dh);if(xh.test(s<0?o:o.slice(0,s)))return;let u=n?`import = ["${n}"]
278
278
  `:"";return`${t.slice(0,i)}
279
- ${Vh}
280
- ${u}${zh}${o}`}var Xh=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,Kw=/^return config[ \t]*$/gm;function sf(e){return`dofile(${JSON.stringify(e)})(config)`}var uf=`local wezterm = require 'wezterm'
279
+ ${nf}
280
+ ${u}${tf}${o}`}var ef=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,n0=/^return config[ \t]*$/gm;function lf(e){return`dofile(${JSON.stringify(e)})(config)`}var df=`local wezterm = require 'wezterm'
281
281
  local config = wezterm.config_builder()
282
282
 
283
- `;function cf(e){let n=e.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return n===`${uf}return config
284
- `?"":n}function ai(e,n){let t=`-- ttheme begin
283
+ `;function gf(e){let n=e.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return n===`${df}return config
284
+ `?"":n}function ui(e,n){let t=`-- ttheme begin
285
285
  ${n}
286
286
  -- ttheme end
287
- `;if(Xh.test(e))return e.replace(Xh,t);if(e==="")return`${uf}${t}
287
+ `;if(ef.test(e))return e.replace(ef,t);if(e==="")return`${df}${t}
288
288
  return config
289
- `;let r=[...e.matchAll(Kw)].at(-1);if(r?.index===void 0)return;return`${e.slice(0,r.index)}${t}
290
- ${e.slice(r.index)}`}var af="[appearance.themes]";function hf(e){let n=e.findIndex((r)=>r.trim()===af);if(n<0)return;let t=e.findIndex((r,i)=>i>n&&r.trimStart().startsWith("["));return[n,t<0?e.length:t]}function wo(e){let n=e.split(`
291
- `),t=hf(n);if(!t)return;return n.slice(t[0]+1,t[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function ff(e){return`{ custom = { name = "${e}", path = "${fe(e)}.yaml" } }`}function $o(e,n){let t=e.split(`
292
- `),r=hf(t);if(!r)return n===void 0?e:`${e.replace(/\n*$/,`
289
+ `;let r=[...e.matchAll(n0)].at(-1);if(r?.index===void 0)return;return`${e.slice(0,r.index)}${t}
290
+ ${e.slice(r.index)}`}var mf="[appearance.themes]";function pf(e){let n=e.findIndex((r)=>r.trim()===mf);if(n<0)return;let t=e.findIndex((r,i)=>i>n&&r.trimStart().startsWith("["));return[n,t<0?e.length:t]}function po(e){let n=e.split(`
291
+ `),t=pf(n);if(!t)return;return n.slice(t[0]+1,t[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function wf(e){return`{ custom = { name = "${e}", path = "${fe(e)}.yaml" } }`}function wo(e,n){let t=e.split(`
292
+ `),r=pf(t);if(!r)return n===void 0?e:`${e.replace(/\n*$/,`
293
293
  `)}
294
- ${af}
294
+ ${mf}
295
295
  theme = ${n}
296
296
  `;let i=t.findIndex((o,s)=>s>r[0]&&s<r[1]&&/^theme\s*=/.test(o));if(i>=0)t.splice(i,1,...n===void 0?[]:[`theme = ${n}`]);else if(n!==void 0)t.splice(r[0]+1,0,`theme = ${n}`);return t.join(`
297
- `)}function ru(e,n,t=[]){for(let a of e)for(let h of[a.name,a.group,a.native??"",a.ansiSource])if(/["$`\\]/.test(h))throw Error(`${a.name}: "${h}" contains a character that breaks zsh quoting`);let r=Math.max(0,...e.map((a)=>a.name.length)),i=(a,h)=>` ${a.name.padEnd(r)} "${h}"`,o=(a)=>a.map((h)=>h.name).join(" "),s=cn(e),u=(a)=>`'${a.replaceAll("'","'\\''")}'`,c=ti.filter((a)=>a.section!=="setup"&&!a.hidden);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${_e.version}`,"",'# the palette new tabs open with, which the iTerm2 "ttheme · default" profile wears',`typeset -g TTHEME_STARTUP=${n??""}`,"","# the terminals ttheme is wired into: a picture change reaches every one of them, from whichever runs the shell",`typeset -ga TTHEME_TERMINALS=(${t.join(" ")})`,"","# the commands the shell layer knows (src/verbs.ts): help, completion and argument checks read them",`typeset -ga TTHEME_VERBS=(${c.map((a)=>a.name).join(" ")})`,`typeset -ga TTHEME_SHELL_VERBS=(${c.filter((a)=>a.shell).map((a)=>a.name).join(" ")})`,"typeset -gA TTHEME_VERB_ARGS=(",...c.map((a)=>` ${a.name} ${u(a.args.join(" "))}`),")","typeset -gA TTHEME_VERB_ABOUT=(",...c.map((a)=>` ${a.name} ${u(a.about)}`),")",`typeset -g TTHEME_HELP=${u(ri(!1,!0))}`,`typeset -g TTHEME_HELP_ALL=${u(ri(!0,!0))}`,"","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${ef.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${tu().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...e.map((a)=>i(a,[a.background,a.foreground,a.cursor,a.selection,...a.ansi].join(" "))),")","","# series order: new tabs cycle through it and TTHEME_SORT=series lists it — the default role stays applyable but unlisted",`typeset -ga TTHEME_ORDER=(${o(s)})`,"","# the same palettes by series name, then palette name: TTHEME_SORT=abc lists them this way",`typeset -ga TTHEME_ABC=(${o(qr(s))})`,"","typeset -gA TTHEME_GROUP=(",...e.map((a)=>i(a,a.group)),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...e.filter((a)=>a.native).map((a)=>i(a,a.native??"")),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...e.map((a)=>i(a,a.ansiSource)),")",""].join(`
298
- `)}var iu={id:"shell",emitShared(e){return[{path:"shell/palettes.zsh",content:ru(e.map(wn))}]}};var Ww=["black","red","green","yellow","blue","magenta","cyan","white"];function lf(e,n){return[` ${e}:`,...Ww.map((t,r)=>` ${t}: "${n[r]}"`)]}var hi={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(e){let n=[`name: "${e.name}"`,`background: "${e.background}"`,`foreground: "${e.foreground}"`,`accent: "${e.cursor}"`,`cursor: "${e.cursor}"`,`details: ${qe(e.background)<0.18?"darker":"lighter"}`,"terminal_colors:",...lf("normal",e.ansi.slice(0,8)),...lf("bright",e.ansi.slice(8,16)),""].join(`
299
- `);return[{path:`warp/themes/${fe(e.name)}.yaml`,content:n}]}};var gf=(e)=>`[${e.map((n)=>`"${n}"`).join(", ")}]`,fi={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(e){let n=["[metadata]",`name = "${fe(e.name)}"`,`origin_url = "${e.ansiSource}"`,"","[colors]",`foreground = "${e.foreground}"`,`background = "${e.background}"`,`cursor_bg = "${e.cursor}"`,`cursor_border = "${e.cursor}"`,`cursor_fg = "${e.background}"`,`selection_bg = "${e.selectionBackground}"`,`selection_fg = "${e.foreground}"`,"",`ansi = ${gf(e.ansi.slice(0,8))}`,`brights = ${gf(e.ansi.slice(8,16))}`,""].join(`
300
- `);return[{path:`wezterm/colors/${fe(e.name)}.toml`,content:n}]}},er=(e)=>JSON.stringify(e);function df(e){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${er(e.path)}`,`local COLORS = ${er(e.colors)}`,`local BACKGROUNDS = ${er(e.backgrounds)}`,`local STARTUP = ${e.startup?er(fe(e.startup)):"nil"}`,"local PALETTES = {",...e.palettes.map((n)=>` [${er(n.name)}] = ${er(n.background)},`),"}","","local X = { left = 'Left', center = 'Center', right = 'Right' }","local Y = { top = 'Top', center = 'Middle', bottom = 'Bottom' }","local SIZE = { cover = 'Cover', contain = 'Contain', stretch = '100%' }","","local function locate(path)"," if path:sub(1, 2) == '~/' then"," return os.getenv('HOME') .. path:sub(2)"," elseif path:sub(1, 1) == '/' or path:match('^%a:[/\\\\]') then"," return path"," end"," return BACKGROUNDS .. '/' .. path","end","","local function read(path, into)"," local f = io.open(path, 'r')"," if not f then"," return false"," end"," for line in f:lines() do"," local key, value = line:match('^%s*([%w%-]+)%s*=%s*(.-)%s*$')"," if key == 'config-file' then"," read(locate((value:gsub('^%?', ''))), into)"," elseif key then"," into[key] = value"," end"," end"," f:close()"," return true","end","","local function layers(palette)"," local color = PALETTES[palette]"," local c = {}"," if not color or not read(BACKGROUNDS .. '/' .. (palette:gsub('@', '--', 1)) .. '.conf', c) then"," return nil, 'none'"," end"," local image = c['background-image'] or ''"," local opacity = tonumber(c['background-image-opacity'] or '1') or 1"," if image == '' or opacity <= 0 then"," return nil, 'none'"," end"," local fit = c['background-image-fit'] or 'contain'"," local position = c['background-image-position'] or 'center'"," local y, x = position:match('^(%a+)-(%a+)$')"," local rep = c['background-image-repeat'] == 'true' and 'Repeat' or 'NoRepeat'"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = locate(image) },"," opacity = opacity,"," width = SIZE[fit],"," height = SIZE[fit],"," horizontal_align = X[x or 'center'],"," vertical_align = Y[y or 'center'],"," repeat_x = rep,"," repeat_y = rep,"," },"," }, table.concat({ color, image, opacity, fit, position, rep }, '|')","end","","local shown = {}","","local function show(window, pane)"," local want = pane:get_user_vars().ttheme_shown"," if not want or want == '' then"," return"," end"," local background, key = layers(want)"," local id = window:window_id()"," if shown[id] == key then"," return"," end"," shown[id] = key"," local overrides = window:get_config_overrides() or {}"," overrides.background = background"," window:set_config_overrides(overrides)","end","","wezterm.on('user-var-changed', function(window, pane, name)"," if name == 'ttheme_shown' then"," show(window, pane)"," end","end)","wezterm.on('update-status', show)","","return function(config)"," local dirs = config.color_scheme_dirs or {}"," table.insert(dirs, COLORS)"," config.color_scheme_dirs = dirs"," if STARTUP then"," config.color_scheme = STARTUP"," end"," wezterm.add_to_config_reload_watch_list(MODULE)","end",""].join(`
301
- `)}var mf=["black","red","green","yellow","blue","purple","cyan","white"];function pf(e){return{name:fe(e.name),background:e.background,foreground:e.foreground,cursorColor:e.cursor,selectionBackground:e.selectionBackground,...Object.fromEntries(mf.map((n,t)=>[n,e.ansi[t]])),...Object.fromEntries(mf.map((n,t)=>[`bright${n[0]?.toUpperCase()}${n.slice(1)}`,e.ansi[t+8]]))}}function ou(e,n,t){let r={...n&&t?{profiles:[{updates:n,colorScheme:fe(t)}]}:{},schemes:e.map(pf)};return`${JSON.stringify(r,null,2)}
302
- `}var li={id:"windows-terminal",limits:"no kitty graphics, so no pictures; OSC repaints per pane",emit(e){return[{path:`windows-terminal/schemes/${fe(e.name)}.json`,content:`${JSON.stringify(pf(e),null,2)}
303
- `}]},emitShared(e){return[{path:"windows-terminal/ttheme.json",content:ou(e)}]}};function fe(e){return`ttheme-${nt(e)}`}function zt(e){return[`# ${e.name} — ${e.group}${e.native?` (${e.native})`:""}`,`# ANSI: ${e.ansiSource}`]}var $f=gi(import.meta.dirname,".."),Qw=gi($f,"themes"),su=gi($f,"dist"),bo=[Zr,Vr,Yr,fi,Xr,li,hi],qw=[iu,xs],zy=bo.map((e)=>e.id);async function ko({only:e}={}){if(typeof Bun>"u")throw Error("needs bun — run it from a checkout: bun src/bin.ts build");let n=e&&e.length>0?bo.filter((o)=>e.includes(o.id)):bo,t=wh(Qw),r=Pc(t);if(r.length>0){for(let o of r)console.error(` ✗ ${o.theme} [${o.rule}] ${o.detail}`);throw Error(`${r.length} contrast violation(s). Fix the palette, or waive the rule in its [contrast] section with a reason.`)}if(n.length===bo.length)wf(su,{recursive:!0,force:!0});else for(let o of n)wf(gi(su,o.id),{recursive:!0,force:!0});let i=0;for(let o of[...n,...qw]){let s=t.flatMap((a)=>o.emit?.(a)??[]),u=o.emitShared?.(t)??[];for(let a of[...s,...u])await Bun.write(gi(su,a.path),a.content),i++;let c=s.length>0?`${t.length} themes${o.limits?` (${o.limits})`:""}`:u.map((a)=>_w(a.path)).join(" ");console.log(` ${o.id.padEnd(16)} ${c}`)}console.log(`
304
- ${t.length} themes (${$h(t).length} in the new-tab rotation) -> ${i} files in dist/`)}import{spawnSync as x$}from"node:child_process";import{existsSync as Vo,mkdirSync as eb,mkdtempSync as nb,readFileSync as Xo,rmSync as tb,writeFileSync as rb}from"node:fs";import{tmpdir as ib}from"node:os";import{basename as ob,dirname as Zl,join as Yl}from"node:path";import{styleText as Mo}from"node:util";import{stdout as Gf,stdin as u0}from"node:process";import c0 from"node:readline";var bf=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(n)=>{let t=0;e.lastIndex=0;while(e.test(n))t+=1;return n.length-t}})(),kf=(e)=>{return e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510},Ef=(e)=>{return e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141};var Yw=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Zw=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,yf=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Xw=/\t{1,1000}/y,Sf=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,Vw=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,zw=/\p{M}+/gu,Bw={limit:1/0,ellipsis:""},vf=(e,n={},t={})=>{let r=n.limit??1/0,i=n.ellipsis??"",o=n?.ellipsisWidth??(i?vf(i,Bw,t).width:0),s=0,u=t.controlWidth??0,c=t.tabWidth??8,a=t.emojiWidth??2,h=2,f=t.regularWidth??1,l=t.wideWidth??2,g=[[Vw,f],[Yw,0],[Zw,u],[Xw,c],[Sf,a],[yf,l]],m=0,d=0,b=e.length,y=0,I=!1,k=b,S=Math.max(0,r-o),p=0,P=0,E=0,R=0;e:while(!0){if(P>p||d>=b&&d>m){let N=e.slice(p,P)||e.slice(m,d);y=0;for(let H of N.replaceAll(zw,"")){let A=H.codePointAt(0)||0;if(kf(A))R=2;else if(Ef(A))R=l;else R=f;if(E+R>S)k=Math.min(k,Math.max(p,m)+y);if(E+R>r){I=!0;break e}y+=H.length,E+=R}p=P=0}if(d>=b)break e;for(let N=0,H=g.length;N<H;N++){let[A,X]=g[N];if(A.lastIndex=d,A.test(e)){if(y=A===yf?bf(e.slice(d,A.lastIndex)):A===Sf?1:A.lastIndex-d,R=y*X,E+R>S)k=Math.min(k,d+Math.floor((S-E)/X));if(E+R>r){I=!0;break e}E+=R,p=m,P=d,d=m=A.lastIndex;continue e}}d+=1}return{width:I?S:E,index:I?k:b,truncated:I,ellipsed:I&&r>=o}},Mf=vf;var Dw={limit:1/0,ellipsis:"",ellipsisWidth:0},xw=(e,n={})=>{return Mf(e,Dw,n).width},Xe=xw;var Eo="\x1B",Ff="›",e0=39,cu="\x07",Pf="[",n0="]",Hf="m",au=`${n0}8;;`,If=new RegExp(`(?:\\${Pf}(?<code>\\d+)m|\\${au}(?<uri>.*)${cu})`,"y"),Nf=(e)=>{if(e>=30&&e<=37)return 39;if(e>=90&&e<=97)return 39;if(e>=40&&e<=47)return 49;if(e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0;return},Of=(e)=>`${Eo}${Pf}${e}${Hf}`,Rf=(e)=>`${Eo}${au}${e}${cu}`,uu=(e,n,t)=>{let r=n[Symbol.iterator](),i=!1,o=!1,s=e.at(-1),u=s===void 0?0:Xe(s),c=r.next(),a=r.next(),h=0;while(!c.done){let f=c.value,l=Xe(f);if(u+l<=t)e[e.length-1]+=f;else e.push(f),u=0;if(f===Eo||f===Ff)i=!0,o=n.startsWith(au,h+1);if(i){if(o){if(f===cu)i=!1,o=!1}else if(f===Hf)i=!1}else if(u+=l,u===t&&!a.done)e.push(""),u=0;c=a,a=r.next(),h+=f.length}if(s=e.at(-1),!u&&s!==void 0&&s.length&&e.length>1)e[e.length-2]+=e.pop()},t0=(e)=>{let n=e.split(" "),t=n.length;while(t){if(Xe(n[t-1]))break;t--}if(t===n.length)return e;return n.slice(0,t).join(" ")+n.slice(t).join("")},r0=(e,n,t={})=>{if(t.trim!==!1&&e.trim()==="")return"";let r="",i,o,s=e.split(" "),u=[""],c=0;for(let f=0;f<s.length;f++){let l=s[f];if(t.trim!==!1){let m=u.at(-1)??"",d=m.trimStart();if(m.length!==d.length)u[u.length-1]=d,c=Xe(d)}if(f!==0){if(c>=n&&(t.wordWrap===!1||t.trim===!1))u.push(""),c=0;if(c||t.trim===!1)u[u.length-1]+=" ",c++}let g=Xe(l);if(t.hard&&g>n){let m=n-c,d=1+Math.floor((g-m-1)/n);if(Math.floor((g-1)/n)<d)u.push("");uu(u,l,n),c=Xe(u.at(-1)??"");continue}if(c+g>n&&c&&g){if(t.wordWrap===!1&&c<n){uu(u,l,n),c=Xe(u.at(-1)??"");continue}u.push(""),c=0}if(c+g>n&&t.wordWrap===!1){uu(u,l,n),c=Xe(u.at(-1)??"");continue}u[u.length-1]+=l,c+=g}if(t.trim!==!1)u=u.map((f)=>t0(f));let a=u.join(`
305
- `),h=!1;for(let f=0;f<a.length;f++){let l=a[f];if(r+=l,!h){if(h=l>="\uD800"&&l<="\uDBFF",h)continue}else h=!1;if(l===Eo||l===Ff){If.lastIndex=f+1;let m=If.exec(a)?.groups;if(m?.code!==void 0){let d=Number.parseFloat(m.code);i=d===e0?void 0:d}else if(m?.uri!==void 0)o=m.uri.length===0?void 0:m.uri}if(a[f+1]===`
306
- `){if(o)r+=Rf("");let g=i?Nf(i):void 0;if(i&&g)r+=Of(g)}else if(l===`
307
- `){if(i&&Nf(i))r+=Of(i);if(o)r+=Rf(o)}}return r},i0=/\r?\n/;function it(e,n,t){return String(e).normalize().split(i0).map((r)=>r0(r,n,t)).join(`
308
- `)}var xe=Wi(fu(),1);function nr(e,n,t){if(!t.some((s)=>!s.disabled))return e;let r=e+n,i=Math.max(t.length-1,0),o=r<0?i:r>i?0:r;return t[o]?.disabled?nr(o,n<0?-1:1,t):o}function yo(e,n,t,r){let i=r.split(`
309
- `),o=0,s=e;for(let c of i){if(s<=c.length)break;s-=c.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+t)),s=Math.min(s,i[o].length)+n;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let u=0;for(let c=0;c<o;c++)u+=i[c].length+1;return u+s}var a0=["up","down","left","right","space","enter","cancel"],h0=["January","February","March","April","May","June","July","August","September","October","November","December"],Ve={actions:new Set(a0),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...h0],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,n)=>`There are only ${e} days in ${n}`,afterMin:(e)=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:(e)=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};function Uf(e,n){if(typeof e=="string")return Ve.aliases.get(e)===n;for(let t of e)if(t!==void 0&&Uf(t,n))return!0;return!1}function f0(e,n){if(e===n)return;let t=e.split(`
297
+ `)}function iu(e,n,t=[]){for(let a of e)for(let h of[a.name,a.group,a.native??"",a.ansiSource])if(/["$`\\]/.test(h))throw Error(`${a.name}: "${h}" contains a character that breaks zsh quoting`);let r=Math.max(0,...e.map((a)=>a.name.length)),i=(a,h)=>` ${a.name.padEnd(r)} "${h}"`,o=(a)=>a.map((h)=>h.name).join(" "),s=an(e),u=(a)=>`'${a.replaceAll("'","'\\''")}'`,c=ei.filter((a)=>a.section!=="setup"&&!a.hidden);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${_e.version}`,"",'# the palette new tabs open with, which the iTerm2 "ttheme · default" profile wears',`typeset -g TTHEME_STARTUP=${n??""}`,"","# the terminals ttheme is wired into: a picture change reaches every one of them, from whichever runs the shell",`typeset -ga TTHEME_TERMINALS=(${t.join(" ")})`,"","# the commands the shell layer knows (src/verbs.ts): help, completion and argument checks read them",`typeset -ga TTHEME_VERBS=(${c.map((a)=>a.name).join(" ")})`,`typeset -ga TTHEME_SHELL_VERBS=(${c.filter((a)=>a.shell).map((a)=>a.name).join(" ")})`,"typeset -gA TTHEME_VERB_ARGS=(",...c.map((a)=>` ${a.name} ${u(a.args.join(" "))}`),")","typeset -gA TTHEME_VERB_ABOUT=(",...c.map((a)=>` ${a.name} ${u(a.about)}`),")",`typeset -g TTHEME_HELP=${u(ni(!1,!0))}`,`typeset -g TTHEME_HELP_ALL=${u(ni(!0,!0))}`,"","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${uf.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${ru().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...e.map((a)=>i(a,[a.background,a.foreground,a.cursor,a.selection,...a.ansi].join(" "))),")","","# series order: new tabs cycle through it and TTHEME_SORT=series lists it — the default role stays applyable but unlisted",`typeset -ga TTHEME_ORDER=(${o(s)})`,"","# the same palettes by series name, then palette name: TTHEME_SORT=abc lists them this way",`typeset -ga TTHEME_ABC=(${o(_r(s))})`,"","typeset -gA TTHEME_GROUP=(",...e.map((a)=>i(a,a.group)),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...e.filter((a)=>a.native).map((a)=>i(a,a.native??"")),")","","# the six colors a list row shows: foreground, the signature, then red and green","typeset -gA TTHEME_SWATCH=(",...e.map((a)=>i(a,lo(a).join(" "))),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...e.map((a)=>i(a,a.ansiSource)),")",""].join(`
298
+ `)}var ou={id:"shell",emitShared(e){return[{path:"shell/palettes.zsh",content:iu(e.map(wn))}]}};var t0=["black","red","green","yellow","blue","magenta","cyan","white"];function $f(e,n){return[` ${e}:`,...t0.map((t,r)=>` ${t}: "${n[r]}"`)]}var ci={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(e){let n=[`name: "${e.name}"`,`background: "${e.background}"`,`foreground: "${e.foreground}"`,`accent: "${e.cursor}"`,`cursor: "${e.cursor}"`,`details: ${Qe(e.background)<0.18?"darker":"lighter"}`,"terminal_colors:",...$f("normal",e.ansi.slice(0,8)),...$f("bright",e.ansi.slice(8,16)),""].join(`
299
+ `);return[{path:`warp/themes/${fe(e.name)}.yaml`,content:n}]}};var bf=(e)=>`[${e.map((n)=>`"${n}"`).join(", ")}]`,ai={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(e){let n=["[metadata]",`name = "${fe(e.name)}"`,`origin_url = "${e.ansiSource}"`,"","[colors]",`foreground = "${e.foreground}"`,`background = "${e.background}"`,`cursor_bg = "${e.cursor}"`,`cursor_border = "${e.cursor}"`,`cursor_fg = "${e.background}"`,`selection_bg = "${e.selectionBackground}"`,`selection_fg = "${e.foreground}"`,"",`ansi = ${bf(e.ansi.slice(0,8))}`,`brights = ${bf(e.ansi.slice(8,16))}`,""].join(`
300
+ `);return[{path:`wezterm/colors/${fe(e.name)}.toml`,content:n}]}},nr=(e)=>JSON.stringify(e);function kf(e){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${nr(e.path)}`,`local COLORS = ${nr(e.colors)}`,`local BACKGROUNDS = ${nr(e.backgrounds)}`,`local STARTUP = ${e.startup?nr(fe(e.startup)):"nil"}`,"local PALETTES = {",...e.palettes.map((n)=>` [${nr(n.name)}] = ${nr(n.background)},`),"}","","local X = { left = 'Left', center = 'Center', right = 'Right' }","local Y = { top = 'Top', center = 'Middle', bottom = 'Bottom' }","local SIZE = { cover = 'Cover', contain = 'Contain', stretch = '100%' }","","local function locate(path)"," if path:sub(1, 2) == '~/' then"," return os.getenv('HOME') .. path:sub(2)"," elseif path:sub(1, 1) == '/' or path:match('^%a:[/\\\\]') then"," return path"," end"," return BACKGROUNDS .. '/' .. path","end","","local function read(path, into)"," local f = io.open(path, 'r')"," if not f then"," return false"," end"," for line in f:lines() do"," local key, value = line:match('^%s*([%w%-]+)%s*=%s*(.-)%s*$')"," if key == 'config-file' then"," read(locate((value:gsub('^%?', ''))), into)"," elseif key then"," into[key] = value"," end"," end"," f:close()"," return true","end","","local function layers(palette)"," local color = PALETTES[palette]"," local c = {}"," if not color or not read(BACKGROUNDS .. '/' .. ((palette:gsub('@', '--', 1)):gsub('/', '--', 1)) .. '.conf', c) then"," return nil, 'none'"," end"," local image = c['background-image'] or ''"," local opacity = tonumber(c['background-image-opacity'] or '1') or 1"," if image == '' or opacity <= 0 then"," return nil, 'none'"," end"," local fit = c['background-image-fit'] or 'contain'"," local position = c['background-image-position'] or 'center'"," local y, x = position:match('^(%a+)-(%a+)$')"," local rep = c['background-image-repeat'] == 'true' and 'Repeat' or 'NoRepeat'"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = locate(image) },"," opacity = opacity,"," width = SIZE[fit],"," height = SIZE[fit],"," horizontal_align = X[x or 'center'],"," vertical_align = Y[y or 'center'],"," repeat_x = rep,"," repeat_y = rep,"," },"," }, table.concat({ color, image, opacity, fit, position, rep }, '|')","end","","local shown = {}","","local function show(window, pane)"," local want = pane:get_user_vars().ttheme_shown"," if not want or want == '' then"," return"," end"," local background, key = layers(want)"," local id = window:window_id()"," if shown[id] == key then"," return"," end"," shown[id] = key"," local overrides = window:get_config_overrides() or {}"," overrides.background = background"," window:set_config_overrides(overrides)","end","","wezterm.on('user-var-changed', function(window, pane, name)"," if name == 'ttheme_shown' then"," show(window, pane)"," end","end)","wezterm.on('update-status', show)","","return function(config)"," local dirs = config.color_scheme_dirs or {}"," table.insert(dirs, COLORS)"," config.color_scheme_dirs = dirs"," if STARTUP then"," config.color_scheme = STARTUP"," end"," wezterm.add_to_config_reload_watch_list(MODULE)","end",""].join(`
301
+ `)}var Ef=["black","red","green","yellow","blue","purple","cyan","white"];function yf(e){return{name:fe(e.name),background:e.background,foreground:e.foreground,cursorColor:e.cursor,selectionBackground:e.selectionBackground,...Object.fromEntries(Ef.map((n,t)=>[n,e.ansi[t]])),...Object.fromEntries(Ef.map((n,t)=>[`bright${n[0]?.toUpperCase()}${n.slice(1)}`,e.ansi[t+8]]))}}function su(e,n,t){let r={...n&&t?{profiles:[{updates:n,colorScheme:fe(t)}]}:{},schemes:e.map(yf)};return`${JSON.stringify(r,null,2)}
302
+ `}var hi={id:"windows-terminal",limits:"no kitty graphics, so no pictures; OSC repaints per pane",emit(e){return[{path:`windows-terminal/schemes/${fe(e.name)}.json`,content:`${JSON.stringify(yf(e),null,2)}
303
+ `}]},emitShared(e){return[{path:"windows-terminal/ttheme.json",content:su(e)}]}};function fe(e){return`ttheme-${nt(e)}`}function Bt(e){return[`# ${e.name} — ${e.group}${e.native?` (${e.native})`:""}`,`# ANSI: ${e.ansiSource}`]}var vf=fi(import.meta.dirname,".."),i0=fi(vf,"themes"),uu=fi(vf,"dist"),$o=[Qr,Yr,qr,ai,Zr,hi,ci],o0=[ou,eu],cS=$o.map((e)=>e.id);async function bo({only:e}={}){if(typeof Bun>"u")throw Error("needs bun — run it from a checkout: bun src/bin.ts build");let n=e&&e.length>0?$o.filter((o)=>e.includes(o.id)):$o,t=Sh(i0),r=jc(t);if(r.length>0){for(let o of r)console.error(` ✗ ${o.theme} [${o.rule}] ${o.detail}`);throw Error(`${r.length} contrast violation(s). Fix the palette, or waive the rule in its [contrast] section with a reason.`)}if(n.length===$o.length)Sf(uu,{recursive:!0,force:!0});else for(let o of n)Sf(fi(uu,o.id),{recursive:!0,force:!0});let i=0;for(let o of[...n,...o0]){let s=t.flatMap((a)=>o.emit?.(a)??[]),u=o.emitShared?.(t)??[];for(let a of[...s,...u])await Bun.write(fi(uu,a.path),a.content),i++;let c=s.length>0?`${t.length} themes${o.limits?` (${o.limits})`:""}`:u.map((a)=>r0(a.path)).join(" ");console.log(` ${o.id.padEnd(16)} ${c}`)}console.log(`
304
+ ${t.length} themes (${vh(t).length} in the new-tab rotation) -> ${i} files in dist/`)}import{spawnSync as hb}from"node:child_process";import{existsSync as fr,mkdirSync as fb,mkdtempSync as lb,readFileSync as Xo,rmSync as db,writeFileSync as gb}from"node:fs";import{tmpdir as mb}from"node:os";import{basename as pb,dirname as od,join as _u}from"node:path";import{styleText as vo}from"node:util";import{stdout as Kf,stdin as E0}from"node:process";import y0 from"node:readline";var Mf=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(n)=>{let t=0;e.lastIndex=0;while(e.test(n))t+=1;return n.length-t}})(),If=(e)=>{return e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510},Nf=(e)=>{return e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141};var s0=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,u0=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Of=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,c0=/\t{1,1000}/y,Rf=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,a0=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,h0=/\p{M}+/gu,f0={limit:1/0,ellipsis:""},Ff=(e,n={},t={})=>{let r=n.limit??1/0,i=n.ellipsis??"",o=n?.ellipsisWidth??(i?Ff(i,f0,t).width:0),s=0,u=t.controlWidth??0,c=t.tabWidth??8,a=t.emojiWidth??2,h=2,f=t.regularWidth??1,l=t.wideWidth??2,d=[[a0,f],[s0,0],[u0,u],[c0,c],[Rf,a],[Of,l]],g=0,m=0,b=e.length,S=0,I=!1,k=b,y=Math.max(0,r-o),p=0,P=0,E=0,R=0;e:while(!0){if(P>p||m>=b&&m>g){let N=e.slice(p,P)||e.slice(g,m);S=0;for(let H of N.replaceAll(h0,"")){let A=H.codePointAt(0)||0;if(If(A))R=2;else if(Nf(A))R=l;else R=f;if(E+R>y)k=Math.min(k,Math.max(p,g)+S);if(E+R>r){I=!0;break e}S+=H.length,E+=R}p=P=0}if(m>=b)break e;for(let N=0,H=d.length;N<H;N++){let[A,X]=d[N];if(A.lastIndex=m,A.test(e)){if(S=A===Of?Mf(e.slice(m,A.lastIndex)):A===Rf?1:A.lastIndex-m,R=S*X,E+R>y)k=Math.min(k,m+Math.floor((y-E)/X));if(E+R>r){I=!0;break e}E+=R,p=g,P=m,m=g=A.lastIndex;continue e}}m+=1}return{width:I?y:E,index:I?k:b,truncated:I,ellipsed:I&&r>=o}},Pf=Ff;var l0={limit:1/0,ellipsis:"",ellipsisWidth:0},d0=(e,n={})=>{return Pf(e,l0,n).width},Xe=d0;var ko="\x1B",Gf="›",g0=39,au="\x07",Uf="[",m0="]",jf="m",hu=`${m0}8;;`,Hf=new RegExp(`(?:\\${Uf}(?<code>\\d+)m|\\${hu}(?<uri>.*)${au})`,"y"),Lf=(e)=>{if(e>=30&&e<=37)return 39;if(e>=90&&e<=97)return 39;if(e>=40&&e<=47)return 49;if(e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0;return},Af=(e)=>`${ko}${Uf}${e}${jf}`,Tf=(e)=>`${ko}${hu}${e}${au}`,cu=(e,n,t)=>{let r=n[Symbol.iterator](),i=!1,o=!1,s=e.at(-1),u=s===void 0?0:Xe(s),c=r.next(),a=r.next(),h=0;while(!c.done){let f=c.value,l=Xe(f);if(u+l<=t)e[e.length-1]+=f;else e.push(f),u=0;if(f===ko||f===Gf)i=!0,o=n.startsWith(hu,h+1);if(i){if(o){if(f===au)i=!1,o=!1}else if(f===jf)i=!1}else if(u+=l,u===t&&!a.done)e.push(""),u=0;c=a,a=r.next(),h+=f.length}if(s=e.at(-1),!u&&s!==void 0&&s.length&&e.length>1)e[e.length-2]+=e.pop()},p0=(e)=>{let n=e.split(" "),t=n.length;while(t){if(Xe(n[t-1]))break;t--}if(t===n.length)return e;return n.slice(0,t).join(" ")+n.slice(t).join("")},w0=(e,n,t={})=>{if(t.trim!==!1&&e.trim()==="")return"";let r="",i,o,s=e.split(" "),u=[""],c=0;for(let f=0;f<s.length;f++){let l=s[f];if(t.trim!==!1){let g=u.at(-1)??"",m=g.trimStart();if(g.length!==m.length)u[u.length-1]=m,c=Xe(m)}if(f!==0){if(c>=n&&(t.wordWrap===!1||t.trim===!1))u.push(""),c=0;if(c||t.trim===!1)u[u.length-1]+=" ",c++}let d=Xe(l);if(t.hard&&d>n){let g=n-c,m=1+Math.floor((d-g-1)/n);if(Math.floor((d-1)/n)<m)u.push("");cu(u,l,n),c=Xe(u.at(-1)??"");continue}if(c+d>n&&c&&d){if(t.wordWrap===!1&&c<n){cu(u,l,n),c=Xe(u.at(-1)??"");continue}u.push(""),c=0}if(c+d>n&&t.wordWrap===!1){cu(u,l,n),c=Xe(u.at(-1)??"");continue}u[u.length-1]+=l,c+=d}if(t.trim!==!1)u=u.map((f)=>p0(f));let a=u.join(`
305
+ `),h=!1;for(let f=0;f<a.length;f++){let l=a[f];if(r+=l,!h){if(h=l>="\uD800"&&l<="\uDBFF",h)continue}else h=!1;if(l===ko||l===Gf){Hf.lastIndex=f+1;let g=Hf.exec(a)?.groups;if(g?.code!==void 0){let m=Number.parseFloat(g.code);i=m===g0?void 0:m}else if(g?.uri!==void 0)o=g.uri.length===0?void 0:g.uri}if(a[f+1]===`
306
+ `){if(o)r+=Tf("");let d=i?Lf(i):void 0;if(i&&d)r+=Af(d)}else if(l===`
307
+ `){if(i&&Lf(i))r+=Af(i);if(o)r+=Tf(o)}}return r},$0=/\r?\n/;function it(e,n,t){return String(e).normalize().split($0).map((r)=>w0(r,n,t)).join(`
308
+ `)}var xe=Ci(lu(),1);function tr(e,n,t){if(!t.some((s)=>!s.disabled))return e;let r=e+n,i=Math.max(t.length-1,0),o=r<0?i:r>i?0:r;return t[o]?.disabled?tr(o,n<0?-1:1,t):o}function Eo(e,n,t,r){let i=r.split(`
309
+ `),o=0,s=e;for(let c of i){if(s<=c.length)break;s-=c.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+t)),s=Math.min(s,i[o].length)+n;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let u=0;for(let c=0;c<o;c++)u+=i[c].length+1;return u+s}var S0=["up","down","left","right","space","enter","cancel"],v0=["January","February","March","April","May","June","July","August","September","October","November","December"],Ve={actions:new Set(S0),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...v0],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,n)=>`There are only ${e} days in ${n}`,afterMin:(e)=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:(e)=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};function _f(e,n){if(typeof e=="string")return Ve.aliases.get(e)===n;for(let t of e)if(t!==void 0&&_f(t,n))return!0;return!1}function M0(e,n){if(e===n)return;let t=e.split(`
310
310
  `),r=n.split(`
311
- `),i=Math.max(t.length,r.length),o=[];for(let s=0;s<i;s++)t[s]!==r[s]&&o.push(s);return{lines:o,numLinesBefore:t.length,numLinesAfter:r.length,numLines:i}}var hS=globalThis.process.platform.startsWith("win"),gu=Symbol("clack:cancel");function an(e){return e===gu}function So(e,n){let t=e;t.isTTY&&t.setRawMode(n)}var Io=(e)=>("columns"in e)&&typeof e.columns=="number"?e.columns:80,mu=(e)=>("rows"in e)&&typeof e.rows=="number"?e.rows:20;function di(e,n,t,r=t,i=t,o){let s=Io(e??Gf);return it(n,s-t.length,{hard:!0,trim:!1}).split(`
311
+ `),i=Math.max(t.length,r.length),o=[];for(let s=0;s<i;s++)t[s]!==r[s]&&o.push(s);return{lines:o,numLinesBefore:t.length,numLinesAfter:r.length,numLines:i}}var yS=globalThis.process.platform.startsWith("win"),gu=Symbol("clack:cancel");function en(e){return e===gu}function yo(e,n){let t=e;t.isTTY&&t.setRawMode(n)}var Mo=(e)=>("columns"in e)&&typeof e.columns=="number"?e.columns:80,pu=(e)=>("rows"in e)&&typeof e.rows=="number"?e.rows:20;function li(e,n,t,r=t,i=t,o){let s=Mo(e??Kf);return it(n,s-t.length,{hard:!0,trim:!1}).split(`
312
312
  `).map((u,c,a)=>{let h=o?o(u,c):u;return c===0?`${r}${h}`:c===a.length-1?`${i}${h}`:`${t}${h}`}).join(`
313
- `)}function jf(e,n){if("~standard"in e){let t=e["~standard"].validate(n);if(t instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return t.issues?.at(0)?.message}return e(n)}class On{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,n=!0){let{input:t=u0,output:r=Gf,render:i,signal:o,...s}=e;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=n,this._abortSignal=o,this.input=t,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(e,n){let t=this._subscribers.get(e)??[];t.push(n),this._subscribers.set(e,t)}on(e,n){this.setSubscriber(e,{cb:n})}once(e,n){this.setSubscriber(e,{cb:n,once:!0})}emit(e,...n){let t=this._subscribers.get(e)??[],r=[];for(let i of t)i.cb(...n),i.once&&r.push(()=>t.splice(t.indexOf(i),1));for(let i of r)i()}prompt(){return new Promise((e)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(gu);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=c0.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),So(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(xe.cursor.show),this.output.off("resize",this.render),So(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(xe.cursor.show),this.output.off("resize",this.render),So(this.input,!1),e(gu)})})}_isActionKey(e,n){return e==="\t"}_shouldSubmit(e,n){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,n){this.userInput=e??"",this.emit("userInput",this.userInput),n&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,n){if(this._track&&n.name!=="return"&&(n.name&&this._isActionKey(e,n)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),n?.name&&(!this._track&&Ve.aliases.has(n.name)&&this.emit("cursor",Ve.aliases.get(n.name)),Ve.actions.has(n.name)&&this.emit("cursor",n.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e,n),n?.name==="return"&&this._shouldSubmit(e,n)){if(this.opts.validate){let t=jf(this.opts.validate,this.value);t&&(this.error=t instanceof Error?t.message:t,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Uf([e,n?.name,n?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
314
- `),So(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=it(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
315
- `).length-1;this.output.write(xe.cursor.move(-999,e*-1))}render(){let e=it(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(xe.cursor.hide);else{let n=f0(this._prevFrame,e),t=mu(this.output);if(this.restoreCursor(),n){let r=Math.max(0,n.numLinesAfter-t),i=Math.max(0,n.numLinesBefore-t),o=n.lines.find((s)=>s>=r);if(o===void 0){this._prevFrame=e;return}if(n.lines.length===1){this.output.write(xe.cursor.move(0,o-i)),this.output.write(xe.erase.lines(1));let s=e.split(`
313
+ `)}function qf(e,n){if("~standard"in e){let t=e["~standard"].validate(n);if(t instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return t.issues?.at(0)?.message}return e(n)}class Rn{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,n=!0){let{input:t=E0,output:r=Kf,render:i,signal:o,...s}=e;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=n,this._abortSignal=o,this.input=t,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(e,n){let t=this._subscribers.get(e)??[];t.push(n),this._subscribers.set(e,t)}on(e,n){this.setSubscriber(e,{cb:n})}once(e,n){this.setSubscriber(e,{cb:n,once:!0})}emit(e,...n){let t=this._subscribers.get(e)??[],r=[];for(let i of t)i.cb(...n),i.once&&r.push(()=>t.splice(t.indexOf(i),1));for(let i of r)i()}prompt(){return new Promise((e)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(gu);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=y0.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),yo(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(xe.cursor.show),this.output.off("resize",this.render),yo(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(xe.cursor.show),this.output.off("resize",this.render),yo(this.input,!1),e(gu)})})}_isActionKey(e,n){return e==="\t"}_shouldSubmit(e,n){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,n){this.userInput=e??"",this.emit("userInput",this.userInput),n&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,n){if(this._track&&n.name!=="return"&&(n.name&&this._isActionKey(e,n)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),n?.name&&(!this._track&&Ve.aliases.has(n.name)&&this.emit("cursor",Ve.aliases.get(n.name)),Ve.actions.has(n.name)&&this.emit("cursor",n.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e,n),n?.name==="return"&&this._shouldSubmit(e,n)){if(this.opts.validate){let t=qf(this.opts.validate,this.value);t&&(this.error=t instanceof Error?t.message:t,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}_f([e,n?.name,n?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
314
+ `),yo(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=it(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
315
+ `).length-1;this.output.write(xe.cursor.move(-999,e*-1))}render(){let e=it(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(xe.cursor.hide);else{let n=M0(this._prevFrame,e),t=pu(this.output);if(this.restoreCursor(),n){let r=Math.max(0,n.numLinesAfter-t),i=Math.max(0,n.numLinesBefore-t),o=n.lines.find((s)=>s>=r);if(o===void 0){this._prevFrame=e;return}if(n.lines.length===1){this.output.write(xe.cursor.move(0,o-i)),this.output.write(xe.erase.lines(1));let s=e.split(`
316
316
  `);this.output.write(s[o]),this._prevFrame=e,this.output.write(xe.cursor.move(0,s.length-o-1));return}else if(n.lines.length>1){if(r<i)o=r;else{let u=o-i;u>0&&this.output.write(xe.cursor.move(0,u))}this.output.write(xe.erase.down());let s=e.split(`
317
317
  `).slice(o);this.output.write(s.join(`
318
- `)),this._prevFrame=e;return}}this.output.write(xe.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}}function l0(e,n){if(e===void 0||n.length===0)return 0;let t=n.findIndex((r)=>r.value===e);return t!==-1?t:0}function g0(e,n){return(n.label??String(n.value)).toLowerCase().includes(e.toLowerCase())}function d0(e,n){if(n)return e?n:n[0]}var m0=class extends On{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#n=0;#t="";#e;#o;#u;get cursor(){return this.#n}get userInputWithCursor(){if(!this.userInput)return Mo(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let n=this.userInput.slice(0,this.cursor),t=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${n}${Mo("inverse",t)}${r}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(n){super(n),this.#o=n.options,this.#u=n.placeholder;let t=this.options;this.filteredOptions=[...t],this.multiple=n.multiple===!0,this.#e=typeof n.options=="function"?n.filter:n.filter??g0;let r;if(n.initialValue&&Array.isArray(n.initialValue)?this.multiple?r=n.initialValue:r=n.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let o=t.findIndex((s)=>s.value===i);o!==-1&&(this.toggleSelected(i),this.#n=o)}this.focusedValue=this.options[this.#n]?.value,this.on("key",(i,o)=>this.#r(i,o)),this.on("userInput",(i)=>this.#i(i))}_isActionKey(n,t){return n==="\t"||this.multiple&&this.isNavigating&&t.name==="space"&&n!==void 0&&n!==""}#r(n,t){let r=t.name==="up",i=t.name==="down",o=t.name==="return",s=this.userInput===""||this.userInput==="\t",u=this.#u,c=this.options,a=u!==void 0&&u!==""&&c.some((h)=>!h.disabled&&(this.#e?this.#e(u,h):!0));if(t.name==="tab"&&s&&a){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(u,!0),this.isNavigating=!1;return}r||i?(this.#n=nr(this.#n,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#n]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=d0(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(t.name==="tab"||this.isNavigating&&t.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(n){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(n)?this.selectedValues=this.selectedValues.filter((t)=>t!==n):this.selectedValues=[...this.selectedValues,n]:this.selectedValues=[n])}#i(n){if(n!==this.#t){this.#t=n;let t=this.options;n&&this.#e?this.filteredOptions=t.filter((o)=>this.#e?.(n,o)):this.filteredOptions=[...t];let r=l0(this.focusedValue,this.filteredOptions);this.#n=nr(r,0,this.filteredOptions);let i=this.filteredOptions[this.#n];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class pu extends On{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(n)=>{this.output.write(xe.cursor.move(0,-1)),this.value=n,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var p0={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function Af(e){return[...e].map((n)=>p0[n])}function w0(e){let n=new Intl.DateTimeFormat(e,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),t=[],r="/";for(let i of n)i.type==="literal"?r=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&t.push({type:i.type,len:i.type==="year"?4:2});return{segments:t,separator:r}}function lu(e){return Number.parseInt((e||"0").replace(/_/g,"0"),10)||0}function vo(e){return{year:lu(e.year),month:lu(e.month),day:lu(e.day)}}function du(e,n){return new Date(e||2001,n||1,0).getDate()}function Jf(e){let{year:n,month:t,day:r}=vo(e);if(!n||n<0||n>9999||!t||t<1||t>12||!r||r<1)return;let i=new Date(Date.UTC(n,t-1,r));if(!(i.getUTCFullYear()!==n||i.getUTCMonth()!==t-1||i.getUTCDate()!==r))return{year:n,month:t,day:r}}function Tf(e){let n=Jf(e);return n?new Date(Date.UTC(n.year,n.month-1,n.day)):void 0}function $0(e,n,t,r){let i=t?{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate()}:null,o=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return e==="year"?{min:i?.year??1,max:o?.year??9999}:e==="month"?{min:i&&n.year===i.year?i.month:1,max:o&&n.year===o.year?o.month:12}:{min:i&&n.year===i.year&&n.month===i.month?i.day:1,max:o&&n.year===o.year&&n.month===o.month?o.day:du(n.year,n.month)}}class Cf extends On{#n;#t;#e;#o;#u;#r={segmentIndex:0,positionInSegment:0};#i=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#e}}get segments(){return this.#n}get separator(){return this.#t}get formattedValue(){return this.#f(this.#e)}#f(e){return this.#n.map((n)=>e[n.type]).join(this.#t)}#c(){this._setUserInput(this.#f(this.#e)),this._setValue(Tf(this.#e)??void 0)}constructor(e){let n=e.format?{segments:Af(e.format),separator:e.separator??"/"}:w0(e.locale),t=e.separator??n.separator,r=e.format?Af(e.format):n.segments,i=e.initialValue??e.defaultValue,o=i?{year:String(i.getUTCFullYear()).padStart(4,"0"),month:String(i.getUTCMonth()+1).padStart(2,"0"),day:String(i.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},s=r.map((u)=>o[u.type]).join(t);super({...e,initialUserInput:s},!1),this.#n=r,this.#t=t,this.#e=o,this.#o=e.minDate,this.#u=e.maxDate,this.#c(),this.on("cursor",(u)=>this.#d(u)),this.on("key",(u,c)=>this.#m(u,c)),this.on("finalize",()=>this.#p(e))}#a(){let e=Math.max(0,Math.min(this.#r.segmentIndex,this.#n.length-1)),n=this.#n[e];if(n)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,n.len-1)),{segment:n,index:e}}#h(e){this.inlineError="",this.#s=null;let n=this.#a();n&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#n.length-1,n.index+e)),this.#r.positionInSegment=0,this.#i=!0)}#l(e){let n=this.#a();if(!n)return;let{segment:t}=n,r=this.#e[t.type],i=!r||r.replace(/_/g,"")==="",o=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,s=$0(t.type,vo(this.#e),this.#o,this.#u),u;i?u=e===1?s.min:s.max:u=Math.max(Math.min(s.max,o+e),s.min),this.#e={...this.#e,[t.type]:u.toString().padStart(t.len,"0")},this.#i=!0,this.#s=null,this.#c()}#d(e){if(e)switch(e){case"right":return this.#h(1);case"left":return this.#h(-1);case"up":return this.#l(1);case"down":return this.#l(-1)}}#m(e,n){if(n?.name==="backspace"||n?.sequence===""||n?.sequence==="\b"||e===""||e==="\b"){this.inlineError="";let t=this.#a();if(!t)return;if(!this.#e[t.segment.type].replace(/_/g,"")){this.#h(-1);return}this.#e[t.segment.type]="_".repeat(t.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(n?.name==="tab"){this.inlineError="";let t=this.#a();if(!t)return;let r=n.shift?-1:1,i=t.index+r;i>=0&&i<this.#n.length&&(this.#r.segmentIndex=i,this.#r.positionInSegment=0,this.#i=!0);return}if(e&&/^[0-9]$/.test(e)){let t=this.#a();if(!t)return;let{segment:r}=t,i=!this.#e[r.type].replace(/_/g,"");if(this.#i&&this.#s!==null&&!i){let l=this.#s+e,g={...this.#e,[r.type]:l},m=this.#g(g,r);if(m){this.inlineError=m,this.#s=null,this.#i=!1;return}this.inlineError="",this.#e[r.type]=l,this.#s=null,this.#i=!1,this.#c(),t.index<this.#n.length-1&&(this.#r.segmentIndex=t.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!i&&(this.#e[r.type]="_".repeat(r.len),this.#r.positionInSegment=0),this.#i=!1,this.#s=null;let o=this.#e[r.type],s=o.indexOf("_"),u=s>=0?s:Math.min(this.#r.positionInSegment,r.len-1);if(u<0||u>=r.len)return;let c=o.slice(0,u)+e+o.slice(u+1),a=!1;if(u===0&&o==="__"&&(r.type==="month"||r.type==="day")){let l=Number.parseInt(e,10);c=`0${e}`,a=l<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(o.replace(/_/g,"")+e).padStart(r.len,"_")),!c.includes("_")){let l={...this.#e,[r.type]:c},g=this.#g(l,r);if(g){this.inlineError=g;return}}this.inlineError="",this.#e[r.type]=c;let h=c.includes("_")?void 0:Jf(this.#e);if(h){let{year:l,month:g}=h,m=du(l,g);this.#e={year:String(Math.max(0,Math.min(9999,l))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,g))).padStart(2,"0"),day:String(Math.max(1,Math.min(m,h.day))).padStart(2,"0")}}this.#c();let f=c.indexOf("_");a?(this.#i=!0,this.#s=e):f>=0?this.#r.positionInSegment=f:s>=0&&t.index<this.#n.length-1?(this.#r.segmentIndex=t.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(u+1,r.len-1)}}#g(e,n){let{month:t,day:r}=vo(e);if(n.type==="month"&&(t<0||t>12))return Ve.date.messages.invalidMonth;if(n.type==="day"&&(r<0||r>31))return Ve.date.messages.invalidDay(31,"any month")}#p(e){let{year:n,month:t,day:r}=vo(this.#e);if(n&&t&&r){let i=du(n,t);this.#e={...this.#e,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=Tf(this.#e)??e.defaultValue??void 0}}var b0=class extends On{options;cursor=0;#n;getGroupItems(n){return this.options.filter((t)=>t.group===n)}isGroupSelected(n){let t=this.getGroupItems(n),r=this.value;return r===void 0?!1:t.every((i)=>r.includes(i.value))}toggleValue(){let n=this.options[this.cursor];if(n!==void 0)if(this.value===void 0&&(this.value=[]),n.group===!0){let t=n.value,r=this.getGroupItems(t);this.isGroupSelected(t)?this.value=this.value.filter((i)=>r.findIndex((o)=>o.value===i)===-1):this.value=[...this.value,...r.map((i)=>i.value)],this.value=Array.from(new Set(this.value))}else{let t=this.value.includes(n.value);this.value=t?this.value.filter((r)=>r!==n.value):[...this.value,n.value]}}constructor(n){super(n,!1);let{options:t}=n;this.#n=n.selectableGroups!==!1,this.options=Object.entries(t).flatMap(([r,i])=>[{value:r,group:!0,label:r},...i.map((o)=>({...o,group:r}))]),this.value=[...n.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:r})=>r===n.cursorAt),this.#n?0:1),this.on("cursor",(r)=>{switch(r){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},k0=new Set(["up","down","left","right"]);class Kf extends On{#n=!1;#t;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${e}█`;let n=e.slice(0,this.cursor),t=e.slice(this.cursor,this.cursor+1),r=e.slice(this.cursor+1);return t===`
318
+ `)),this._prevFrame=e;return}}this.output.write(xe.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}}function I0(e,n){if(e===void 0||n.length===0)return 0;let t=n.findIndex((r)=>r.value===e);return t!==-1?t:0}function N0(e,n){return(n.label??String(n.value)).toLowerCase().includes(e.toLowerCase())}function O0(e,n){if(n)return e?n:n[0]}var R0=class extends Rn{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#n=0;#t="";#e;#o;#u;get cursor(){return this.#n}get userInputWithCursor(){if(!this.userInput)return vo(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let n=this.userInput.slice(0,this.cursor),t=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${n}${vo("inverse",t)}${r}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(n){super(n),this.#o=n.options,this.#u=n.placeholder;let t=this.options;this.filteredOptions=[...t],this.multiple=n.multiple===!0,this.#e=typeof n.options=="function"?n.filter:n.filter??N0;let r;if(n.initialValue&&Array.isArray(n.initialValue)?this.multiple?r=n.initialValue:r=n.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let o=t.findIndex((s)=>s.value===i);o!==-1&&(this.toggleSelected(i),this.#n=o)}this.focusedValue=this.options[this.#n]?.value,this.on("key",(i,o)=>this.#r(i,o)),this.on("userInput",(i)=>this.#i(i))}_isActionKey(n,t){return n==="\t"||this.multiple&&this.isNavigating&&t.name==="space"&&n!==void 0&&n!==""}#r(n,t){let r=t.name==="up",i=t.name==="down",o=t.name==="return",s=this.userInput===""||this.userInput==="\t",u=this.#u,c=this.options,a=u!==void 0&&u!==""&&c.some((h)=>!h.disabled&&(this.#e?this.#e(u,h):!0));if(t.name==="tab"&&s&&a){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(u,!0),this.isNavigating=!1;return}r||i?(this.#n=tr(this.#n,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#n]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=O0(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(t.name==="tab"||this.isNavigating&&t.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(n){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(n)?this.selectedValues=this.selectedValues.filter((t)=>t!==n):this.selectedValues=[...this.selectedValues,n]:this.selectedValues=[n])}#i(n){if(n!==this.#t){this.#t=n;let t=this.options;n&&this.#e?this.filteredOptions=t.filter((o)=>this.#e?.(n,o)):this.filteredOptions=[...t];let r=I0(this.focusedValue,this.filteredOptions);this.#n=tr(r,0,this.filteredOptions);let i=this.filteredOptions[this.#n];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class wu extends Rn{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(n)=>{this.output.write(xe.cursor.move(0,-1)),this.value=n,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var F0={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function Cf(e){return[...e].map((n)=>F0[n])}function P0(e){let n=new Intl.DateTimeFormat(e,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),t=[],r="/";for(let i of n)i.type==="literal"?r=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&t.push({type:i.type,len:i.type==="year"?4:2});return{segments:t,separator:r}}function du(e){return Number.parseInt((e||"0").replace(/_/g,"0"),10)||0}function So(e){return{year:du(e.year),month:du(e.month),day:du(e.day)}}function mu(e,n){return new Date(e||2001,n||1,0).getDate()}function Qf(e){let{year:n,month:t,day:r}=So(e);if(!n||n<0||n>9999||!t||t<1||t>12||!r||r<1)return;let i=new Date(Date.UTC(n,t-1,r));if(!(i.getUTCFullYear()!==n||i.getUTCMonth()!==t-1||i.getUTCDate()!==r))return{year:n,month:t,day:r}}function Wf(e){let n=Qf(e);return n?new Date(Date.UTC(n.year,n.month-1,n.day)):void 0}function H0(e,n,t,r){let i=t?{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate()}:null,o=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return e==="year"?{min:i?.year??1,max:o?.year??9999}:e==="month"?{min:i&&n.year===i.year?i.month:1,max:o&&n.year===o.year?o.month:12}:{min:i&&n.year===i.year&&n.month===i.month?i.day:1,max:o&&n.year===o.year&&n.month===o.month?o.day:mu(n.year,n.month)}}class Zf extends Rn{#n;#t;#e;#o;#u;#r={segmentIndex:0,positionInSegment:0};#i=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#e}}get segments(){return this.#n}get separator(){return this.#t}get formattedValue(){return this.#f(this.#e)}#f(e){return this.#n.map((n)=>e[n.type]).join(this.#t)}#c(){this._setUserInput(this.#f(this.#e)),this._setValue(Wf(this.#e)??void 0)}constructor(e){let n=e.format?{segments:Cf(e.format),separator:e.separator??"/"}:P0(e.locale),t=e.separator??n.separator,r=e.format?Cf(e.format):n.segments,i=e.initialValue??e.defaultValue,o=i?{year:String(i.getUTCFullYear()).padStart(4,"0"),month:String(i.getUTCMonth()+1).padStart(2,"0"),day:String(i.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},s=r.map((u)=>o[u.type]).join(t);super({...e,initialUserInput:s},!1),this.#n=r,this.#t=t,this.#e=o,this.#o=e.minDate,this.#u=e.maxDate,this.#c(),this.on("cursor",(u)=>this.#g(u)),this.on("key",(u,c)=>this.#m(u,c)),this.on("finalize",()=>this.#p(e))}#a(){let e=Math.max(0,Math.min(this.#r.segmentIndex,this.#n.length-1)),n=this.#n[e];if(n)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,n.len-1)),{segment:n,index:e}}#h(e){this.inlineError="",this.#s=null;let n=this.#a();n&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#n.length-1,n.index+e)),this.#r.positionInSegment=0,this.#i=!0)}#l(e){let n=this.#a();if(!n)return;let{segment:t}=n,r=this.#e[t.type],i=!r||r.replace(/_/g,"")==="",o=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,s=H0(t.type,So(this.#e),this.#o,this.#u),u;i?u=e===1?s.min:s.max:u=Math.max(Math.min(s.max,o+e),s.min),this.#e={...this.#e,[t.type]:u.toString().padStart(t.len,"0")},this.#i=!0,this.#s=null,this.#c()}#g(e){if(e)switch(e){case"right":return this.#h(1);case"left":return this.#h(-1);case"up":return this.#l(1);case"down":return this.#l(-1)}}#m(e,n){if(n?.name==="backspace"||n?.sequence===""||n?.sequence==="\b"||e===""||e==="\b"){this.inlineError="";let t=this.#a();if(!t)return;if(!this.#e[t.segment.type].replace(/_/g,"")){this.#h(-1);return}this.#e[t.segment.type]="_".repeat(t.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(n?.name==="tab"){this.inlineError="";let t=this.#a();if(!t)return;let r=n.shift?-1:1,i=t.index+r;i>=0&&i<this.#n.length&&(this.#r.segmentIndex=i,this.#r.positionInSegment=0,this.#i=!0);return}if(e&&/^[0-9]$/.test(e)){let t=this.#a();if(!t)return;let{segment:r}=t,i=!this.#e[r.type].replace(/_/g,"");if(this.#i&&this.#s!==null&&!i){let l=this.#s+e,d={...this.#e,[r.type]:l},g=this.#d(d,r);if(g){this.inlineError=g,this.#s=null,this.#i=!1;return}this.inlineError="",this.#e[r.type]=l,this.#s=null,this.#i=!1,this.#c(),t.index<this.#n.length-1&&(this.#r.segmentIndex=t.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!i&&(this.#e[r.type]="_".repeat(r.len),this.#r.positionInSegment=0),this.#i=!1,this.#s=null;let o=this.#e[r.type],s=o.indexOf("_"),u=s>=0?s:Math.min(this.#r.positionInSegment,r.len-1);if(u<0||u>=r.len)return;let c=o.slice(0,u)+e+o.slice(u+1),a=!1;if(u===0&&o==="__"&&(r.type==="month"||r.type==="day")){let l=Number.parseInt(e,10);c=`0${e}`,a=l<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(o.replace(/_/g,"")+e).padStart(r.len,"_")),!c.includes("_")){let l={...this.#e,[r.type]:c},d=this.#d(l,r);if(d){this.inlineError=d;return}}this.inlineError="",this.#e[r.type]=c;let h=c.includes("_")?void 0:Qf(this.#e);if(h){let{year:l,month:d}=h,g=mu(l,d);this.#e={year:String(Math.max(0,Math.min(9999,l))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,d))).padStart(2,"0"),day:String(Math.max(1,Math.min(g,h.day))).padStart(2,"0")}}this.#c();let f=c.indexOf("_");a?(this.#i=!0,this.#s=e):f>=0?this.#r.positionInSegment=f:s>=0&&t.index<this.#n.length-1?(this.#r.segmentIndex=t.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(u+1,r.len-1)}}#d(e,n){let{month:t,day:r}=So(e);if(n.type==="month"&&(t<0||t>12))return Ve.date.messages.invalidMonth;if(n.type==="day"&&(r<0||r>31))return Ve.date.messages.invalidDay(31,"any month")}#p(e){let{year:n,month:t,day:r}=So(this.#e);if(n&&t&&r){let i=mu(n,t);this.#e={...this.#e,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=Wf(this.#e)??e.defaultValue??void 0}}var L0=class extends Rn{options;cursor=0;#n;getGroupItems(n){return this.options.filter((t)=>t.group===n)}isGroupSelected(n){let t=this.getGroupItems(n),r=this.value;return r===void 0?!1:t.every((i)=>r.includes(i.value))}toggleValue(){let n=this.options[this.cursor];if(n!==void 0)if(this.value===void 0&&(this.value=[]),n.group===!0){let t=n.value,r=this.getGroupItems(t);this.isGroupSelected(t)?this.value=this.value.filter((i)=>r.findIndex((o)=>o.value===i)===-1):this.value=[...this.value,...r.map((i)=>i.value)],this.value=Array.from(new Set(this.value))}else{let t=this.value.includes(n.value);this.value=t?this.value.filter((r)=>r!==n.value):[...this.value,n.value]}}constructor(n){super(n,!1);let{options:t}=n;this.#n=n.selectableGroups!==!1,this.options=Object.entries(t).flatMap(([r,i])=>[{value:r,group:!0,label:r},...i.map((o)=>({...o,group:r}))]),this.value=[...n.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:r})=>r===n.cursorAt),this.#n?0:1),this.on("cursor",(r)=>{switch(r){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},A0=new Set(["up","down","left","right"]);class Yf extends Rn{#n=!1;#t;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${e}█`;let n=e.slice(0,this.cursor),t=e.slice(this.cursor,this.cursor+1),r=e.slice(this.cursor+1);return t===`
319
319
  `?`${n}█
320
- ${r}`:`${n}${Mo("inverse",t)}${r}`}get cursor(){return this._cursor}#e(e){if(this.userInput.length===0){this._setUserInput(e);return}this._setUserInput(this.userInput.slice(0,this.cursor)+e+this.userInput.slice(this.cursor))}#o(e){let n=this.value??"";switch(e){case"up":this._cursor=yo(this._cursor,0,-1,n);return;case"down":this._cursor=yo(this._cursor,0,1,n);return;case"left":this._cursor=yo(this._cursor,-1,0,n);return;case"right":this._cursor=yo(this._cursor,1,0,n);return}}_shouldSubmit(e,n){if(this.#t)return this.focused==="submit"?!0:(this.#e(`
320
+ ${r}`:`${n}${vo("inverse",t)}${r}`}get cursor(){return this._cursor}#e(e){if(this.userInput.length===0){this._setUserInput(e);return}this._setUserInput(this.userInput.slice(0,this.cursor)+e+this.userInput.slice(this.cursor))}#o(e){let n=this.value??"";switch(e){case"up":this._cursor=Eo(this._cursor,0,-1,n);return;case"down":this._cursor=Eo(this._cursor,0,1,n);return;case"left":this._cursor=Eo(this._cursor,-1,0,n);return;case"right":this._cursor=Eo(this._cursor,1,0,n);return}}_shouldSubmit(e,n){if(this.#t)return this.focused==="submit"?!0:(this.#e(`
321
321
  `),this._cursor++,!1);let t=this.#n;return this.#n=!0,t&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
322
322
  `&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#e(`
323
- `),this._cursor++,!1)}constructor(e){let n=e.initialUserInput??e.initialValue;super({...e,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#t=e.showSubmit??!1,this.on("key",(t,r)=>{if(r?.name&&k0.has(r.name)){this.#n=!1,this.#o(r.name);return}if(t==="\t"&&this.#t){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#n=!1,r?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(r?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}t&&(this.#t&&this.focused==="submit"&&(this.focused="editor"),this.#e(t??""),this._cursor++)}}),this.on("userInput",(t)=>{this._setValue(t)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}class wu extends On{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter((e)=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,n=this.value!==void 0&&this.value.length===e.length;this.value=n?[]:e.map((t)=>t.value)}toggleInvert(){let e=this.value;if(!e)return;let n=this._enabledOptions.filter((t)=>!e.includes(t.value));this.value=n.map((t)=>t.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter((n)=>n!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let n=Math.max(this.options.findIndex(({value:t})=>t===e.cursorAt),0);this.cursor=this.options[n]?.disabled?nr(n,1,this.options):n,this.on("key",(t,r)=>{r.name==="a"&&this.toggleAll(),r.name==="i"&&this.toggleInvert()}),this.on("cursor",(t)=>{switch(t){case"left":case"up":this.cursor=nr(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=nr(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}class $u extends On{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}█`;let n=e.slice(0,this.cursor),t=e.slice(this.cursor,this.cursor+1),r=e.slice(this.cursor+1);return`${n}${Mo("inverse",t)}${r}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on("userInput",(n)=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as v,stripVTControlCharacters as bS}from"node:util";import hn from"node:process";var Vf=Wi(fu(),1);function E0(){if(hn.platform!=="win32")return hn.env.TERM!=="linux";return Boolean(hn.env.CI)||Boolean(hn.env.WT_SESSION)||Boolean(hn.env.TERMINUS_SUBLIME)||hn.env.ConEmuTask==="{cmd::Cmder}"||hn.env.TERM_PROGRAM==="Terminus-Sublime"||hn.env.TERM_PROGRAM==="vscode"||hn.env.TERM==="xterm-256color"||hn.env.TERM==="alacritty"||hn.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var y0=E0();var be=(e,n)=>y0?e:n,S0=be("◆","*"),v0=be("■","x"),M0=be("▲","x"),zf=be("◇","o"),I0=be("┌","T"),le=be("│","|"),ot=be("└","—"),SS=be("┐","T"),vS=be("┘","—"),Wf=be("●",">"),_f=be("○"," "),N0=be("◻","[•]"),Qf=be("◼","[+]"),qf=be("◻","[ ]"),MS=be("▪","•"),Yf=be("─","-"),O0=be("╮","+"),R0=be("├","+"),F0=be("╯","+"),P0=be("╰","+"),IS=be("╭","+"),NS=be("●","•"),OS=be("◆","*"),RS=be("▲","!"),FS=be("■","x"),bu=(e)=>{switch(e){case"initial":case"active":return v("cyan",S0);case"cancel":return v("red",v0);case"error":return v("yellow",M0);case"submit":return v("green",zf)}},H0=(e)=>{switch(e){case"initial":case"active":return v("cyan",le);case"cancel":return v("red",le);case"error":return v("yellow",le);case"submit":return v("green",le)}};function L0(e,n){let t=[`${n?`${v("cyan",le)} `:""}${e.join(" • ")}`];return n&&t.push(v("cyan",ot)),t}var Zf=(e,n,t,r,i,o=!1)=>{let s=n,u=0;if(o)for(let c=r-1;c>=t;c--){let a=e[c];if(a&&(s-=a.length),u++,s<=i)break}else for(let c=t;c<r;c++){let a=e[c];if(a&&(s-=a.length),u++,s<=i)break}return{lineCount:s,removals:u}},Xf=({cursor:e,options:n,style:t,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let u=Io(r)-o,c=mu(r),a=v("dim","..."),h=Math.max(c-s,0),f=Math.max(Math.min(i,h),5),l=0;e>=f-3&&(l=Math.max(Math.min(e-f+3,n.length-f),0));let g=f<n.length&&l>0,m=f<n.length&&l+f<n.length,d=Math.min(l+f,n.length),b=[],y=0;g&&y++,m&&y++;let I=l+(g?1:0),k=d-(m?1:0);for(let p=I;p<k;p++){let P=n[p],E=P?t(P,p===e):"",R=it(E,u,{hard:!0,trim:!1}).split(`
324
- `);b.push(R),y+=R.length}if(y>h){let p=0,P=0,E=y,R=e-I,N=h,H=()=>Zf(b,E,0,R,N),A=()=>Zf(b,E,R+1,b.length,N,!0);g?({lineCount:E,removals:p}=H(),E>N&&(m||(N-=1),{lineCount:E,removals:P}=A())):(m||(N-=1),{lineCount:E,removals:P}=A(),E>N&&(N-=1,{lineCount:E,removals:p}=H())),p>0&&(g=!0,b.splice(0,p)),P>0&&(m=!0,b.splice(b.length-P,P))}let S=[];g&&S.push(a);for(let p of b)for(let P of p)S.push(P);return m&&S.push(a),S};var st=(e)=>{let n=e.active??"Yes",t=e.inactive??"No";return new pu({active:n,inactive:t,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let r=e.withGuide??Ve.withGuide,i=`${bu(this.state)} `,o=r?`${v("gray",le)} `:"",s=di(e.output,e.message,o,i),u=`${r?`${v("gray",le)}
323
+ `),this._cursor++,!1)}constructor(e){let n=e.initialUserInput??e.initialValue;super({...e,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#t=e.showSubmit??!1,this.on("key",(t,r)=>{if(r?.name&&A0.has(r.name)){this.#n=!1,this.#o(r.name);return}if(t==="\t"&&this.#t){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#n=!1,r?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(r?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}t&&(this.#t&&this.focused==="submit"&&(this.focused="editor"),this.#e(t??""),this._cursor++)}}),this.on("userInput",(t)=>{this._setValue(t)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}class $u extends Rn{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter((e)=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,n=this.value!==void 0&&this.value.length===e.length;this.value=n?[]:e.map((t)=>t.value)}toggleInvert(){let e=this.value;if(!e)return;let n=this._enabledOptions.filter((t)=>!e.includes(t.value));this.value=n.map((t)=>t.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter((n)=>n!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let n=Math.max(this.options.findIndex(({value:t})=>t===e.cursorAt),0);this.cursor=this.options[n]?.disabled?tr(n,1,this.options):n,this.on("key",(t,r)=>{r.name==="a"&&this.toggleAll(),r.name==="i"&&this.toggleInvert()}),this.on("cursor",(t)=>{switch(t){case"left":case"up":this.cursor=tr(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=tr(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}class bu extends Rn{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}█`;let n=e.slice(0,this.cursor),t=e.slice(this.cursor,this.cursor+1),r=e.slice(this.cursor+1);return`${n}${vo("inverse",t)}${r}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on("userInput",(n)=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as v,stripVTControlCharacters as PS}from"node:util";import hn from"node:process";var nl=Ci(lu(),1);function T0(){if(hn.platform!=="win32")return hn.env.TERM!=="linux";return Boolean(hn.env.CI)||Boolean(hn.env.WT_SESSION)||Boolean(hn.env.TERMINUS_SUBLIME)||hn.env.ConEmuTask==="{cmd::Cmder}"||hn.env.TERM_PROGRAM==="Terminus-Sublime"||hn.env.TERM_PROGRAM==="vscode"||hn.env.TERM==="xterm-256color"||hn.env.TERM==="alacritty"||hn.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var G0=T0();var be=(e,n)=>G0?e:n,U0=be("◆","*"),j0=be("■","x"),J0=be("▲","x"),tl=be("◇","o"),C0=be("┌","T"),le=be("│","|"),ot=be("└","—"),TS=be("┐","T"),GS=be("┘","—"),Xf=be("●",">"),Vf=be("○"," "),W0=be("◻","[•]"),zf=be("◼","[+]"),Bf=be("◻","[ ]"),US=be("▪","•"),Df=be("─","-"),K0=be("╮","+"),_0=be("├","+"),q0=be("╯","+"),Q0=be("╰","+"),jS=be("╭","+"),JS=be("●","•"),CS=be("◆","*"),WS=be("▲","!"),KS=be("■","x"),ku=(e)=>{switch(e){case"initial":case"active":return v("cyan",U0);case"cancel":return v("red",j0);case"error":return v("yellow",J0);case"submit":return v("green",tl)}},Z0=(e)=>{switch(e){case"initial":case"active":return v("cyan",le);case"cancel":return v("red",le);case"error":return v("yellow",le);case"submit":return v("green",le)}};function Y0(e,n){let t=[`${n?`${v("cyan",le)} `:""}${e.join(" • ")}`];return n&&t.push(v("cyan",ot)),t}var xf=(e,n,t,r,i,o=!1)=>{let s=n,u=0;if(o)for(let c=r-1;c>=t;c--){let a=e[c];if(a&&(s-=a.length),u++,s<=i)break}else for(let c=t;c<r;c++){let a=e[c];if(a&&(s-=a.length),u++,s<=i)break}return{lineCount:s,removals:u}},el=({cursor:e,options:n,style:t,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let u=Mo(r)-o,c=pu(r),a=v("dim","..."),h=Math.max(c-s,0),f=Math.max(Math.min(i,h),5),l=0;e>=f-3&&(l=Math.max(Math.min(e-f+3,n.length-f),0));let d=f<n.length&&l>0,g=f<n.length&&l+f<n.length,m=Math.min(l+f,n.length),b=[],S=0;d&&S++,g&&S++;let I=l+(d?1:0),k=m-(g?1:0);for(let p=I;p<k;p++){let P=n[p],E=P?t(P,p===e):"",R=it(E,u,{hard:!0,trim:!1}).split(`
324
+ `);b.push(R),S+=R.length}if(S>h){let p=0,P=0,E=S,R=e-I,N=h,H=()=>xf(b,E,0,R,N),A=()=>xf(b,E,R+1,b.length,N,!0);d?({lineCount:E,removals:p}=H(),E>N&&(g||(N-=1),{lineCount:E,removals:P}=A())):(g||(N-=1),{lineCount:E,removals:P}=A(),E>N&&(N-=1,{lineCount:E,removals:p}=H())),p>0&&(d=!0,b.splice(0,p)),P>0&&(g=!0,b.splice(b.length-P,P))}let y=[];d&&y.push(a);for(let p of b)for(let P of p)y.push(P);return g&&y.push(a),y};var st=(e)=>{let n=e.active??"Yes",t=e.inactive??"No";return new wu({active:n,inactive:t,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let r=e.withGuide??Ve.withGuide,i=`${ku(this.state)} `,o=r?`${v("gray",le)} `:"",s=li(e.output,e.message,o,i),u=`${r?`${v("gray",le)}
325
325
  `:""}${s}
326
326
  `,c=this.value?n:t;switch(this.state){case"submit":{let a=r?`${v("gray",le)} `:"";return`${u}${a}${v("dim",c)}`}case"cancel":{let a=r?`${v("gray",le)} `:"";return`${u}${a}${v(["strikethrough","dim"],c)}${r?`
327
- ${v("gray",le)}`:""}`}default:{let a=r?`${v("cyan",le)} `:"",h=r?v("cyan",ot):"";return`${u}${a}${this.value?`${v("green",Wf)} ${n}`:`${v("dim",_f)} ${v("dim",n)}`}${e.vertical?r?`
327
+ ${v("gray",le)}`:""}`}default:{let a=r?`${v("cyan",le)} `:"",h=r?v("cyan",ot):"";return`${u}${a}${this.value?`${v("green",Xf)} ${n}`:`${v("dim",Vf)} ${v("dim",n)}`}${e.vertical?r?`
328
328
  ${v("cyan",le)} `:`
329
- `:` ${v("dim","/")} `}${this.value?`${v("dim",_f)} ${v("dim",t)}`:`${v("green",Wf)} ${t}`}
329
+ `:` ${v("dim","/")} `}${this.value?`${v("dim",Vf)} ${v("dim",t)}`:`${v("green",Xf)} ${t}`}
330
330
  ${h}
331
- `}}}}).prompt()};var A0=[`${v("dim","↑/↓")} to navigate`,`${v("dim","Space:")} select`,`${v("dim","Enter:")} confirm`],mi=(e,n)=>e.split(`
331
+ `}}}}).prompt()};var X0=[`${v("dim","↑/↓")} to navigate`,`${v("dim","Space:")} select`,`${v("dim","Enter:")} confirm`],di=(e,n)=>e.split(`
332
332
  `).map((t)=>n(t)).join(`
333
- `),Bf=(e)=>{let n=(i,o)=>{let s=i.label??String(i.value);return o==="disabled"?`${v("gray",qf)} ${mi(s,(u)=>v(["strikethrough","gray"],u))}${i.hint?` ${v("dim",`(${i.hint??"disabled"})`)}`:""}`:o==="active"?`${v("cyan",N0)} ${s}${i.hint?` ${v("dim",`(${i.hint})`)}`:""}`:o==="selected"?`${v("green",Qf)} ${mi(s,(u)=>v("dim",u))}${i.hint?` ${v("dim",`(${i.hint})`)}`:""}`:o==="cancelled"?`${mi(s,(u)=>v(["strikethrough","dim"],u))}`:o==="active-selected"?`${v("green",Qf)} ${s}${i.hint?` ${v("dim",`(${i.hint})`)}`:""}`:o==="submitted"?`${mi(s,(u)=>v("dim",u))}`:`${v("dim",qf)} ${mi(s,(u)=>v("dim",u))}`},t=e.required??!0,r=e.showInstructions??!0;return new wu({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:t,cursorAt:e.cursorAt,validate(i){if(t&&(i===void 0||i.length===0))return`Please select at least one option.
334
- ${v("reset",v("dim",`Press ${v(["gray","bgWhite","inverse"]," space ")} to select, ${v("gray",v("bgWhite",v("inverse"," enter ")))} to submit`))}`},render(){let i=e.withGuide??Ve.withGuide,o=di(e.output,e.message,i?`${H0(this.state)} `:"",`${bu(this.state)} `),s=`${i?`${v("gray",le)}
333
+ `),rl=(e)=>{let n=(i,o)=>{let s=i.label??String(i.value);return o==="disabled"?`${v("gray",Bf)} ${di(s,(u)=>v(["strikethrough","gray"],u))}${i.hint?` ${v("dim",`(${i.hint??"disabled"})`)}`:""}`:o==="active"?`${v("cyan",W0)} ${s}${i.hint?` ${v("dim",`(${i.hint})`)}`:""}`:o==="selected"?`${v("green",zf)} ${di(s,(u)=>v("dim",u))}${i.hint?` ${v("dim",`(${i.hint})`)}`:""}`:o==="cancelled"?`${di(s,(u)=>v(["strikethrough","dim"],u))}`:o==="active-selected"?`${v("green",zf)} ${s}${i.hint?` ${v("dim",`(${i.hint})`)}`:""}`:o==="submitted"?`${di(s,(u)=>v("dim",u))}`:`${v("dim",Bf)} ${di(s,(u)=>v("dim",u))}`},t=e.required??!0,r=e.showInstructions??!0;return new $u({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:t,cursorAt:e.cursorAt,validate(i){if(t&&(i===void 0||i.length===0))return`Please select at least one option.
334
+ ${v("reset",v("dim",`Press ${v(["gray","bgWhite","inverse"]," space ")} to select, ${v("gray",v("bgWhite",v("inverse"," enter ")))} to submit`))}`},render(){let i=e.withGuide??Ve.withGuide,o=li(e.output,e.message,i?`${Z0(this.state)} `:"",`${ku(this.state)} `),s=`${i?`${v("gray",le)}
335
335
  `:""}${o}
336
- `,u=this.value??[],c=(a,h)=>{if(a.disabled)return n(a,"disabled");let f=u.includes(a.value);return h&&f?n(a,"active-selected"):f?n(a,"selected"):n(a,h?"active":"inactive")};switch(this.state){case"submit":{let a=this.options.filter(({value:f})=>u.includes(f)).map((f)=>n(f,"submitted")).join(v("dim",", "))||v("dim","none"),h=di(e.output,a,i?`${v("gray",le)} `:"");return`${s}${h}`}case"cancel":{let a=this.options.filter(({value:f})=>u.includes(f)).map((f)=>n(f,"cancelled")).join(v("dim",", "));if(a.trim()==="")return`${s}${v("gray",le)}`;let h=di(e.output,a,i?`${v("gray",le)} `:"");return`${s}${h}${i?`
336
+ `,u=this.value??[],c=(a,h)=>{if(a.disabled)return n(a,"disabled");let f=u.includes(a.value);return h&&f?n(a,"active-selected"):f?n(a,"selected"):n(a,h?"active":"inactive")};switch(this.state){case"submit":{let a=this.options.filter(({value:f})=>u.includes(f)).map((f)=>n(f,"submitted")).join(v("dim",", "))||v("dim","none"),h=li(e.output,a,i?`${v("gray",le)} `:"");return`${s}${h}`}case"cancel":{let a=this.options.filter(({value:f})=>u.includes(f)).map((f)=>n(f,"cancelled")).join(v("dim",", "));if(a.trim()==="")return`${s}${v("gray",le)}`;let h=li(e.output,a,i?`${v("gray",le)} `:"");return`${s}${h}${i?`
337
337
  ${v("gray",le)}`:""}`}case"error":{let a=i?`${v("yellow",le)} `:"",h=this.error.split(`
338
- `).map((g,m)=>m===0?`${i?`${v("yellow",ot)} `:""}${v("yellow",g)}`:` ${g}`).join(`
338
+ `).map((d,g)=>g===0?`${i?`${v("yellow",ot)} `:""}${v("yellow",d)}`:` ${d}`).join(`
339
339
  `),f=s.split(`
340
340
  `).length,l=h.split(`
341
- `).length+1;return`${s}${a}${Xf({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:f+l,style:c}).join(`
341
+ `).length+1;return`${s}${a}${el({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:f+l,style:c}).join(`
342
342
  ${a}`)}
343
343
  ${h}
344
344
  `}default:{let a=i?`${v("cyan",le)} `:"",h=s.split(`
345
- `).length,f=r?L0(A0,i):i?[v("cyan",ot)]:[],l=f.join(`
346
- `),g=f.length+1;return`${s}${a}${Xf({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:h+g,style:c}).join(`
345
+ `).length,f=r?Y0(X0,i):i?[v("cyan",ot)]:[],l=f.join(`
346
+ `),d=f.length+1;return`${s}${a}${el({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:h+d,style:c}).join(`
347
347
  ${a}`)}
348
348
  ${l}
349
- `}}}}).prompt()};var tr=(e="",n)=>{let t=n?.output??process.stdout,r=n?.withGuide??Ve.withGuide?`${v("gray",ot)} `:"";t.write(`${r}${v("red",e)}
349
+ `}}}}).prompt()};var rr=(e="",n)=>{let t=n?.output??process.stdout,r=n?.withGuide??Ve.withGuide?`${v("gray",ot)} `:"";t.write(`${r}${v("red",e)}
350
350
 
351
- `)},No=(e="",n)=>{let t=n?.output??process.stdout,r=n?.withGuide??Ve.withGuide?`${v("gray",I0)} `:"";t.write(`${r}${e}
352
- `)},ku=(e="",n)=>{let t=n?.output??process.stdout,r=n?.withGuide??Ve.withGuide?`${v("gray",le)}
351
+ `)},Io=(e="",n)=>{let t=n?.output??process.stdout,r=n?.withGuide??Ve.withGuide?`${v("gray",C0)} `:"";t.write(`${r}${e}
352
+ `)},Eu=(e="",n)=>{let t=n?.output??process.stdout,r=n?.withGuide??Ve.withGuide?`${v("gray",le)}
353
353
  ${v("gray",ot)} `:"";t.write(`${r}${e}
354
354
 
355
- `)};var T0=(e)=>e,G0=(e,n,t)=>{let r={hard:!0,trim:!1},i=it(e,n,r).split(`
356
- `),o=i.reduce((c,a)=>Math.max(Xe(a),c),0),s=i.map(t).reduce((c,a)=>Math.max(Xe(a),c),0),u=n-(s-o);return it(e,u,r)},Mt=(e="",n="",t)=>{let r=t?.output??hn.stdout,i=t?.withGuide??Ve.withGuide,o=t?.format??T0,s=["",...G0(e,Io(r)-6,o).split(`
357
- `).map(o),""],u=Xe(n),c=Math.max(s.reduce((l,g)=>{let m=Xe(g);return m>l?m:l},0),u)+2,a=s.map((l)=>`${v("gray",le)} ${l}${" ".repeat(c-Xe(l))}${v("gray",le)}`).join(`
355
+ `)};var V0=(e)=>e,z0=(e,n,t)=>{let r={hard:!0,trim:!1},i=it(e,n,r).split(`
356
+ `),o=i.reduce((c,a)=>Math.max(Xe(a),c),0),s=i.map(t).reduce((c,a)=>Math.max(Xe(a),c),0),u=n-(s-o);return it(e,u,r)},vt=(e="",n="",t)=>{let r=t?.output??hn.stdout,i=t?.withGuide??Ve.withGuide,o=t?.format??V0,s=["",...z0(e,Mo(r)-6,o).split(`
357
+ `).map(o),""],u=Xe(n),c=Math.max(s.reduce((l,d)=>{let g=Xe(d);return g>l?g:l},0),u)+2,a=s.map((l)=>`${v("gray",le)} ${l}${" ".repeat(c-Xe(l))}${v("gray",le)}`).join(`
358
358
  `),h=i?`${v("gray",le)}
359
- `:"",f=i?R0:P0;r.write(`${h}${v("green",zf)} ${v("reset",n)} ${v("gray",Yf.repeat(Math.max(c-u-1,1))+O0)}
359
+ `:"",f=i?_0:Q0;r.write(`${h}${v("green",tl)} ${v("reset",n)} ${v("gray",Df.repeat(Math.max(c-u-1,1))+K0)}
360
360
  ${a}
361
- ${v("gray",f+Yf.repeat(c+2)+F0)}
362
- `)};var PS={light:be("─","-"),heavy:be("━","="),block:be("█","#")};var HS=[`${v("dim","↑/↓")} to navigate`,`${v("dim","Enter:")} confirm`];var LS=`${v("gray",le)} `;var Df=(e)=>new $u({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let n=e?.withGuide??Ve.withGuide,t=`${`${n?`${v("gray",le)}
363
- `:""}${bu(this.state)} `}${e.message}
361
+ ${v("gray",f+Df.repeat(c+2)+q0)}
362
+ `)};var _S={light:be("─","-"),heavy:be("━","="),block:be("█","#")};var qS=[`${v("dim","↑/↓")} to navigate`,`${v("dim","Enter:")} confirm`];var QS=`${v("gray",le)} `;var yu=(e)=>new bu({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let n=e?.withGuide??Ve.withGuide,t=`${`${n?`${v("gray",le)}
363
+ `:""}${ku(this.state)} `}${e.message}
364
364
  `,r=e.placeholder&&e.placeholder.length>0?v("inverse",e.placeholder[0])+v("dim",e.placeholder.slice(1)):v(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:r,o=this.value??"";switch(this.state){case"error":{let s=this.error?` ${v("yellow",this.error)}`:"",u=n?`${v("yellow",le)} `:"",c=n?v("yellow",ot):"";return`${t.trim()}
365
365
  ${u}${i}
366
366
  ${c}${s}
367
367
  `}case"submit":{let s=o?` ${v("dim",o)}`:"",u=n?v("gray",le):"";return`${t}${u}${s}`}case"cancel":{let s=o?` ${v(["strikethrough","dim"],o)}`:"",u=n?v("gray",le):"";return`${t}${u}${s}${o.trim()?`
368
368
  ${u}`:""}`}default:{let s=n?`${v("cyan",le)} `:"",u=n?v("cyan",ot):"";return`${t}${s}${i}
369
369
  ${u}
370
- `}}}}).prompt();import{existsSync as al,readFileSync as vu}from"node:fs";import{join as hl}from"node:path";import{existsSync as W0,readdirSync as _0,readFileSync as Q0}from"node:fs";import{basename as q0,join as Po}from"node:path";import{existsSync as U0,readFileSync as xf}from"node:fs";import{homedir as el}from"node:os";import{isAbsolute as nl,join as rr,resolve as j0}from"node:path";var Pe="official",jn="ttheme-market.json",wi="ttheme-palettes",Oo="ttheme-market",J0=/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i,C0=/^[\w.-]{1,100}$/;function ir(e){return rr(e,"ttheme","installed.json")}function Jn(e){return e??[Pe]}function or(e){try{let{markets:n}=JSON.parse(xf(ir(e),"utf8"));return Jn(Array.isArray(n)?n.filter((t)=>typeof t==="string"):void 0)}catch{return[Pe]}}function Rn(e){return nl(e)}function Ro(e){return e!==Pe&&!Rn(e)}function sr(e,n=process.cwd()){if(e===Pe)return Pe;if(e==="~"||e.startsWith("~/"))return rr(el(),e.slice(1));if(e.startsWith(".")||nl(e))return j0(n,e);let[t,r,...i]=e.replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,"").split("/");if(!t||!J0.test(t)||i.length>0||r!==void 0&&!C0.test(r))throw Error(`${e} is not a market — give a GitHub handle (alice), a repository (alice/palettes) or a path (./my-market)`);return`${t.toLowerCase()}/${r??wi}`}function tl(e){return`https://raw.githubusercontent.com/${e}/HEAD/${jn}`}function It(e){return e.slice(0,e.indexOf("/"))}function K0(e){return rr(e,"ttheme","markets")}function Nt(e,n){return rr(K0(e),`${It(n)}.json`)}function ur(e){return rr(e,"ttheme","market")}function Cn(e){let n=rr(e,jn);if(!U0(n))throw Error(`${e} has no ${jn} — \`ttheme market init ${e}\` makes one`);let t;try{t=JSON.parse(xf(n,"utf8")).owner}catch{throw Error(`${n} is not valid JSON`)}if(typeof t!=="string"||Gn(`x@${t}`)||je(`x@${t}`)!==t)throw Error(`${n} has no "owner" — the GitHub handle its palettes are named after`);return t}function Fo(e){return e===Pe?Pe:Rn(e)?Cn(e):It(e)}function ut(e){if(e===Pe)return"the ttheme catalog";if(!Rn(e))return`github.com/${e}`;let n=el();return e===n||e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}var ct="tt1:",rl=["background","foreground","cursor","selection",...Array.from({length:16},(e,n)=>`ansi${n}`)];function Ot(e,n=!0){return or(e).filter(Rn).flatMap((t)=>{try{return[{dir:t,owner:Cn(t)}]}catch(r){if(n)process.stderr.write(`ttheme: skipping the market at ${t} — ${r.message}
371
- `);return[]}})}function $i(e){return Po(e,"palettes")}function Eu(e,n){let t=je(n);if(!t)throw Error(`${n} is an official palette — yours are named <palette>@<you>`);let r=Ot(e,!1).find((i)=>i.owner===t);if(!r)throw Error(`${n} is not in a local market — \`ttheme market add <dir>\` adds the folder that holds it`);return Po($i(r.dir),`${fo(n)}.toml`)}function Y0(e,n){let t=new Map;for(let i of n)if(i.group!==_r&&!t.has(i.group)){let o=n.find((s)=>s.group===i.group&&s.lead)?.name??"";t.set(i.group,{name:i.group,...i.native?{native:i.native}:{},lead:o})}let r=new Map(n.filter((i)=>!i.default&&!je(i.name)).map((i)=>[i.name,{group:i.group,order:i.order}]));return{name:e,groups:t,bases:r,open:!0}}function Kn(e,n,t){let r=fo(e);return{..._s(`${r}.toml`,n,Y0(r,t)),name:e}}function bi(e,n,t,r=!0){let i=$i(e);return(W0(i)?_0(i).sort():[]).filter((o)=>o.endsWith(".toml")).flatMap((o)=>{try{let s=Q0(Po(i,o),"utf8");return[wn(Kn(`${q0(o,".toml")}@${n}`,s,t))]}catch(s){if(r)process.stderr.write(`ttheme: skipping ${Po(i,o)} — ${s.message}
372
- `);return[]}})}function Ho(e,n,t=!0){return Ot(e,t).flatMap(({dir:r,owner:i})=>bi(r,i,n,t))}function yu(e,n=e.name,t){return{name:n,...e.base?{base:e.base}:{},...e.group!==_r?{group:e.group}:{},ansiSource:e.ansiSource,...e.booru?{booru:e.booru}:{},...e.booruSites?{booruSites:e.booruSites}:{},signature:e.signatureSlots,background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selection,ansi:e.ansi,...e.waived&&e.waived.length>0?{waive:e.waived,reason:t??"kept from the palette"}:{},...e.pictures?{pictures:e.pictures}:{}}}var He=(e)=>JSON.stringify(e);function Su(e){let n=["[meta]",`name = ${He(fo(e.name))}`,...e.base?[`base = ${He(e.base)}`]:[],...e.group?[`group = ${He(e.group)}`]:[],...e.ansiSource?[`ansi_source = ${He(e.ansiSource)}`]:[],...e.booru?[`booru = ${He(e.booru)}`]:[],`signature = [${e.signature.map(He).join(", ")}]`,...e.booruSites?["","[meta.booru_sites]",...Object.entries(e.booruSites).map(([t,r])=>`${t} = [${r.map(He).join(", ")}]`)]:[],"","[colors]",`background = ${He(e.background)}`,`foreground = ${He(e.foreground)}`,`cursor = ${He(e.cursor)}`,`selection_background = ${He(e.selection)}`,"ansi = [",...e.ansi.slice(0,8).map((t)=>` ${He(t)},`),"",...e.ansi.slice(8).map((t)=>` ${He(t)},`),"]"];if(e.waive&&e.waive.length>0)n.push("","[contrast]",`waive = [${e.waive.map(He).join(", ")}]`,`reason = ${He(e.reason??"")}`);for(let t of e.pictures??[]){if(n.push("","[[picture]]",`site = ${He(t.site)}`,`id = ${t.id}`),t.size!==void 0)n.push(`size = ${typeof t.size==="number"?t.size:He(t.size)}`);if(t.position!==void 0)n.push(`position = ${He(t.position)}`);if(t.opacity!==void 0)n.push(`opacity = ${t.opacity}`)}return`${n.join(`
370
+ `}}}}).prompt();import{existsSync as ml,readFileSync as Ou}from"node:fs";import{join as pl}from"node:path";import{existsSync as t$,readdirSync as r$,readFileSync as i$}from"node:fs";import{basename as o$,join as Fo}from"node:path";import{existsSync as B0,readFileSync as il}from"node:fs";import{homedir as ol}from"node:os";import{isAbsolute as sl,join as Mt,resolve as D0}from"node:path";var Ge="official",jn="ttheme-market.json",No="ttheme-market",x0=/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i,e$=/^[\w.-]{1,100}$/;function ir(e){return Mt(e,"ttheme","installed.json")}function Jn(e){return e??[Ge]}function or(e){try{let{markets:n}=JSON.parse(il(ir(e),"utf8"));return Jn(Array.isArray(n)?n.filter((t)=>typeof t==="string"):void 0)}catch{return[Ge]}}function Cn(e){return sl(e)}function Oo(e){return e!==Ge&&!Cn(e)}function sr(e,n=process.cwd()){if(e===Ge)return Ge;if(e==="~"||e.startsWith("~/"))return Mt(ol(),e.slice(1));if(e.startsWith(".")||sl(e))return D0(n,e);let[t,r,...i]=e.replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,"").split("/");if(!t||!x0.test(t)||!r||!e$.test(r)||i.length>0)throw Error(`${e} is not a market — give a repository (alice/ttheme-dust) or a path (./my-market)`);return`${t.toLowerCase()}/${r}`}function ul(e){return`https://raw.githubusercontent.com/${e}/HEAD/${jn}`}function cl(e){return e.slice(0,e.indexOf("/"))}function n$(e){return Mt(e,"ttheme","markets")}function It(e,n){return Mt(n$(e),`${n.replace("/","--")}.json`)}function Ro(e){return Mt(e,"ttheme","market")}function Su(e,n){return Mt(Ro(e),n)}function vu(e,n){if(typeof e!=="string"||typeof n!=="string")return'needs an "owner" (the GitHub handle) and a "name"';return Nn(`${e}@${n}/x`)}function Fn({owner:e,name:n}){return`${e}@${n}`}function Nt(e){let n=Mt(e,jn);if(!B0(n))throw Error(`${e} has no ${jn} — \`ttheme market init ${e}\` makes one`);let t;try{t=JSON.parse(il(n,"utf8"))}catch{throw Error(`${n} is not valid JSON`)}let r=vu(t.owner,t.name);if(r)throw Error(`${n} ${r}`);return{owner:t.owner,name:t.name}}function $n(e){if(e===Ge)return"the ttheme catalog";if(!Cn(e))return`github.com/${e}`;let n=ol();return e===n||e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}var ut="tt1:",al=["background","foreground","cursor","selection",...Array.from({length:16},(e,n)=>`ansi${n}`)];function Ot(e,n=!0){return or(e).filter(Cn).flatMap((t)=>{try{let r=Nt(t);return[{dir:t,...r,id:Fn(r)}]}catch(r){if(n)process.stderr.write(`ttheme: skipping the market at ${t} — ${r.message}
371
+ `);return[]}})}function Rt(e){return Fo(e,"palettes")}function Mu(e,n){let t=Te(n);if(!t)throw Error(`${n} is an official palette — yours are named <you>@<market>/<palette>`);let r=Ot(e,!1).find((i)=>i.id===t);if(!r)throw Error(`${t} is not a local market — \`ttheme market add <dir>\` adds the folder that holds it`);return Fo(Rt(r.dir),`${ao(n)}.toml`)}function s$(e,n){let t=new Map;for(let i of n)if(i.group!==Wr&&!t.has(i.group)){let o=n.find((s)=>s.group===i.group&&s.lead)?.name??"";t.set(i.group,{name:i.group,...i.native?{native:i.native}:{},lead:o})}let r=new Map(n.filter((i)=>!i.default&&!Te(i.name)).map((i)=>[i.name,{group:i.group,order:i.order}]));return{name:e,groups:t,bases:r,open:!0}}function Wn(e,n,t){let r=ao(e),{native:i,...o}=qs(`${r}.toml`,n,s$(r,t)),s=Te(e);return{...o,name:e,...s?{group:s,lead:!1}:{}}}function mi(e,n,t,r=!0){let i=Rt(e);return(t$(i)?r$(i).sort():[]).filter((o)=>o.endsWith(".toml")).flatMap((o)=>{try{let s=i$(Fo(i,o),"utf8");return[wn(Wn(`${n}/${o$(o,".toml")}`,s,t))]}catch(s){if(r)process.stderr.write(`ttheme: skipping ${Fo(i,o)} — ${s.message}
372
+ `);return[]}})}function Po(e,n,t=!0){return Ot(e,t).flatMap(({dir:r,id:i})=>mi(r,i,n,t))}function Iu(e,n=e.name,t){return{name:n,...e.base?{base:e.base}:{},...e.group!==Wr?{group:e.group}:{},ansiSource:e.ansiSource,...e.booru?{booru:e.booru}:{},...e.booruSites?{booruSites:e.booruSites}:{},signature:e.signatureSlots,background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selection,ansi:e.ansi,...e.waived&&e.waived.length>0?{waive:e.waived,reason:t??"kept from the palette"}:{},...e.pictures?{pictures:e.pictures}:{}}}var Pe=(e)=>JSON.stringify(e);function Nu(e){let n=["[meta]",`name = ${Pe(ao(e.name))}`,...e.base?[`base = ${Pe(e.base)}`]:[],...e.group?[`group = ${Pe(e.group)}`]:[],...e.ansiSource?[`ansi_source = ${Pe(e.ansiSource)}`]:[],...e.booru?[`booru = ${Pe(e.booru)}`]:[],`signature = [${e.signature.map(Pe).join(", ")}]`,...e.booruSites?["","[meta.booru_sites]",...Object.entries(e.booruSites).map(([t,r])=>`${t} = [${r.map(Pe).join(", ")}]`)]:[],"","[colors]",`background = ${Pe(e.background)}`,`foreground = ${Pe(e.foreground)}`,`cursor = ${Pe(e.cursor)}`,`selection_background = ${Pe(e.selection)}`,"ansi = [",...e.ansi.slice(0,8).map((t)=>` ${Pe(t)},`),"",...e.ansi.slice(8).map((t)=>` ${Pe(t)},`),"]"];if(e.waive&&e.waive.length>0)n.push("","[contrast]",`waive = [${e.waive.map(Pe).join(", ")}]`,`reason = ${Pe(e.reason??"")}`);for(let t of e.pictures??[]){if(n.push("","[[picture]]",`site = ${Pe(t.site)}`,`id = ${t.id}`),t.size!==void 0)n.push(`size = ${typeof t.size==="number"?t.size:Pe(t.size)}`);if(t.position!==void 0)n.push(`position = ${Pe(t.position)}`);if(t.opacity!==void 0)n.push(`opacity = ${t.opacity}`)}return`${n.join(`
373
373
  `)}
374
- `}class il{bytes=[];u8(e){this.bytes.push(e&255)}u16(e){this.u8(e>>8),this.u8(e)}u32(e){this.u16(Math.floor(e/65536)),this.u16(e%65536)}str(e=""){let n=new TextEncoder().encode(e);if(n.length>255)throw Error(`"${e}" is too long to share`);this.u8(n.length),this.bytes.push(...n)}color(e){let n=Number.parseInt(e.slice(1),16);this.u8(n>>16),this.u8(n>>8),this.u8(n)}done(){return Buffer.from(this.bytes).toString("base64url")}}class ol{at=0;bytes;constructor(e){this.bytes=e}u8(){let e=this.bytes[this.at++];if(e===void 0)throw Error("the share code is cut short");return e}u16(){return this.u8()*256+this.u8()}u32(){return this.u16()*65536+this.u16()}str(){let e=this.u8(),n=this.bytes.subarray(this.at,this.at+e);if(n.length!==e)throw Error("the share code is cut short");return this.at+=e,new TextDecoder("utf-8",{fatal:!0}).decode(n)}color(){return`#${[this.u8(),this.u8(),this.u8()].map((e)=>e.toString(16).padStart(2,"0")).join("")}`}end(){if(this.at!==this.bytes.length)throw Error("the share code has bytes left over")}}function sl(e){let n=new il;n.str(e.name);for(let r of[e.background,e.foreground,e.cursor,e.selection,...e.ansi])n.color(r);for(let r of e.signature)n.u8(rl.indexOf(r));n.str(e.base),n.str(e.group),n.str(e.ansiSource),n.str(e.booru),n.u16((e.waive??[]).reduce((r,i)=>r|1<<$s.indexOf(i),0)),n.str(e.waive&&e.waive.length>0?e.reason:"");let t=e.pictures??[];n.u8(t.length);for(let r of t)n.u8(x.findIndex((i)=>i.key===r.site)),n.u32(r.id),n.u16(r.size===void 0?0:r.size==="fill"?1:r.size),n.u8(r.position===void 0?0:yt.indexOf(r.position)+1),n.u16(r.opacity===void 0?0:Math.round(r.opacity*1000)+1);return`${ct}${n.done()}`}function ul(e){if(!e.startsWith(ct))throw Error(`a share code starts with ${ct}`);let n=e.slice(ct.length);if(!/^[A-Za-z0-9_-]+$/.test(n))throw Error("the share code holds characters it never uses — was it copied whole?");let t=new ol(new Uint8Array(Buffer.from(n,"base64url"))),r=t.str(),[i,o,s,u,...c]=Array.from({length:20},()=>t.color()),a=[t.u8(),t.u8(),t.u8()].map((I)=>rl[I]??`slot${I}`),h=t.str(),f=t.str(),l=t.str(),g=t.str(),m=t.u16(),d=t.str(),b=$s.filter((I,k)=>m&1<<k),y=Array.from({length:t.u8()},()=>{let I=x[t.u8()]?.key??"unknown",k=t.u32(),S=t.u16(),p=t.u8(),P=t.u16();return{site:I,id:k,...S===1?{size:"fill"}:S>1?{size:S}:{},...p>0?{position:yt[p-1]??"unknown"}:{},...P>0?{opacity:(P-1)/1000}:{}}});if(t.end(),![i,o,s,u,...c].every(Ct))throw Error("the share code holds a color that is not one");return{name:r,...h?{base:h}:{},...f?{group:f}:{},...l?{ansiSource:l}:{},...g?{booru:g}:{},signature:a,background:i,foreground:o,cursor:s,selection:u,ansi:c,...b.length>0?{waive:b,reason:d}:{},...y.length>0?{pictures:y}:{}}}function cl(e,n){let t=e.indexOf("ansi = ["),r=e.indexOf("]",t);if(t<0||r<0)throw Error("no ansi = [...] list to rewrite");let i=0,o=e.slice(t,r).replace(/"#[0-9a-fA-F]{6}"/g,()=>He(n.ansi[i++]));return(e.slice(0,t)+o+e.slice(r)).replace(/^(foreground\s*=\s*)"#[0-9a-fA-F]{6}"/m,(s,u)=>`${u}${He(n.foreground)}`).replace(/^(selection_background\s*=\s*)"#[0-9a-fA-F]{6}"/m,(s,u)=>`${u}${He(n.selectionBackground)}`)}function ki(e){let n=_t(un(e)),t=new Set(e.waived??[]),r=Math.max(...mt.map((i)=>i.label.length));return mt.map((i,o)=>{let s=n[o],u=t.has(i.rule)||Number.isNaN(s)||(i.min===void 0||s>=i.min)&&(i.max===void 0||s<=i.max),c=i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",a=Number.isNaN(s)?"—":Number.isInteger(s)?String(s):s.toFixed(2);return` ${u?"✓":"✗"} ${i.label.padEnd(r)} ${a.padStart(6)} ${c}${t.has(i.rule)?" waived":""}`})}var Mu="https://kecan0406.github.io/ttheme/manifest.json",Z0=20000;function Rt(e){return hl(e,"ttheme","catalog.json")}function Ei(e,n){$e(Rt(e),`${JSON.stringify(n,null,2)}
375
- `)}function Le(e){let n=or(e),t=Rt(e),r=ei();if(n.includes(Pe)){if(!al(t))throw Error(`no catalog at ${t} — run \`ttheme init\` first`);r=at(vu(t,"utf8"))}let i=n.filter(Ro).flatMap((o)=>X0(e,o));return{...r,palettes:fl(r.palettes,i)}}function X0(e,n){let t=Nt(e,n);if(!al(t))return[];try{return V0(Lo(vu(t,"utf8")),It(n))}catch(r){return process.stderr.write(`ttheme: skipping ${t} — ${r.message}
376
- `),[]}}function Lo(e){let n=at(e);if(typeof n.owner!=="string"||Gn(`x@${n.owner}`))throw Error('market index has no "owner"');let t=n.palettes.find((r)=>je(r.name)!==void 0);if(t)throw Error(`market index names ${t.name} with its owner — its entries are bare palette names`);return n}function V0(e,n){return e.palettes.map(({lead:t,default:r,...i})=>({...i,name:`${i.name}@${n}`}))}function fl(e,n){let t=[...e];for(let r of n){let i=t.findLastIndex((s)=>r.base!==void 0&&(s.name===r.base||s.base===r.base)),o=i>=0?i:t.findLastIndex((s)=>s.group===r.group);t.splice(o<0?t.length:o+1,0,r)}return t}function at(e){let n;try{n=JSON.parse(e)}catch{throw Error("catalog is not valid JSON")}let t=n;if(typeof t?.version!=="string"||!Array.isArray(t.palettes))throw Error("catalog has no version or palettes");for(let r of t.palettes){let i=ll(r);if(i)throw Error(`catalog entry ${JSON.stringify(r?.name)} ${i}`)}return t}function ll(e){if(typeof e?.name!=="string"||!Array.isArray(e.ansi)||e.ansi.length!==16)return"is missing name or its 16 ANSI colors";let n=Gn(e.name)??(e.base===void 0?void 0:Gn(e.base));if(n)return n;if(![e.background,e.foreground,e.cursor,e.selection,...e.ansi].every((t)=>typeof t==="string"&&Ct(t)))return'holds a color that is not "#rrggbb"';for(let t of[e.group,e.native??"-",e.ansiSource]){let r=typeof t==="string"?Ws(t):"has a field that is not text";if(r)return r}return}function gl(e){return hl(e,"ttheme","kept.json")}function Ao(e,n){$e(gl(e),`${JSON.stringify({palettes:n},null,2)}
377
- `)}function yi(e){try{let{palettes:n}=JSON.parse(vu(gl(e),"utf8"));return Array.isArray(n)?n.filter((t)=>ll(t)===void 0):[]}catch{return[]}}function Ge(e,n,t=!0){let r=fl(n.palettes,Ho(e,n.palettes,t)),i=new Set(r.map((o)=>o.name));return{...n,palettes:[...r,...yi(e).filter((o)=>!i.has(o.name))]}}function cr(e){return Ge(e,Le(e))}class To extends Error{}class Go extends Error{}async function Si(e,n){let t;try{t=await fetch(e,{signal:AbortSignal.timeout(Z0)})}catch(r){throw Error(`cannot reach ${e} — ${r instanceof Error?r.message:String(r)}`)}if(t.status===404)throw new To(`nothing at ${e}`);if(t.status===403||t.status===429)throw new Go(`${new URL(e).host} is turning requests away for now (${t.status}) — try again in a minute`);if(!t.ok)throw Error(`${e} answered ${t.status}`);return n(await t.text())}function Iu(e){let n=new Set(e.waived??[]),t=e.gate??_t(un(e));return mt.flatMap((r,i)=>{let o=t[i];if(n.has(r.rule)||typeof o!=="number"||Number.isNaN(o))return[];if(r.min!==void 0&&o<r.min)return[`${r.label} ${o} < ${r.min}`];if(r.max!==void 0&&o>r.max)return[`${r.label} ${o} > ${r.max}`];return[]})}function Ft(e,n){let t=e.find((r)=>r.name===n);if(!t)throw Error(`no palette named ${n} in the catalog — ${Nu(e,[n])}`);return t}function Nu(e,n){let t=n.map((s)=>s.toLowerCase()),r=e.filter((s)=>t.some((u)=>s.name.includes(u))),i=e.filter((s)=>!r.includes(s)&&t.some((u)=>s.group.toLowerCase().includes(u))),o=[...r,...i].map((s)=>s.name).slice(0,3);return o.length>0?`did you mean: ${o.join(", ")}?`:"`ttheme list` shows what is there"}function dl(e,n){let t=n.toLowerCase();return e.filter((r)=>[r.name,r.group,r.native??"",r.ansiSource].some((i)=>i.toLowerCase().includes(t)))}function ml(e,n,t){let r=t.toLowerCase(),i=(o)=>o.name===n.name?0:o.group===n.group?1:2;return e.filter((o)=>o.booru?.toLowerCase().includes(r)).map((o,s)=>({p:o,at:s})).sort((o,s)=>i(o.p)-i(s.p)||o.at-s.at).map(({p:o})=>o)}function pl(e,n){return e.booruSites?.[n]??(e.booru?[e.booru]:[])}var Ru=5,z0=6,wl=0.05,B0=[1,2,3,4,5,6,9,10,11,12,13,14],$l=(e,n)=>(n-e+360)%360<=180?1:-1;function Ou(e,n,t){let r=n*Math.cos(t*Math.PI/180),i=n*Math.sin(t*Math.PI/180),o=[e+0.3963377774*r+0.2158037573*i,e-0.1055613458*r-0.0638541728*i,e-0.0894841775*r-1.291485548*i].map((h)=>h**3),[s,u,c]=o,a=[4.0767416621*s-3.3077115913*u+0.2309699292*c,-1.2684380046*s+2.6097574011*u-0.3413193965*c,-0.0041960863*s-0.7034186147*u+1.707614701*c];if(a.some((h)=>h<-0.0001||h>1.0001))return;return a.map((h)=>{let f=Math.min(1,Math.max(0,h));return Math.round(255*(f<=0.0031308?12.92*f:1.055*f**0.4166666666666667-0.055))})}function Uo(e,n,t){let r=0,i=n;if(Ou(e,n,t)===void 0)for(let s=0;s<24;s++){let u=(r+i)/2;if(Ou(e,u,t)===void 0)i=u;else r=u}else r=n;return`#${(Ou(e,r,t)??[0,0,0]).map((s)=>s.toString(16).padStart(2,"0")).join("")}`}function D0(e,n){let{l:t,c:r}=gn(e);return Uo(t,r,(n+360)%360)}function x0(e,n,t){let{l:r,c:i,h:o}=gn(e),s=qe(n)<0.18,u=(h)=>Uo(s?r+(1-r)*h:r*(1-h),i,o);if(Be(u(1),n)<t+wl)return u(1);let c=0,a=1;for(let h=0;h<30;h++){let f=(c+a)/2;if(Be(u(f),n)>=t+wl)a=f;else c=f}return u(a)}function e$(e,n){let{l:t,c:r,h:i}=gn(e),o=0,s=t;for(let u=0;u<30;u++){let c=(o+s)/2;if(qe(Uo(c,r,i))<=n-0.005)o=c;else s=c}return Uo(o,r,i)}function n$(e,n,t){let r=Fr[n],[i,o]=[gn(e[n]),gn(e[n+8])],s=(h,f)=>t.has(h)?[f]:Array.from({length:2*r.width+1},(l,g)=>(r.center-r.width+g+360)%360),u=(h,f,l)=>Kt.every((g)=>{let m=(h>8?8:0)+g;if(m===h)return!0;let d=gn(e[m]);return d.c<ws||Xn(d.h,f)>=Zi+1||Math.abs(d.l-l)>=Xi}),c,a=Number.POSITIVE_INFINITY;for(let h of s(n,i.h)){if(!t.has(n)&&!u(n,h,i.l))continue;for(let f of s(n+8,o.h)){if(Xn(h,f)>dt-Ru||!t.has(n+8)&&!u(n+8,f,o.l))continue;let l=Xn(h,i.h)+Xn(f,o.h);if(l<a)a=l,c=[h,f]}}return c}class bl{theme;moves=[];constructor(e){this.theme={...e,ansi:[...e.ansi]}}set(e,n,t){let r=this.get(e);if(t===r)return;if(this.moves.push({slot:e,rule:n,from:r,to:t}),e==="foreground")this.theme.foreground=t;else if(e==="selection")this.theme.selectionBackground=t;else this.theme.ansi[Number(e.slice(4))]=t}get(e){if(e==="foreground")return this.theme.foreground;if(e==="selection")return this.theme.selectionBackground;return this.theme.ansi[Number(e.slice(4))]}rehue(e,n,t){this.set(`ansi${e}`,n,D0(this.theme.ansi[e],t))}roles(){let e=new Set(this.theme.signatureSlots);for(let{slot:t,hue:r}of Qi(this.theme)){let i=Fr[Wt(t)];this.rehue(t,"ansi-role",i.center+$l(i.center,r)*(i.width-Ru))}for(let{normal:t,gap:r}of qi(this.theme)){if(r<=dt)continue;let[i,o]=e.has(`ansi${t+8}`)?[t+8,t]:[t,t+8],s=gn(this.theme.ansi[i]).h,u=gn(this.theme.ansi[o]).h;this.rehue(o,"bright-follows",s+$l(s,u)*(dt-Ru))}let n=Vi(this.theme);for(let[t,r]of Yi(this.theme)){let i=Wt(n.has(r)?t:r),o=n$(this.theme.ansi,i,n);if(o===void 0)continue;this.rehue(i,"distinct",o[0]),this.rehue(i+8,"distinct",o[1])}}readability(){let e=new Set(this.theme.waive),{background:n}=this.theme,t=(r,i,o,s=n)=>{if(e.has(r))return;for(let u of i)if(Be(this.get(u),s)<o)this.set(u,r,x0(this.get(u),s,o))};if(t("foreground",["foreground"],7),t("accents",B0.map((r)=>`ansi${r}`),3),t("light-ansi",["ansi7","ansi15"],7),t("ansi8-visible",["ansi8"],1.6),!e.has("ansi0-dark")&&qe(this.get("ansi0"))>0.15)this.set("ansi0","ansi0-dark",e$(this.get("ansi0"),0.15));t("selection",["selection"],7,this.theme.foreground)}net(){return[...new Set(this.moves.map((e)=>e.slot))].flatMap((e)=>{let n=this.moves.filter((i)=>i.slot===e),t=n[0].from,r=this.get(e);return t===r?[]:[{slot:e,rule:[...new Set(n.map((i)=>i.rule))].join(", "),from:t,to:r}]})}}function kl(e){let n=new bl(e);for(let t=0;t<z0;t++)if(n.readability(),n.roles(),Bi(n.theme).length===0)break;return{theme:n.theme,moves:n.net(),left:Bi(n.theme)}}import{execFileSync as m$}from"node:child_process";import{existsSync as Ii,mkdirSync as Wo,readdirSync as Hl,readFileSync as Ni,rmSync as Fl}from"node:fs";import{basename as p$,join as kn}from"node:path";import{execFileSync as t$,spawn as r$}from"node:child_process";import{existsSync as $n,mkdirSync as i$,readFileSync as ar,realpathSync as o$,rmSync as Fu,utimesSync as s$,writeFileSync as u$}from"node:fs";import{homedir as hr}from"node:os";import{dirname as c$,join as Ie}from"node:path";var a$={ghostty:Zr,kitty:Vr,alacritty:Yr,wezterm:fi,iterm2:Xr,"windows-terminal":li,warp:hi},El="ttheme-default";function _n(e=process.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"){let n=(t,r)=>t$(t,r,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();return{read:()=>{try{return process.platform==="darwin"?n("defaults",["read",e,"Default Bookmark Guid"])||void 0:void 0}catch{return}},write:(t)=>{if(process.platform==="darwin")n("defaults",["write",e,"Default Bookmark Guid","-string",t])},running:()=>{try{return n("pgrep",["-x","iTerm2"])!==""}catch{return!1}}}}function bn(e){return e.off?void 0:qn(e)}function vi(e,n){if(!e.terminals.includes("iterm2"))return e;let t=n.read();return t&&!t.startsWith("ttheme-")?{...e,itermBase:t}:e}function Lt(e,n){if(!e.terminals.includes("iterm2"))return!1;let t=n.read(),r=bn(e)?El:t===El?e.itermBase:void 0;if(!r||r===t)return!1;return n.write(r),!0}function ge(){return process.env.XDG_CONFIG_HOME??Ie(hr(),".config")}function Mi(e){return Ie(e,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function ke(e){let n=ir(e);if(!$n(n))throw Error(`nothing installed yet at ${n} — run \`ttheme init\` first`);let t=JSON.parse(ar(n,"utf8"));if(!Array.isArray(t?.palettes)||!Array.isArray(t.terminals))throw Error(`${n} has no palettes or terminals`);return{terminals:t.terminals.filter((r)=>mo.includes(r)),...t.author?{author:t.author}:{},...t.startup?{startup:t.startup}:{},...t.off?{off:!0}:{},...t.itermBase?{itermBase:t.itermBase}:{},...t.wtHome?{wtHome:t.wtHome}:{},...t.wtProfile?{wtProfile:t.wtProfile}:{},...Array.isArray(t.markets)?{markets:t.markets.filter((r)=>typeof r==="string")}:{},palettes:t.palettes}}function Qn(e,n){$e(ir(e),`${JSON.stringify(n,null,2)}
378
- `)}function yl(e,n){let t=new Map(e.palettes.map((i)=>[i.name,i])),r=n.filter((i)=>!t.has(i));if(r.length>0){let i=[...new Set(r.flatMap((s)=>je(s)??[]))].filter((s)=>!e.palettes.some((u)=>je(u.name)===s)),o=i.length>0?i.map((s)=>`\`ttheme market add ${s}\``).join(", "):Nu(cn(e.palettes),r);throw Error(`not in any market: ${r.join(", ")} — ${o}`)}return e.palettes.filter((i)=>n.includes(i.name))}function Sl(e,n){let t=e==="wezterm"?"colors":"themes";return(a$[e].emit?.(n)??[]).flatMap((r)=>{let[,i,o]=r.path.split("/");return i===t&&o!==void 0?[{file:o,content:r.content}]:[]})}function jo(e){return process.platform==="darwin"?Ie(e,".warp","themes"):Ie(process.env.XDG_DATA_HOME??Ie(e,".local","share"),"warp-terminal","themes")}function Pt(e,n,t){if(e==="warp")return jo(t);return Ie(n,e,e==="wezterm"?"colors":"themes")}function Jo(e,n){return process.platform==="darwin"?Ie(e,".warp","settings.toml"):Ie(n,"warp-terminal","settings.toml")}var Pu='"dark"';function Hu(e){return Ie(e,"ttheme","warp.base")}var h$="setTimeout(() => { const fs = require('node:fs'); const [file, next, seen] = process.argv.slice(-3); if (fs.readFileSync(file, 'utf8') !== seen) return; const tmp = file + '.ttheme-' + process.pid; fs.writeFileSync(tmp, next); fs.chmodSync(tmp, fs.statSync(file).mode & 0o7777); fs.renameSync(tmp, file) }, 1500)";function f$(e,n,t,r){let i=Jo(n,e);if(!$n(i))return;let o=Hu(e),s=ar(i,"utf8"),u=wo(s),c=u?.includes(`path = "${fe("")}`)===!0,a;if(t){if(!c&&!$n(o))i$(c$(o),{recursive:!0}),u$(o,u??"");a=ff(t)}else{if(!c)return;a=$n(o)&&ar(o,"utf8")||Pu,Fu(o,{force:!0})}let h=$o(s,a);if(h===s)return;if(r)qs(i),r$(process.execPath,["-e",h$,o$(i),h,s],{detached:!0,stdio:"ignore"}).unref();else zr(i,h);return i}function vl(e){return Ie(e,"ttheme","kitty.py")}function fr(e,n){let t=Ie(n,".wezterm.lua");return $n(t)?t:Ie(e,"wezterm","wezterm.lua")}function Co(e){return Ie(e,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function Lu(e){return[Ie(e,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),Ie(e,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),Ie(e,"Microsoft","Windows Terminal","settings.json")].filter((n)=>$n(n))}function l$(e){for(let n of e){let t=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(ar(n,"utf8"))?.[1];if(t)return t}return}function qn(e){return e.startup&&e.palettes.includes(e.startup)?e.startup:e.palettes[0]}function Ht(e,n){return e==="ghostty"?Ie(n,"ghostty","config"):Ie(n,"kitty","kitty.conf")}function Ml(e,n,t,r){return e==="ghostty"?Bh(Ie(n,"ttheme"),t,r):rf(t,vl(n),r)}function Wn(e){return $n(e)?ar(e,"utf8"):""}function At(e){return Ie(e,"alacritty","alacritty.toml")}function g$(e,n){return n?Ie(e,"alacritty","themes",`${fe(n)}.toml`):void 0}function Il(e,n,t,r){let i=Ze(e),o=n.map(un),s=new Map;for(let c of o){let a=Jh(i,c.name,r);if(a)s.set(c.name,a)}let u=new Set(cn(n).map((c)=>c.name));return Eh(o.filter((c)=>u.has(c.name)),s,o.find((c)=>c.name===bn(t)),t.itermBase)}function ht(e,n=hr()){let t=ke(e);if(!t.terminals.includes("iterm2"))return;$e(Mi(n),Il(e,yl(cr(e),t.palettes),t,n))}function en(e,n,t,r=hr()){Nn(Ze(e));let i=yl(Ge(e,n),t.palettes);Ao(e,i);let o=[],s=(h,f)=>{if(o.push(h),$n(h)&&ar(h,"utf8")===f)return!1;return $e(h,f),!0},u=(h,f)=>{o.push(h),zr(h,f)},c=bn(t);for(let h of t.terminals){if(h==="iterm2"){s(Mi(r),Il(e,i,t,r));continue}if(h==="windows-terminal"){if(t.wtHome){let d=Lu(t.wtHome),b=i.map(un),y=ou(b,t.wtProfile??l$(d),c);if(s(Co(t.wtHome),y)){let I=new Date;for(let k of d)s$(k,I,I)}}continue}let f=c!==void 0&&h==="warp"&&!$n(Ie(jo(r),`${fe(c)}.yaml`)),l=h==="warp"?f$(e,r,c,f):void 0;for(let d of i)for(let{file:b,content:y}of Sl(h,un(d)))s(Ie(Pt(h,e,r),b),y);if(h==="warp"){if(l)o.push(l);continue}if(h==="wezterm"){let d=Ie(e,"ttheme","wezterm.lua");s(d,df({path:d,colors:Pt("wezterm",e,r),backgrounds:Ze(e),...c?{startup:c}:{},palettes:i.map(un)}));let b=fr(e,r),y=ai(Wn(b),sf(d));if(y!==void 0)u(b,y);continue}if(h==="alacritty"){let d=At(e),b=ci(Wn(d),g$(e,c));if(b!==void 0)u(d,b);continue}if(h==="kitty")s(vl(e),yh({themes:Pt("kitty",e,r),backgrounds:Ze(e)}));let g=Ht(h,e),m=Wn(g);u(g,oi(m,Ml(h,e,c,m)))}let a=Ie(e,"ttheme","palettes.zsh");return $e(a,ru(i,c,t.terminals)),o.push(a),Fu(`${a}.zwc`,{force:!0}),o}function Nl(e,n){return e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}function d$(e){return[...new Set(e.split(`
379
- `).map((n)=>n.split(/[ =]/)[0]))].join(", ")}function Ol(e,n,t=hr()){let r=bn(n),i=(s)=>Nl(s,t),o=[];for(let s of n.terminals){if(s==="iterm2"){o.push(`write ${i(Mi(t))} — a "ttheme · <palette>" profile per palette`);continue}if(s==="windows-terminal"){if(n.wtHome)o.push(`write ${Co(n.wtHome)} — its schemes, and touch settings.json so it reloads`);continue}if(o.push(`write ${i(Pt(s,e,t))}/${fe("*")} — a theme file per palette`),s==="warp"){let a=Jo(t,e);if(r&&$n(a))o.push(`edit ${i(a)} — [appearance.themes] theme; \`ttheme off\` puts yours back`);continue}if(s==="wezterm"){let a=fr(e,t);if(ai(Wn(a),"")!==void 0)o.push(`edit ${i(a)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`);continue}if(s==="alacritty"){let a=At(e);if(ci(Wn(a),void 0)!==void 0)o.push(`edit ${i(a)} — a ttheme block: general.import`);continue}let u=Ht(s,e),c=Wn(u);o.push(`edit ${i(u)} — a ttheme block: ${d$(Ml(s,e,r,c))}`)}return o}function Rl(e,n,t=hr()){let r=[],i=(o)=>Nl(o,t);if(n.includes("ghostty")){let o=Ht("ghostty",e);if(vt(Wn(o),"command"))r.push(`${i(o)} sets its own command — ttheme leaves it, so a new tab takes its palette once zsh starts`)}if(n.includes("kitty")){let o=Wn(Ht("kitty",e));if(vt(o,"window_logo_scale")||vt(o,"window_logo_alpha"))r.push("kitty.conf sets its own window_logo_scale or window_logo_alpha — pictures are drawn with them")}if(n.includes("alacritty")){let o=At(e);if(of(Wn(o)))r.push(`${i(o)} sets its own colors, which win over an imported palette — remove them to open with ttheme's`)}return r}function Au(e,n,t,r,i=hr()){let o=[],s=Ge(e,n,!1).palettes;for(let u of t)for(let c of s.filter((a)=>r.includes(a.name)))for(let{file:a}of Sl(u,un(c))){let h=Ie(Pt(u,e,i),a);if($n(h))Fu(h,{force:!0}),o.push(h)}return o}function ft(e,n,t,r){let i=_n(),o=Boolean(bn(t))!==Boolean(bn(r)),s=o?vi(r,i):r;return en(e,n,s),Qn(e,s),o&&Lt(s,i)&&i.running()}var Ll=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,w$=["add","remove","search","init"];function $$(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function b$(){try{let e=m$("gh",["api","user","--jq",".login"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim().toLowerCase();return Ll.test(e)?e:void 0}catch{return}}async function k$(e,n){if(n.author)return n.author;let t=b$();if(!t){if(!$$())throw Error("your palettes are named after your GitHub handle — log in with `gh auth login`, or run this in a terminal");let r=await Df({message:"your GitHub handle — your palettes are named <palette>@<handle>",validate:(i)=>Ll.test((i??"").toLowerCase())&&(i??"").length<=39?void 0:"that is not a GitHub handle"});if(an(r))throw Error("no handle given");t=r.toLowerCase()}return Qn(e,{...n,author:t}),console.log(`your palettes are named <palette>@${t}`),t}function Yn(e){return`${e} palette${e===1?"":"s"}`}function _o(e){try{return Fo(e)}catch{return}}function Qo(e){return Le(e).palettes.filter((n)=>je(n.name)===void 0)}function E$(e){let n=kn(import.meta.dirname,"..","dist","manifest.json");return Ii(n)?at(Ni(n,"utf8")).palettes:Qo(e)}async function Al(e){try{return await Si(tl(e),Lo)}catch(n){if(n instanceof To)throw Error(`github.com/${e} has no ${jn} — is the repository public, and has its action run?`);throw n}}function Ko(e,n,t){let r=ke(e),i=Jn(r.markets),o=i.find((s)=>s!==n&&_o(s)===t);if(o)throw Error(`${t} already names the market at ${ut(o)} — \`ttheme market remove ${t}\` first`);if(!i.includes(n))Qn(e,{...r,markets:[...i,n]});return i}async function y$(e){let n=ge(),t=sr(e);if(Jn(ke(n).markets).includes(t)){console.log(`${ut(t)} is already added`);return}if(t===Pe){let o=await Si(Mu,at);Ko(n,t,Pe),Ei(n,o),console.log(`added the ttheme catalog — ${Yn(cn(o.palettes).length)} · \`ttheme browse\` picks them`);return}if(Rn(t)){let o=Cn(t);Ko(n,t,o);let s=bi(t,o,Qo(n)).length;console.log(`added ${o} · ${t} — ${Yn(s)}, read in place`),console.log("\n`ttheme browse` picks them · `ttheme market build` there writes the index others fetch");return}let r=await Al(t),i=It(t);Ko(n,t,i),Wo(kn(n,"ttheme","markets"),{recursive:!0}),$e(Nt(n,t),`${JSON.stringify(r,null,2)}
380
- `),console.log(`added ${i} · ${ut(t)} — ${Yn(r.palettes.length)}`),console.log(`
381
- \`ttheme browse\` picks them, or \`ttheme add <palette>@${i}\``)}function S$(e){let n=ge(),t=ke(n),r=Jn(t.markets),i=r.find((u)=>_o(u)===e)??r.find((u)=>u===v$(e));if(!i)throw Error(`no market named ${e} — \`ttheme market\` lists them`);let o=t.palettes.filter((u)=>(je(u)??Pe)===_o(i)),s={...t,markets:r.filter((u)=>u!==i)};if(Qn(n,s),i===Pe)Fl(Rt(n),{force:!0});else if(Ro(i))Fl(Nt(n,i),{force:!0});if(en(n,Le(n),s),console.log(`removed ${e} · ${ut(i)}`),o.length>0)console.log(`${Yn(o.length)} installed from it keep working — \`ttheme remove\` drops them`)}function v$(e){try{return sr(e)}catch{return}}function M$(e,n){try{if(n===Pe)return cn(at(Ni(Rt(e),"utf8")).palettes).length;if(Rn(n))return bi(n,Cn(n),Qo(e),!1).length;return Lo(Ni(Nt(e,n),"utf8")).palettes.length}catch{return}}function I$(){let e=ge(),n=ke(e),t=Jn(n.markets);if(t.length===0){console.log("no markets — `ttheme market add official` brings the ttheme catalog back");return}let r=t.map((s)=>{let u=_o(s)??"?",c=M$(e,s),a=n.palettes.filter((h)=>(je(h)??Pe)===u).length;return{name:u,where:ut(s),note:c===void 0?"unreadable":`${Yn(c)}${a>0?` · ${a} installed`:""}`}}),i=Math.max(...r.map((s)=>s.name.length)),o=Math.max(...r.map((s)=>s.where.length));for(let s of r)console.log(` ${s.name.padEnd(i)} ${s.where.padEnd(o)} ${s.note}`)}async function N$(e){try{let{items:n}=await Si(`https://api.github.com/search/repositories?q=${e}&sort=stars&per_page=50`,(t)=>JSON.parse(t));return n}catch(n){if(n instanceof Go)throw Error("GitHub lets a search through about ten times a minute without signing in — try again in a minute");throw n}}async function O$(e){let n=ge(),t=encodeURIComponent(`topic:${Oo}${e?` ${e}`:""}`),r=await N$(t);if(r.length===0){console.log(`no repository carries the ${Oo} topic${e?` and matches ${e}`:""} yet`);return}let i=new Set(Jn(ke(n).markets)),o=r.map((u)=>{let c=u.owner.login.toLowerCase();return{arg:u.name===wi?c:`${c}/${u.name}`,added:i.has(`${c}/${u.name}`),stars:`★${u.stargazers_count}`,about:u.description??""}}),s=Math.max(...o.map((u)=>u.arg.length));for(let u of o)console.log(` ${u.added?"●":"○"} ${u.arg.padEnd(s)} ${u.stars.padStart(5)} ${u.about}`);console.log("\n`ttheme market add <name>` adds one")}var R$=`name: ttheme market
374
+ `}class hl{bytes=[];u8(e){this.bytes.push(e&255)}u16(e){this.u8(e>>8),this.u8(e)}u32(e){this.u16(Math.floor(e/65536)),this.u16(e%65536)}str(e=""){let n=new TextEncoder().encode(e);if(n.length>255)throw Error(`"${e}" is too long to share`);this.u8(n.length),this.bytes.push(...n)}color(e){let n=Number.parseInt(e.slice(1),16);this.u8(n>>16),this.u8(n>>8),this.u8(n)}done(){return Buffer.from(this.bytes).toString("base64url")}}class fl{at=0;bytes;constructor(e){this.bytes=e}u8(){let e=this.bytes[this.at++];if(e===void 0)throw Error("the share code is cut short");return e}u16(){return this.u8()*256+this.u8()}u32(){return this.u16()*65536+this.u16()}str(){let e=this.u8(),n=this.bytes.subarray(this.at,this.at+e);if(n.length!==e)throw Error("the share code is cut short");return this.at+=e,new TextDecoder("utf-8",{fatal:!0}).decode(n)}color(){return`#${[this.u8(),this.u8(),this.u8()].map((e)=>e.toString(16).padStart(2,"0")).join("")}`}end(){if(this.at!==this.bytes.length)throw Error("the share code has bytes left over")}}function ll(e){let n=new hl;n.str(e.name);for(let r of[e.background,e.foreground,e.cursor,e.selection,...e.ansi])n.color(r);for(let r of e.signature)n.u8(al.indexOf(r));n.str(e.base),n.str(e.group),n.str(e.ansiSource),n.str(e.booru),n.u16((e.waive??[]).reduce((r,i)=>r|1<<$s.indexOf(i),0)),n.str(e.waive&&e.waive.length>0?e.reason:"");let t=e.pictures??[];n.u8(t.length);for(let r of t)n.u8(x.findIndex((i)=>i.key===r.site)),n.u32(r.id),n.u16(r.size===void 0?0:r.size==="fill"?1:r.size),n.u8(r.position===void 0?0:Et.indexOf(r.position)+1),n.u16(r.opacity===void 0?0:Math.round(r.opacity*1000)+1);return`${ut}${n.done()}`}function dl(e){if(!e.startsWith(ut))throw Error(`a share code starts with ${ut}`);let n=e.slice(ut.length);if(!/^[A-Za-z0-9_-]+$/.test(n))throw Error("the share code holds characters it never uses — was it copied whole?");let t=new fl(new Uint8Array(Buffer.from(n,"base64url"))),r=t.str(),[i,o,s,u,...c]=Array.from({length:20},()=>t.color()),a=[t.u8(),t.u8(),t.u8()].map((I)=>al[I]??`slot${I}`),h=t.str(),f=t.str(),l=t.str(),d=t.str(),g=t.u16(),m=t.str(),b=$s.filter((I,k)=>g&1<<k),S=Array.from({length:t.u8()},()=>{let I=x[t.u8()]?.key??"unknown",k=t.u32(),y=t.u16(),p=t.u8(),P=t.u16();return{site:I,id:k,...y===1?{size:"fill"}:y>1?{size:y}:{},...p>0?{position:Et[p-1]??"unknown"}:{},...P>0?{opacity:(P-1)/1000}:{}}});if(t.end(),![i,o,s,u,...c].every(Wt))throw Error("the share code holds a color that is not one");return{name:r,...h?{base:h}:{},...f?{group:f}:{},...l?{ansiSource:l}:{},...d?{booru:d}:{},signature:a,background:i,foreground:o,cursor:s,selection:u,ansi:c,...b.length>0?{waive:b,reason:m}:{},...S.length>0?{pictures:S}:{}}}function gl(e,n){let t=e.indexOf("ansi = ["),r=e.indexOf("]",t);if(t<0||r<0)throw Error("no ansi = [...] list to rewrite");let i=0,o=e.slice(t,r).replace(/"#[0-9a-fA-F]{6}"/g,()=>Pe(n.ansi[i++]));return(e.slice(0,t)+o+e.slice(r)).replace(/^(foreground\s*=\s*)"#[0-9a-fA-F]{6}"/m,(s,u)=>`${u}${Pe(n.foreground)}`).replace(/^(selection_background\s*=\s*)"#[0-9a-fA-F]{6}"/m,(s,u)=>`${u}${Pe(n.selectionBackground)}`)}function pi(e){let n=qt(cn(e)),t=new Set(e.waived??[]),r=Math.max(...gt.map((i)=>i.label.length));return gt.map((i,o)=>{let s=n[o],u=t.has(i.rule)||Number.isNaN(s)||(i.min===void 0||s>=i.min)&&(i.max===void 0||s<=i.max),c=i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",a=Number.isNaN(s)?"—":Number.isInteger(s)?String(s):s.toFixed(2);return` ${u?"✓":"✗"} ${i.label.padEnd(r)} ${a.padStart(6)} ${c}${t.has(i.rule)?" waived":""}`})}var Ru="https://kecan0406.github.io/ttheme/manifest.json",u$=20000;function Ft(e){return pl(e,"ttheme","catalog.json")}function wi(e,n){$e(Ft(e),`${JSON.stringify(n,null,2)}
375
+ `)}function He(e){let n=or(e),t=Ft(e),r=Dr();if(n.includes(Ge)){if(!ml(t))throw Error(`no catalog at ${t} — run \`ttheme init\` first`);r=ct(Ou(t,"utf8"))}let i=n.filter(Oo).flatMap((o)=>c$(e,o));return{...r,palettes:[...r.palettes,...i]}}function Ho(e,n){return Fu(Ou(It(e,n),"utf8"))}function $i(e,n){return Fn({owner:cl(e),name:n.name})}function c$(e,n){let t=It(e,n);if(!ml(t))return[];try{let r=Ho(e,n);return a$(r,$i(n,r))}catch(r){return process.stderr.write(`ttheme: skipping ${t} — ${r.message}
376
+ `),[]}}function Fu(e){let n=ct(e),t=vu(n.owner,n.name);if(t)throw Error(`market index ${t}`);let r=n.palettes.find((i)=>Te(i.name)!==void 0);if(r)throw Error(`market index names ${r.name} with its market — its entries are bare palette names`);return n}function a$(e,n){return e.palettes.map(({lead:t,default:r,native:i,...o})=>({...o,name:`${n}/${o.name}`,group:n}))}function ct(e){let n;try{n=JSON.parse(e)}catch{throw Error("catalog is not valid JSON")}let t=n;if(typeof t?.version!=="string"||!Array.isArray(t.palettes))throw Error("catalog has no version or palettes");for(let r of t.palettes){let i=wl(r);if(i)throw Error(`catalog entry ${JSON.stringify(r?.name)} ${i}`)}return t}function wl(e){if(typeof e?.name!=="string"||!Array.isArray(e.ansi)||e.ansi.length!==16)return"is missing name or its 16 ANSI colors";let n=Nn(e.name)??(e.base===void 0?void 0:Nn(e.base));if(n)return n;if(![e.background,e.foreground,e.cursor,e.selection,...e.ansi].every((t)=>typeof t==="string"&&Wt(t)))return'holds a color that is not "#rrggbb"';for(let t of[e.group,e.native??"-",e.ansiSource]){let r=typeof t==="string"?_s(t):"has a field that is not text";if(r)return r}return}function $l(e){return pl(e,"ttheme","kept.json")}function Lo(e,n){$e($l(e),`${JSON.stringify({palettes:n},null,2)}
377
+ `)}function bi(e){try{let{palettes:n}=JSON.parse(Ou($l(e),"utf8"));return Array.isArray(n)?n.filter((t)=>wl(t)===void 0):[]}catch{return[]}}function Ue(e,n,t=!0){let r=[...n.palettes,...Po(e,n.palettes,t)],i=new Set(r.map((o)=>o.name));return{...n,palettes:[...r,...bi(e).filter((o)=>!i.has(o.name))]}}function ur(e){return Ue(e,He(e))}class Ao extends Error{}class To extends Error{}async function ki(e,n){let t;try{t=await fetch(e,{signal:AbortSignal.timeout(u$)})}catch(r){throw Error(`cannot reach ${e} — ${r instanceof Error?r.message:String(r)}`)}if(t.status===404)throw new Ao(`nothing at ${e}`);if(t.status===403||t.status===429)throw new To(`${new URL(e).host} is turning requests away for now (${t.status}) — try again in a minute`);if(!t.ok)throw Error(`${e} answered ${t.status}`);return n(await t.text())}function Pu(e){let n=new Set(e.waived??[]),t=e.gate??qt(cn(e));return gt.flatMap((r,i)=>{let o=t[i];if(n.has(r.rule)||typeof o!=="number"||Number.isNaN(o))return[];if(r.min!==void 0&&o<r.min)return[`${r.label} ${o} < ${r.min}`];if(r.max!==void 0&&o>r.max)return[`${r.label} ${o} > ${r.max}`];return[]})}function Pt(e,n){let t=e.find((r)=>r.name===n);if(!t)throw Error(`no palette named ${n} in the catalog — ${Hu(e,[n])}`);return t}function Hu(e,n){let t=n.map((s)=>s.toLowerCase()),r=e.filter((s)=>t.some((u)=>s.name.includes(u))),i=e.filter((s)=>!r.includes(s)&&t.some((u)=>s.group.toLowerCase().includes(u))),o=[...r,...i].map((s)=>s.name).slice(0,3);return o.length>0?`did you mean: ${o.join(", ")}?`:"`ttheme list` shows what is there"}function bl(e,n){let t=n.toLowerCase();return e.filter((r)=>[r.name,r.group,r.native??"",r.ansiSource].some((i)=>i.toLowerCase().includes(t)))}function kl(e,n,t){let r=t.toLowerCase(),i=(o)=>o.name===n.name?0:o.group===n.group?1:2;return e.filter((o)=>o.booru?.toLowerCase().includes(r)).map((o,s)=>({p:o,at:s})).sort((o,s)=>i(o.p)-i(s.p)||o.at-s.at).map(({p:o})=>o)}function El(e,n){return e.booruSites?.[n]??(e.booru?[e.booru]:[])}var Au=5,h$=6,yl=0.05,f$=[1,2,3,4,5,6,9,10,11,12,13,14],Sl=(e,n)=>(n-e+360)%360<=180?1:-1;function Lu(e,n,t){let r=n*Math.cos(t*Math.PI/180),i=n*Math.sin(t*Math.PI/180),o=[e+0.3963377774*r+0.2158037573*i,e-0.1055613458*r-0.0638541728*i,e-0.0894841775*r-1.291485548*i].map((h)=>h**3),[s,u,c]=o,a=[4.0767416621*s-3.3077115913*u+0.2309699292*c,-1.2684380046*s+2.6097574011*u-0.3413193965*c,-0.0041960863*s-0.7034186147*u+1.707614701*c];if(a.some((h)=>h<-0.0001||h>1.0001))return;return a.map((h)=>{let f=Math.min(1,Math.max(0,h));return Math.round(255*(f<=0.0031308?12.92*f:1.055*f**0.4166666666666667-0.055))})}function Go(e,n,t){let r=0,i=n;if(Lu(e,n,t)===void 0)for(let s=0;s<24;s++){let u=(r+i)/2;if(Lu(e,u,t)===void 0)i=u;else r=u}else r=n;return`#${(Lu(e,r,t)??[0,0,0]).map((s)=>s.toString(16).padStart(2,"0")).join("")}`}function l$(e,n){let{l:t,c:r}=dn(e);return Go(t,r,(n+360)%360)}function d$(e,n,t){let{l:r,c:i,h:o}=dn(e),s=Qe(n)<0.18,u=(h)=>Go(s?r+(1-r)*h:r*(1-h),i,o);if(Be(u(1),n)<t+yl)return u(1);let c=0,a=1;for(let h=0;h<30;h++){let f=(c+a)/2;if(Be(u(f),n)>=t+yl)a=f;else c=f}return u(a)}function g$(e,n){let{l:t,c:r,h:i}=dn(e),o=0,s=t;for(let u=0;u<30;u++){let c=(o+s)/2;if(Qe(Go(c,r,i))<=n-0.005)o=c;else s=c}return Go(o,r,i)}function m$(e,n,t){let r=Or[n],[i,o]=[dn(e[n]),dn(e[n+8])],s=(h,f)=>t.has(h)?[f]:Array.from({length:2*r.width+1},(l,d)=>(r.center-r.width+d+360)%360),u=(h,f,l)=>Kt.every((d)=>{let g=(h>8?8:0)+d;if(g===h)return!0;let m=dn(e[g]);return m.c<ws||Xn(m.h,f)>=Qi+1||Math.abs(m.l-l)>=Zi}),c,a=Number.POSITIVE_INFINITY;for(let h of s(n,i.h)){if(!t.has(n)&&!u(n,h,i.l))continue;for(let f of s(n+8,o.h)){if(Xn(h,f)>dt-Au||!t.has(n+8)&&!u(n+8,f,o.l))continue;let l=Xn(h,i.h)+Xn(f,o.h);if(l<a)a=l,c=[h,f]}}return c}class vl{theme;moves=[];constructor(e){this.theme={...e,ansi:[...e.ansi]}}set(e,n,t){let r=this.get(e);if(t===r)return;if(this.moves.push({slot:e,rule:n,from:r,to:t}),e==="foreground")this.theme.foreground=t;else if(e==="selection")this.theme.selectionBackground=t;else this.theme.ansi[Number(e.slice(4))]=t}get(e){if(e==="foreground")return this.theme.foreground;if(e==="selection")return this.theme.selectionBackground;return this.theme.ansi[Number(e.slice(4))]}rehue(e,n,t){this.set(`ansi${e}`,n,l$(this.theme.ansi[e],t))}roles(){let e=new Set(this.theme.signatureSlots);for(let{slot:t,hue:r}of Ki(this.theme)){let i=Or[_t(t)];this.rehue(t,"ansi-role",i.center+Sl(i.center,r)*(i.width-Au))}for(let{normal:t,gap:r}of _i(this.theme)){if(r<=dt)continue;let[i,o]=e.has(`ansi${t+8}`)?[t+8,t]:[t,t+8],s=dn(this.theme.ansi[i]).h,u=dn(this.theme.ansi[o]).h;this.rehue(o,"bright-follows",s+Sl(s,u)*(dt-Au))}let n=Yi(this.theme);for(let[t,r]of qi(this.theme)){let i=_t(n.has(r)?t:r),o=m$(this.theme.ansi,i,n);if(o===void 0)continue;this.rehue(i,"distinct",o[0]),this.rehue(i+8,"distinct",o[1])}}readability(){let e=new Set(this.theme.waive),{background:n}=this.theme,t=(r,i,o,s=n)=>{if(e.has(r))return;for(let u of i)if(Be(this.get(u),s)<o)this.set(u,r,d$(this.get(u),s,o))};if(t("foreground",["foreground"],7),t("accents",f$.map((r)=>`ansi${r}`),3),t("light-ansi",["ansi7","ansi15"],7),t("ansi8-visible",["ansi8"],1.6),!e.has("ansi0-dark")&&Qe(this.get("ansi0"))>0.15)this.set("ansi0","ansi0-dark",g$(this.get("ansi0"),0.15));t("selection",["selection"],7,this.theme.foreground)}net(){return[...new Set(this.moves.map((e)=>e.slot))].flatMap((e)=>{let n=this.moves.filter((i)=>i.slot===e),t=n[0].from,r=this.get(e);return t===r?[]:[{slot:e,rule:[...new Set(n.map((i)=>i.rule))].join(", "),from:t,to:r}]})}}function Ml(e){let n=new vl(e);for(let t=0;t<h$;t++)if(n.readability(),n.roles(),Vi(n.theme).length===0)break;return{theme:n.theme,moves:n.net(),left:Vi(n.theme)}}import{execFileSync as R$}from"node:child_process";import{existsSync as Si,mkdirSync as Wo,readdirSync as jl,readFileSync as _o,rmSync as Tl}from"node:fs";import{basename as Jl,join as En}from"node:path";import{execFileSync as p$,spawn as w$}from"node:child_process";import{existsSync as bn,mkdirSync as $$,readFileSync as cr,realpathSync as b$,rmSync as Tu,utimesSync as k$,writeFileSync as E$}from"node:fs";import{homedir as ar}from"node:os";import{dirname as y$,join as Ie}from"node:path";var S$={ghostty:Qr,kitty:Yr,alacritty:qr,wezterm:ai,iterm2:Zr,"windows-terminal":hi,warp:ci},Il="ttheme-default";function _n(e=process.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"){let n=(t,r)=>p$(t,r,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();return{read:()=>{try{return process.platform==="darwin"?n("defaults",["read",e,"Default Bookmark Guid"])||void 0:void 0}catch{return}},write:(t)=>{if(process.platform==="darwin")n("defaults",["write",e,"Default Bookmark Guid","-string",t])},running:()=>{try{return n("pgrep",["-x","iTerm2"])!==""}catch{return!1}}}}function kn(e){return e.off?void 0:Qn(e)}function Ei(e,n){if(!e.terminals.includes("iterm2"))return e;let t=n.read();return t&&!t.startsWith("ttheme-")?{...e,itermBase:t}:e}function At(e,n){if(!e.terminals.includes("iterm2"))return!1;let t=n.read(),r=kn(e)?Il:t===Il?e.itermBase:void 0;if(!r||r===t)return!1;return n.write(r),!0}function de(){return process.env.XDG_CONFIG_HOME??Ie(ar(),".config")}function yi(e){return Ie(e,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function ke(e){let n=ir(e);if(!bn(n))throw Error(`nothing installed yet at ${n} — run \`ttheme init\` first`);let t=JSON.parse(cr(n,"utf8"));if(!Array.isArray(t?.palettes)||!Array.isArray(t.terminals))throw Error(`${n} has no palettes or terminals`);return{terminals:t.terminals.filter((r)=>go.includes(r)),...t.author?{author:t.author}:{},...t.startup?{startup:t.startup}:{},...t.off?{off:!0}:{},...t.itermBase?{itermBase:t.itermBase}:{},...t.wtHome?{wtHome:t.wtHome}:{},...t.wtProfile?{wtProfile:t.wtProfile}:{},...Array.isArray(t.markets)?{markets:t.markets.filter((r)=>typeof r==="string")}:{},palettes:t.palettes}}function qn(e,n){$e(ir(e),`${JSON.stringify(n,null,2)}
378
+ `)}function Nl(e,n){let t=new Map(e.palettes.map((i)=>[i.name,i])),r=n.filter((i)=>!t.has(i));if(r.length>0){let i=[...new Set(r.flatMap((s)=>Te(s)??[]))].filter((s)=>!e.palettes.some((u)=>Te(u.name)===s)),o=i.length>0?`add ${i.join(", ")} first — \`ttheme market search\` finds a market's repository`:Hu(an(e.palettes),r);throw Error(`not in any market: ${r.join(", ")} — ${o}`)}return e.palettes.filter((i)=>n.includes(i.name))}function Ol(e,n){let t=e==="wezterm"?"colors":"themes";return(S$[e].emit?.(n)??[]).flatMap((r)=>{let[,i,o]=r.path.split("/");return i===t&&o!==void 0?[{file:o,content:r.content}]:[]})}function Uo(e){return process.platform==="darwin"?Ie(e,".warp","themes"):Ie(process.env.XDG_DATA_HOME??Ie(e,".local","share"),"warp-terminal","themes")}function Ht(e,n,t){if(e==="warp")return Uo(t);return Ie(n,e,e==="wezterm"?"colors":"themes")}function jo(e,n){return process.platform==="darwin"?Ie(e,".warp","settings.toml"):Ie(n,"warp-terminal","settings.toml")}var Gu='"dark"';function Uu(e){return Ie(e,"ttheme","warp.base")}var v$="setTimeout(() => { const fs = require('node:fs'); const [file, next, seen] = process.argv.slice(-3); if (fs.readFileSync(file, 'utf8') !== seen) return; const tmp = file + '.ttheme-' + process.pid; fs.writeFileSync(tmp, next); fs.chmodSync(tmp, fs.statSync(file).mode & 0o7777); fs.renameSync(tmp, file) }, 1500)";function M$(e,n,t,r){let i=jo(n,e);if(!bn(i))return;let o=Uu(e),s=cr(i,"utf8"),u=po(s),c=u?.includes(`path = "${fe("")}`)===!0,a;if(t){if(!c&&!bn(o))$$(y$(o),{recursive:!0}),E$(o,u??"");a=wf(t)}else{if(!c)return;a=bn(o)&&cr(o,"utf8")||Gu,Tu(o,{force:!0})}let h=wo(s,a);if(h===s)return;if(r)Zs(i),w$(process.execPath,["-e",v$,b$(i),h,s],{detached:!0,stdio:"ignore"}).unref();else Xr(i,h);return i}function Rl(e){return Ie(e,"ttheme","kitty.py")}function hr(e,n){let t=Ie(n,".wezterm.lua");return bn(t)?t:Ie(e,"wezterm","wezterm.lua")}function Jo(e){return Ie(e,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function ju(e){return[Ie(e,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),Ie(e,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),Ie(e,"Microsoft","Windows Terminal","settings.json")].filter((n)=>bn(n))}function I$(e){for(let n of e){let t=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(cr(n,"utf8"))?.[1];if(t)return t}return}function Qn(e){return e.startup&&e.palettes.includes(e.startup)?e.startup:e.palettes[0]}function Lt(e,n){return e==="ghostty"?Ie(n,"ghostty","config"):Ie(n,"kitty","kitty.conf")}function Fl(e,n,t,r){return e==="ghostty"?rf(Ie(n,"ttheme"),t,r):hf(t,Rl(n),r)}function Kn(e){return bn(e)?cr(e,"utf8"):""}function Tt(e){return Ie(e,"alacritty","alacritty.toml")}function N$(e,n){return n?Ie(e,"alacritty","themes",`${fe(n)}.toml`):void 0}function Pl(e,n,t,r){let i=Ye(e),o=n.map(cn),s=new Map;for(let c of o){let a=Qh(i,c.name,r);if(a)s.set(c.name,a)}let u=new Set(an(n).map((c)=>c.name));return Nh(o.filter((c)=>u.has(c.name)),s,o.find((c)=>c.name===kn(t)),t.itermBase)}function at(e,n=ar()){let t=ke(e);if(!t.terminals.includes("iterm2"))return;$e(yi(n),Pl(e,Nl(ur(e),t.palettes),t,n))}function nn(e,n,t,r=ar()){On(Ye(e));let i=Nl(Ue(e,n),t.palettes);Lo(e,i);let o=[],s=(h,f)=>{if(o.push(h),bn(h)&&cr(h,"utf8")===f)return!1;return $e(h,f),!0},u=(h,f)=>{o.push(h),Xr(h,f)},c=kn(t);for(let h of t.terminals){if(h==="iterm2"){s(yi(r),Pl(e,i,t,r));continue}if(h==="windows-terminal"){if(t.wtHome){let m=ju(t.wtHome),b=i.map(cn),S=su(b,t.wtProfile??I$(m),c);if(s(Jo(t.wtHome),S)){let I=new Date;for(let k of m)k$(k,I,I)}}continue}let f=c!==void 0&&h==="warp"&&!bn(Ie(Uo(r),`${fe(c)}.yaml`)),l=h==="warp"?M$(e,r,c,f):void 0;for(let m of i)for(let{file:b,content:S}of Ol(h,cn(m)))s(Ie(Ht(h,e,r),b),S);if(h==="warp"){if(l)o.push(l);continue}if(h==="wezterm"){let m=Ie(e,"ttheme","wezterm.lua");s(m,kf({path:m,colors:Ht("wezterm",e,r),backgrounds:Ye(e),...c?{startup:c}:{},palettes:i.map(cn)}));let b=hr(e,r),S=ui(Kn(b),lf(m));if(S!==void 0)u(b,S);continue}if(h==="alacritty"){let m=Tt(e),b=si(Kn(m),N$(e,c));if(b!==void 0)u(m,b);continue}if(h==="kitty")s(Rl(e),Oh({themes:Ht("kitty",e,r),backgrounds:Ye(e)}));let d=Lt(h,e),g=Kn(d);u(d,ri(g,Fl(h,e,c,g)))}let a=Ie(e,"ttheme","palettes.zsh");return $e(a,iu(i,c,t.terminals)),o.push(a),Tu(`${a}.zwc`,{force:!0}),o}function Hl(e,n){return e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}function O$(e){return[...new Set(e.split(`
379
+ `).map((n)=>n.split(/[ =]/)[0]))].join(", ")}function Ll(e,n,t=ar()){let r=kn(n),i=(s)=>Hl(s,t),o=[];for(let s of n.terminals){if(s==="iterm2"){o.push(`write ${i(yi(t))} — a "ttheme · <palette>" profile per palette`);continue}if(s==="windows-terminal"){if(n.wtHome)o.push(`write ${Jo(n.wtHome)} — its schemes, and touch settings.json so it reloads`);continue}if(o.push(`write ${i(Ht(s,e,t))}/${fe("*")} — a theme file per palette`),s==="warp"){let a=jo(t,e);if(r&&bn(a))o.push(`edit ${i(a)} — [appearance.themes] theme; \`ttheme off\` puts yours back`);continue}if(s==="wezterm"){let a=hr(e,t);if(ui(Kn(a),"")!==void 0)o.push(`edit ${i(a)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`);continue}if(s==="alacritty"){let a=Tt(e);if(si(Kn(a),void 0)!==void 0)o.push(`edit ${i(a)} — a ttheme block: general.import`);continue}let u=Lt(s,e),c=Kn(u);o.push(`edit ${i(u)} — a ttheme block: ${O$(Fl(s,e,r,c))}`)}return o}function Al(e,n,t=ar()){let r=[],i=(o)=>Hl(o,t);if(n.includes("ghostty")){let o=Lt("ghostty",e);if(St(Kn(o),"command"))r.push(`${i(o)} sets its own command — ttheme leaves it, so a new tab takes its palette once zsh starts`)}if(n.includes("kitty")){let o=Kn(Lt("kitty",e));if(St(o,"window_logo_scale")||St(o,"window_logo_alpha"))r.push("kitty.conf sets its own window_logo_scale or window_logo_alpha — pictures are drawn with them")}if(n.includes("alacritty")){let o=Tt(e);if(ff(Kn(o)))r.push(`${i(o)} sets its own colors, which win over an imported palette — remove them to open with ttheme's`)}return r}function Ju(e,n,t,r,i=ar()){let o=[],s=Ue(e,n,!1).palettes;for(let u of t)for(let c of s.filter((a)=>r.includes(a.name)))for(let{file:a}of Ol(u,cn(c))){let h=Ie(Ht(u,e,i),a);if(bn(h))Tu(h,{force:!0}),o.push(h)}return o}function ht(e,n,t,r){let i=_n(),o=Boolean(kn(t))!==Boolean(kn(r)),s=o?Ei(r,i):r;return nn(e,n,s),qn(e,s),o&&At(s,i)&&i.running()}var Cl=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,F$=["add","remove","search","init"];function Wl(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function P$(){try{let e=R$("gh",["api","user","--jq",".login"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim().toLowerCase();return Cl.test(e)?e:void 0}catch{return}}async function H$(e,n){if(n.author)return n.author;let t=P$();if(!t){if(!Wl())throw Error("your palettes are named after your GitHub handle — log in with `gh auth login`, or run this in a terminal");let r=await yu({message:"your GitHub handle — your palettes are named <handle>@<market>/<palette>",validate:(i)=>Cl.test((i??"").toLowerCase())&&(i??"").length<=39?void 0:"that is not a GitHub handle"});if(en(r))throw Error("no handle given");t=r.toLowerCase()}return qn(e,{...n,author:t}),console.log(`your palettes are named ${t}@<market>/<palette>`),t}function Zn(e){return`${e} palette${e===1?"":"s"}`}function Cu(e,n){if(n===Ge)return Ge;return Cn(n)?Fn(Nt(n)):$i(n,Ho(e,n))}function Ko(e,n){try{return Cu(e,n)}catch{return}}function Kl(e){return Te(e)??Ge}function qo(e){return He(e).palettes.filter((n)=>Te(n.name)===void 0)}function L$(e){let n=En(import.meta.dirname,"..","dist","manifest.json");return Si(n)?ct(_o(n,"utf8")).palettes:qo(e)}async function _l(e){try{return await ki(ul(e),Fu)}catch(n){if(n instanceof Ao)throw Error(`github.com/${e} has no ${jn} — is the repository public, and has its action run?`);throw n}}function Co(e,n,t){let r=ke(e),i=Jn(r.markets),o=i.find((s)=>s!==n&&Ko(e,s)===t);if(o)throw Error(`${t} already names the market at ${$n(o)} — \`ttheme market remove ${t}\` first`);if(!i.includes(n))qn(e,{...r,markets:[...i,n]});return i}async function A$(e){let n=de(),t=sr(e);if(Jn(ke(n).markets).includes(t)){console.log(`${$n(t)} is already added`);return}if(t===Ge){let o=await ki(Ru,ct);Co(n,t,Ge),wi(n,o),console.log(`added the ttheme catalog — ${Zn(an(o.palettes).length)} · \`ttheme browse\` picks them`);return}if(Cn(t)){let o=Fn(Nt(t));Co(n,t,o);let s=mi(t,o,qo(n)).length;console.log(`added ${o} · ${$n(t)} — ${Zn(s)}, read in place`),console.log("\n`ttheme browse` picks them · `ttheme market build` there writes the index others fetch");return}let r=await _l(t),i=$i(t,r);Co(n,t,i),Wo(En(n,"ttheme","markets"),{recursive:!0}),$e(It(n,t),`${JSON.stringify(r,null,2)}
380
+ `),console.log(`added ${i} · ${$n(t)} — ${Zn(r.palettes.length)}`),console.log(`
381
+ \`ttheme browse\` picks them, or \`ttheme add ${i}/<palette>\``)}function T$(e){let n=de(),t=ke(n),r=Jn(t.markets),i=r.find((c)=>Ko(n,c)===e)??r.find((c)=>c===ql(e));if(!i)throw Error(`no market named ${e} — \`ttheme market\` lists them`);let o=Ko(n,i),s=t.palettes.filter((c)=>Kl(c)===o),u={...t,markets:r.filter((c)=>c!==i)};if(qn(n,u),i===Ge)Tl(Ft(n),{force:!0});else if(Oo(i))Tl(It(n,i),{force:!0});if(nn(n,He(n),u),console.log(`removed ${o??e} · ${$n(i)}`),s.length>0)console.log(`${Zn(s.length)} installed from it keep working — \`ttheme remove\` drops them`)}function ql(e){try{return sr(e)}catch{return}}function G$(e,n){try{if(n===Ge)return an(ct(_o(Ft(e),"utf8")).palettes).length;if(Cn(n))return mi(n,Cu(e,n),qo(e),!1).length;return Ho(e,n).palettes.length}catch{return}}function U$(){let e=de(),n=ke(e),t=Jn(n.markets);if(t.length===0){console.log("no markets — `ttheme market add official` brings the ttheme catalog back");return}let r=t.map((s)=>{let u=Ko(e,s)??"?",c=G$(e,s),a=n.palettes.filter((h)=>Kl(h)===u).length;return{name:u,where:$n(s),note:c===void 0?"unreadable":`${Zn(c)}${a>0?` · ${a} installed`:""}`}}),i=Math.max(...r.map((s)=>s.name.length)),o=Math.max(...r.map((s)=>s.where.length));for(let s of r)console.log(` ${s.name.padEnd(i)} ${s.where.padEnd(o)} ${s.note}`)}async function j$(e){try{let{items:n}=await ki(`https://api.github.com/search/repositories?q=${e}&sort=stars&per_page=50`,(t)=>JSON.parse(t));return n}catch(n){if(n instanceof To)throw Error("GitHub lets a search through about ten times a minute without signing in — try again in a minute");throw n}}async function J$(e){let n=de(),t=encodeURIComponent(`topic:${No}${e?` ${e}`:""}`),r=await j$(t);if(r.length===0){console.log(`no repository carries the ${No} topic${e?` and matches ${e}`:""} yet`);return}let i=new Set(Jn(ke(n).markets)),o=r.map((u)=>{let c=u.owner.login.toLowerCase();return{arg:`${c}/${u.name}`,added:i.has(`${c}/${u.name}`),stars:`★${u.stargazers_count}`,about:u.description??""}}),s=Math.max(...o.map((u)=>u.arg.length));for(let u of o)console.log(` ${u.added?"●":"○"} ${u.arg.padEnd(s)} ${u.stars.padStart(5)} ${u.about}`);console.log("\n`ttheme market add <name>` adds one")}var C$=`name: ttheme market
382
382
 
383
383
  on:
384
384
  push:
@@ -393,28 +393,30 @@ jobs:
393
393
  runs-on: ubuntu-latest
394
394
  steps:
395
395
  - uses: kecan0406/ttheme/market@v1
396
- `;function F$(e,n){Wo($i(e),{recursive:!0}),Wo(kn(e,".github","workflows"),{recursive:!0}),Tl(e,n,[]),$e(kn(e,".github","workflows","ttheme.yml"),R$),$e(kn(e,"README.md"),`# ${n}'s ttheme palettes
396
+ `;function Ql({name:e}){return`ttheme-${e}`}function W$(e,n){Wo(Rt(e),{recursive:!0}),Wo(En(e,".github","workflows"),{recursive:!0}),Zl(e,n,[]),$e(En(e,".github","workflows","ttheme.yml"),C$),$e(En(e,"README.md"),`# ${Fn(n)}
397
397
 
398
- Palettes for [ttheme](https://github.com/kecan0406/ttheme):
398
+ A [ttheme](https://github.com/kecan0406/ttheme) market:
399
399
 
400
400
  \`\`\`sh
401
- ttheme market add ${n}
401
+ ttheme market add ${n.owner}/${Ql(n)}
402
402
  ttheme browse
403
403
  \`\`\`
404
- `)}function Tl(e,n,t){let{version:r,gate:i,placement:o}=ei(),s={version:r,gate:i,placement:o,owner:n,palettes:t};$e(kn(e,jn),`${JSON.stringify(s,null,2)}
405
- `)}async function Gl(e,n){let t=Ot(e);if(n){let o=sr(n),s=t.find((u)=>u.dir===o||u.owner===n);if(!s)throw Error(`${n} is not one of your local markets — \`ttheme market init ${n}\` makes it one`);return s}let[r,...i]=t;if(r&&i.length===0)return r;if(r)throw Error(`you have ${t.length} local markets — --in names one: ${t.map((o)=>o.dir).join(", ")}`);return Ul(e,ur(e))}async function Ul(e,n){let t=!Ii(kn(n,jn)),r=t?await k$(e,ke(e)):Cn(n);if(t){if(Ii(n)&&Hl(n).length>0)throw Error(`${n} is not empty — pick a new folder for the market`);F$(n,r)}return Ko(e,n,r),console.log(`${t?"made":"added"} your market ${r} · ${n}`),{dir:n,owner:r}}async function P$(e){let n=ge(),t=e?sr(e):ur(n);if(!Rn(t))throw Error("market init takes a folder: ttheme market init ./my-palettes");let{owner:r}=await Ul(n,t);console.log(`
406
- \`ttheme new <name> --from <palette>\` puts palettes in it — others see them once it is on GitHub:
404
+ `)}function Zl(e,{owner:n,name:t},r){let{version:i,gate:o,placement:s}=Dr(),u={version:i,gate:o,placement:s,owner:n,name:t,palettes:r};$e(En(e,jn),`${JSON.stringify(u,null,2)}
405
+ `)}function Yl(e){return Nn(`x@${e}/x`)?"takes lowercase letters, digits and single hyphens":void 0}async function Xl(){if(!Wl())throw Error("name the market: ttheme market init <name>, or --in <name> on new");let e=await yu({message:"your market's name — its palettes are <you>@<name>/<palette>",validate:(n)=>Yl((n??"").toLowerCase())});if(en(e))throw Error("no market name given");return e.toLowerCase()}async function Vl(e,n){let t=Ot(e);if(n){let s=t.find((u)=>u.name===n||u.id===n||u.dir===ql(n));if(!s)throw Error(`${n} is not one of your local markets — \`ttheme market init ${n}\` makes it one`);return s}let[r,...i]=t;if(r&&i.length===0)return r;if(r)throw Error(`you have ${t.length} local markets — --in names one: ${t.map((s)=>s.name).join(", ")}`);let o=await Xl();return zl(e,Su(e,o),o)}async function zl(e,n,t){let r=!Si(En(n,jn)),i;if(r){let s=Yl(t);if(s)throw Error(`the market name ${t} ${s}`);if(Si(n)&&jl(n).length>0)throw Error(`${n} is not empty — pick a new folder for the market`);i={owner:await H$(e,ke(e)),name:t},W$(n,i)}else i=Nt(n);let o=Fn(i);return Co(e,n,o),console.log(`${r?"made":"added"} your market ${o} · ${$n(n)}`),{dir:n,...i,id:o}}function Gl(e){return e.startsWith(".")||e.startsWith("/")||e.startsWith("~")}async function K$(e){let n=de(),t=e&&!Gl(e)?e.toLowerCase():e?Jl(sr(e)).toLowerCase():await Xl(),r=e&&Gl(e)?sr(e):Su(n,t),i=await zl(n,r,t),o=`${i.owner}/${Ql(i)}`;console.log(`
406
+ \`ttheme new <palette> --from <palette>\` puts palettes in it — others see them once it is on GitHub:
407
407
 
408
- gh repo create ${r}/${wi} --public --source ${t} --push
409
- gh repo edit ${r}/${wi} --add-topic ${Oo}
408
+ cd ${$n(r)}
409
+ git init -b main && git add -A && git commit -m "${i.id}"
410
+ gh repo create ${o} --public --source . --push
411
+ gh repo edit ${o} --add-topic ${No}
410
412
 
411
- its action rebuilds ${jn} on every push; then \`ttheme market add ${r}\` works anywhere`)}function H$(e){let n=e?sr(e):process.cwd(),t=Cn(n),r=E$(ge()),i=$i(n),o=(Ii(i)?Hl(i).sort():[]).filter((a)=>a.endsWith(".toml")),s=[],u=[];for(let a of o){let h=p$(a,".toml");try{s.push({...Kn(`${h}@${t}`,Ni(kn(i,a),"utf8"),r),name:h})}catch(f){u.push(` ${kn("palettes",a)}: ${f.message}`)}}if(u.length>0)return console.error(`${u.length} palettes cannot be read — the index was left as it was:
412
- ${u.join(`
413
- `)}`),1;let c=s.map(wn);for(let a of c){let f=ki(a).filter((l)=>l.startsWith(" ✗"));console.log(` ${a.name}${f.length>0?`
414
- ${f.join(`
415
- `)}`:" passes the gate"}`)}return Tl(n,t,c),console.log(`
416
- ${t} · ${Yn(c.length)} → ${kn(n,jn)}`),0}async function jl(e,n){switch(e){case void 0:I$();return;case"add":await y$(Pl(e,n));return;case"remove":S$(Pl(e,n));return;case"search":await O$(n);return;case"init":await P$(n);return;case"build":return H$(n);default:throw Error(`unknown market action ${e} — ${w$.join(", ")}, or none to list them`)}}function Pl(e,n){if(!n)throw Error(e==="add"?"market add takes a GitHub handle, a repository or a folder: ttheme market add alice":"market remove takes a market name — `ttheme market` lists them");return n}async function Jl(e,n){if(n===Pe){let r=Ii(Rt(e))?cn(at(Ni(Rt(e),"utf8")).palettes).length:0,i=await Si(Mu,at);Ei(e,i);let o=cn(i.palettes).length;return`${Pe} ${i.version} — ${Yn(o)}${o>r?` (+${o-r})`:""}`}if(Rn(n)){let r=Cn(n);return`${r} — ${Yn(bi(n,r,Qo(e),!1).length)}, read in place`}let t=await Al(n);return Wo(kn(e,"ttheme","markets"),{recursive:!0}),$e(Nt(e,n),`${JSON.stringify(t,null,2)}
417
- `),`${It(n)} — ${Yn(t.palettes.length)}`}import{existsSync as Kl,mkdirSync as Wl,readFileSync as _l,writeFileSync as Y$}from"node:fs";import{homedir as Z$}from"node:os";import{dirname as Ql,join as ql}from"node:path";import{spawn as L$}from"node:child_process";var A$=30000,T$=3,G$=97,U$=`ObjC.import('Vision')
413
+ its action rebuilds ${jn} on every push; then \`ttheme market add ${o}\` works anywhere`)}function _$(e){let n=e?sr(e):process.cwd(),t=Nt(n),r=Fn(t),i=L$(de()),o=Rt(n),s=(Si(o)?jl(o).sort():[]).filter((h)=>h.endsWith(".toml")),u=[],c=[];for(let h of s){let f=Jl(h,".toml");try{u.push({...Wn(`${r}/${f}`,_o(En(o,h),"utf8"),i),name:f})}catch(l){c.push(` ${En("palettes",h)}: ${l.message}`)}}if(c.length>0)return console.error(`${c.length} palettes cannot be read — the index was left as it was:
414
+ ${c.join(`
415
+ `)}`),1;let a=u.map(wn);for(let h of a){let l=pi(h).filter((d)=>d.startsWith(" ✗"));console.log(` ${h.name}${l.length>0?`
416
+ ${l.join(`
417
+ `)}`:" passes the gate"}`)}return Zl(n,t,a),console.log(`
418
+ ${r} · ${Zn(a.length)} → ${En(n,jn)}`),0}async function Bl(e,n){switch(e){case void 0:U$();return;case"add":await A$(Ul(e,n));return;case"remove":T$(Ul(e,n));return;case"search":await J$(n);return;case"init":await K$(n);return;case"build":return _$(n);default:throw Error(`unknown market action ${e} — ${F$.join(", ")}, or none to list them`)}}function Ul(e,n){if(!n)throw Error(e==="add"?"market add takes a repository or a folder: ttheme market add alice/ttheme-dust":"market remove takes a market name — `ttheme market` lists them");return n}async function Dl(e,n){if(n===Ge){let r=Si(Ft(e))?an(ct(_o(Ft(e),"utf8")).palettes).length:0,i=await ki(Ru,ct);wi(e,i);let o=an(i.palettes).length;return`${Ge} ${i.version} — ${Zn(o)}${o>r?` (+${o-r})`:""}`}if(Cn(n)){let r=Cu(e,n);return`${r} — ${Zn(mi(n,r,qo(e),!1).length)}, read in place`}let t=await _l(n);return Wo(En(e,"ttheme","markets"),{recursive:!0}),$e(It(e,n),`${JSON.stringify(t,null,2)}
419
+ `),`${$i(n,t)} — ${Zn(t.palettes.length)}`}import{existsSync as ed,mkdirSync as nd,readFileSync as td,writeFileSync as rb}from"node:fs";import{homedir as ib}from"node:os";import{dirname as rd,join as id}from"node:path";import{spawn as q$}from"node:child_process";var Q$=30000,Z$=3,Y$=97,X$=`ObjC.import('Vision')
418
420
  ObjC.import('CoreImage')
419
421
  ObjC.import('CoreGraphics')
420
422
  function run(argv) {
@@ -433,36 +435,36 @@ function run(argv) {
433
435
  $.CIImage.imageWithCVPixelBuffer(buffer), $.NSURL.fileURLWithPath(argv[1]), $.kCIFormatRGBA8,
434
436
  $.CGColorSpaceCreateWithName($.kCGColorSpaceSRGB), $({}), error)
435
437
  if (!written) throw new Error('write failed')
436
- }`;function Oi(){return process.platform==="darwin"}function qo(e){return e>=T$&&e<=G$}function Yo(e,n,t){return new Promise((r,i)=>{let o=L$("osascript",["-l","JavaScript","-e",U$,e,n],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([t,AbortSignal.timeout(A$)])}),s="";o.stderr.on("data",(u)=>{s+=u}),o.on("error",i),o.on("close",(u)=>{if(u===0){r();return}i(Error(s.trim().split(`
437
- `).at(-1)||`osascript exited ${u}`))})})}import{spawn as j$}from"node:child_process";import{connect as J$,createServer as C$}from"node:net";var K$=20,Cl=22;function Tu(e){let n=new Uint8Array(e.reduce((r,i)=>r+i.length,0)),t=0;for(let r of e)n.set(r,t),t+=r.length;return n}function W$(e,n=K$){let t=e.subarray(5);if(e[0]!==Cl||t.length<2)return[e];let r=Math.max(1,Math.min(n,t.length-1)),i=(o)=>Tu([Uint8Array.from([e[0],e[1],e[2],o.length>>8,o.length&255]),o]);return[i(t.subarray(0,r)),i(t.subarray(r))]}function _$(e,n,t,r){let i=J$(t,n,()=>{i.setNoDelay(!0),e.write(`HTTP/1.1 200 Connection Established\r
438
+ }`;function vi(){return process.platform==="darwin"}function Qo(e){return e>=Z$&&e<=Y$}function Zo(e,n,t){return new Promise((r,i)=>{let o=q$("osascript",["-l","JavaScript","-e",X$,e,n],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([t,AbortSignal.timeout(Q$)])}),s="";o.stderr.on("data",(u)=>{s+=u}),o.on("error",i),o.on("close",(u)=>{if(u===0){r();return}i(Error(s.trim().split(`
439
+ `).at(-1)||`osascript exited ${u}`))})})}import{spawn as V$}from"node:child_process";import{connect as z$,createServer as B$}from"node:net";var D$=20,xl=22;function Wu(e){let n=new Uint8Array(e.reduce((r,i)=>r+i.length,0)),t=0;for(let r of e)n.set(r,t),t+=r.length;return n}function x$(e,n=D$){let t=e.subarray(5);if(e[0]!==xl||t.length<2)return[e];let r=Math.max(1,Math.min(n,t.length-1)),i=(o)=>Wu([Uint8Array.from([e[0],e[1],e[2],o.length>>8,o.length&255]),o]);return[i(t.subarray(0,r)),i(t.subarray(r))]}function eb(e,n,t,r){let i=z$(t,n,()=>{i.setNoDelay(!0),e.write(`HTTP/1.1 200 Connection Established\r
438
440
  \r
439
- `);let o=r,s=!1,u=(c)=>{if(s){i.write(c);return}if(o=Tu([o,c]),o.length<5)return;let a=o[3]*256+o[4];if(o[0]!==Cl){s=!0,i.write(o);return}if(o.length<5+a)return;s=!0;let[h,f]=W$(o.subarray(0,5+a));i.write(h),setTimeout(()=>{if(f)i.write(f);i.write(o.subarray(5+a))},10)};if(e.on("data",u),o.length>0){let c=o;o=new Uint8Array(0),u(c)}i.pipe(e)});i.on("error",()=>e.destroy()),i.on("close",()=>e.destroy()),e.on("error",()=>i.destroy()),e.on("close",()=>i.destroy())}function Q$(e){e.setNoDelay(!0);let n=new Uint8Array(0),t=(r)=>{n=Tu([n,r]);let i=Buffer.from(n).toString("latin1"),o=i.indexOf(`\r
441
+ `);let o=r,s=!1,u=(c)=>{if(s){i.write(c);return}if(o=Wu([o,c]),o.length<5)return;let a=o[3]*256+o[4];if(o[0]!==xl){s=!0,i.write(o);return}if(o.length<5+a)return;s=!0;let[h,f]=x$(o.subarray(0,5+a));i.write(h),setTimeout(()=>{if(f)i.write(f);i.write(o.subarray(5+a))},10)};if(e.on("data",u),o.length>0){let c=o;o=new Uint8Array(0),u(c)}i.pipe(e)});i.on("error",()=>e.destroy()),i.on("close",()=>e.destroy()),e.on("error",()=>i.destroy()),e.on("close",()=>i.destroy())}function nb(e){e.setNoDelay(!0);let n=new Uint8Array(0),t=(r)=>{n=Wu([n,r]);let i=Buffer.from(n).toString("latin1"),o=i.indexOf(`\r
440
442
  \r
441
443
  `);if(o===-1)return;e.off("data",t);let s=/^CONNECT ([^ :]+):(\d+)/.exec(i);if(!s){e.end(`HTTP/1.1 405 Method Not Allowed\r
442
444
  \r
443
- `);return}_$(e,s[1],Number(s[2]),n.subarray(o+4))};e.on("data",t),e.on("error",()=>e.destroy())}function q$(){let e=C$(Q$);return new Promise((n,t)=>{e.once("error",t),e.listen(0,"127.0.0.1",()=>{n({port:e.address().port,close:()=>{e.close(),e.unref()}})})})}function Ri(){if(process.versions.bun)return!0;let[e=0,n=0]=process.versions.node.split(".").map(Number);return e>22||e===22&&n>=21}async function Fi(){if(!Ri())return process.stderr.write(`unblock needs node 22.21 or newer — this is ${process.versions.node}
444
- `),1;let e=await q$(),n=j$(process.execPath,process.argv.slice(1),{stdio:"inherit",env:{...process.env,NODE_USE_ENV_PROXY:"1",NODE_NO_WARNINGS:"1",HTTPS_PROXY:`http://127.0.0.1:${e.port}`,NO_PROXY:[process.env.NO_PROXY,eh()].filter(Boolean).join(","),TTHEME_FIND_PROXY:String(e.port)}}),t=await new Promise((r)=>n.on("exit",(i)=>r(i??1)));return e.close(),t}function Pi(){return process.env.TTHEME_FIND_UNBLOCK==="1"&&!process.env.TTHEME_FIND_PROXY}var X$=90000;function Gu(e,n){let t=Ze(e),r=xr(e,n).flatMap((i)=>{let[,o,s]=/^([a-z.]+)_(\d+)$/.exec(i.key)??[];return o&&s&&x.some((u)=>u.key===o)?[{site:o,id:Number(s),..._h(t,i)}]:[]});return r.length>0?r:void 0}function V$(e,n){let t=new Set(Nn(Ze(e)).palettes[n.name]?.pictures.map((r)=>r.key));return(n.pictures??[]).filter((r)=>!t.has(St(r)))}function Zo(e,n){let t=new Set((n??[]).map((r)=>St(r)));return{...e,pictures:(e.pictures??[]).filter((r)=>!t.has(St(r)))}}function z$(e){return{name:e.name,background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selection,ansi:e.ansi,...e.waived?{waived:e.waived}:{}}}async function B$(e,n,t,r,i){let o=x.find((g)=>g.key===t.site);if(!o)throw Error(`no site called ${t.site}`);let s=await Wr(o,t.id,i);if(!s)throw Error("the post is gone");if(!uo(o,s,Zt(process.env.TTHEME_FIND_RATING))||so(s,Xt(process.env.TTHEME_FIND_BLOCK)).length>0)throw Error("outside your find filters — TTHEME_FIND_RATING and TTHEME_FIND_BLOCK");let u=kt(s);if(!u)throw Error("too large to use");let c=ql(pn(o),"orig",`${t.id}.${u.ext}`),a;if(Kl(c))a=new Uint8Array(_l(c));else a=await ao(o,u.file,i),Wl(Ql(c),{recursive:!0}),Y$(c,a);let h=Tr(a,vn);if(Dn(h)===0&&Oi()&&process.env.TTHEME_FIND_REMOVE_BG!=="off"){let g=ql(pn(o),"cut",`${t.id}.png`);try{if(!Kl(g))Wl(Ql(g),{recursive:!0}),await Yo(c,g,i);let m=Tr(new Uint8Array(_l(g)),vn);if(qo(Dn(m)))h=m}catch{}}let f=z$(n);go(e,f,xt(f,n.signatureSlots),h,{site:o.key,id:t.id,ext:u.ext,bytes:a,from:`${o.name} ${t.id} ${o.pageUrl(t.id)}`},{width:0,height:0});let l=xr(e,n.name).find((g)=>g.key===St(t));if(l)Qh(Ze(e),l,t,r,Z$())}async function D$(e,n,t,r){let i=0;for(let s of V$(e,n)){let u=`${n.name} · ${x.find((c)=>c.key===s.site)?.name??s.site} ${s.id}`;try{await B$(e,n,s,t,AbortSignal.timeout(X$)),r(` ▣ ${u}`),i++}catch(c){r(` ▢ ${u} — ${c instanceof Error?c.message:String(c)}`)}}let[o]=n.pictures??[];if(i>0&&o)Wh(e,n.name,St(o));return i}async function Tt(e,n,t){let r=0;for(let i of n)r+=await D$(e,i,!t.includes("iterm2"),(o)=>console.log(o));if(r>0)ht(e)}function sb(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function Xl(e,n){if(e.includes("@"))return e;let[t,...r]=Ot(n,!1);return t&&r.length===0?`${e}@${t.owner}`:e}function ub(e,n,t){let r=ke(e),i=t.filter((o)=>!r.palettes.includes(o));if(i.length>0)ft(e,n,r,{...r,palettes:[...r.palettes,...i]});else if(t.some((o)=>r.palettes.includes(o)))en(e,n,r);return{state:r,fresh:i}}function cb(e){let n=Math.max(0,...e.map((t)=>t.slot.length));return e.map((t)=>` ${t.slot.padEnd(n)} ${t.from} → ${t.to} ${t.rule}`)}function Vl(e,n,t){let r=ul(n),i=wn(Kn(r.name,Su(r),t.palettes)),o=Ge(e,t,!1).palettes.find((s)=>s.name===i.name);if(o&&JSON.stringify(o)!==JSON.stringify(i))throw Error(`${i.name} is already in ${je(i.name)??"the ttheme catalog"} and differs — \`ttheme add ${i.name}\` wears that one`);if(!o)Ao(e,[...yi(e),i]);return i.name}async function zl(e,n,t){let r=ge(),i=Le(r),o=ke(r),s=await Gl(r,t),u=e.includes("@")?e:`${e}@${s.owner}`,c=Gn(u);if(c)throw Error(`${u} ${c}`);if(je(u)!==s.owner)throw Error(`palettes in ${s.dir} are named <palette>@${s.owner} — ${u} is someone else's`);let a=Eu(r,u);if(Vo(a))throw Error(`${u} already exists — \`ttheme edit ${u}\` changes it`);let h=Ge(r,i),f=n??qn(o);if(!f)throw Error("--from names the palette to start from");let l=Ft(h.palettes,f),g=je(l.name)?l.base:l.default?void 0:l.name,{base:m,ansiSource:d,...b}=yu(l,u,`kept from ${l.name}`),y=Gu(r,l.name)??l.pictures,I=Su({...b,...g?{base:g}:{},...y?{pictures:y}:{}});Kn(u,I,i.palettes),eb(Zl(a),{recursive:!0}),$e(a,I);let{state:k}=ub(r,i,[u]);console.log(` + ${u} from ${l.name}
445
- ${a}`),await Tt(r,Ge(r,i).palettes.filter((S)=>S.name===u),k.terminals),console.log(`
446
- \`ttheme edit ${u}\` changes its colors · \`ttheme use ${u}\` wears it`)}function ab(e){let n=process.env.VISUAL||process.env.EDITOR||"vi",t=x$("sh",["-c",`${n} "$1"`,"sh",e],{stdio:"inherit"});if(t.status!==0)throw Error(`${n} exited ${t.status??t.signal}`)}function hb(e,n,t){let r=wn(Kn(e,n,t.palettes));return Iu(r).length>0?ki(r).filter((i)=>i.startsWith(" ✗")):[]}async function Bl(e){let n=ge(),t=Le(n),r=ke(n),i=Ge(n,t,!1),o=i.palettes.some((l)=>l.name===e)?e:Xl(e,n),s=Uu(n,o);if(!s||!Vo(s)){let l=i.palettes.some((g)=>g.name===o);throw Error(l?`${o} is not one of yours — \`ttheme new <name> --from ${o}\` makes your own copy`:`no palette of yours called ${o} — \`ttheme new\` makes one`)}if(!sb())throw Error("edit opens your editor — run it in a terminal");let u=Xo(s,"utf8"),c=Yl(nb(Yl(ib(),"ttheme-edit-")),ob(s));rb(c,u);let a=[];try{for(;;){ab(c);let l=Xo(c,"utf8");if(l===u){console.log("nothing changed");return}try{a=hb(o,l,t)}catch(g){console.log(`
447
- ${g.message}
448
- `);let m=await st({message:`${o} cannot be read like this — edit it again?`});if(an(m)||!m){console.log("kept the old one");return}continue}$e(s,l);break}}finally{tb(Zl(c),{recursive:!0,force:!0})}if(r.palettes.includes(o))en(n,t,r);if(console.log(`saved ${o}${r.palettes.includes(o)?" — new tabs and `ttheme use` wear it":` — \`ttheme add ${o}\` installs it`}`),a.length>0)console.log(`
445
+ `);return}eb(e,s[1],Number(s[2]),n.subarray(o+4))};e.on("data",t),e.on("error",()=>e.destroy())}function tb(){let e=B$(nb);return new Promise((n,t)=>{e.once("error",t),e.listen(0,"127.0.0.1",()=>{n({port:e.address().port,close:()=>{e.close(),e.unref()}})})})}function Mi(){if(process.versions.bun)return!0;let[e=0,n=0]=process.versions.node.split(".").map(Number);return e>22||e===22&&n>=21}async function Ii(){if(!Mi())return process.stderr.write(`unblock needs node 22.21 or newer — this is ${process.versions.node}
446
+ `),1;let e=await tb(),n=V$(process.execPath,process.argv.slice(1),{stdio:"inherit",env:{...process.env,NODE_USE_ENV_PROXY:"1",NODE_NO_WARNINGS:"1",HTTPS_PROXY:`http://127.0.0.1:${e.port}`,NO_PROXY:[process.env.NO_PROXY,uh()].filter(Boolean).join(","),TTHEME_FIND_PROXY:String(e.port)}}),t=await new Promise((r)=>n.on("exit",(i)=>r(i??1)));return e.close(),t}function Ni(){return process.env.TTHEME_FIND_UNBLOCK==="1"&&!process.env.TTHEME_FIND_PROXY}var ob=90000;function Ku(e,n){let t=Ye(e),r=Br(e,n).flatMap((i)=>{let[,o,s]=/^([a-z.]+)_(\d+)$/.exec(i.key)??[];return o&&s&&x.some((u)=>u.key===o)?[{site:o,id:Number(s),...Vh(t,i)}]:[]});return r.length>0?r:void 0}function sb(e,n){let t=new Set(On(Ye(e)).palettes[n.name]?.pictures.map((r)=>r.key));return(n.pictures??[]).filter((r)=>!t.has(yt(r)))}function Yo(e,n){let t=new Set((n??[]).map((r)=>yt(r)));return{...e,pictures:(e.pictures??[]).filter((r)=>!t.has(yt(r)))}}function ub(e){return{name:e.name,background:e.background,foreground:e.foreground,cursor:e.cursor,selection:e.selection,ansi:e.ansi,...e.waived?{waived:e.waived}:{}}}async function cb(e,n,t,r,i){let o=x.find((d)=>d.key===t.site);if(!o)throw Error(`no site called ${t.site}`);let s=await Cr(o,t.id,i);if(!s)throw Error("the post is gone");if(!oo(o,s,Xt(process.env.TTHEME_FIND_RATING))||io(s,Vt(process.env.TTHEME_FIND_BLOCK)).length>0)throw Error("outside your find filters — TTHEME_FIND_RATING and TTHEME_FIND_BLOCK");let u=bt(s);if(!u)throw Error("too large to use");let c=id(pn(o),"orig",`${t.id}.${u.ext}`),a;if(ed(c))a=new Uint8Array(td(c));else a=await uo(o,u.file,i),nd(rd(c),{recursive:!0}),rb(c,a);let h=Lr(a,vn);if(Dn(h)===0&&vi()&&process.env.TTHEME_FIND_REMOVE_BG!=="off"){let d=id(pn(o),"cut",`${t.id}.png`);try{if(!ed(d))nd(rd(d),{recursive:!0}),await Zo(c,d,i);let g=Lr(new Uint8Array(td(d)),vn);if(Qo(Dn(g)))h=g}catch{}}let f=ub(n);fo(e,f,er(f,n.signatureSlots),h,{site:o.key,id:t.id,ext:u.ext,bytes:a,from:`${o.name} ${t.id} ${o.pageUrl(t.id)}`},{width:0,height:0});let l=Br(e,n.name).find((d)=>d.key===yt(t));if(l)zh(Ye(e),l,t,r,ib())}async function ab(e,n,t,r){let i=0;for(let s of sb(e,n)){let u=`${n.name} · ${x.find((c)=>c.key===s.site)?.name??s.site} ${s.id}`;try{await cb(e,n,s,t,AbortSignal.timeout(ob)),r(` ▣ ${u}`),i++}catch(c){r(` ▢ ${u} — ${c instanceof Error?c.message:String(c)}`)}}let[o]=n.pictures??[];if(i>0&&o)Xh(e,n.name,yt(o));return i}async function Gt(e,n,t){let r=0;for(let i of n)r+=await ab(e,i,!t.includes("iterm2"),(o)=>console.log(o));if(r>0)at(e)}function wb(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function sd(e,n){if(e.includes("/"))return e;let t=Ot(n,!1),r=t.filter((o)=>fr(_u(Rt(o.dir),`${e}.toml`))),[i]=r.length===1?r:t.length===1?t:[];return i?`${i.id}/${e}`:e}function $b(e,n,t){let r=ke(e),i=t.filter((o)=>!r.palettes.includes(o));if(i.length>0)ht(e,n,r,{...r,palettes:[...r.palettes,...i]});else if(t.some((o)=>r.palettes.includes(o)))nn(e,n,r);return{state:r,fresh:i}}function bb(e){let n=Math.max(0,...e.map((t)=>t.slot.length));return e.map((t)=>` ${t.slot.padEnd(n)} ${t.from} → ${t.to} ${t.rule}`)}function ud(e,n,t){let r=dl(n),i=wn(Wn(r.name,Nu(r),t.palettes)),o=Ue(e,t,!1).palettes.find((s)=>s.name===i.name);if(o&&JSON.stringify(o)!==JSON.stringify(i))throw Error(`${i.name} is already in ${Te(i.name)??"the ttheme catalog"} and differs — \`ttheme add ${i.name}\` wears that one`);if(!o)Lo(e,[...bi(e),i]);return i.name}async function cd(e,n,t){let r=de(),i=He(r),o=ke(r),s=await Vl(r,t),u=e.includes("/")?e:`${s.id}/${e}`,c=Nn(u);if(c)throw Error(`${u} ${c}`);if(Te(u)!==s.id)throw Error(`palettes in ${s.dir} are named ${s.id}/<palette> — ${u} belongs elsewhere`);let a=Mu(r,u);if(fr(a))throw Error(`${u} already exists — \`ttheme edit ${u}\` changes it`);let h=Ue(r,i),f=n??Qn(o);if(!f)throw Error("--from names the palette to start from");let l=Pt(h.palettes,f),d=Te(l.name)?l.base:l.default?void 0:l.name,{base:g,ansiSource:m,group:b,...S}=Iu(l,u,`kept from ${l.name}`),I=Ku(r,l.name)??l.pictures,k=Nu({...S,...d?{base:d}:{},...I?{pictures:I}:{}});Wn(u,k,i.palettes),fb(od(a),{recursive:!0}),$e(a,k);let{state:y}=$b(r,i,[u]);console.log(` + ${u} from ${l.name}
447
+ ${a}`),await Gt(r,Ue(r,i).palettes.filter((p)=>p.name===u),y.terminals),console.log(`
448
+ \`ttheme edit ${u}\` changes its colors · \`ttheme use ${u}\` wears it`)}function kb(e){let n=process.env.VISUAL||process.env.EDITOR||"vi",t=hb("sh",["-c",`${n} "$1"`,"sh",e],{stdio:"inherit"});if(t.status!==0)throw Error(`${n} exited ${t.status??t.signal}`)}function Eb(e,n,t){let r=wn(Wn(e,n,t.palettes));return Pu(r).length>0?pi(r).filter((i)=>i.startsWith(" ✗")):[]}async function ad(e){let n=de(),t=He(n),r=ke(n),i=Ue(n,t,!1),o=sd(e,n),s=Vo(n,o),u=s&&fr(s)?o:i.palettes.some((g)=>g.name===e)?e:o,c=Vo(n,u);if(!c||!fr(c)){let g=i.palettes.some((m)=>m.name===u);throw Error(g?`${u} is not one of yours — \`ttheme new <name> --from ${u}\` makes your own copy`:`no palette of yours called ${u} — \`ttheme new\` makes one`)}if(!wb())throw Error("edit opens your editor — run it in a terminal");let a=Xo(c,"utf8"),h=_u(lb(_u(mb(),"ttheme-edit-")),pb(c));gb(h,a);let f=[];try{for(;;){kb(h);let g=Xo(h,"utf8");if(g===a){console.log("nothing changed");return}try{f=Eb(u,g,t)}catch(m){console.log(`
449
+ ${m.message}
450
+ `);let b=await st({message:`${u} cannot be read like this — edit it again?`});if(en(b)||!b){console.log("kept the old one");return}continue}$e(c,g);break}}finally{db(od(h),{recursive:!0,force:!0})}if(r.palettes.includes(u))nn(n,t,r);if(console.log(`saved ${u}${r.palettes.includes(u)?" — new tabs and `ttheme use` wear it":` — \`ttheme add ${u}\` installs it`}`),f.length>0)console.log(`
449
451
  it misses the contrast gate:
450
- ${a.join(`
452
+ ${f.join(`
451
453
  `)}
452
- \`ttheme check --fix ${o}\` suggests colors that pass`);let h=Ge(n,t).palettes.find((l)=>l.name===o),f=wn(Kn(o,u,t.palettes));if(h&&xr(n,o).length>0&&(h.background!==f.background||h.backdrop.color!==f.backdrop.color))console.log("its pictures keep the old tint — reinstall one from `ttheme preview` → tab to retint it");if(h&&r.palettes.includes(o))await Tt(n,[Zo(h,f.pictures)],r.terminals)}function Dl(e,n,t){return Ft(e.palettes,e.palettes.some((r)=>r.name===n)?n:Xl(n,t))}function xl(e,n=!1){let t=ge(),r=Le(t),i=ke(t),o=Dl(Ge(t,r),e,t);if(console.log(`${o.name} · ${o.group}
453
- `),console.log(ki(o).join(`
454
- `)),Iu(o).length===0)return console.log(`
455
- passes the gate`),0;let{theme:u,moves:c,left:a}=kl(un(o));if(c.length===0)return console.log(`
454
+ \`ttheme check --fix ${u}\` suggests colors that pass`);let l=Ue(n,t).palettes.find((g)=>g.name===u),d=wn(Wn(u,a,t.palettes));if(l&&Br(n,u).length>0&&(l.background!==d.background||l.backdrop.color!==d.backdrop.color))console.log("its pictures keep the old tint — reinstall one from `ttheme preview` → tab to retint it");if(l&&r.palettes.includes(u))await Gt(n,[Yo(l,d.pictures)],r.terminals)}function hd(e,n,t){return Pt(e.palettes,e.palettes.some((r)=>r.name===n)?n:sd(n,t))}function fd(e,n=!1){let t=de(),r=He(t),i=ke(t),o=hd(Ue(t,r),e,t);if(console.log(`${o.name} · ${o.group}
455
+ `),console.log(pi(o).join(`
456
+ `)),Pu(o).length===0)return console.log(`
457
+ passes the gate`),0;let{theme:u,moves:c,left:a}=Ml(cn(o));if(c.length===0)return console.log(`
456
458
  no color change fixes it — waive the rule in [contrast] with a reason, or pick other colors`),1;console.log(`
457
459
  ${a.length===0?"these colors pass":"these colors come closer"}:
458
- ${cb(c).join(`
459
- `)}`);let h=Uu(t,o.name);if(!h||!Vo(h))return console.log(`
460
+ ${bb(c).join(`
461
+ `)}`);let h=Vo(t,o.name);if(!h||!fr(h))return console.log(`
460
462
  \`ttheme new <name> --from ${o.name}\` makes a copy you can fix`),1;if(!n)return console.log(`
461
- \`ttheme check --fix ${o.name}\` writes them`),1;if($e(h,cl(Xo(h,"utf8"),u)),i.palettes.includes(o.name))en(t,r,i);return console.log(`
462
- wrote ${h}`),a.length===0?0:1}function Uu(e,n){let t=je(n);return t&&Ot(e,!1).some((r)=>r.owner===t)?Eu(e,n):void 0}function fb(e,n){let t=Uu(e,n.name),r=t&&Vo(t)?Kn(n.name,Xo(t,"utf8"),[n]).waiveReason:void 0,i=Gu(e,n.name)??n.pictures,{pictures:o,...s}=yu(n,n.name,r);return{...s,...i?{pictures:i}:{}}}function eg(e){let n=ge(),t=sl(fb(n,Dl(Ge(n,Le(n)),e,n)));if(console.log(t),process.stdout.isTTY)console.error(`
463
- anyone with ttheme wears it with: ttheme add ${ct}…`)}import{spawn as fk}from"node:child_process";import{createHash as Vg}from"node:crypto";import{existsSync as gr,mkdirSync as Ti,mkdtempSync as lk,readFileSync as zg,rmSync as zu,statSync as gk,writeFileSync as Gi}from"node:fs";import{tmpdir as dk}from"node:os";import{dirname as os,join as Ln}from"node:path";import{pathToFileURL as mk}from"node:url";import{execFile as lb}from"node:child_process";import{createHash as ig}from"node:crypto";import{existsSync as gb,mkdtempSync as db,readFileSync as xo,rmSync as mb,statSync as og,writeFileSync as sg}from"node:fs";import{homedir as pb,tmpdir as wb}from"node:os";import{join as zo}from"node:path";import{fileURLToPath as $b}from"node:url";import{promisify as bb}from"node:util";var Fn=bb(lb),Bo=67108864,kb=4096,Cu=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],Eb=["text/uri-list","text/plain;charset=utf-8","text/plain"],ju=[...Cu,"text/uri-list","text/plain"];function yb(e){try{return og(e).isFile()}catch{return!1}}function Sb(e){let n=[],t="",r="",i=!1;for(let o=0;o<e.length;o++){let s=e[o];if(r==="'")if(s==="'")r="";else t+=s;else if(r==='"')if(s==='"')r="";else if(s==="\\"&&'"\\$`'.includes(e[o+1]??""))t+=e[++o];else t+=s;else if(s==="\\"&&o+1<e.length)t+=e[++o],i=!0;else if(s==="'"||s==='"')r=s,i=!0;else if(/\s/.test(s)){if(i)n.push(t);t="",i=!1}else t+=s,i=!0}if(i)n.push(t);return n}function ng(e){if(/^file:\/\//i.test(e))try{return $b(e)}catch{return}if(e.startsWith("~/"))return zo(pb(),e.slice(2));return e.startsWith("/")?e:void 0}function es(e,n=yb){let t=[];for(let r of e.replace(/\r\n?/g,`
463
+ \`ttheme check --fix ${o.name}\` writes them`),1;if($e(h,gl(Xo(h,"utf8"),u)),i.palettes.includes(o.name))nn(t,r,i);return console.log(`
464
+ wrote ${h}`),a.length===0?0:1}function Vo(e,n){let t=Te(n);return t&&Ot(e,!1).some((r)=>r.id===t)?Mu(e,n):void 0}function yb(e,n){let t=Vo(e,n.name),r=t&&fr(t)?Wn(n.name,Xo(t,"utf8"),[n]).waiveReason:void 0,i=Ku(e,n.name)??n.pictures,{pictures:o,...s}=Iu(n,n.name,r);return{...s,...i?{pictures:i}:{}}}function ld(e){let n=de(),t=ll(yb(n,hd(Ue(n,He(n)),e,n)));if(console.log(t),process.stdout.isTTY)console.error(`
465
+ anyone with ttheme wears it with: ttheme add ${ut}…`)}import{spawn as yk}from"node:child_process";import{createHash as ug}from"node:crypto";import{existsSync as dr,mkdirSync as Pi,mkdtempSync as Sk,readFileSync as cg,rmSync as tc,statSync as vk,writeFileSync as Hi}from"node:fs";import{tmpdir as Mk}from"node:os";import{dirname as os,join as An}from"node:path";import{pathToFileURL as Ik}from"node:url";import{execFile as Sb}from"node:child_process";import{createHash as pd}from"node:crypto";import{existsSync as vb,mkdtempSync as Mb,readFileSync as xo,rmSync as Ib,statSync as wd,writeFileSync as $d}from"node:fs";import{homedir as Nb,tmpdir as Ob}from"node:os";import{join as zo}from"node:path";import{fileURLToPath as Rb}from"node:url";import{promisify as Fb}from"node:util";var Pn=Fb(Sb),Bo=67108864,Pb=4096,Zu=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],Hb=["text/uri-list","text/plain;charset=utf-8","text/plain"],qu=[...Zu,"text/uri-list","text/plain"];function Lb(e){try{return wd(e).isFile()}catch{return!1}}function Ab(e){let n=[],t="",r="",i=!1;for(let o=0;o<e.length;o++){let s=e[o];if(r==="'")if(s==="'")r="";else t+=s;else if(r==='"')if(s==='"')r="";else if(s==="\\"&&'"\\$`'.includes(e[o+1]??""))t+=e[++o];else t+=s;else if(s==="\\"&&o+1<e.length)t+=e[++o],i=!0;else if(s==="'"||s==='"')r=s,i=!0;else if(/\s/.test(s)){if(i)n.push(t);t="",i=!1}else t+=s,i=!0}if(i)n.push(t);return n}function dd(e){if(/^file:\/\//i.test(e))try{return Rb(e)}catch{return}if(e.startsWith("~/"))return zo(Nb(),e.slice(2));return e.startsWith("/")?e:void 0}function es(e,n=Lb){let t=[];for(let r of e.replace(/\r\n?/g,`
464
466
  `).split(`
465
- `)){let i=ng(r.trim());if(i&&n(i)){t.push(i);continue}for(let o of Sb(r)){if(/^https?:\/\/\S+$/i.test(o)){t.push(o);continue}let s=ng(o);if(s&&n(s))t.push(s)}}return t}function vb(e){if(e[0]!==255||e[1]!==216)return null;let n=2;while(n+9<e.length){if(e[n]!==255){n++;continue}let t=e[n+1];if(t===255){n++;continue}let r=e[n+2]<<8|e[n+3];if(t>=192&&t<=207&&t!==196&&t!==200&&t!==204)return{height:e[n+5]<<8|e[n+6],width:e[n+7]<<8|e[n+8]};n+=2+r}return null}function tg(e){let n=Ar(e)?Gr(e):vb(e);if(!n)return;return{ext:Ar(e)?"png":"jpg",width:n.width,height:n.height}}async function Do(e,n){let t=tg(e);if(t&&t.width*t.height<=vn)return{bytes:e,...t,source:n};if(process.platform!=="darwin")throw Error(t?`${t.width}×${t.height} is over ${vn/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=db(zo(wb(),"ttheme-attach-"));try{let i=zo(r,"in"),o=zo(r,"out.png");sg(i,e);let s=!t||t.width*t.height>vn?["--resampleHeightWidthMax",String(kb)]:[];await Fn("sips",["-s","format","png",...s,i,"--out",o]).catch(()=>{throw Error("that is not a picture macOS can read")});let u=new Uint8Array(xo(o)),c=tg(u);if(!c)throw Error("that is not a picture macOS can read");return{bytes:u,...c,source:n}}finally{mb(r,{recursive:!0,force:!0})}}async function Ku(e,n){if(/^https?:\/\//i.test(e)){let t=await fetch(e,{headers:{"User-Agent":Js},signal:n});if(!t.ok)throw Error(`${new URL(e).host} answered ${t.status}`);if(Number(t.headers.get("content-length")??0)>Bo)throw Error("that picture is over 64 MB");let r=new Uint8Array(await t.arrayBuffer());if(/^text\/html/i.test(t.headers.get("content-type")??""))throw Error(`${new URL(e).host} sent a web page, not a picture — copy the image address instead`);return Do(r,e)}if(og(e).size>Bo)throw Error("that picture is over 64 MB");return Do(new Uint8Array(xo(e)),e)}var ug=new Map,ns={key:"local",name:"local",origin:"file://",moved:!1,cutouts:"",best:"",tagBudget:0,vouched:!0,tunneled:!1,ansi:7,ratings:{safe:new Set,questionable:new Set,explicit:new Set},rate:()=>"",postsUrl:()=>"",countUrl:()=>"",postUrl:()=>"",pageUrl:(e)=>ug.get(e)??"",parse:()=>[],count:()=>0};function cg(e){if(/^https?:\/\//i.test(e))return"";return e.split("/").pop()??e}function ag(e,n){ug.set(e,n)}function hg(e){return Number.parseInt(ig("sha1").update(e).digest("hex").slice(0,8),16)%Tn}var Mb=`ObjC.import('AppKit')
467
+ `)){let i=dd(r.trim());if(i&&n(i)){t.push(i);continue}for(let o of Ab(r)){if(/^https?:\/\/\S+$/i.test(o)){t.push(o);continue}let s=dd(o);if(s&&n(s))t.push(s)}}return t}function Tb(e){if(e[0]!==255||e[1]!==216)return null;let n=2;while(n+9<e.length){if(e[n]!==255){n++;continue}let t=e[n+1];if(t===255){n++;continue}let r=e[n+2]<<8|e[n+3];if(t>=192&&t<=207&&t!==196&&t!==200&&t!==204)return{height:e[n+5]<<8|e[n+6],width:e[n+7]<<8|e[n+8]};n+=2+r}return null}function gd(e){let n=Hr(e)?Ar(e):Tb(e);if(!n)return;return{ext:Hr(e)?"png":"jpg",width:n.width,height:n.height}}async function Do(e,n){let t=gd(e);if(t&&t.width*t.height<=vn)return{bytes:e,...t,source:n};if(process.platform!=="darwin")throw Error(t?`${t.width}×${t.height} is over ${vn/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=Mb(zo(Ob(),"ttheme-attach-"));try{let i=zo(r,"in"),o=zo(r,"out.png");$d(i,e);let s=!t||t.width*t.height>vn?["--resampleHeightWidthMax",String(Pb)]:[];await Pn("sips",["-s","format","png",...s,i,"--out",o]).catch(()=>{throw Error("that is not a picture macOS can read")});let u=new Uint8Array(xo(o)),c=gd(u);if(!c)throw Error("that is not a picture macOS can read");return{bytes:u,...c,source:n}}finally{Ib(r,{recursive:!0,force:!0})}}async function Yu(e,n){if(/^https?:\/\//i.test(e)){let t=await fetch(e,{headers:{"User-Agent":Js},signal:n});if(!t.ok)throw Error(`${new URL(e).host} answered ${t.status}`);if(Number(t.headers.get("content-length")??0)>Bo)throw Error("that picture is over 64 MB");let r=new Uint8Array(await t.arrayBuffer());if(/^text\/html/i.test(t.headers.get("content-type")??""))throw Error(`${new URL(e).host} sent a web page, not a picture — copy the image address instead`);return Do(r,e)}if(wd(e).size>Bo)throw Error("that picture is over 64 MB");return Do(new Uint8Array(xo(e)),e)}var bd=new Map,ns={key:"local",name:"local",origin:"file://",moved:!1,cutouts:"",best:"",tagBudget:0,vouched:!0,tunneled:!1,ansi:7,ratings:{safe:new Set,questionable:new Set,explicit:new Set},rate:()=>"",postsUrl:()=>"",countUrl:()=>"",postUrl:()=>"",pageUrl:(e)=>bd.get(e)??"",parse:()=>[],count:()=>0};function kd(e){if(/^https?:\/\//i.test(e))return"";return e.split("/").pop()??e}function Ed(e,n){bd.set(e,n)}function yd(e){return Number.parseInt(pd("sha1").update(e).digest("hex").slice(0,8),16)%Gn}var Gb=`ObjC.import('AppKit')
466
468
  function run(argv) {
467
469
  const pb = $.NSPasteboard.generalPasteboard
468
470
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -487,16 +489,16 @@ function run(argv) {
487
489
  if (web && web.count > 0) return web.objectAtIndex(0).absoluteString.js
488
490
  const text = pb.stringForType('public.utf8-plain-text')
489
491
  return text && !text.isNil() ? text.js : ''
490
- }`,Ib=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
492
+ }`,Ub=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
491
493
  $c = [Windows.Forms.Clipboard]
492
494
  $f = $c::GetFileDropList(); if ($f.Count) { $f; exit }
493
495
  $p = Join-Path $env:TEMP 'ttheme-clipboard.png'
494
496
  $s = $c::GetData('PNG'); if ($s -is [IO.MemoryStream]) { [IO.File]::WriteAllBytes($p, $s.ToArray()); $p; exit }
495
497
  $i = $c::GetImage(); if ($i) { $i.Save($p, [Drawing.Imaging.ImageFormat]::Png); $p; exit }
496
- $c::GetText()`;function fg(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(xo("/proc/version","utf8"))}catch{return!1}}async function Nb(e){let n=Boolean(process.env.WAYLAND_DISPLAY),t=n?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await Fn(t[0],t[1])).stdout.split(`
497
- `).map((s)=>s.trim()),i=(s)=>n?Fn("wl-paste",["--no-newline","--type",s],{encoding:"buffer",maxBuffer:Bo}):Fn("xclip",["-selection","clipboard","-t",s,"-o"],{encoding:"buffer",maxBuffer:Bo});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let o=Cu.find((s)=>r.includes(s));if(o)return sg(e,(await i(o)).stdout),{image:e};return{text:r.some((s)=>s.startsWith("text/plain")||s==="UTF8_STRING")?(await i(r.includes("text/plain")?"text/plain":"UTF8_STRING")).stdout.toString("utf8"):""}}function Wu(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function lg(e){if(process.platform==="darwin"){let n=(await Fn("osascript",["-l","JavaScript","-e",Mb,e])).stdout.trim();return n===e?{image:e}:{text:n}}if(fg()){let n=(await Fn("powershell.exe",["-NoProfile","-STA","-Command",Ib])).stdout.replace(/\r/g,"").trim(),t=await Promise.all(n.split(`
498
- `).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await Fn("wslpath",["-u",r])).stdout.trim():r));return t.length===1&&/ttheme-clipboard\.png$/.test(t[0]??"")?{image:t[0]}:{text:t.join(`
499
- `)}}if(process.platform==="linux")return Nb(e);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var Ob=`ObjC.import('AppKit')
498
+ $c::GetText()`;function Sd(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(xo("/proc/version","utf8"))}catch{return!1}}async function jb(e){let n=Boolean(process.env.WAYLAND_DISPLAY),t=n?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await Pn(t[0],t[1])).stdout.split(`
499
+ `).map((s)=>s.trim()),i=(s)=>n?Pn("wl-paste",["--no-newline","--type",s],{encoding:"buffer",maxBuffer:Bo}):Pn("xclip",["-selection","clipboard","-t",s,"-o"],{encoding:"buffer",maxBuffer:Bo});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let o=Zu.find((s)=>r.includes(s));if(o)return $d(e,(await i(o)).stdout),{image:e};return{text:r.some((s)=>s.startsWith("text/plain")||s==="UTF8_STRING")?(await i(r.includes("text/plain")?"text/plain":"UTF8_STRING")).stdout.toString("utf8"):""}}function Xu(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function vd(e){if(process.platform==="darwin"){let n=(await Pn("osascript",["-l","JavaScript","-e",Gb,e])).stdout.trim();return n===e?{image:e}:{text:n}}if(Sd()){let n=(await Pn("powershell.exe",["-NoProfile","-STA","-Command",Ub])).stdout.replace(/\r/g,"").trim(),t=await Promise.all(n.split(`
500
+ `).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await Pn("wslpath",["-u",r])).stdout.trim():r));return t.length===1&&/ttheme-clipboard\.png$/.test(t[0]??"")?{image:t[0]}:{text:t.join(`
501
+ `)}}if(process.platform==="linux")return jb(e);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var Jb=`ObjC.import('AppKit')
500
502
  function run() {
501
503
  const pb = $.NSPasteboard.generalPasteboard
502
504
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -508,31 +510,31 @@ function run() {
508
510
  picture = ['public.png', 'public.tiff', 'public.jpeg', 'public.heic'].some((t) => types.includes(t))
509
511
  }
510
512
  return pb.changeCount + '\\t' + (picture ? 'picture' : '')
511
- }`;async function gg(){if(Wu())return;if(process.platform==="darwin"){let[e="",n=""]=(await Fn("osascript",["-l","JavaScript","-e",Ob])).stdout.trim().split("\t");return{stamp:e,picture:n==="picture"}}if(process.platform==="linux"&&!fg()){let n=Boolean(process.env.WAYLAND_DISPLAY)?(await Fn("wl-paste",["--list-types"])).stdout:(await Fn("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:n,picture:/^image\//m.test(n)}}return}function dg(e){let n=[],t="",r=0;while(r<e.length){if(e[r]!=="\x1B"){t+=e[r],r++;continue}if(e.startsWith("\x1B[200~",r)){let o=e.indexOf("\x1B[201~",r+6);if(o===-1)return{events:n,keys:t,pending:e.slice(r)};n.push({kind:"paste",text:e.slice(r+6,o)}),r=o+6;continue}if(e.startsWith("\x1B]5522;",r)||e.startsWith("\x1B]72;",r)){let o=[e.indexOf("\x1B\\",r),e.indexOf("\x07",r)].filter((f)=>f!==-1);if(o.length===0)return{events:n,keys:t,pending:e.slice(r)};let s=Math.min(...o),u=e.slice(r+2,s),[c="",a="",...h]=u.split(";");n.push({kind:"osc",code:c,meta:Rb(a),payload:h.join(";")}),r=s+(e[s]==="\x07"?1:2);continue}let i=/^\[\?([\d;]*)(\$y|c)/.exec(e.slice(r+1,r+64));if(i){if(i[2]==="c")n.push({kind:"attributes"});else{let[o="0",s="0"]=(i[1]??"").split(";");n.push({kind:"mode",mode:Number(o),value:Number(s)})}r+=1+i[0].length;continue}if(/^(?:\[(?:\?[\d;$]*|2|20|200|201)?|\](?:5|55|552|5522|7|72)?)$/.test(e.slice(r+1)))return{events:n,keys:t,pending:e.slice(r)};t+=e[r],r++}return{events:n,keys:t,pending:""}}function Rb(e){let n={};for(let t of e.split(":")){let r=t.indexOf("=");if(r>0)n[t.slice(0,r)]=t.slice(r+1)}return n}var Hi=(e)=>Buffer.from(e).toString("base64"),Ju=(e)=>Buffer.from(e,"base64");function rg(e,n){return n.find((t)=>e.includes(t))}class _u{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=Hi(ig("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(e,n){this.send=e,this.deliver=n}start(){let e="\x1B[?2004h";if(this.clipboard)e+="\x1B[?5522h";if(this.drops)e+=`\x1B]72;t=a;${ju.join(" ")}\x1B\\`;this.send(e)}stop(){this.send(`\x1B[?2004l${this.clipboard?"\x1B[?5522l":""}${this.drops?"\x1B]72;t=A\x1B\\":""}`)}ask(){this.reading={mime:".",chunks:[],pw:"",listing:!0},this.send(`\x1B]5522;type=read:name=${Hi("ttheme")}:pw=${this.pw};${Hi(".")}\x1B\\`)}take(e){if(e.code==="5522")this.clip(e.meta,e.payload);else if(e.code==="72")this.drop(e.meta,e.payload)}clip(e,n){if(e.type!=="read")return;let t=e.status??"";if(t==="OK"){if(this.reading??={mime:".",chunks:[],pw:e.pw??"",listing:!0},e.pw)this.reading.pw=e.pw;return}let r=this.reading;if(!r)return;if(t==="DATA"){if(r.mime=e.mime?Ju(e.mime).toString("utf8"):r.mime,n)r.chunks.push(Ju(n));return}if(this.reading=void 0,t!=="DONE"){this.deliver({kind:"error",message:t==="EPERM"?"the clipboard read was not allowed":`the terminal answered ${t}`});return}let i=Buffer.concat(r.chunks);if(r.listing){let o=i.toString("utf8").split(/\s+/).filter(Boolean),s=rg(o,[...Cu,...Eb]);if(!s){this.deliver({kind:"text",text:""});return}let u=r.pw||this.pw,c=r.pw?"Paste event":"ttheme";this.reading={mime:s,chunks:[],pw:u,listing:!1},this.send(`\x1B]5522;type=read:name=${Hi(c)}:pw=${u};${Hi(s)}\x1B\\`);return}this.deliver(r.mime.startsWith("image/")?{kind:"bytes",bytes:new Uint8Array(i),source:"clipboard"}:{kind:"text",text:i.toString("utf8")})}drop(e,n){let t=e.t??"";if(t==="m"){if(e.x==="-1"){this.offered=[];return}if(n){this.offered=n.split(" ").filter(Boolean);let u=ju.filter((c)=>this.offered.includes(c));this.send(`\x1B]72;t=m:o=${u.length>0?1:0};${u.join(" ")}\x1B\\`)}return}if(t==="M"){let u=n?n.split(" ").filter(Boolean):this.offered,c=rg(u,ju);if(!c){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:u,index:u.indexOf(c)+1,chunks:[]},this.send(`\x1B]72;t=r:x=${this.dropping.index}\x1B\\`);return}let r=this.dropping;if(!r)return;if(t==="R"){this.dropping=void 0,this.send("\x1B]72;t=r:o=0\x1B\\"),this.deliver({kind:"error",message:`the drop failed: ${n.split(":")[0]||"unknown error"}`});return}if(t!=="r"&&t!=="")return;if(n)r.chunks.push(Ju(n));if(e.m==="1"||n)return;this.dropping=void 0;let i=Buffer.concat(r.chunks),o=r.mimes[r.index-1]??"",s;if(o.startsWith("image/"))s={kind:"bytes",bytes:new Uint8Array(i),source:"drop"};else{let u=i.toString("utf8"),c=o==="text/uri-list"?es(u).find((a)=>gb(a)):void 0;s=c?{kind:"bytes",bytes:new Uint8Array(xo(c)),source:c}:{kind:"text",text:u}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(s)}}var ze={pitch:25,cols:22,rows:9,height:13},Gt={cols:25,rows:16},Fb=2147483648,Pb=-1073741826,Hb=1600,Lb="\x1B[0m",Hn="\x1B[1m",de="\x1B[2m",Li="\x1B[31m",Pn="\x1B[32m",nn="\x1B[33m",ts="\x1B[1;34m",Ab="\x1B[35m",Tb={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end","1~":"home","7~":"home","4~":"end","8~":"end","5~":"pgup","6~":"pgdn",I:"focus-in",O:"focus-out"};function wg(e){let n=[],t=0;while(t<e.length){let r=e[t]??"";if(r==="\x1B"){let i=/^(?:\[([0-9;]*)([A-Za-z~])|O([A-Za-z]))/.exec(e.slice(t+1));if(i){n.push(Tb[`${i[1]??""}${i[2]??i[3]??""}`]??"nop"),t+=1+i[0].length;continue}let o=e[t+1]??"";if(/^[a-z]$/.test(o)){n.push(`alt-${o}`),t+=2;continue}n.push("esc"),t++;continue}n.push(r==="\r"||r===`
512
- `?"enter":r==="\t"?"tab":r==="\x03"?"ctrl-c":r==="\x16"?"ctrl-v":r===""||r==="\b"?"backspace":r),t++}return n}var $g="\x1B]1337;ReportCellSize\x07\x1B[16t",mg="\x1B]1337;ReportCellSize=";function Yu(e){let n=e.indexOf(mg);if(n!==-1){let i=e.slice(n+mg.length),o=[i.indexOf("\x07"),i.indexOf("\x1B\\")].filter((c)=>c!==-1),s=o.length>0?Math.min(...o):-1,u=s===-1?null:/^([\d.]+);([\d.]+);([\d.]+)$/.exec(i.slice(0,s));if(u){let c=Number(u[3]);return{cell:{h:Math.round(Number(u[1])*c),w:Math.round(Number(u[2])*c)},rest:e.slice(0,n)+i.slice(s+(i[s]==="\x07"?1:2))}}}let t=e.indexOf("\x1B[6;"),r=t===-1?null:/^\[6;(\d+);(\d+)t/.exec(e.slice(t+1));if(!r)return null;return{cell:{h:Number(r[1]),w:Number(r[2])},rest:e.slice(0,t)+e.slice(t+1+r[0].length)}}function lr(e,n){return{perRow:Math.max(1,Math.floor((e+1)/ze.pitch)),rowsVis:Math.max(1,Math.floor((n-4)/ze.height))}}function bg(e){return`\x1B_Ga=t,t=f,f=100,i=${e.id},q=2;${Buffer.from(e.path).toString("base64")}\x1B\\`}function kg(e){return`\x1B[${e.row+1};${e.col+1}H\x1B_Ga=p,i=${e.id},p=${e.id},c=${e.cols},r=${e.rows},C=1,z=${e.z},q=2\x1B\\`}function Eg(e){return`\x1B_Ga=d,d=I,i=${e},q=2\x1B\\`}function yg(e){return`\x1B[38;2;${Ke(e).join(";")}m`}function Qu(e){return`\x1B[48;2;${Ke(e).join(";")}m`}function fn(e){return Array.from(e).length}class rs{parts=[];cols;constructor(e){this.cols=e}put(e,n,t=""){return this.parts.push({col:e,text:n,sgr:t}),e+fn(n)}run(e,n){let t=e;for(let[r,i]of n)t=this.put(t,r,i);return t}right(e,n){this.run(e-n.reduce((t,[r])=>t+fn(r),0),n)}render(){let e="";for(let{col:n,text:t,sgr:r}of this.parts){if(n>=this.cols||n<0)continue;let i=Array.from(t).slice(0,this.cols-n).join("");e+=`\x1B[${n+1}G${r}${i}${r?Lb:""}`}return e}}function Sg(e){return e>=1e6?`${(e/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(e/1000))} KB`}function Gb(e,n){if(!n)return Sg(e);return n>=1e6?`${(e/1e6).toFixed(1)}/${(n/1e6).toFixed(1)} MB`:`${Math.round(e/1000)}/${Math.round(n/1000)} KB`}function vg(e){return e.replace(/_\([^)]*\)?$/,"")}function Mg(e){return[`${e.reduced?"↓":""}${e.width}×${e.height}`,Math.max(e.width,e.height)<Hb?nn:de]}function Ai(e,n,t,r){let i=[...r.keys??[]],o=r.lead,s=r.right,u=()=>{let h=[...o?[fn(o[0])]:[],...i.map(([l,g])=>fn(l)+1+fn(g))];return(r.badge?fn(r.badge)+4:0)+h.reduce((l,g)=>l+g,0)+3*Math.max(0,h.length-1)+(s?3+fn(s[0])+1+fn(s[1]):0)};while(u()>n)if(i.length>2)i.splice(-2,1);else if(s)s=void 0;else if(i.length>1)i.splice(-2,1);else break;if(o&&u()>n){let h=Math.max(0,fn(o[0])-(u()-n)-1);o=[`${Array.from(o[0]).slice(0,h).join("")}…`,o[1]]}let c=0;if(r.badge)c=e.put(0,` ${r.badge} `,`\x1B[7;1m${t}`)+2;if([...o?[[o]]:[],...i.map(([h,f])=>[[h,Hn],[` ${f}`,de]])].forEach((h,f)=>{c=e.run(c+(f?3:0),h)}),s)e.right(n,[[s[0],Hn],[` ${s[1]}`,de]])}function Ub(e,n,t,r,i,o){let{ansi:s,selection:u,cursor:c}=o.colors,a=r<44?3:4;if(r>=56)a=Math.min(7,Math.floor((r+1)/8)-1);let h=t;for(let m=0;m<8;m++)h=(e[n]?.put(h,"▀".repeat(a),yg(s[m]??c)+Qu(s[m+8]??c))??h)+1;let f=["❯ ",Pn],l=[[["~/code/demo",ts],[" on ",de],["main",Ab],[" +2",Pn],[" ~1",nn]]];if(l.push([f,["git status -sb",""]]),r>=44)l.push([["## ",""],["main",Pn],["...",""],["origin/main",Li],[" [ahead 1]",nn]]);if(l.push([[" M",Li],[" src/main.rs",""]]),l.push([["??",Li],[" notes.md",""]]),l.push([]),r>=44)l.push([f,["ls",""]]),l.push([["docs",ts],[" ",""],["src",ts],[" ",""],["tests",ts],[" Cargo.toml README.md",""]]),l.push([]);l.push([f,["cargo test",""]]),l.push([[" ✓",Pn],[" parses config",""]]);let g=[[" ✗",Li],[" renders frame",""]];if(r>=44)g.push([" expected ",de],["3",Pn],[", received ",de],["2",Li]);l.push(g),l.push([]),l.push([f,["echo ",""],["selected text",Qu(u)],[" ",""],[" ",Qu(c)]]),l.forEach((m,d)=>{let b=n+2+d;if(b<=i)e[b]?.run(t,m)})}function jb(e,n,t,r,i,o){e[n]?.put(t,`╭${"─".repeat(i-2)}╮`,o);for(let s=n+1;s<n+r-1;s++)e[s]?.put(t,"│",o),e[s]?.put(t+i-1,"│",o);e[n+r-1]?.put(t,`╰${"─".repeat(i-2)}╯`,o)}function qu(e,n=e.site,t=e.siteAnsi){return[` ${n} `,`\x1B[7;${30+t}m`]}function Jb(e){return`${x[Math.floor(e/Tn)]?.name??"local"} ${e%Tn}`}function Cb(e,n,t){let r=[{name:"all",moved:!1},...x].flatMap((s,u)=>{let c=`${s.name}${s.moved?"*":""}`,a=s.name===t.site?qu(t,c):[` ${c} `,de];return u?[[" ",""],a]:[a]}),i=r.reduce((s,[u])=>s+fn(u),0)<=n,o=e.run(0,i?r:[qu(t)]);if(t.asking!==void 0)e.run(o,[[` ${t.asking} was cut off — this network may block it. turn on the unblock proxy? `,nn],["y",Hn],[" turn on ",de],["n",Hn],[" not now",de]])}function Kb(e,n,t,r){if(t.editing!==void 0){let u=e.run(0,[["⌕ ",r],[t.editing,""],["█",r]]),c=t.suggest?.length?" ↑↓ pick enter searches":" enter searches";e.put(u,t.editing?c:` a tag, a post url or an id, or drop a picture or ctrl+v — ${t.tag||"esc leaves"}`,de);return}let i=e.run(0,[["⌕ ",r],[t.tag||"nothing yet — / searches, ctrl+v pastes a picture",t.tag?"":de]]),o=bt.filter((u)=>!t.block.includes(u)),s=[t.preset,...t.solo?["solo"]:[],t.order,...t.rating.join("+")==="safe"?[]:[t.rating.join("+")],...o.length>0?[`allows ${o.join("+")}`]:[],...t.unblocked?["unblock"]:[]];if(e.put(i,` ${s.join(" ")}`,de),t.total>0||!t.searching){let u=[[`${t.tiles.length}/${t.checked}`,""]];if(t.checked<t.total)u.push([` of ${t.total}`,de]);e.right(n,u)}}function Wb(e){if(e.cut==="on")return[[`cut out · ${e.clear}% transparent`,Pn]];if(e.cut==="off")return[["opaque · x cuts out",nn]];if(e.cut==="failed")return[["opaque · no cut-out",nn]];return[e.clear>0?[`${e.clear}% transparent`,Pn]:["opaque",nn]]}function pg(e){return e.site==="all"?"any site":e.site}function Ig(e){if(e.installing!==void 0)return[`installing ${e.palette} ← ${Jb(e.installing)}`,nn];if(e.hint)return[e.hint,Pn];if(e.error)return[e.error,nn];if(e.waiting!==void 0)return[`${e.slow??e.site} asked to slow down · ${e.waiting}s`,nn];if(e.fetching)return[`fetching ${e.fetching.id%Tn} · ${Gb(e.fetching.got,e.fetching.size)}`,nn];if(e.cutting!==void 0)return[`cutting out ${e.cutting%Tn}`,nn];if(e.preparing!==void 0)return[`preparing ${e.preparing%Tn}`,nn];if(e.saved)return[e.saved,Pn];if(e.note)return[e.note,de];return}function _b(e,n,t,r,i,o){let{perRow:s,rowsVis:u}=lr(t,r);Kb(e[0],t,i,o),Cb(e[1],t,i);for(let g=0;g<s*u;g++){let m=i.top*s+g,d=i.tiles[m];if(!d)break;let b=2+Math.floor(g/s)*ze.height,y=g%s*ze.pitch,I=m===i.focus;if(I)jb(e,b,y,ze.height,ze.pitch-1,o);if(d.thumb)n.push({id:d.key,path:d.thumb,row:b+1,col:y+1,cols:ze.cols,rows:ze.rows,z:-1});if(e[b+10]?.run(y+1,[...i.installed.includes(d.key)?[["✓ ",Pn]]:[],...i.site==="all"?[["● ",`\x1B[${30+d.siteAnsi}m`]]:[],[String(d.id),I?Hn:""],[" ",""],Mg(d)]),d.mates.length>0)e[b+10]?.put(y+ze.cols,"≈",o);let k=d.artist?vg(d.artist):d.owner&&`@${d.owner}`;if(k)e[b+11]?.put(y+1,k.slice(0,ze.cols-8),de);let S=[];if(d.score>0)S.push([`★${d.score}`,de]);if(d.variants>1)S.push([` ×${d.variants}`,o]);if(S.length>0)e[b+11]?.right(y+ze.cols+1,S)}let c=i.top*s,a=i.tiles.length-(i.top+u)*s,h=[...c>0?[`↑ ${c} above`]:[],...a>0?[`↓ ${a} more`]:[]];if(h.length>0)e[r-2]?.put(0,h.join(" "),de);if(!i.searching&&i.tiles.length===0&&!i.error)e[3]?.put(0,i.preset==="cutouts"?`no transparent cutouts of ${i.tag} on ${pg(i)} — c searches every post, tab tries ${i.nextSite}`:`no posts of ${i.tag} on ${pg(i)} — tab tries ${i.nextSite}`,de);let f=e[r-1],l=Ig(i);if(i.searching&&i.tiles.length===0&&!l){Ai(f,t,o,{badge:"FIND",lead:[i.preset==="cutouts"?"checking png headers":"fetching posts",de],right:["esc","back"]});return}Ai(f,t,o,{badge:"FIND",lead:l,keys:i.asking!==void 0?[]:[["←↑↓→","move"],["enter","try on"],["tab","site"],["ctrl+v","picture"],["s","settings"],["/","search"],["?","keys"]],right:i.asking!==void 0?void 0:["esc","back"]})}function Qb(e,n,t,r,i,o){let s=i.tiles[i.focus];if(!s)return;let u=i.shown?.id===s.key?i.shown:void 0,c=[qu(i,s.site,s.siteAnsi),[" ",""],[String(s.id),Hn],[" ",""],Mg(s)];if(s.artist)c.push([` · ${vg(s.artist)}`,""]);if(s.score>0)c.push([` · ★${s.score}`,de]);if(u)c.push([` · ${Sg(u.bytes)}`,de]);if(s.owner)c.push([` · ${s.owner}`,de]);if(s.origin)c.push([` · ${s.origin}`,de]);if(u)c.push([" ",""],...Wb(u));if(e[0]?.run(0,c),s.mates.length>0)e[0]?.right(t,[["≈ ",o],[s.mates.join(" "),de]]);if(Ub(e,3,2,t-4,r-2,i),i.shown)n.push({id:Fb+i.shown.id,path:i.shown.path,row:0,col:0,cols:t,rows:r,z:Pb});let a=Ig(i);Ai(e[r-1],t,o,{badge:"TRY",lead:a,keys:i.installing===void 0?[["←→","browse"],["enter","install"],...i.shown?.cut==="on"||i.shown?.cut==="off"?[["x","cut out"]]:[],["?","keys"]]:[],right:i.installing===void 0?["esc","grid"]:void 0})}var qb={grid:[["move","←↑↓→ home end pgup pgdn"],["try on","enter"],["site",`tab all, ${x.map((e)=>e.name).join(", ")}`],["posts","c cutouts or every post"],["search","/ a tag, a post url or an id"],["your own","ctrl+v or v a picture from the clipboard · drop one on the window or paste its link"],["unfold","space a set of ×N"],["open","o the post page in a browser"],["settings","s rating, block, posts, solo, order, sets, remove bg"],["back","esc returns to preview"],["close","? esc"]],try:[["browse","←→"],["install","enter"],["cut out","x the background off or on, on an opaque picture"],["open","o the post page in a browser"],["your own","ctrl+v or v a picture from the clipboard · drop one on the window"],["grid","esc"],["close","? esc"]]};function Yb(e,n,t,r,i){let o=r.panel??0,s=Math.max(...r.settings.map((l)=>l.label.length)),u=Math.max(...r.settings.map((l)=>l.choices.reduce((g,m)=>g+m.length+(l.multi?6:3),0))),c=Math.min(n-2,Math.max(28,s+u+8)),a=r.settings.length+4,h=Math.floor((n-c)/2),f=Math.max(2,Math.floor((t-a)/2));e[f]?.put(h,`╭─ settings ${"─".repeat(Math.max(0,c-13))}╮`);for(let l=f+1;l<f+a-1;l++)e[l]?.put(h,`│${" ".repeat(c-2)}│`);r.settings.forEach((l,g)=>{let m=e[f+2+g];m.put(h+3,l.label,g===o?Hn:de);let d=h+5+s,b=l.value.split(" ");l.choices.forEach((y,I)=>{let k=b.includes(y),S=l.multi&&g===o&&I===l.cursor?"4;":"",p=l.multi?` ${k?"[x]":"[ ]"} ${y} `:` ${y} `;d=m.put(d,p,k?`\x1B[${S}7;${30+r.siteAnsi}m`:S?`\x1B[4m${de}`:de)+1})}),e[f+a-1]?.put(h,`╰${"─".repeat(c-2)}╯`),Ai(e[t-1],n,i,{badge:"SET",keys:[["↑↓","setting"],["←→","value"],["space","toggle"],["enter","save"]],right:["esc","undo"]})}function Zb(e,n,t,r,i){let o=qb[r.mode],s=Math.min(n-2,50),u=o.length+4,c=Math.floor((n-s)/2),a=Math.max(2,Math.floor((t-u)/2));e[a]?.put(c,`╭─ keys ${"─".repeat(s-9)}╮`);for(let h=a+1;h<a+u-1;h++)e[h]?.put(c,`│${" ".repeat(s-2)}│`);o.forEach(([h,f],l)=>{e[a+2+l]?.put(c+3,h,Hn),e[a+2+l]?.put(c+13,f.slice(0,s-16))}),e[a+u-1]?.put(c,`╰${"─".repeat(s-2)}╯`),Ai(e[t-1],n,i,{badge:"KEYS",right:["? esc","close"]})}function Xb(e,n,t){let r=n.suggest??[],i=r.map((u)=>u.count>0?String(u.count):u.palette??"0"),o=Math.max(...r.map((u)=>fn(u.value))),s=Math.max(7,...i.map(fn));r.forEach((u,c)=>{let a=c===n.pick,h=e[1+c];h?.run(0,[[a?"▸ ":" ",t],[u.value,a?Hn+t:""]]),h?.right(2+o+2+s,[[i[c],de]])})}function Ng(e,n,t){let r=Array.from({length:t},()=>new rs(n)),i=[],o=yg(e.colors.cursor);if(n<Gt.cols||t<Gt.rows)return r[0]?.put(0,"ttheme find",Hn+o),r[1]?.put(0,`needs ${Gt.cols}×${Gt.rows} — now ${n}×${t}`),r[2]?.put(0,"esc quits",de),{lines:r.map((s)=>s.render()),images:i};if(e.mode==="try")Qb(r,i,n,t,e,o);else _b(r,i,n,t,e,o);if(e.mode==="grid"&&e.editing!==void 0&&e.suggest?.length){for(let s=1;s<t-1;s++)r[s]=new rs(n);return Xb(r,e,o),{lines:r.map((s)=>s.render()),images:[]}}if(e.help||e.panel!==void 0){let s=e.mode==="try"?i:[];for(let u=0;u<t;u++)r[u]=new rs(n);if(e.help)Zb(r,n,t,e,o);else Yb(r,n,t,e,o);return{lines:r.map((u)=>u.render()),images:s}}return{lines:r.map((s)=>s.render()),images:i}}var Vb=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),zb=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),Bb=0.04,Db=0.1,xb=0.05,ek=4096;function nk(e){return new Set(e.cutouts.split(/\s+/).map((n)=>n.replace(/^~/,"")).filter(Boolean))}function tk(e,n,t,r=0){let{site:i,post:o}=e,s=new Set(o.tags),u=[...nk(i)].some((h)=>s.has(h)),c=Math.min(o.width,o.height),a=o.width>0&&o.height>0?o.width/o.height/(n.w/n.h):1;return(o.solo?2:0)+([...Vb].some((h)=>s.has(h))?-3:0)+([...zb].some((h)=>s.has(h))?-1.5:0)+2*Math.min(1,c/n.h)+(u?1.5:-Math.min(1.5,Math.abs(Math.log(a))))+(t>0?1.5*Math.log1p(Math.max(0,o.score))/Math.log1p(t):0)+2*r}function is(e,n,t=new Map){let r=new Map;for(let{site:i,post:o}of e)r.set(i,Math.max(r.get(i)??0,o.score));return e.map((i,o)=>({pick:i,at:o,score:tk(i,n,r.get(i.site)??0,t.get(i.post))})).sort((i,o)=>o.score-i.score||i.at-o.at).map(({pick:i})=>i)}function Rg(e){let n=new Map;for(let r of e)n.set(r.site,[...n.get(r.site)??[],r]);let t=[];for(let r=0;t.length<e.length;r++)for(let i of n.values()){let o=i[r];if(o)t.push(o)}return t}function Zu(e){let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4}function Og(e,n,t){let[r,i,o]=[Zu(e),Zu(n),Zu(t)],s=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*o),u=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*o),c=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*o);return[0.2104542553*s+0.793617785*u-0.0040720468*c,1.9779984951*s-2.428592205*u+0.4505937099*c,0.0259040371*s+0.7827717662*u-0.808675766*c]}function Fg(e,n){let t=n.map((s)=>Og(...Ke(s))).filter(([,s,u])=>Math.hypot(s,u)>=Bb);if(t.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(e.width*e.height/ek))),i=t.map(()=>0),o=0;for(let s=0;s<e.height;s+=r)for(let u=0;u<e.width;u+=r){let c=(s*e.width+u)*4;if(e.data[c+3]<128)continue;o++;let[a,h,f]=Og(e.data[c],e.data[c+1],e.data[c+2]);t.forEach(([l,g,m],d)=>{if(Math.hypot(a-l,h-g,f-m)<Db)i[d]=i[d]+1})}if(o===0)return 0;return i.reduce((s,u)=>s+Math.min(1,u/o/xb),0)/t.length}import{mkdirSync as Tg,readFileSync as Gg,writeFileSync as Ug}from"node:fs";import{dirname as jg}from"node:path";import{isMainThread as sk,parentPort as Jg,Worker as uk}from"node:worker_threads";var rk=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,ik=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"]];function Xu(e){let n=/(\d+)_p(\d+)/.exec(e.source);return[...e.md5?[`md5:${e.md5}`]:[],...n&&e.source.includes("pximg")?[`pixiv:${n[1]}_p${n[2]}`]:[]]}function Pg(e,n){let t=rk.exec(n.source)?.[1]?.toLowerCase();return[`post:${e.key}:${n.id}`,...n.md5?[`md5:${n.md5}`]:[],...t&&t!==n.md5?[`md5:${t}`]:[],...ik.flatMap(([r,i])=>{let o=r.exec(n.source)?.[1];return o?[`post:${i}:${Number(o)}`]:[]}),...n.family?[`family:${e.key}:${n.family}`]:[]]}function Hg(e,n){let t=e.owner||e.artist;return t!==""&&t===(n.owner||n.artist)&&e.width===n.width&&e.height===n.height}function Lg(e){let r=[];for(let o=0;o<8;o++){let s=Math.floor(o*e.height/8),u=Math.max(s+1,Math.floor((o+1)*e.height/8));for(let c=0;c<9;c++){let a=Math.floor(c*e.width/9),h=Math.max(a+1,Math.floor((c+1)*e.width/9)),f=0;for(let l=s;l<u;l++)for(let g=a;g<h;g++){let m=(l*e.width+g)*4,d=e.data[m+3]/255,b=0.299*e.data[m]+0.587*e.data[m+1]+0.114*e.data[m+2];f+=b*d+255*(1-d)}r.push(f/((h-a)*(u-s)))}}let i=0n;for(let o=0;o<8;o++)for(let s=0;s<8;s++)i=i<<1n|(r[o*9+s]>r[o*9+s+1]?1n:0n);return i.toString(16).padStart(16,"0")}function ok(e,n){let t=BigInt(`0x${e}`)^BigInt(`0x${n}`),r=0;while(t>0n)r+=Number(t&1n),t>>=1n;return r}function Ag(e,n){if(e.width<=0||e.height<=0||n.width<=0||n.height<=0)return!1;return Math.abs(Math.log(e.width/e.height/(n.width/n.height)))<0.01&&ok(e.hash,n.hash)<=2}var ck={thumb:"tile",match:"tile",show:"view",backdrop:"view"};function ak(e){let n=Tr(new Uint8Array(Gg(e.from)),vn);if(e.job==="backdrop")return go(e.home,e.colors,e.tone,n,{...e.origin,bytes:new Uint8Array(Gg(e.source))},e),0;if(e.job==="match")return{match:Fg(n,e.colors),hash:Lg(n)};if(e.job==="thumb")return Tg(jg(e.to),{recursive:!0}),Ug(e.to,wt(Ka(n,e.width,e.height))),0;let t=Dn(n);return Tg(jg(e.to),{recursive:!0}),Ug(e.to,wt(Uh(n,e.colors,e.tone,e.width,e.height))),t}function hk(e){e.on("message",(n)=>{try{e.postMessage({id:n.id,value:ak(n)})}catch(t){e.postMessage({id:n.id,error:t instanceof Error?t.message:String(t)})}})}class Cg{worker;next=1;waiting=new Map;send(e){let n=this.next++;return new Promise((t,r)=>{let i=this.open();this.waiting.set(n,{ok:t,no:r}),i.ref(),i.postMessage({...e,id:n})})}close(){this.worker?.terminate(),this.worker=void 0,this.drop(Error("renderer closed"))}open(){if(this.worker)return this.worker;let e=new uk(import.meta.filename);e.unref(),e.on("message",({id:t,value:r,error:i})=>{let o=this.waiting.get(t);if(this.waiting.delete(t),this.waiting.size===0)e.unref();if(i!==void 0)o?.no(Error(i));else o?.ok(r)});let n=(t)=>{if(this.worker===e)this.worker=void 0;this.drop(t instanceof Error?t:Error("renderer stopped"))};return e.on("error",n),e.on("exit",()=>n(void 0)),this.worker=e,e}drop(e){for(let n of this.waiting.values())n.no(e);this.waiting.clear()}}class Vu{lines=new Map;run(e){let n=ck[e.job],t=this.lines.get(n);if(!t)t=new Cg,this.lines.set(n,t);return t.send(e)}close(){for(let e of this.lines.values())e.close();this.lines.clear()}}if(!sk&&Jg)hk(Jg);var dr=[{name:"TTHEME_FIND_RATING",label:"rating",choices:Jr,multi:{read:Zt}},{name:"TTHEME_FIND_BLOCK",label:"block",choices:bt,multi:{read:Xt,none:"none"}},{name:"TTHEME_FIND_POSTS",label:"posts",choices:["all","cutouts"]},{name:"TTHEME_FIND_SOLO",label:"solo",choices:["on","off"]},{name:"TTHEME_FIND_ORDER",label:"order",choices:["fit","newest","score"]},{name:"TTHEME_FIND_SETS",label:"sets",choices:["fold","show"]},...Oi()?[{name:"TTHEME_FIND_REMOVE_BG",label:"remove bg",choices:["on","off"]}]:[]];function pk(e,n){if(e.multi)return e.multi.read(n).join(" ")||e.multi.none;return e.choices.find((t)=>t===n)??e.choices[0]}var wk=["fit","newest","score"];function Kg(e){return wk.find((n)=>n===e)??"fit"}function $k(e){return e.length>=2&&!/^\d+$/.test(e)&&!e.includes("://")&&!/^[\w.]+:\d+$/.test(e)}var Wg=12,bk=4,kk=150,_g=12,Ek=2,yk=150,Sk=30,vk=4000,Mk=8000,Qg=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,Ik=process.platform==="win32"?"alt+v":"ctrl+v",qg=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",Nk=1280,Yg=2,Ok=3,Rk=8;function ss(e,n){return{key:e,groups:[],sources:[],queue:[],rounds:0,roundOf:new Map,last:new Map,kin:new Map,kindred:new Map,shapes:[],seen:new Set,same:new Map,checked:0,total:0,focus:0,top:0,searching:n}}function mr(e){if(!(e instanceof Error))return String(e);if(e instanceof AggregateError&&e.errors[0])return mr(e.errors[0]);if(e.cause)return mr(e.cause);let n=e.code;if(typeof n==="string")return n;let t=(e.message||e.name).split(".")[0]??"";return t.length>56?`${t.slice(0,55)}…`:t}function Bu(e,n){return`${e}: ${mr(n)}`}function Zg(e){return e.width*e.height}function Xg(e){return`${e.id}-${Vg("sha1").update(e.preview).digest("hex").slice(0,8)}`}function Fk(e){let n=e.lastIndexOf("\x1B");return n!==-1&&/^\[?[0-9;]*$/.test(e.slice(n+1))}function Du(e,n){try{return JSON.parse(zg(Ln(pn(e),n),"utf8"))}catch{return{}}}function xu(e,n,t){Ti(pn(e),{recursive:!0}),Gi(Ln(pn(e),n),`${JSON.stringify(t)}
513
- `)}class Bg{view;tone;session=new AbortController;cell={w:0,h:0};cols=process.stdout.columns||80;rows=process.stdout.rows||24;gen=0;pumping=0;boards=new Map;board;posts=new Map;thumbPath=new Map;looking=new Map;looked=new Map;matched=new Map;aheading=!1;pages=new Map;tab=0;values=new Map(dr.map((e)=>[e.name,pk(e,process.env[e.name])]));direction=1;prefetching=0;inflight=new Map;owners=new Map;probed=new Map;unsaved=new Set;thumbQueue=[];thumbing=0;clarity=new Map;renders=new Vu;sent=new Map;placed=new Map;current;fetch;settle;partial;suggestTimer;suggesting;input="";typed="";grabber=new _u((e)=>this.write(e),(e)=>void this.got(e));featureWait;noticeTimer;peekTimer;peeked;attaching;probeWait;done;dirty=!1;unblock=!1;scratch=lk(Ln(dk(),"ttheme-find-"));home;catalog;entry;constructor(e,n,t,r){this.home=e,this.catalog=n,this.entry=t,this.tone=xt(t,t.signatureSlots),this.view={palette:t.name,tag:r,site:this.tabName,siteAnsi:this.tabAnsi,nextSite:this.nextTabName,preset:this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:Kg(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:Zt(this.setting("TTHEME_FIND_RATING")),block:Xt(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",unblocked:process.env.TTHEME_FIND_PROXY!==void 0,settings:dr.map((i)=>({label:i.label,choices:[...i.choices],value:this.setting(i.name),multi:i.multi&&{none:i.multi.none},cursor:0})),colors:{cursor:t.cursor,selection:t.selection,ansi:t.ansi},tiles:[],installed:[],checked:0,total:0,searching:r!=="",focus:0,top:0,mode:"grid",help:!1,editing:r===""?"":void 0},this.board=ss(this.boardKey,r!==""),this.boards.set(this.board.key,this.board)}get signal(){return this.session.signal}get site(){return this.tab===0?void 0:x[this.tab-1]}get sites(){return this.site?[this.site]:x}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??bk}get nextTabName(){let e=(this.tab+1)%(x.length+1);return e===0?"all":x[e-1].name}frame(){return{w:this.cols*(this.cell.w||10),h:this.rows*(this.cell.h||20)}}setting(e){return this.values.get(e)}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(e,n,t){return Ln(pn(e),"orig",`${n}.${t}`)}previewPath(e){return Ln(pn(e.site),"thumb",`${Xg(e.post)}.${Cr(e.post.preview)}`)}tileOf(e,n){let{site:t,post:r}=e,i=Mn(t,r.id),o=kt(r)??r;return{id:r.id,key:i,site:t.name,siteAnsi:t.ansi,width:o.width,height:o.height,reduced:o!==r,owner:r.owner,artist:t===ns?cg(r.source):r.artist,score:r.score,variants:n,origin:Ks(r.source),mates:this.owners.get(t.key)?.get(r.owner)??[],thumb:this.thumbPath.get(i)}}show(){let e=this.view,n=this.board;e.tiles=n.groups.flatMap((t)=>t.open?t.posts.map((r)=>this.tileOf(r,0)):[this.tileOf(t.posts[0],t.posts.length)]),e.checked=n.checked,e.total=n.total,e.searching=n.searching,e.note=n.note,e.focus=Math.max(0,Math.min(n.focus,e.tiles.length-1)),e.top=n.top}syncSite(){let e=this.view;e.site=this.tabName,e.siteAnsi=this.tabAnsi,e.nextSite=this.nextTabName}async run(){let{stdin:e,stdout:n}=process;e.setRawMode(!0),e.resume(),e.on("data",this.onData),n.on("resize",this.onResize),this.write("\x1B[?25l\x1B[?7l\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H");let t=new Promise((s)=>{this.done=s}),r=setInterval(this.onClock,250),i=await this.probe();if(i){if(this.cell=i,this.view.tag)this.search()}else this.view.searching=!1,this.view.error="this terminal does not report its cell size — find needs kitty graphics";await this.features(),this.grabber.start(),this.write("\x1B[?1004h"),this.peek(),this.draw();let o=await t;return this.grabber.stop(),this.write("\x1B[?1004l"),this.attaching?.abort(),clearTimeout(this.noticeTimer),clearTimeout(this.peekTimer),this.session.abort(),this.fetch?.abort(),clearTimeout(this.settle),clearTimeout(this.partial),this.quietSuggest(),clearInterval(r),e.off("data",this.onData),n.off("resize",this.onResize),this.write("\x1B_Ga=d,d=A,q=2\x1B\\\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H"),e.setRawMode(!1),e.pause(),this.saveProbes(),this.renders.close(),zu(this.scratch,{recursive:!0,force:!0}),th(),o}write(e){process.stdout.write(e)}get saved(){return this.view.saved}finish(e){this.done?.(e===2&&this.saved?0:e)}probe(){return new Promise((e)=>{let n=setTimeout(()=>{this.probeWait=void 0,e(null)},1000);this.probeWait=(t)=>{clearTimeout(n),this.probeWait=void 0,e(t)},this.write($g)})}onData=(e)=>{this.input+=e.toString("utf8");for(let t=Yu(this.input);t;t=Yu(this.input))this.input=t.rest,this.probeWait?.(t.cell);if(this.probeWait)return;let n=dg(this.input);if(this.input=n.pending,this.view.editing===void 0&&n.keys.length>8&&/^(?:\/|~\/|file:|https?:)/.test(n.keys))this.pasted(n.keys),n.keys="";this.typed+=n.keys;for(let t of n.events)this.inbound(t);if(clearTimeout(this.partial),Fk(this.typed)){this.partial=setTimeout(this.flushKeys,Sk);return}this.flushKeys()};flushKeys=()=>{let e=wg(this.typed);this.typed="";for(let n of e)this.key(n)};features(){if(process.env.TMUX)return Promise.resolve();return new Promise((e)=>{let n=setTimeout(()=>{this.featureWait=void 0,e()},500);this.featureWait=()=>{clearTimeout(n),this.featureWait=void 0,e()},this.write("\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c")})}inbound(e){if(e.kind==="mode"){if(e.mode===5522)this.grabber.clipboard=e.value!==0&&e.value!==4;return}if(e.kind==="attributes"){this.featureWait?.();return}if(e.kind==="osc"){if(e.code==="72"&&e.meta.t==="q"){this.grabber.drops=!0;return}this.grabber.take(e);return}this.pasted(e.text)}pasted(e){let n=this.view;if(n.editing!==void 0&&e.trim()!==""&&!this.picture(e)){n.editing+=e.replace(/[\r\n]+/g," "),this.suggest(),this.draw();return}if(n.installing!==void 0||n.asking!==void 0||n.panel!==void 0||n.help)return;if(e.trim()===""){this.fromClipboard();return}this.attach(e)}picture(e){let n=e.trim();if(/^https?:\/\/\S+$/i.test(n))return!oo(n,this.site??x[0]);return es(n).length>0}async got(e){if(e.kind==="error"){this.notice(e.message);return}if(e.kind==="text"){if(e.text.trim()===""){this.notice(`no picture on the clipboard — ${qg}`);return}this.pasted(e.text);return}await this.bring(()=>Do(e.bytes,e.source))}notice(e,n=vk){let t=this.view;t.error=e,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(t.error===e)t.error=void 0,this.draw()},n),this.draw()}async peek(){let e=this.view,n;try{n=await gg()}catch{return}if(!n||n.stamp===this.peeked)return;if(this.peeked=n.stamp,!n.picture||e.installing!==void 0||e.asking!==void 0)return;e.hint=`picture on the clipboard · ${Ik} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{e.hint=void 0,this.draw()},Mk),this.draw()}async fromClipboard(){let e=this.view;if(Wu()){if(this.grabber.clipboard){this.grabber.ask();return}this.notice("over ssh the clipboard is not here — drop the file");return}let n;try{n=await lg(Ln(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`could not read the clipboard: ${mr(r)}`);return}if(clearTimeout(this.peekTimer),e.hint=void 0,"image"in n){await this.bring(async(r)=>({...await Ku(n.image,r),source:"clipboard"}));return}let t=n.text.trim();if(!t){this.notice(`no picture on the clipboard — ${qg}`);return}if(this.picture(t)){await this.attach(t);return}if(e.editing===void 0)e.editing="";this.pasted(t)}async attach(e){let n=e.trim();if(/^https?:\/\//i.test(n)){let i=oo(n,this.site??x[0]);if(i){await this.jump(i.site,i.id);return}}let[t,...r]=es(n).sort((i,o)=>Number(!Qg.test(i))-Number(!Qg.test(o)));if(!t){this.notice("nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>Ku(t,i),r.length)}async bring(e,n=0){let t=this.view;this.attaching?.abort();let r=new AbortController;this.attaching=r,t.error=void 0,t.saved=void 0,t.note="reading the picture…",this.draw();let i;try{i=await e(AbortSignal.any([r.signal,this.signal]))}catch(l){if(!r.signal.aborted)t.note=void 0,this.notice(mr(l),8000);return}if(r.signal.aborted)return;t.note=n>0?`the first picture of ${n+1} — drop one at a time to try the others`:void 0,this.quietSuggest(),t.editing=void 0,t.suggest=void 0,t.pick=void 0;let o=hg(i.bytes);ag(o,i.source);let s=this.origPath(ns,o,i.ext);Ti(os(s),{recursive:!0}),Gi(s,i.bytes);let u=mk(s).href,c={id:o,file:u,width:i.width,height:i.height,ext:i.ext,preview:u,owner:"",artist:"",score:0,rating:"s",md5:Vg("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],solo:void 0,family:0,smaller:[]},a={site:ns,post:c},h=this.previewPath(a);Ti(os(h),{recursive:!0}),Gi(h,i.bytes),++this.gen,this.current=void 0,t.shown=void 0;let f=ss(`local|post:${o}`,!1);this.board=f,this.boards.set(f.key,f),this.single(f,a)}single(e,n){e.searching=!1,this.posts.set(Mn(n.site,n.post.id),n),e.groups=[{posts:[n],open:!1}],e.checked=1,e.total=1,this.thumbQueue.push(n),this.thumbs(),this.view.mode="try",this.show(),this.select(),this.draw()}onClock=()=>{let e=this.sites.reduce((r,i)=>xn(i)>xn(r)?i:r),n=Math.ceil((xn(e)-Date.now())/1000),t=n>0?n:void 0;if(t!==this.view.waiting)this.view.waiting=t,this.view.slow=e.name,this.draw()};onResize=()=>{if(this.cols=process.stdout.columns||this.cols,this.rows=process.stdout.rows||this.rows,this.scroll(),this.view.mode==="try"&&this.current)this.reveal();this.pump(),this.draw()};key(e){let n=this.view;if(e==="ctrl-c"){this.finish(2);return}if(n.installing!==void 0)return;if(n.asking!==void 0){this.askKey(e);return}if(e==="focus-in"){this.peek();return}if(e==="focus-out"||e==="nop")return;if((e==="ctrl-v"||e==="alt-v")&&n.panel===void 0){this.fromClipboard();return}if(n.editing!==void 0){this.editKey(e);return}if(n.panel!==void 0){this.panelKey(e);return}if(n.help){if(e==="?"||e==="esc")n.help=!1,this.draw();return}if(this.cols<Gt.cols||this.rows<Gt.rows){if(e==="esc")this.finish(2);return}if(e==="?"){n.help=!0,this.draw();return}if(n.mode==="try"){this.tryKey(e);return}this.gridKey(e)}gridKey(e){let n=this.view,{perRow:t,rowsVis:r}=lr(this.cols,this.rows),o={left:-1,right:1,up:-t,down:t,pgup:-t*r,pgdn:t*r,home:-n.focus,end:n.tiles.length}[e];if(o!==void 0){this.focus(n.focus+o);return}if(e==="enter"&&n.tiles[n.focus]){n.mode="try",n.error=void 0,this.select();return}if(e==="v"){this.fromClipboard();return}if(e==="c"){n.preset=n.preset==="cutouts"?"all":"cutouts",this.turn();return}if(e==="tab"){this.tab=(this.tab+1)%(x.length+1),this.syncSite(),this.turn();return}if(e==="/"){n.editing="",this.draw();return}if(e===" "){this.unfold();return}if(e==="o"){this.openPage();return}if(e==="s"){n.panel=0,this.draw();return}if(e==="esc")this.finish(2)}panelKey(e){let n=this.view,t=n.panel??0,r=n.settings[t];if(e==="up"||e==="down"){n.panel=Math.max(0,Math.min(n.settings.length-1,t+(e==="up"?-1:1))),this.draw();return}if((e==="left"||e==="right")&&r){let i=e==="left"?-1:1;if(r.multi)r.cursor=(r.cursor+i+r.choices.length)%r.choices.length;else{let o=r.choices.indexOf(r.value);r.value=r.choices[(o+i+r.choices.length)%r.choices.length]}this.draw();return}if(e===" "&&r?.multi){let i=r.value.split(" "),o=r.choices.filter((u,c)=>c===r.cursor?!i.includes(u):i.includes(u)),s=r.multi.none;if(o.length>0||s!==void 0)r.value=o.length>0?o.join(" "):s,this.draw();return}if(e==="esc"){n.settings.forEach((i,o)=>{i.value=this.setting(dr[o]?.name??"")}),n.panel=void 0,this.draw();return}if(e==="enter"||e==="alt-c")n.panel=void 0,this.adopt()}adopt(){let e=this.view,n=dr.map((r)=>this.setting(r.name));e.settings.forEach((r,i)=>{let o=dr[i];if(o)this.values.set(o.name,r.value)});let t=dr.filter((r,i)=>this.setting(r.name)!==n[i]);if(t.length===0){this.draw();return}this.save(t),e.rating=Zt(this.setting("TTHEME_FIND_RATING")),e.block=Xt(this.setting("TTHEME_FIND_BLOCK")),e.sets=this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",e.preset=this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",e.order=Kg(this.setting("TTHEME_FIND_ORDER")),e.solo=this.setting("TTHEME_FIND_SOLO")==="on",this.boards.clear(),this.current=void 0,e.shown=void 0,e.mode="grid",this.search()}save(e){this.store(e.map((n)=>[n.name,this.setting(n.name)]))}store(e){let n=Ln(this.home,"ttheme","config.zsh");try{let t=gr(n)?zg(n,"utf8"):"";return Gi(n,e.reduce((r,[i,o])=>nf(r,i,o),t)),!0}catch(t){return this.view.error=t instanceof Error?t.message:String(t),!1}}askKey(e){let n=this.view;if(e==="y"){if(n.asking=void 0,this.store([["TTHEME_FIND_UNBLOCK","1"]])){this.unblock=!0,this.finish(0);return}this.draw();return}if(e==="n"||e==="esc")n.asking=void 0,this.draw()}editKey(e){let n=this.view,t=n.editing??"",r=n.suggest??[];if((e==="up"||e==="down")&&r.length>0){let i=n.pick??-1,o=e==="down"?Math.min(r.length-1,i+1):i-1;n.pick=o<0?void 0:o,this.draw();return}if(e==="esc"||e==="enter")this.quietSuggest();if(e==="esc"){if(n.editing=void 0,n.tag===""){this.finish(2);return}this.draw();return}if(e==="enter"){let i=n.pick===void 0?void 0:r[n.pick],o=i?t.replace(/\S*$/,i.value):t;if(n.editing=void 0,n.suggest=void 0,n.pick=void 0,o.trim()){this.commit(o.trim());return}if(n.tag===""){this.finish(2);return}this.draw();return}if(e==="backspace"){n.editing=t.slice(0,-1),this.suggest(),this.draw();return}if(e.length===1&&e>=" ")n.editing=t+e,this.suggest(),this.draw()}quietSuggest(){clearTimeout(this.suggestTimer),this.suggesting?.abort(),this.suggesting=void 0}suggest(){this.quietSuggest();let e=this.view;e.pick=void 0;let n=/\S*$/.exec(e.editing??"")?.[0]??"";if(!$k(n)){e.suggest=void 0;return}let t=[...new Map(ml(this.catalog.palettes,this.entry,n).map((i)=>[i.booru,{value:i.booru,count:0,palette:i.name}])).values()].slice(0,Ok);e.suggest=t.length>0?t:void 0;let r=new AbortController;this.suggesting=r,this.suggestTimer=setTimeout(async()=>{try{let i=await uh(n,AbortSignal.any([this.signal,r.signal]));if(this.suggesting===r&&e.editing!==void 0){let o=new Map(i.map((u)=>[u.value,u.count])),s=new Set(t.map((u)=>u.value));e.suggest=[...t.map((u)=>({...u,count:o.get(u.value)??0})),...i.filter((u)=>!s.has(u.value))].slice(0,Rk),e.pick=e.pick!==void 0&&e.pick<t.length?e.pick:void 0,this.draw()}}catch{}},kk)}async commit(e){let n=oo(e,this.site??x[0]);if(n){await this.jump(n.site,n.id);return}if(this.picture(e)){await this.attach(e);return}this.view.tag=e,this.boards.clear(),await this.search()}async jump(e,n){let t=++this.gen;this.tab=x.indexOf(e)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ss(`${e.key}|post:${n}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.draw();try{let i=await Wr(e,n,this.signal);if(t!==this.gen)return;if(!i){r.searching=!1,r.error=`${e.name} has no post ${n}`,this.view.error=r.error,this.show(),this.draw();return}this.single(r,{site:e,post:i})}catch(i){this.fail(t,i,e)}}async turn(){this.fetch?.abort(),this.current=void 0,this.view.shown=void 0;let e=this.boards.get(this.boardKey);if(!e){await this.search();return}this.gen++,this.board=e,this.view.error=e.error,this.show(),this.draw(),await this.pump()}unfold(){let e=this.view,n=0;for(let t of this.board.groups){let r=t.open?t.posts.length:1;if(e.focus<n+r){if(t.posts.length<2)return;t.open=!t.open,this.board.focus=n;for(let i of t.posts)if(!this.thumbPath.has(Mn(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.draw();return}n+=r}}openPage(){let e=this.view.tiles[this.view.focus],n=e&&this.posts.get(e.key);if(!n)return;let t=process.platform==="darwin"?"open":"xdg-open";try{fk(t,[n.site.pageUrl(n.post.id)],{stdio:"ignore",detached:!0}).unref()}catch{}}tryKey(e){let n=this.view;if(e==="left"||e==="right"){this.direction=e==="left"?-1:1,this.focus(n.focus+this.direction);return}if(e==="o"){this.openPage();return}if(e==="x"){this.swap();return}if(e==="v"){this.fromClipboard();return}if(e==="enter"){this.install();return}if(e==="esc")this.fetch?.abort(),clearTimeout(this.settle),n.fetching=void 0,n.mode="grid",n.error=void 0,this.draw()}focus(e){let n=this.view;if(n.tiles.length===0)return;let t=Math.max(0,Math.min(n.tiles.length-1,e));if(t===n.focus)return;if(n.focus=t,this.board.focus=t,this.scroll(),this.pump(),n.mode==="try")this.select();this.draw()}scroll(){let e=this.view,{perRow:n,rowsVis:t}=lr(this.cols,this.rows),r=Math.floor(e.focus/n);if(r<e.top)e.top=r;if(r>e.top+t-1)e.top=r-t+1;this.board.top=e.top}query(e){let n=this.view,t=n.tag===this.entry.booru?pl(this.entry,e.key):[n.tag];if(t.length===0)return;let r=t.length>1,i=n.preset==="cutouts"?e.cutouts:"",o=r&&i.includes("~"),s=[r?t.map((a)=>`~${a}`).join(" "):t[0],e.rate(this.view.rating),o?"":i,n.order==="score"?e.best:""].filter(Boolean),u=[],c=[];for(let a of s)if(Cs([...u,a].join(" "))<=e.tagBudget)u.push(a);else c.push(a);return{tags:u.join(" "),notes:[...c.length>0?[`${e.name} takes ${e.tagBudget} tags — ${c.join(" ")} left out`]:[],...o?[`${e.name} ORs the names, so cutouts are told by the file`]:[]]}}async search(){let e=++this.gen,n=ss(this.boardKey,!0);this.board=n,this.boards.set(n.key,n),this.view.error=void 0;let t=this.sites.flatMap((o)=>{let s=this.query(o);return s?[{site:o,...s}]:[]}),r=this.sites.filter((o)=>!t.some((s)=>s.site===o)),i=[...t.flatMap(({notes:o})=>o),...r.length>0?[`${this.entry.name} has no tag on ${r.map((o)=>o.name).join(", ")}`]:[]];if(n.note=i.length>0?i.join(" · "):void 0,t.length===0)n.searching=!1;this.show(),this.draw(),this.tally(e,n,t);try{let o=await Promise.all(t.map(async(s)=>({plan:s,owners:await this.mateOwners(s.site)})));if(e!==this.gen)return;n.sources=o.flatMap(({plan:{site:s,tags:u},owners:c})=>[...Cs(u)+1<=s.tagBudget?[...c.keys()].map((a)=>({site:s,tags:`${u} user:${a}`,page:0,done:!1})):[],{site:s,tags:u,page:0,done:!1}]),this.show(),this.draw(),await this.pump()}catch(o){this.fail(e,o)}}async tally(e,n,t){let r=await Promise.allSettled(t.map(({site:i,tags:o})=>ih(i,o,this.signal)));if(e===this.gen)n.total=r.reduce((i,o)=>i+(o.status==="fulfilled"?o.value:0),0),this.show(),this.draw()}fail(e,n,t=this.site){if(e!==this.gen||this.signal.aborted)return;this.board.error=Bu(t?.name??this.tabName,n),this.board.searching=!1,this.view.error=this.board.error,this.offer(t,n),this.show(),this.draw()}offer(e,n){if(e&&!this.view.unblocked&&Ri()&&mr(n)==="ECONNRESET")this.view.asking=e.name}drop(e,n,t){for(let r of e.sources)if(r.site===n)r.done=!0;e.note=[e.note,Bu(n.name,t)].filter(Boolean).join(" · "),this.offer(n,t)}wants(){let{perRow:e,rowsVis:n}=lr(this.cols,this.rows);return this.view.tiles.length<(this.board.top+n+Yg)*e}need(){let{perRow:e,rowsVis:n}=lr(this.cols,this.rows);return(n+Yg)*e}live(e){return this.boards.get(e.key)===e}page(e,n,t){let r=`${e.key}|${n}|${t}`,i=this.pages.get(r);if(!i)i=rh(e,n,t,this.signal).then((o)=>this.borrow(o)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(e){let n=e.filter((t)=>t.solo===void 0&&t.md5!=="");if(n.length>0)try{oh(n,await sh(n.map((t)=>t.md5),this.signal))}catch{}return e}async round(e){let n=x.flatMap((u)=>{let c=e.sources.find((a)=>a.site===u&&!a.done);return c?[c]:[]}),t=await Promise.all(n.map(async(u)=>{try{return{source:u,posts:await this.page(u.site,u.tags,u.page)}}catch(c){if(e.sources.every((a)=>a.site===u.site)||this.signal.aborted)throw c;return this.drop(e,u.site,c),{source:u,posts:void 0}}}));if(!this.live(e))return;let r=[];for(let{source:u,posts:c}of t){if(!c)continue;u.page++,u.done=c.length<$t;let a=e.last.get(u);for(let h of c){let f=a&&Hg(a.post,h)?a.set:`set:${u.site.key}:${h.id}`;a={post:h,set:f};let l=Mn(u.site,h.id);if(e.seen.has(l))continue;e.seen.add(l);let g={site:u.site,post:h};if(this.eligible(g))e.kin.set(g,[f,...Pg(u.site,h)]),r.push(g);else e.checked++}if(a)e.last.set(u,a)}let i=this.dedupe(e,r),o=++e.rounds,s;if(this.view.order!=="fit")s=n.length>1?Rg(i):i;else{let u=is(i,this.frame(),this.matched),c=u.slice(0,this.need());if(await this.looks(c),!this.live(e))return;s=[...is(c,this.frame(),this.matched),...u.slice(c.length)]}for(let u of s)e.roundOf.set(u,o);e.queue.push(...s),this.ahead(e)}ahead(e){if(this.aheading||this.view.order!=="fit"||!this.live(e))return;let n=e.queue.slice(0,this.need()).filter((t)=>!this.looking.has(Mn(t.site,t.post.id)));if(n.length===0)return;this.aheading=!0,this.looks(n).then(()=>{this.aheading=!1;for(let t of new Set(n.map((r)=>e.roundOf.get(r)??0)))this.resort(e,t);this.ahead(e)})}resort(e,n){let t=e.queue.flatMap((i,o)=>e.roundOf.get(i)===n?[o]:[]),r=is(t.map((i)=>e.queue[i]),this.frame(),this.matched);t.forEach((i,o)=>{e.queue[i]=r[o]})}dedupe(e,n){let t=[];for(let r of n){let i=Xu(r.post),o=i.map((u)=>e.same.get(u)).find(Boolean);if(!o){for(let u of i)e.same.set(u,r);t.push(r);continue}if(e.checked++,Zg(r.post)<=Zg(o.post))continue;for(let u of[...i,...Xu(o.post)])e.same.set(u,r);let s=t.indexOf(o);if(s>=0){t[s]=r;continue}this.replace(e,o,r)}return t}replace(e,n,t){e.roundOf.set(t,e.roundOf.get(n)??0);let r=e.queue.indexOf(n);if(r>=0){e.queue[r]=t;return}for(let i of e.groups){let o=i.posts.indexOf(n);if(o>=0){i.posts[o]=t,this.posts.set(Mn(t.site,t.post.id),t),this.thumbQueue.push(t),this.thumbs();return}}}async looks(e){let n=0;await Promise.all(Array.from({length:_g},async()=>{while(n<e.length)await this.look(e[n++])}))}look(e){let n=Mn(e.site,e.post.id),t=this.looking.get(n);if(!t)t=(async()=>{let r=this.previewPath(e);await this.cached(e.site,r,e.post.preview);let i=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(n,i),this.matched.set(e.post,i.match),i})().catch(()=>{return}),this.looking.set(n,t);return t}async pump(){let e=this.gen,n=this.board;if(this.pumping===e||n.sources.length===0)return;this.pumping=e;let t=[],r;try{n.searching=!0;while(e===this.gen){while(t.length<Wg&&n.queue.length>0&&this.wants()){let s=n.queue.shift();t.push({pick:s,passed:this.vet(s)})}if(this.ahead(n),!r&&n.queue.length<Wg&&n.sources.some((s)=>!s.done)&&this.wants()){let s=this.round(n).then(()=>{if(r===s)r=void 0});s.catch(()=>{}),r=s}let i=t.shift();if(!i){if(!r)break;await r,this.show(),this.draw();continue}let o=await i.passed;if(e!==this.gen)return;if(n.checked++,o)this.admit(i.pick);this.show(),this.draw()}if(e===this.gen)n.searching=!1,this.show(),this.draw()}catch(i){this.fail(e,i)}finally{if(this.saveProbes(),this.pumping===e)this.pumping=0}}eligible({site:e,post:n}){let t=kt(n);if(!uo(e,n,this.view.rating)||so(n,this.view.block).length>0||!t)return!1;if(this.view.solo&&n.solo===!1)return!1;return this.view.preset==="all"?["png","jpg","jpeg"].includes(t.ext):n.ext==="png"}async vet(e){let[n]=await Promise.all([this.passes(e),this.look(e)]);return n}async passes({site:e,post:n}){return this.view.preset==="all"||e.vouched||this.transparent(e,n)}probes(e){let n=this.probed.get(e.key);if(!n)n=Du(e,"probes.json"),this.probed.set(e.key,n);return n}async transparent(e,n){let t=this.probes(e),r=t[n.id];if(r!==void 0)return r;try{let i=(await ch(e,n.file,this.signal))?.alpha===!0;return t[n.id]=i,this.unsaved.add(e.key),i}catch{return!1}}saveProbes(){for(let e of this.unsaved){let n=x.find((t)=>t.key===e);if(n)xu(n,"probes.json",this.probes(n))}this.unsaved.clear()}admit(e){let{site:n,post:t}=e,r=this.board,i=Mn(n,t.id);this.posts.set(i,e);let o=r.kin.get(e)??[],s=this.looked.get(i),u=s&&{hash:s.hash,width:t.width,height:t.height},c=this.view.sets==="fold"?this.kindred(r,o,u):void 0;if(c){if(c.posts.push(e),this.register(r,c,o,u),c.open)this.thumbQueue.push(e),this.thumbs();return}let a={posts:[e],open:!1};r.groups.push(a),this.register(r,a,o,u),this.thumbQueue.push(e),this.thumbs()}kindred(e,n,t){for(let r of n){let i=e.kindred.get(r);if(i)return i}return t&&e.shapes.find((r)=>Ag(r.shape,t))?.group}register(e,n,t,r){for(let i of t)if(!e.kindred.has(i))e.kindred.set(i,n);if(r)e.shapes.push({shape:r,group:n})}async mateOwners(e){let n=this.owners.get(e.key);if(n)return n;let t=qh(this.home),r=Du(e,"owners.json"),i=this.catalog.palettes.flatMap((c)=>{let a=t.get(c.name);return c.group===this.entry.group&&c.name!==this.entry.name&&a?.site===e.key?[{name:c.name,id:a.id}]:[]}),o=await Promise.all(i.map(async(c)=>{let a=r[c.id];if(a!==void 0)return{...c,owner:a};try{return{...c,owner:(await Wr(e,c.id,this.signal))?.owner??""}}catch{return}})),s=new Map;for(let c of o)if(c)r[c.id]=c.owner,s.set(c.name,c.owner);xu(e,"owners.json",r);let u=nh(s);return this.owners.set(e.key,u),u}async cached(e,n,t,r){if(gr(n))return gk(n).size;let i=this.inflight.get(n);if(i)return i;let o=(async()=>{let s=await ao(e,t,this.signal,r);return Ti(os(n),{recursive:!0}),Gi(n,s),s.length})();this.inflight.set(n,o);try{return await o}finally{this.inflight.delete(n)}}thumbs(){while(this.thumbing<_g&&this.thumbQueue.length>0){let e=this.thumbQueue.shift();this.thumbing++,this.thumb(e).catch(()=>{}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(e){let{site:n,post:t}=e,r=ze.cols*this.cell.w,i=ze.rows*this.cell.h,o=Ln(pn(n),"tile",`${Xg(t)}-${r}x${i}.png`);if(!gr(o)){let s=this.previewPath(e);await this.cached(n,s,t.preview),await this.renders.run({job:"thumb",from:s,to:o,width:r,height:i})}this.thumbPath.set(Mn(n,t.id),o),this.show(),this.draw()}select(){let e=this.view,n=e.tiles[e.focus];if(this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,!n)return;if(this.current?.key===n.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(n),yk),this.draw()}async load(e){let n=this.view,t=this.posts.get(e.key),r=t&&kt(t.post);if(!t||!r)return;let{site:i}=t,o=this.board,s=new AbortController;this.fetch=s;try{let u=this.origPath(i,e.id,r.ext);if(!gr(u))n.fetching={id:e.key,got:0,size:0},this.draw();let c=await this.cached(i,u,r.file,(f,l)=>{if(n.fetching?.id===e.key)n.fetching={id:e.key,got:f,size:l},this.draw()});if(s.signal.aborted)return;if(n.fetching=void 0,o!==this.board)return;let a={site:i,id:e.id,key:e.key,path:u,ext:r.ext,size:c,using:"plain",failed:!1};n.preparing=e.key,this.flush();let h=await this.render(a,"plain");if(s.signal.aborted||o!==this.board)return;if(h.clear===0&&Oi()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(n.preparing=void 0,n.cutting=e.key,this.flush(),a.cut=await this.cutOut(i,e.id,u,s.signal),s.signal.aborted||o!==this.board)return;if(n.cutting=void 0,a.cut){n.preparing=e.key,this.flush();let f=await this.render(a,"cut").catch(()=>{return});if(s.signal.aborted||o!==this.board)return;if(f&&qo(f.clear))a.using="cut";else zu(a.cut,{force:!0}),a.cut=void 0,a.failed=!0}else a.failed=!0}if(this.current=a,n.tiles[n.focus]?.key===e.key)await this.present();this.preload()}catch(u){if(!s.signal.aborted&&!this.signal.aborted)n.error=Bu(i.name,u)}finally{if(n.fetching?.id===e.key)n.fetching=void 0;if(n.preparing===e.key)n.preparing=void 0;if(n.cutting===e.key)n.cutting=void 0;this.draw()}}async cutOut(e,n,t,r){let i=Ln(pn(e),"cut",`${n}.png`);if(gr(i))return i;try{return Ti(os(i),{recursive:!0}),await Yo(t,i,r),i}catch{zu(i,{force:!0});return}}swap(){let e=this.current;if(!e?.cut||this.view.shown?.id!==e.key)return;e.using=e.using==="cut"?"plain":"cut",this.reveal()}preload(){let e=this.view;if(e.mode!=="try")return;for(let n of[e.focus+this.direction,e.focus-this.direction]){if(this.prefetching>=Ek)return;let t=e.tiles[n],r=t&&this.posts.get(t.key),i=r&&kt(r.post);if(!r||!i)continue;let{site:o,post:s}=r,u=this.origPath(o,s.id,i.ext);this.prefetching++,this.cached(o,u,i.file).then(()=>this.render({site:o,id:s.id,key:t.key,path:u,ext:i.ext,size:0,using:"plain",failed:!1},"plain")).catch(()=>{}).finally(()=>{this.prefetching--})}}async render(e,n){let t=this.cols*this.cell.w,r=this.rows*this.cell.h,i=Math.min(t,Nk),o=Math.max(1,Math.round(r*i/t)),s=Ln(this.scratch,`${e.site.key}-${e.id}${n==="cut"?"c":""}-${i}x${o}.png`),u=`${e.site.key}:${e.id}:${n}`,c=this.clarity.get(u);if(c!==void 0&&gr(s))return{clear:c,path:s};let a=await this.renders.run({job:"show",from:n==="cut"?e.cut:e.path,to:s,width:i,height:o,colors:this.entry,tone:this.tone});return this.clarity.set(u,a),{clear:a,path:s}}async present(){let e=this.current;if(!e)return;let n=e.using,{clear:t,path:r}=await this.render(e,n);if(this.current!==e||e.using!==n)return;this.view.shown={id:e.key,clear:t,bytes:e.size,path:r,cut:e.cut?n==="cut"?"on":"off":e.failed?"failed":"none"}}reveal(){let e=this.view;e.preparing=this.current?.key,this.flush(),this.present().catch((n)=>{e.error=n instanceof Error?n.message:String(n)}).finally(()=>{if(e.preparing===this.current?.key)e.preparing=void 0;this.draw()})}async install(){let e=this.view,n=e.tiles[e.focus],t=this.current;if(!n||t?.key!==n.key||e.preparing!==void 0||e.shown?.id!==n.key)return;e.installing=n.key,e.error=void 0,this.flush();try{await this.renders.run({job:"backdrop",from:t.using==="cut"?t.cut:t.path,source:t.path,home:this.home,colors:this.entry,tone:this.tone,origin:{site:t.site.key,id:t.id,ext:t.ext,from:`${t.site.name} ${t.id} ${t.site.pageUrl(t.id)}`},width:this.cols*this.cell.w,height:this.rows*this.cell.h});let r=Du(t.site,"owners.json");r[t.id]=this.posts.get(t.key)?.post.owner??"",xu(t.site,"owners.json",r),ht(this.home),e.saved=`background · ${this.entry.name} ← ${t.site.name} ${t.id}`,e.installed.push(n.key),this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,e.mode="grid"}catch(r){e.error=r instanceof Error?r.message:String(r)}e.installing=void 0,this.draw()}draw(){if(this.dirty)return;this.dirty=!0,setImmediate(()=>{this.dirty=!1,this.flush()})}flush(){let e=Ng(this.view,this.cols,this.rows),n="\x1B[?2026h";e.lines.forEach((r,i)=>{n+=`\x1B[${i+1};1H\x1B[K${r}`});let t=new Set;for(let r of e.images){if(t.add(r.id),this.sent.get(r.id)!==r.path)n+=bg(r),this.sent.set(r.id,r.path),this.placed.delete(r.id);let i=`${r.row};${r.col};${r.cols};${r.rows};${r.z}`;if(this.placed.get(r.id)!==i)n+=kg(r),this.placed.set(r.id,i)}for(let r of this.sent.keys())if(!t.has(r))n+=Eg(r),this.sent.delete(r),this.placed.delete(r);this.write(`${n}\x1B[?2026l`)}}async function Dg(e){if(Pi())return Fi();let n=ge(),t=cr(n),r=Ft(t.palettes,e);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Bg(n,t,r,r.booru??""),o=await i.run(),s=i.unblock?await Fi():o;if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
514
- `),0;return s}function xg(e,n){let t=ge();if(Ft(cr(t).palettes,e),n==="next"||n==="prev"){let{key:r,at:i,of:o}=Ch(t,e,n==="next"?1:-1);return ht(t),process.stderr.write(`background · ${e} ${i}/${o} ${r}
515
- `),0}if(n==="drop"){let{key:r,left:i}=Kh(t,e);return ht(t),process.stderr.write(`background · ${e} removed ${r} · ${i} left
516
- `),0}if(n==="tuned")return ht(t),0;throw Error(`unknown image action ${n} — next, prev, drop or tuned`)}import{execFileSync as Ed,spawnSync as Ck}from"node:child_process";import{chmodSync as Kk,copyFileSync as Wk,existsSync as tn,mkdirSync as ic,readdirSync as _k,readFileSync as br,rmSync as bd,writeFileSync as Qk}from"node:fs";import{homedir as qk}from"node:os";import{dirname as $r,join as ye}from"node:path";import{existsSync as Jk}from"node:fs";import{openSync as Pk,writeSync as Hk}from"node:fs";import{ReadStream as Lk}from"node:tty";var ed=["10","11","12","17",...Array.from({length:16},(e,n)=>`4;${n}`)];function Ui(e=process.env){return Boolean(e.NO_COLOR)||e.TERM==="dumb"}function us(e){return[`\x1B]11;${e.background}\x1B\\`,`\x1B]10;${e.foreground}\x1B\\`,`\x1B]12;${e.cursor}\x1B\\`,`\x1B]17;${e.selection}\x1B\\`,...e.ansi.map((n,t)=>`\x1B]4;${t};${n}\x1B\\`)].join("")}function nd(e){let n=new Map;for(let t of e.split("\x1B")){let r=t.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,o]=r??[];if(i&&o)n.set(i,o)}return n}function td(e){return[...e].map(([n,t])=>`\x1B]${n};${t}\x1B\\`).join("")}async function rd(){let e,n;try{e=Pk("/dev/tty","r+"),n=new Lk(e),n.setRawMode(!0)}catch{return new Map}try{Hk(e,ed.map((r)=>`\x1B]${r};?\x1B\\`).join(""));let t="";return await new Promise((r)=>{let i=setTimeout(r,120);n.on("data",(o)=>{if(t+=o.toString(),nd(t).size>=ed.length)clearTimeout(i),r()})}),nd(t)}finally{n.setRawMode(!1),n.destroy()}}function pr(e){let n=e.replace("#","");return[n.slice(0,2),n.slice(2,4),n.slice(4,6)].map((t)=>Number.parseInt(t,16)).join(";")}function id(e,n){return`\x1B[48;2;${pr(n)}m ${e} \x1B[0m`}function ec(e,n){return`\x1B[48;2;${pr(e)};38;2;${pr(n)}m ● \x1B[0m`}function od(e){return`\x1B[38;2;${pr(e)}m`}function nc(e,n){return`\x1B[48;2;${pr(n)}m${e.map((t)=>`\x1B[38;2;${pr(t)}m▄`).join("")} \x1B[0m`}function cs(e,n){let t=n.toLowerCase();return[e.name,e.group,e.native??""].some((r)=>r.toLowerCase().includes(t))}function ud(e,n,t){let r=t.trim(),i=[],o=new Set;for(let s of e){if(s.default||o.has(s.group))continue;o.add(s.group);let u=e.filter((h)=>!h.default&&h.group===s.group),c=r?u.filter((h)=>cs(h,r)):u;if(r&&c.length===0)continue;let a=r.length>0||n.has(s.group);if(i.push({kind:"group",name:s.group,native:s.native,lead:u.find((h)=>h.lead)??s,expanded:a,count:c.length}),a)i.push(...c.map((h)=>({kind:"palette",entry:h})))}return i}function Ak(e,n){let t=n.trim(),r=new Set(e.filter((i)=>!i.default&&(t===""||cs(i,t))).map((i)=>i.group));return ud(e,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function Tk(e){let n=e.findIndex((t)=>t.kind==="palette");return n===-1?0:n}var En="\x1B[0m",wr="\x1B[2m",Gk="\x1B[1m",sd="\x1B[1;7m",Uk="\x1B[36m",jk="\x1B[33m";function cd(e){return e==="decode"||e==="glitch"?e:"typewriter"}class tc extends On{picked;scope;entries;named;series;seriesPad;expanded=new Set;rows=[];cursor=0;top=0;maxItems;color;lastInput="";lastFocused="";onFocus;example="";fx;fxStep=0;fxSeed=0;fxTimer;constructor(e){super({render:()=>this.draw(),input:e.input,output:e.output,validate:e.required?()=>this.picked.size===0?`pick at least one ${this.scope}`:void 0:void 0},!0);this.entries=e.entries,this.scope=e.scope??"palette",this.picked=new Set(e.installed??[]),this.named=e.entries.filter((t)=>!t.default),this.series=[...new Set(this.named.map((t)=>t.group))],this.seriesPad=Math.max(0,...this.series.map((t)=>t.length)),this.maxItems=e.maxItems??12,this.color=e.color??!0,this.fx=e.fx??"typewriter",this.onFocus=e.onFocus,this.rollExample();let n=setInterval(()=>{this.rollExample(),this.fxStep=8,this.output.emit("resize")},3000);n.unref?.(),this.once("finalize",()=>{clearInterval(n),clearTimeout(this.fxTimer)}),this.rebuild("first"),this.on("cursor",(t)=>{if(t==="up")this.move(-1);else if(t==="down")this.move(1);else if(t==="left")this.fold(!1);else if(t==="right")this.fold(!0)}),this.on("userInput",(t)=>{if(t!==this.lastInput)this.lastInput=t,this.rebuild("keep")}),this.on("key",(t,r)=>{if(r?.name==="space")this.pick(this.rows[this.cursor])})}_isActionKey(e){return e==="\t"||e===" "}members(e){let n=this.scope==="palette"?this.userInput.trim():"";return this.named.filter((t)=>t.group===e&&(n===""||cs(t,n)))}everyone(e){return e.flatMap((n)=>n.kind==="group"?this.members(n.name):[])}pick(e){let n=e?.kind==="palette"?[e.entry.name]:e?.kind==="group"?this.members(e.name).map((r)=>r.name):e?.kind==="all"?this.everyone(this.rows).map((r)=>r.name):[];if(n.length===0)return;let t=n.some((r)=>!this.picked.has(r));for(let r of n)if(t)this.picked.add(r);else this.picked.delete(r)}pickedIn(e){return this.members(e).filter((n)=>this.picked.has(n.name)).length}pickedCount(){if(this.scope==="palette")return this.picked.size;return this.series.filter((e)=>this.members(e).every((n)=>this.picked.has(n.name))).length}rollExample(){let e=this.named[Math.floor(Math.random()*this.named.length)],n=this.series[Math.floor(Math.random()*this.series.length)];if(!e||!n){this.example="";return}let t=`${e.name} | ${n}`;this.example=t.length>30?`${t.slice(0,29)}…`:t,this.fxSeed=Math.floor(Math.random()*997)}animatedExample(){if(this.fxStep===0)return this.example;if(!this.fxTimer)this.fxTimer=setTimeout(()=>{this.fxTimer=void 0,this.fxStep-=1,this.output.emit("resize")},60),this.fxTimer.unref?.();let e=Math.floor(this.example.length*(8-this.fxStep)/8);if(this.fx==="typewriter")return`${this.example.slice(0,e)}▏`;let n=this.fx==="decode"?"abcdefghijklmnopqrstuvwxyz":"▓▒░#*+=<>?/-_",t=this.fx==="decode"?(r)=>!/[a-z0-9]/i.test(r):(r)=>r===" ";return[...this.example].map((r,i)=>i+(i*7+this.fxSeed)%3<e||t(r)?r:n[Math.floor(Math.random()*n.length)]??r).join("")}sync(){let e=this.rows[this.cursor],n=e?.kind==="palette"?e.entry:e?.kind==="group"&&this.scope==="series"?e.lead:void 0;if(n&&n.name!==this.lastFocused)this.lastFocused=n.name,this.onFocus?.(n)}rebuild(e){let n=this.rows[this.cursor],t=this.scope==="series"?Ak(this.entries,this.userInput):ud(this.entries,this.expanded,this.userInput),r=t.length>0?Tk(t)+1:0;if(this.rows=t.length>0?[{kind:"all",count:this.allCount(t)},...t]:[],e==="first")this.cursor=r;else if(e==="keep"){let i=n?.kind==="palette"?n.entry.name:"",o=i?this.rows.findIndex((s)=>s.kind==="palette"&&s.entry.name===i):-1;this.cursor=o===-1?r:o}else if(this.cursor>=this.rows.length)this.cursor=Math.max(0,this.rows.length-1);this.sync()}allCount(e){return this.scope==="series"?e.length:this.everyone(e).length}move(e){let n=this.cursor+e;if(n>=0&&n<this.rows.length)this.cursor=n;this.sync()}toggle(e){if(this.expanded.has(e))this.expanded.delete(e);else this.expanded.add(e);this.rebuild("clamp")}fold(e){if(this.userInput||this.scope==="series")return;let n=this.rows[this.cursor];if(n?.kind==="group"){if(e!==n.expanded)this.toggle(n.name)}else if(n?.kind==="palette"&&!e&&!n.entry.default){let t=n.entry.group;if(this.expanded.delete(t),this.rebuild("clamp"),this.cursor=this.rows.findIndex((r)=>r.kind==="group"&&r.name===t),this.cursor===-1)this.cursor=0;this.sync()}}renderRow(e,n){let t=n?"▶ ":" ";if(e.kind==="all"){let o=this.everyone(this.rows).every((u)=>this.picked.has(u.name))?"● ":"○ ",s=`(${e.count})`;return`${t}${o}select all ${this.color?`${wr}${s}${En}`:s}`}if(e.kind==="group"&&this.scope==="series"){let o=this.pickedIn(e.name)===e.count?"● ":"○ ",s=e.name.padEnd(this.seriesPad),u=`(${e.count})${e.native?` ${e.native}`:""}`;if(!this.color)return`${t}${o}${s} ${u}`;let c=e.lead;return`${t}${o}${s} ${ec(c.background,c.cursor)}${nc(c.ansi.slice(1,7),c.background)} ${wr}${u}${En}`}if(e.kind==="group"){let o=e.expanded?"▾":"▸",s=this.rows[this.cursor],u=s?.kind==="palette"&&s.entry.group===e.name?s.entry:void 0,c=this.color?n?`${sd} ${e.name} ${En}`:u?`${sd}${od(u.cursor)} ${e.name} ${En}`:` ${Gk}${e.name}${En} `:n?`[${e.name}]`:` ${e.name}`,a=this.color?id("●",e.lead.selection):"",h=`${this.pickedIn(e.name)}/${e.count}`,f=this.color?` ${wr}(${h})${En}`:` (${h})`,l=e.native?this.color?` ${wr}${e.native}${En}`:` ${e.native}`:"";return`${o}${c}${a}${f}${l}`}let r=e.entry,i=this.picked.has(r.name)?"● ":"○ ";if(!this.color)return` ${t}${i}${r.name.padEnd(13)} ● · ${r.ansiSource}`;return` ${t}${i}${r.name.padEnd(13)} ${ec(r.background,r.cursor)}${nc(r.ansi.slice(1,7),r.background)} ${wr}${r.ansiSource}${En}`}draw(){let e=(d)=>this.color?`${wr}${d}${En}`:d,n=(d)=>this.color?`${Uk}${d}${En}`:d,t=this.scope==="series"?"series":"catalog";if(this.state==="submit")return`${e("◇")} ${t} ${e(`· ${this.pickedCount()} picked`)}`;if(this.state==="cancel")return`${e(`◇ ${t} · cancelled`)}`;let r=this.userInput.trim(),i=this.scope==="series"?this.series.length:this.named.length,o=this.scope==="series"?this.rows.filter((d)=>d.kind==="group").length:r?this.named.filter((d)=>cs(d,r)).length:i,s=`${n("◆")} ${t} ${e(`(${o}/${i} · ${this.pickedCount()} picked)`)}`,u=`${n("│")} ${this.userInput?`⌕ ${this.userInput}_`:e(`⌕ search…${this.example?` e.g. ${this.animatedExample()}`:""}`)}`;if(this.cursor<this.top)this.top=this.cursor;if(this.cursor>=this.top+this.maxItems)this.top=this.cursor-this.maxItems+1;this.top=Math.min(this.top,Math.max(0,this.rows.length-this.maxItems));let c=this.rows.slice(this.top,this.top+this.maxItems),a=c.length>0?c.map((d,b)=>`${n("│")} ${this.renderRow(d,this.top+b===this.cursor)}`):[`${n("│")} ${e(`no ${this.scope==="series"?"series":"palettes"} match '${this.userInput}'`)}`];while(a.length<this.maxItems)a.push(n("│"));let h=this.rows.length-this.top-c.length,f=h>0?`${n("│")} ${e(`↓ ${h} more`)}`:n("│"),l=this.scope==="series"?"":" · ←→ fold",g=this.scope==="series"?"continue":"install",m=this.state==="error"?`${n("└")} ${this.color?`${jk}${this.error}${En}`:this.error}`:`${n("└")} ${e(`↑↓ move${l} · space pick · type to filter · enter ${g} · esc cancel`)}`;return[s,u,...a,f,m].join(`
517
- `)}}function rc(e){console.log(`
518
- ${e} palettes installed — open a new tab, or reload your terminal config`)}async function ad(e){let n=ge(),t=Le(n),r=[...new Set(e.map((c)=>c.startsWith(ct)?Vl(n,c,t):c))],i=ke(n),o=r.filter((c)=>i.palettes.includes(c)),s=r.filter((c)=>!i.palettes.includes(c));if(s.length===0){en(n,t,i),console.log(`already installed: ${o.join(", ")}`);return}let u={...i,palettes:[...i.palettes,...s]};ft(n,t,i,u);for(let c of s)console.log(` + ${c}`);await Tt(n,Ge(n,t,!1).palettes.filter((c)=>s.includes(c.name)),u.terminals),rc(u.palettes.length)}function hd(e){let n=ge(),t=Le(n),r=ke(n),i=e.filter((u)=>r.palettes.includes(u)),o=e.filter((u)=>!r.palettes.includes(u));if(i.length===0)throw Error(`not installed: ${o.join(", ")} — \`ttheme list\` marks what is`);let s={...r,palettes:r.palettes.filter((u)=>!i.includes(u))};ft(n,t,r,s),Au(n,t,r.terminals,i);for(let u of i)console.log(` - ${u}`);if(rc(s.palettes.length),o.length>0)return console.error(`ttheme remove: not installed: ${o.join(", ")}`),1;return 0}function fd(e){let n=ge(),t=Le(n),r=ke(n);if(!r.palettes.includes(e))throw Error(`${e} is not installed — \`ttheme add ${e}\` first`);let{off:i,...o}=r,s=_n(),u=vi({...o,startup:e},s);en(n,t,u),Qn(n,u);let c=Lt(u,s);console.log(dd(e,u.terminals,c&&s.running()).join(`
519
- `))}function ld(){let e=ge(),n=ke(e),t=qn(n);if(!t)throw Error("no palettes installed — `ttheme browse` picks some");if(!n.off){console.log(`already on · ${t}`);return}let{off:r,...i}=n,o=ft(e,Le(e),n,i);console.log(dd(t,i.terminals,o).join(`
520
- `))}function gd(){let e=ge(),n=ke(e);if(n.off){console.log("already off");return}let t=ft(e,Le(e),n,{...n,off:!0}),r=qn(n);if(console.log(`off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`),t)console.log("iterm2 new tabs open on your own profile once iTerm2 restarts")}function dd(e,n,t){let r=n.filter((o)=>o!=="iterm2"),i=r.length>0?[`default ${e} · ${r.join(", ")} open new tabs with it once their config reloads`]:[];if(n.includes("iterm2"))i.push(t?'iterm2 new tabs open with it once iTerm2 restarts — "ttheme · default" is now its default profile':'iterm2 new tabs open with it — "ttheme · default" is its default profile');return i.length>0?i:[`default ${e} · no terminal is wired to open with it — \`ttheme init\` wires one`]}function md(e,n){let t=new Map(n.palettes.map((r)=>[r.name,"market"]));for(let r of Ho(e,n.palettes,!1))t.set(r.name,"mine");return t}function pd(e,n=!1){let t=ge(),r=Le(t),i=new Set(ke(t).palettes),o=md(t,r),s=cn(Ge(t,r).palettes),u=qr(e?dl(s,e):s),c=(f)=>o.get(f)??"kept";if(n){let f=u.map((l)=>({name:l.name,group:l.group,installed:i.has(l.name),source:c(l.name)}));console.log(JSON.stringify(f,null,2));return}let a=Math.max(...u.map((f)=>f.name.length),0),h={market:"",mine:" · yours",kept:" · in no market you added"};for(let f of u)console.log(` ${i.has(f.name)?"●":"○"} ${f.name.padEnd(a)} ${f.group}${h[c(f.name)]}`);if(process.stdout.isTTY){let f=e?`${u.length} of ${s.length}`:`${s.length}`;console.log(`
521
- ${f} palettes — ${u.filter((l)=>i.has(l.name)).length} installed`)}}async function wd(){let e=ge(),n=or(e);if(n.length===0)console.log("no markets to update — `ttheme market add official` brings the ttheme catalog back");for(let u of n)try{console.log(` ${await Jl(e,u)}`)}catch(c){let a=(()=>{try{return Fo(u)}catch{return ut(u)}})();console.log(` ${a}: ${c.message} — kept the copy from the last update`)}if(!Jk(ir(e)))return;let t=Le(e),r=ke(e),i=md(e,t),o=r.palettes.filter((u)=>!i.has(u)),s=new Map(yi(e).map((u)=>[u.name,u.pictures]));en(e,t,r);for(let u of o)console.log(` ${u} left its market — ttheme keeps the copy you have`);await Tt(e,Ge(e,t,!1).palettes.filter((u)=>r.palettes.includes(u.name)&&s.has(u.name)).map((u)=>Zo(u,s.get(u.name))),r.terminals)}async function as(e,n,t,r=!1){let i=process.env.TTHEME_SORT==="series"?e.palettes:qr(e.palettes),o=process.stdout.isTTY===!0&&!Ui(),s=o?await rd():new Map,u=new tc({entries:i,scope:t,installed:n,required:r,color:!Ui(),fx:cd(process.env.TTHEME_FX),onFocus:o?(a)=>process.stdout.write(us(a)):void 0}),c=await u.prompt();if(process.stdout.write(td(s)),an(c))return;return e.palettes.filter((a)=>u.picked.has(a.name)).map((a)=>a.name)}async function $d(){let e=ge(),n=Le(e),t=ke(e),r=await as(Ge(e,n),t.palettes,"palette");if(!r){console.log("nothing changed");return}let i=t.palettes.filter((u)=>!r.includes(u)),o=r.filter((u)=>!t.palettes.includes(u));if(o.length===0&&i.length===0){console.log("nothing changed");return}let s={...t,palettes:r};ft(e,n,t,s),Au(e,n,t.terminals,i);for(let u of o)console.log(` + ${u}`);for(let u of i)console.log(` - ${u}`);await Tt(e,Ge(e,n,!1).palettes.filter((u)=>o.includes(u.name)),s.terminals),rc(s.palettes.length)}function Yk(e,n,t){for(let r of _k(n))e.push({from:ye(n,r),to:ye(t,r)})}function yd(e){return JSON.parse(br(ye(e,"dist","manifest.json"),"utf8"))}function oc(e,n){let t=ye(n.configHome,"ttheme"),r=[{from:ye(n.root,"bin","ttheme.js"),to:ye(t,"ttheme.js")},{from:ye(n.root,"bin","ttheme.js.map"),to:ye(t,"ttheme.js.map")},{from:ye(n.root,"shell","ttheme.zsh"),to:ye(t,"ttheme.zsh")},{from:ye(n.root,"shell","launch-tab.zsh"),to:ye(t,"launch-tab.zsh"),executable:!0}];Yk(r,ye(n.root,"shell","adapters"),ye(t,"adapters"));let i=[{file:ye(n.zdotdir,".zshrc"),block:Dh(t)}],o=ye(t,"config.zsh"),s=tf(tn(o)?br(o,"utf8"):""),u={file:o,content:s},c=[];if(e.terminals.includes("alacritty")){let f=At(n.configHome);if(tn(f)&&ci(br(f,"utf8"),void 0)===void 0)c.push(`${f} already imports files under [general] — ttheme left it alone; add ${ye(n.configHome,"alacritty","themes")}/<palette>.toml to that import list yourself`)}if(e.terminals.includes("wezterm")){let f=fr(n.configHome,n.home);if(tn(f)&&ai(br(f,"utf8"),"")===void 0)c.push(`${f} has no \`return config\` line — ttheme left it alone; call \`dofile("${ye(t,"wezterm.lua")}")(config)\` from it yourself`)}let a=e.terminals.includes("windows-terminal");if(a&&!n.wtHome)c.push("windows terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself");if(e.terminals.includes("warp"))c.push("warp: wears the default palette app-wide through its settings.toml — the shell layer stays off in it, since Warp paints no tab background of its own");let h={terminals:e.terminals,palettes:e.palettes,...a&&n.wtHome?{wtHome:n.wtHome}:{},...a&&n.wtProfile?{wtProfile:n.wtProfile}:{},...e.off?{off:!0}:{}};return c.push(...Rl(n.configHome,e.terminals,n.home)),{home:n.home,copies:r,edits:i,settings:u,catalog:yd(n.root),installed:h,notes:c}}function Zk(e){try{return ke(e)}catch{return}}function Xk(e){try{return Ge(e,Le(e),!1).palettes}catch{return[]}}function Vk(e,n){let t=oc({terminals:e.terminals,palettes:e.palettes,off:e.off},n),r=new Set([...t.catalog.palettes,...Xk(n.configHome)].map((h)=>h.name)),i=e.palettes.filter((h)=>r.has(h)),o=e.palettes.filter((h)=>!r.has(h)),{startup:s,...u}=e,c={...u,palettes:i,...s&&i.includes(s)?{startup:s}:{}},a=o.length>0?[`dropped ${o.join(", ")} — no longer in the catalog`,...t.notes]:t.notes;return{...t,installed:c,notes:a}}function zk(e){try{return Ed(process.execPath,[ye(e,"ttheme","ttheme.js"),"--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function Sd(e){let n=bn(e);return[e.terminals.join(", "),`${e.palettes.length} palettes`,n?`default ${n}`:"no default — ttheme is off"].join(" · ")}function Bk(e){try{return ke(e).itermBase}catch{return}}function sc(e,n=_n()){for(let o of e.copies)if(ic($r(o.to),{recursive:!0}),bd(o.to,{force:!0}),bd(`${o.to}.zwc`,{force:!0}),Wk(o.from,o.to),o.executable)Kk(o.to,493);ic($r(e.settings.file),{recursive:!0}),Qk(e.settings.file,e.settings.content);let t=$r($r(e.settings.file)),r=Bk(t),i=vi(r?{...e.installed,itermBase:r}:e.installed,n);if(Jn(i.markets).includes(Pe))Ei(t,e.catalog);Qn(t,i),en(t,Le(t),i,e.home);for(let o of e.edits){ic($r(o.file),{recursive:!0});let s=tn(o.file)?br(o.file,"utf8"):"";zr(o.file,oi(s,o.block))}return Lt(i,n)}class lt extends Error{}function hs(e){if(an(e))throw tr("nothing changed"),new lt;return e}function vd(e){return mo.filter((n)=>{if(n==="iterm2")return process.platform==="darwin";if(n==="windows-terminal")return e.wtHome!==void 0;return n!=="warp"||process.platform!=="win32"})}function Dk(e,n){if(e==="iterm2")return tn(ye(n.home,"Library","Application Support","iTerm2"));if(e==="windows-terminal")return n.wtHome!==void 0;if(e==="warp")return tn($r(jo(n.home)));if(e==="wezterm")return tn(ye(n.configHome,"wezterm"))||tn(ye(n.home,".wezterm.lua"));return tn(ye(n.configHome,e))}function xk(){if(process.platform==="win32")return process.env.LOCALAPPDATA;if(!process.env.WSL_DISTRO_NAME)return;let e=(n,t)=>Ed(n,t,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();try{return e("wslpath",["-u",e("cmd.exe",["/d","/c","echo %LOCALAPPDATA%"])])||void 0}catch{return}}async function e1(e,n,t){return hs(await Bf({message:"wire which terminals?",options:vd(t).map((r)=>({value:r,hint:r===e?"detected":void 0})),initialValues:n,required:!0}))}function uc(e){let n=[...e.copies.filter((t)=>!tn(t.to)).map((t)=>t.to),...tn(e.settings.file)?[]:[e.settings.file],...e.edits.filter((t)=>!br(t.file,"utf8").includes("# ttheme begin")).map((t)=>t.file)];if(n.length>0)throw Error(`init left gaps:
513
+ }`;async function Md(){if(Xu())return;if(process.platform==="darwin"){let[e="",n=""]=(await Pn("osascript",["-l","JavaScript","-e",Jb])).stdout.trim().split("\t");return{stamp:e,picture:n==="picture"}}if(process.platform==="linux"&&!Sd()){let n=Boolean(process.env.WAYLAND_DISPLAY)?(await Pn("wl-paste",["--list-types"])).stdout:(await Pn("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:n,picture:/^image\//m.test(n)}}return}function Id(e){let n=[],t="",r=0;while(r<e.length){if(e[r]!=="\x1B"){t+=e[r],r++;continue}if(e.startsWith("\x1B[200~",r)){let o=e.indexOf("\x1B[201~",r+6);if(o===-1)return{events:n,keys:t,pending:e.slice(r)};n.push({kind:"paste",text:e.slice(r+6,o)}),r=o+6;continue}if(e.startsWith("\x1B]5522;",r)||e.startsWith("\x1B]72;",r)){let o=[e.indexOf("\x1B\\",r),e.indexOf("\x07",r)].filter((f)=>f!==-1);if(o.length===0)return{events:n,keys:t,pending:e.slice(r)};let s=Math.min(...o),u=e.slice(r+2,s),[c="",a="",...h]=u.split(";");n.push({kind:"osc",code:c,meta:Cb(a),payload:h.join(";")}),r=s+(e[s]==="\x07"?1:2);continue}let i=/^\[\?([\d;]*)(\$y|c)/.exec(e.slice(r+1,r+64));if(i){if(i[2]==="c")n.push({kind:"attributes"});else{let[o="0",s="0"]=(i[1]??"").split(";");n.push({kind:"mode",mode:Number(o),value:Number(s)})}r+=1+i[0].length;continue}if(/^(?:\[(?:\?[\d;$]*|2|20|200|201)?|\](?:5|55|552|5522|7|72)?)$/.test(e.slice(r+1)))return{events:n,keys:t,pending:e.slice(r)};t+=e[r],r++}return{events:n,keys:t,pending:""}}function Cb(e){let n={};for(let t of e.split(":")){let r=t.indexOf("=");if(r>0)n[t.slice(0,r)]=t.slice(r+1)}return n}var Oi=(e)=>Buffer.from(e).toString("base64"),Qu=(e)=>Buffer.from(e,"base64");function md(e,n){return n.find((t)=>e.includes(t))}class Vu{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=Oi(pd("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(e,n){this.send=e,this.deliver=n}start(){let e="\x1B[?2004h";if(this.clipboard)e+="\x1B[?5522h";if(this.drops)e+=`\x1B]72;t=a;${qu.join(" ")}\x1B\\`;this.send(e)}stop(){this.send(`\x1B[?2004l${this.clipboard?"\x1B[?5522l":""}${this.drops?"\x1B]72;t=A\x1B\\":""}`)}ask(){this.reading={mime:".",chunks:[],pw:"",listing:!0},this.send(`\x1B]5522;type=read:name=${Oi("ttheme")}:pw=${this.pw};${Oi(".")}\x1B\\`)}take(e){if(e.code==="5522")this.clip(e.meta,e.payload);else if(e.code==="72")this.drop(e.meta,e.payload)}clip(e,n){if(e.type!=="read")return;let t=e.status??"";if(t==="OK"){if(this.reading??={mime:".",chunks:[],pw:e.pw??"",listing:!0},e.pw)this.reading.pw=e.pw;return}let r=this.reading;if(!r)return;if(t==="DATA"){if(r.mime=e.mime?Qu(e.mime).toString("utf8"):r.mime,n)r.chunks.push(Qu(n));return}if(this.reading=void 0,t!=="DONE"){this.deliver({kind:"error",message:t==="EPERM"?"the clipboard read was not allowed":`the terminal answered ${t}`});return}let i=Buffer.concat(r.chunks);if(r.listing){let o=i.toString("utf8").split(/\s+/).filter(Boolean),s=md(o,[...Zu,...Hb]);if(!s){this.deliver({kind:"text",text:""});return}let u=r.pw||this.pw,c=r.pw?"Paste event":"ttheme";this.reading={mime:s,chunks:[],pw:u,listing:!1},this.send(`\x1B]5522;type=read:name=${Oi(c)}:pw=${u};${Oi(s)}\x1B\\`);return}this.deliver(r.mime.startsWith("image/")?{kind:"bytes",bytes:new Uint8Array(i),source:"clipboard"}:{kind:"text",text:i.toString("utf8")})}drop(e,n){let t=e.t??"";if(t==="m"){if(e.x==="-1"){this.offered=[];return}if(n){this.offered=n.split(" ").filter(Boolean);let u=qu.filter((c)=>this.offered.includes(c));this.send(`\x1B]72;t=m:o=${u.length>0?1:0};${u.join(" ")}\x1B\\`)}return}if(t==="M"){let u=n?n.split(" ").filter(Boolean):this.offered,c=md(u,qu);if(!c){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:u,index:u.indexOf(c)+1,chunks:[]},this.send(`\x1B]72;t=r:x=${this.dropping.index}\x1B\\`);return}let r=this.dropping;if(!r)return;if(t==="R"){this.dropping=void 0,this.send("\x1B]72;t=r:o=0\x1B\\"),this.deliver({kind:"error",message:`the drop failed: ${n.split(":")[0]||"unknown error"}`});return}if(t!=="r"&&t!=="")return;if(n)r.chunks.push(Qu(n));if(e.m==="1"||n)return;this.dropping=void 0;let i=Buffer.concat(r.chunks),o=r.mimes[r.index-1]??"",s;if(o.startsWith("image/"))s={kind:"bytes",bytes:new Uint8Array(i),source:"drop"};else{let u=i.toString("utf8"),c=o==="text/uri-list"?es(u).find((a)=>vb(a)):void 0;s=c?{kind:"bytes",bytes:new Uint8Array(xo(c)),source:c}:{kind:"text",text:u}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(s)}}var ze={pitch:25,cols:22,rows:9,height:13},Ut={cols:25,rows:16},Wb=2147483648,Kb=-1073741826,_b=1600,qb="\x1B[0m",Ln="\x1B[1m",ge="\x1B[2m",Ri="\x1B[31m",Hn="\x1B[32m",tn="\x1B[33m",ts="\x1B[1;34m",Qb="\x1B[35m",Zb={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end","1~":"home","7~":"home","4~":"end","8~":"end","5~":"pgup","6~":"pgdn",I:"focus-in",O:"focus-out"};function Rd(e){let n=[],t=0;while(t<e.length){let r=e[t]??"";if(r==="\x1B"){let i=/^(?:\[([0-9;]*)([A-Za-z~])|O([A-Za-z]))/.exec(e.slice(t+1));if(i){n.push(Zb[`${i[1]??""}${i[2]??i[3]??""}`]??"nop"),t+=1+i[0].length;continue}let o=e[t+1]??"";if(/^[a-z]$/.test(o)){n.push(`alt-${o}`),t+=2;continue}n.push("esc"),t++;continue}n.push(r==="\r"||r===`
514
+ `?"enter":r==="\t"?"tab":r==="\x03"?"ctrl-c":r==="\x16"?"ctrl-v":r===""||r==="\b"?"backspace":r),t++}return n}var Fd="\x1B]1337;ReportCellSize\x07\x1B[16t",Nd="\x1B]1337;ReportCellSize=";function Du(e){let n=e.indexOf(Nd);if(n!==-1){let i=e.slice(n+Nd.length),o=[i.indexOf("\x07"),i.indexOf("\x1B\\")].filter((c)=>c!==-1),s=o.length>0?Math.min(...o):-1,u=s===-1?null:/^([\d.]+);([\d.]+);([\d.]+)$/.exec(i.slice(0,s));if(u){let c=Number(u[3]);return{cell:{h:Math.round(Number(u[1])*c),w:Math.round(Number(u[2])*c)},rest:e.slice(0,n)+i.slice(s+(i[s]==="\x07"?1:2))}}}let t=e.indexOf("\x1B[6;"),r=t===-1?null:/^\[6;(\d+);(\d+)t/.exec(e.slice(t+1));if(!r)return null;return{cell:{h:Number(r[1]),w:Number(r[2])},rest:e.slice(0,t)+e.slice(t+1+r[0].length)}}function lr(e,n){return{perRow:Math.max(1,Math.floor((e+1)/ze.pitch)),rowsVis:Math.max(1,Math.floor((n-4)/ze.height))}}function Pd(e){return`\x1B_Ga=t,t=f,f=100,i=${e.id},q=2;${Buffer.from(e.path).toString("base64")}\x1B\\`}function Hd(e){return`\x1B[${e.row+1};${e.col+1}H\x1B_Ga=p,i=${e.id},p=${e.id},c=${e.cols},r=${e.rows},C=1,z=${e.z},q=2\x1B\\`}function Ld(e){return`\x1B_Ga=d,d=I,i=${e},q=2\x1B\\`}function Ad(e){return`\x1B[38;2;${We(e).join(";")}m`}function zu(e){return`\x1B[48;2;${We(e).join(";")}m`}function fn(e){return Array.from(e).length}class rs{parts=[];cols;constructor(e){this.cols=e}put(e,n,t=""){return this.parts.push({col:e,text:n,sgr:t}),e+fn(n)}run(e,n){let t=e;for(let[r,i]of n)t=this.put(t,r,i);return t}right(e,n){this.run(e-n.reduce((t,[r])=>t+fn(r),0),n)}render(){let e="";for(let{col:n,text:t,sgr:r}of this.parts){if(n>=this.cols||n<0)continue;let i=Array.from(t).slice(0,this.cols-n).join("");e+=`\x1B[${n+1}G${r}${i}${r?qb:""}`}return e}}function Td(e){return e>=1e6?`${(e/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(e/1000))} KB`}function Yb(e,n){if(!n)return Td(e);return n>=1e6?`${(e/1e6).toFixed(1)}/${(n/1e6).toFixed(1)} MB`:`${Math.round(e/1000)}/${Math.round(n/1000)} KB`}function Gd(e){return e.replace(/_\([^)]*\)?$/,"")}function Ud(e){return[`${e.reduced?"↓":""}${e.width}×${e.height}`,Math.max(e.width,e.height)<_b?tn:ge]}function Fi(e,n,t,r){let i=[...r.keys??[]],o=r.lead,s=r.right,u=()=>{let h=[...o?[fn(o[0])]:[],...i.map(([l,d])=>fn(l)+1+fn(d))];return(r.badge?fn(r.badge)+4:0)+h.reduce((l,d)=>l+d,0)+3*Math.max(0,h.length-1)+(s?3+fn(s[0])+1+fn(s[1]):0)};while(u()>n)if(i.length>2)i.splice(-2,1);else if(s)s=void 0;else if(i.length>1)i.splice(-2,1);else break;if(o&&u()>n){let h=Math.max(0,fn(o[0])-(u()-n)-1);o=[`${Array.from(o[0]).slice(0,h).join("")}…`,o[1]]}let c=0;if(r.badge)c=e.put(0,` ${r.badge} `,`\x1B[7;1m${t}`)+2;if([...o?[[o]]:[],...i.map(([h,f])=>[[h,Ln],[` ${f}`,ge]])].forEach((h,f)=>{c=e.run(c+(f?3:0),h)}),s)e.right(n,[[s[0],Ln],[` ${s[1]}`,ge]])}function Xb(e,n,t,r,i,o){let{ansi:s,selection:u,cursor:c}=o.colors,a=r<44?3:4;if(r>=56)a=Math.min(7,Math.floor((r+1)/8)-1);let h=t;for(let g=0;g<8;g++)h=(e[n]?.put(h,"▀".repeat(a),Ad(s[g]??c)+zu(s[g+8]??c))??h)+1;let f=["❯ ",Hn],l=[[["~/code/demo",ts],[" on ",ge],["main",Qb],[" +2",Hn],[" ~1",tn]]];if(l.push([f,["git status -sb",""]]),r>=44)l.push([["## ",""],["main",Hn],["...",""],["origin/main",Ri],[" [ahead 1]",tn]]);if(l.push([[" M",Ri],[" src/main.rs",""]]),l.push([["??",Ri],[" notes.md",""]]),l.push([]),r>=44)l.push([f,["ls",""]]),l.push([["docs",ts],[" ",""],["src",ts],[" ",""],["tests",ts],[" Cargo.toml README.md",""]]),l.push([]);l.push([f,["cargo test",""]]),l.push([[" ✓",Hn],[" parses config",""]]);let d=[[" ✗",Ri],[" renders frame",""]];if(r>=44)d.push([" expected ",ge],["3",Hn],[", received ",ge],["2",Ri]);l.push(d),l.push([]),l.push([f,["echo ",""],["selected text",zu(u)],[" ",""],[" ",zu(c)]]),l.forEach((g,m)=>{let b=n+2+m;if(b<=i)e[b]?.run(t,g)})}function Vb(e,n,t,r,i,o){e[n]?.put(t,`╭${"─".repeat(i-2)}╮`,o);for(let s=n+1;s<n+r-1;s++)e[s]?.put(t,"│",o),e[s]?.put(t+i-1,"│",o);e[n+r-1]?.put(t,`╰${"─".repeat(i-2)}╯`,o)}function Bu(e,n=e.site,t=e.siteAnsi){return[` ${n} `,`\x1B[7;${30+t}m`]}function zb(e){return`${x[Math.floor(e/Gn)]?.name??"local"} ${e%Gn}`}function Bb(e,n,t){let r=[{name:"all",moved:!1},...x].flatMap((s,u)=>{let c=`${s.name}${s.moved?"*":""}`,a=s.name===t.site?Bu(t,c):[` ${c} `,ge];return u?[[" ",""],a]:[a]}),i=r.reduce((s,[u])=>s+fn(u),0)<=n,o=e.run(0,i?r:[Bu(t)]);if(t.asking!==void 0)e.run(o,[[` ${t.asking} was cut off — this network may block it. turn on the unblock proxy? `,tn],["y",Ln],[" turn on ",ge],["n",Ln],[" not now",ge]])}function Db(e,n,t,r){if(t.editing!==void 0){let u=e.run(0,[["⌕ ",r],[t.editing,""],["█",r]]),c=t.suggest?.length?" ↑↓ pick enter searches":" enter searches";e.put(u,t.editing?c:` a tag, a post url or an id, or drop a picture or ctrl+v — ${t.tag||"esc leaves"}`,ge);return}let i=e.run(0,[["⌕ ",r],[t.tag||"nothing yet — / searches, ctrl+v pastes a picture",t.tag?"":ge]]),o=$t.filter((u)=>!t.block.includes(u)),s=[t.preset,...t.solo?["solo"]:[],t.order,...t.rating.join("+")==="safe"?[]:[t.rating.join("+")],...o.length>0?[`allows ${o.join("+")}`]:[],...t.unblocked?["unblock"]:[]];if(e.put(i,` ${s.join(" ")}`,ge),t.total>0||!t.searching){let u=[[`${t.tiles.length}/${t.checked}`,""]];if(t.checked<t.total)u.push([` of ${t.total}`,ge]);e.right(n,u)}}function xb(e){if(e.cut==="on")return[[`cut out · ${e.clear}% transparent`,Hn]];if(e.cut==="off")return[["opaque · x cuts out",tn]];if(e.cut==="failed")return[["opaque · no cut-out",tn]];return[e.clear>0?[`${e.clear}% transparent`,Hn]:["opaque",tn]]}function Od(e){return e.site==="all"?"any site":e.site}function jd(e){if(e.installing!==void 0)return[`installing ${e.palette} ← ${zb(e.installing)}`,tn];if(e.hint)return[e.hint,Hn];if(e.error)return[e.error,tn];if(e.waiting!==void 0)return[`${e.slow??e.site} asked to slow down · ${e.waiting}s`,tn];if(e.fetching)return[`fetching ${e.fetching.id%Gn} · ${Yb(e.fetching.got,e.fetching.size)}`,tn];if(e.cutting!==void 0)return[`cutting out ${e.cutting%Gn}`,tn];if(e.preparing!==void 0)return[`preparing ${e.preparing%Gn}`,tn];if(e.saved)return[e.saved,Hn];if(e.note)return[e.note,ge];return}function ek(e,n,t,r,i,o){let{perRow:s,rowsVis:u}=lr(t,r);Db(e[0],t,i,o),Bb(e[1],t,i);for(let d=0;d<s*u;d++){let g=i.top*s+d,m=i.tiles[g];if(!m)break;let b=2+Math.floor(d/s)*ze.height,S=d%s*ze.pitch,I=g===i.focus;if(I)Vb(e,b,S,ze.height,ze.pitch-1,o);if(m.thumb)n.push({id:m.key,path:m.thumb,row:b+1,col:S+1,cols:ze.cols,rows:ze.rows,z:-1});if(e[b+10]?.run(S+1,[...i.installed.includes(m.key)?[["✓ ",Hn]]:[],...i.site==="all"?[["● ",`\x1B[${30+m.siteAnsi}m`]]:[],[String(m.id),I?Ln:""],[" ",""],Ud(m)]),m.mates.length>0)e[b+10]?.put(S+ze.cols,"≈",o);let k=m.artist?Gd(m.artist):m.owner&&`@${m.owner}`;if(k)e[b+11]?.put(S+1,k.slice(0,ze.cols-8),ge);let y=[];if(m.score>0)y.push([`★${m.score}`,ge]);if(m.variants>1)y.push([` ×${m.variants}`,o]);if(y.length>0)e[b+11]?.right(S+ze.cols+1,y)}let c=i.top*s,a=i.tiles.length-(i.top+u)*s,h=[...c>0?[`↑ ${c} above`]:[],...a>0?[`↓ ${a} more`]:[]];if(h.length>0)e[r-2]?.put(0,h.join(" "),ge);if(!i.searching&&i.tiles.length===0&&!i.error)e[3]?.put(0,i.preset==="cutouts"?`no transparent cutouts of ${i.tag} on ${Od(i)} — c searches every post, tab tries ${i.nextSite}`:`no posts of ${i.tag} on ${Od(i)} — tab tries ${i.nextSite}`,ge);let f=e[r-1],l=jd(i);if(i.searching&&i.tiles.length===0&&!l){Fi(f,t,o,{badge:"FIND",lead:[i.preset==="cutouts"?"checking png headers":"fetching posts",ge],right:["esc","back"]});return}Fi(f,t,o,{badge:"FIND",lead:l,keys:i.asking!==void 0?[]:[["←↑↓→","move"],["enter","try on"],["tab","site"],["ctrl+v","picture"],["s","settings"],["/","search"],["?","keys"]],right:i.asking!==void 0?void 0:["esc","back"]})}function nk(e,n,t,r,i,o){let s=i.tiles[i.focus];if(!s)return;let u=i.shown?.id===s.key?i.shown:void 0,c=[Bu(i,s.site,s.siteAnsi),[" ",""],[String(s.id),Ln],[" ",""],Ud(s)];if(s.artist)c.push([` · ${Gd(s.artist)}`,""]);if(s.score>0)c.push([` · ★${s.score}`,ge]);if(u)c.push([` · ${Td(u.bytes)}`,ge]);if(s.owner)c.push([` · ${s.owner}`,ge]);if(s.origin)c.push([` · ${s.origin}`,ge]);if(u)c.push([" ",""],...xb(u));if(e[0]?.run(0,c),s.mates.length>0)e[0]?.right(t,[["≈ ",o],[s.mates.join(" "),ge]]);if(Xb(e,3,2,t-4,r-2,i),i.shown)n.push({id:Wb+i.shown.id,path:i.shown.path,row:0,col:0,cols:t,rows:r,z:Kb});let a=jd(i);Fi(e[r-1],t,o,{badge:"TRY",lead:a,keys:i.installing===void 0?[["←→","browse"],["enter","install"],...i.shown?.cut==="on"||i.shown?.cut==="off"?[["x","cut out"]]:[],["?","keys"]]:[],right:i.installing===void 0?["esc","grid"]:void 0})}var tk={grid:[["move","←↑↓→ home end pgup pgdn"],["try on","enter"],["site",`tab all, ${x.map((e)=>e.name).join(", ")}`],["posts","c cutouts or every post"],["search","/ a tag, a post url or an id"],["your own","ctrl+v or v a picture from the clipboard · drop one on the window or paste its link"],["unfold","space a set of ×N"],["open","o the post page in a browser"],["settings","s rating, block, posts, solo, order, sets, remove bg"],["back","esc returns to preview"],["close","? esc"]],try:[["browse","←→"],["install","enter"],["cut out","x the background off or on, on an opaque picture"],["open","o the post page in a browser"],["your own","ctrl+v or v a picture from the clipboard · drop one on the window"],["grid","esc"],["close","? esc"]]};function rk(e,n,t,r,i){let o=r.panel??0,s=Math.max(...r.settings.map((l)=>l.label.length)),u=Math.max(...r.settings.map((l)=>l.choices.reduce((d,g)=>d+g.length+(l.multi?6:3),0))),c=Math.min(n-2,Math.max(28,s+u+8)),a=r.settings.length+4,h=Math.floor((n-c)/2),f=Math.max(2,Math.floor((t-a)/2));e[f]?.put(h,`╭─ settings ${"─".repeat(Math.max(0,c-13))}╮`);for(let l=f+1;l<f+a-1;l++)e[l]?.put(h,`│${" ".repeat(c-2)}│`);r.settings.forEach((l,d)=>{let g=e[f+2+d];g.put(h+3,l.label,d===o?Ln:ge);let m=h+5+s,b=l.value.split(" ");l.choices.forEach((S,I)=>{let k=b.includes(S),y=l.multi&&d===o&&I===l.cursor?"4;":"",p=l.multi?` ${k?"[x]":"[ ]"} ${S} `:` ${S} `;m=g.put(m,p,k?`\x1B[${y}7;${30+r.siteAnsi}m`:y?`\x1B[4m${ge}`:ge)+1})}),e[f+a-1]?.put(h,`╰${"─".repeat(c-2)}╯`),Fi(e[t-1],n,i,{badge:"SET",keys:[["↑↓","setting"],["←→","value"],["space","toggle"],["enter","save"]],right:["esc","undo"]})}function ik(e,n,t,r,i){let o=tk[r.mode],s=Math.min(n-2,50),u=o.length+4,c=Math.floor((n-s)/2),a=Math.max(2,Math.floor((t-u)/2));e[a]?.put(c,`╭─ keys ${"─".repeat(s-9)}╮`);for(let h=a+1;h<a+u-1;h++)e[h]?.put(c,`│${" ".repeat(s-2)}│`);o.forEach(([h,f],l)=>{e[a+2+l]?.put(c+3,h,Ln),e[a+2+l]?.put(c+13,f.slice(0,s-16))}),e[a+u-1]?.put(c,`╰${"─".repeat(s-2)}╯`),Fi(e[t-1],n,i,{badge:"KEYS",right:["? esc","close"]})}function ok(e,n,t){let r=n.suggest??[],i=r.map((u)=>u.count>0?String(u.count):u.palette??"0"),o=Math.max(...r.map((u)=>fn(u.value))),s=Math.max(7,...i.map(fn));r.forEach((u,c)=>{let a=c===n.pick,h=e[1+c];h?.run(0,[[a?"▸ ":" ",t],[u.value,a?Ln+t:""]]),h?.right(2+o+2+s,[[i[c],ge]])})}function Jd(e,n,t){let r=Array.from({length:t},()=>new rs(n)),i=[],o=Ad(e.colors.cursor);if(n<Ut.cols||t<Ut.rows)return r[0]?.put(0,"ttheme find",Ln+o),r[1]?.put(0,`needs ${Ut.cols}×${Ut.rows} — now ${n}×${t}`),r[2]?.put(0,"esc quits",ge),{lines:r.map((s)=>s.render()),images:i};if(e.mode==="try")nk(r,i,n,t,e,o);else ek(r,i,n,t,e,o);if(e.mode==="grid"&&e.editing!==void 0&&e.suggest?.length){for(let s=1;s<t-1;s++)r[s]=new rs(n);return ok(r,e,o),{lines:r.map((s)=>s.render()),images:[]}}if(e.help||e.panel!==void 0){let s=e.mode==="try"?i:[];for(let u=0;u<t;u++)r[u]=new rs(n);if(e.help)ik(r,n,t,e,o);else rk(r,n,t,e,o);return{lines:r.map((u)=>u.render()),images:s}}return{lines:r.map((s)=>s.render()),images:i}}var sk=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),uk=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),ck=0.04,ak=0.1,hk=0.05,fk=4096;function lk(e){return new Set(e.cutouts.split(/\s+/).map((n)=>n.replace(/^~/,"")).filter(Boolean))}function dk(e,n,t,r=0){let{site:i,post:o}=e,s=new Set(o.tags),u=[...lk(i)].some((h)=>s.has(h)),c=Math.min(o.width,o.height),a=o.width>0&&o.height>0?o.width/o.height/(n.w/n.h):1;return(o.solo?2:0)+([...sk].some((h)=>s.has(h))?-3:0)+([...uk].some((h)=>s.has(h))?-1.5:0)+2*Math.min(1,c/n.h)+(u?1.5:-Math.min(1.5,Math.abs(Math.log(a))))+(t>0?1.5*Math.log1p(Math.max(0,o.score))/Math.log1p(t):0)+2*r}function is(e,n,t=new Map){let r=new Map;for(let{site:i,post:o}of e)r.set(i,Math.max(r.get(i)??0,o.score));return e.map((i,o)=>({pick:i,at:o,score:dk(i,n,r.get(i.site)??0,t.get(i.post))})).sort((i,o)=>o.score-i.score||i.at-o.at).map(({pick:i})=>i)}function Wd(e){let n=new Map;for(let r of e)n.set(r.site,[...n.get(r.site)??[],r]);let t=[];for(let r=0;t.length<e.length;r++)for(let i of n.values()){let o=i[r];if(o)t.push(o)}return t}function xu(e){let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4}function Cd(e,n,t){let[r,i,o]=[xu(e),xu(n),xu(t)],s=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*o),u=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*o),c=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*o);return[0.2104542553*s+0.793617785*u-0.0040720468*c,1.9779984951*s-2.428592205*u+0.4505937099*c,0.0259040371*s+0.7827717662*u-0.808675766*c]}function Kd(e,n){let t=n.map((s)=>Cd(...We(s))).filter(([,s,u])=>Math.hypot(s,u)>=ck);if(t.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(e.width*e.height/fk))),i=t.map(()=>0),o=0;for(let s=0;s<e.height;s+=r)for(let u=0;u<e.width;u+=r){let c=(s*e.width+u)*4;if(e.data[c+3]<128)continue;o++;let[a,h,f]=Cd(e.data[c],e.data[c+1],e.data[c+2]);t.forEach(([l,d,g],m)=>{if(Math.hypot(a-l,h-d,f-g)<ak)i[m]=i[m]+1})}if(o===0)return 0;return i.reduce((s,u)=>s+Math.min(1,u/o/hk),0)/t.length}import{mkdirSync as Yd,readFileSync as Xd,writeFileSync as Vd}from"node:fs";import{dirname as zd}from"node:path";import{isMainThread as wk,parentPort as Bd,Worker as $k}from"node:worker_threads";var gk=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,mk=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"]];function ec(e){let n=/(\d+)_p(\d+)/.exec(e.source);return[...e.md5?[`md5:${e.md5}`]:[],...n&&e.source.includes("pximg")?[`pixiv:${n[1]}_p${n[2]}`]:[]]}function _d(e,n){let t=gk.exec(n.source)?.[1]?.toLowerCase();return[`post:${e.key}:${n.id}`,...n.md5?[`md5:${n.md5}`]:[],...t&&t!==n.md5?[`md5:${t}`]:[],...mk.flatMap(([r,i])=>{let o=r.exec(n.source)?.[1];return o?[`post:${i}:${Number(o)}`]:[]}),...n.family?[`family:${e.key}:${n.family}`]:[]]}function qd(e,n){let t=e.owner||e.artist;return t!==""&&t===(n.owner||n.artist)&&e.width===n.width&&e.height===n.height}function Qd(e){let r=[];for(let o=0;o<8;o++){let s=Math.floor(o*e.height/8),u=Math.max(s+1,Math.floor((o+1)*e.height/8));for(let c=0;c<9;c++){let a=Math.floor(c*e.width/9),h=Math.max(a+1,Math.floor((c+1)*e.width/9)),f=0;for(let l=s;l<u;l++)for(let d=a;d<h;d++){let g=(l*e.width+d)*4,m=e.data[g+3]/255,b=0.299*e.data[g]+0.587*e.data[g+1]+0.114*e.data[g+2];f+=b*m+255*(1-m)}r.push(f/((h-a)*(u-s)))}}let i=0n;for(let o=0;o<8;o++)for(let s=0;s<8;s++)i=i<<1n|(r[o*9+s]>r[o*9+s+1]?1n:0n);return i.toString(16).padStart(16,"0")}function pk(e,n){let t=BigInt(`0x${e}`)^BigInt(`0x${n}`),r=0;while(t>0n)r+=Number(t&1n),t>>=1n;return r}function Zd(e,n){if(e.width<=0||e.height<=0||n.width<=0||n.height<=0)return!1;return Math.abs(Math.log(e.width/e.height/(n.width/n.height)))<0.01&&pk(e.hash,n.hash)<=2}var bk={thumb:"tile",match:"tile",show:"view",backdrop:"view"};function kk(e){let n=Lr(new Uint8Array(Xd(e.from)),vn);if(e.job==="backdrop")return fo(e.home,e.colors,e.tone,n,{...e.origin,bytes:new Uint8Array(Xd(e.source))},e),0;if(e.job==="match")return{match:Kd(n,e.colors),hash:Qd(n)};if(e.job==="thumb")return Yd(zd(e.to),{recursive:!0}),Vd(e.to,pt(Xa(n,e.width,e.height))),0;let t=Dn(n);return Yd(zd(e.to),{recursive:!0}),Vd(e.to,pt(_h(n,e.colors,e.tone,e.width,e.height))),t}function Ek(e){e.on("message",(n)=>{try{e.postMessage({id:n.id,value:kk(n)})}catch(t){e.postMessage({id:n.id,error:t instanceof Error?t.message:String(t)})}})}class Dd{worker;next=1;waiting=new Map;send(e){let n=this.next++;return new Promise((t,r)=>{let i=this.open();this.waiting.set(n,{ok:t,no:r}),i.ref(),i.postMessage({...e,id:n})})}close(){this.worker?.terminate(),this.worker=void 0,this.drop(Error("renderer closed"))}open(){if(this.worker)return this.worker;let e=new $k(import.meta.filename);e.unref(),e.on("message",({id:t,value:r,error:i})=>{let o=this.waiting.get(t);if(this.waiting.delete(t),this.waiting.size===0)e.unref();if(i!==void 0)o?.no(Error(i));else o?.ok(r)});let n=(t)=>{if(this.worker===e)this.worker=void 0;this.drop(t instanceof Error?t:Error("renderer stopped"))};return e.on("error",n),e.on("exit",()=>n(void 0)),this.worker=e,e}drop(e){for(let n of this.waiting.values())n.no(e);this.waiting.clear()}}class nc{lines=new Map;run(e){let n=bk[e.job],t=this.lines.get(n);if(!t)t=new Dd,this.lines.set(n,t);return t.send(e)}close(){for(let e of this.lines.values())e.close();this.lines.clear()}}if(!wk&&Bd)Ek(Bd);var gr=[{name:"TTHEME_FIND_RATING",label:"rating",choices:Ur,multi:{read:Xt}},{name:"TTHEME_FIND_BLOCK",label:"block",choices:$t,multi:{read:Vt,none:"none"}},{name:"TTHEME_FIND_POSTS",label:"posts",choices:["all","cutouts"]},{name:"TTHEME_FIND_SOLO",label:"solo",choices:["on","off"]},{name:"TTHEME_FIND_ORDER",label:"order",choices:["fit","newest","score"]},{name:"TTHEME_FIND_SETS",label:"sets",choices:["fold","show"]},...vi()?[{name:"TTHEME_FIND_REMOVE_BG",label:"remove bg",choices:["on","off"]}]:[]];function Nk(e,n){if(e.multi)return e.multi.read(n).join(" ")||e.multi.none;return e.choices.find((t)=>t===n)??e.choices[0]}var Ok=["fit","newest","score"];function xd(e){return Ok.find((n)=>n===e)??"fit"}function Rk(e){return e.length>=2&&!/^\d+$/.test(e)&&!e.includes("://")&&!/^[\w.]+:\d+$/.test(e)}var eg=12,Fk=4,Pk=150,ng=12,Hk=2,Lk=150,Ak=30,Tk=4000,Gk=8000,tg=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,Uk=process.platform==="win32"?"alt+v":"ctrl+v",rg=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",jk=1280,ig=2,Jk=3,Ck=8;function ss(e,n){return{key:e,groups:[],sources:[],queue:[],rounds:0,roundOf:new Map,last:new Map,kin:new Map,kindred:new Map,shapes:[],seen:new Set,same:new Map,checked:0,total:0,focus:0,top:0,searching:n}}function mr(e){if(!(e instanceof Error))return String(e);if(e instanceof AggregateError&&e.errors[0])return mr(e.errors[0]);if(e.cause)return mr(e.cause);let n=e.code;if(typeof n==="string")return n;let t=(e.message||e.name).split(".")[0]??"";return t.length>56?`${t.slice(0,55)}…`:t}function rc(e,n){return`${e}: ${mr(n)}`}function og(e){return e.width*e.height}function sg(e){return`${e.id}-${ug("sha1").update(e.preview).digest("hex").slice(0,8)}`}function Wk(e){let n=e.lastIndexOf("\x1B");return n!==-1&&/^\[?[0-9;]*$/.test(e.slice(n+1))}function ic(e,n){try{return JSON.parse(cg(An(pn(e),n),"utf8"))}catch{return{}}}function oc(e,n,t){Pi(pn(e),{recursive:!0}),Hi(An(pn(e),n),`${JSON.stringify(t)}
515
+ `)}class ag{view;tone;session=new AbortController;cell={w:0,h:0};cols=process.stdout.columns||80;rows=process.stdout.rows||24;gen=0;pumping=0;boards=new Map;board;posts=new Map;thumbPath=new Map;looking=new Map;looked=new Map;matched=new Map;aheading=!1;pages=new Map;tab=0;values=new Map(gr.map((e)=>[e.name,Nk(e,process.env[e.name])]));direction=1;prefetching=0;inflight=new Map;owners=new Map;probed=new Map;unsaved=new Set;thumbQueue=[];thumbing=0;clarity=new Map;renders=new nc;sent=new Map;placed=new Map;current;fetch;settle;partial;suggestTimer;suggesting;input="";typed="";grabber=new Vu((e)=>this.write(e),(e)=>void this.got(e));featureWait;noticeTimer;peekTimer;peeked;attaching;probeWait;done;dirty=!1;unblock=!1;scratch=Sk(An(Mk(),"ttheme-find-"));home;catalog;entry;constructor(e,n,t,r){this.home=e,this.catalog=n,this.entry=t,this.tone=er(t,t.signatureSlots),this.view={palette:t.name,tag:r,site:this.tabName,siteAnsi:this.tabAnsi,nextSite:this.nextTabName,preset:this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:xd(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:Xt(this.setting("TTHEME_FIND_RATING")),block:Vt(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",unblocked:process.env.TTHEME_FIND_PROXY!==void 0,settings:gr.map((i)=>({label:i.label,choices:[...i.choices],value:this.setting(i.name),multi:i.multi&&{none:i.multi.none},cursor:0})),colors:{cursor:t.cursor,selection:t.selection,ansi:t.ansi},tiles:[],installed:[],checked:0,total:0,searching:r!=="",focus:0,top:0,mode:"grid",help:!1,editing:r===""?"":void 0},this.board=ss(this.boardKey,r!==""),this.boards.set(this.board.key,this.board)}get signal(){return this.session.signal}get site(){return this.tab===0?void 0:x[this.tab-1]}get sites(){return this.site?[this.site]:x}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??Fk}get nextTabName(){let e=(this.tab+1)%(x.length+1);return e===0?"all":x[e-1].name}frame(){return{w:this.cols*(this.cell.w||10),h:this.rows*(this.cell.h||20)}}setting(e){return this.values.get(e)}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(e,n,t){return An(pn(e),"orig",`${n}.${t}`)}previewPath(e){return An(pn(e.site),"thumb",`${sg(e.post)}.${jr(e.post.preview)}`)}tileOf(e,n){let{site:t,post:r}=e,i=Mn(t,r.id),o=bt(r)??r;return{id:r.id,key:i,site:t.name,siteAnsi:t.ansi,width:o.width,height:o.height,reduced:o!==r,owner:r.owner,artist:t===ns?kd(r.source):r.artist,score:r.score,variants:n,origin:Ws(r.source),mates:this.owners.get(t.key)?.get(r.owner)??[],thumb:this.thumbPath.get(i)}}show(){let e=this.view,n=this.board;e.tiles=n.groups.flatMap((t)=>t.open?t.posts.map((r)=>this.tileOf(r,0)):[this.tileOf(t.posts[0],t.posts.length)]),e.checked=n.checked,e.total=n.total,e.searching=n.searching,e.note=n.note,e.focus=Math.max(0,Math.min(n.focus,e.tiles.length-1)),e.top=n.top}syncSite(){let e=this.view;e.site=this.tabName,e.siteAnsi=this.tabAnsi,e.nextSite=this.nextTabName}async run(){let{stdin:e,stdout:n}=process;e.setRawMode(!0),e.resume(),e.on("data",this.onData),n.on("resize",this.onResize),this.write("\x1B[?25l\x1B[?7l\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H");let t=new Promise((s)=>{this.done=s}),r=setInterval(this.onClock,250),i=await this.probe();if(i){if(this.cell=i,this.view.tag)this.search()}else this.view.searching=!1,this.view.error="this terminal does not report its cell size — find needs kitty graphics";await this.features(),this.grabber.start(),this.write("\x1B[?1004h"),this.peek(),this.draw();let o=await t;return this.grabber.stop(),this.write("\x1B[?1004l"),this.attaching?.abort(),clearTimeout(this.noticeTimer),clearTimeout(this.peekTimer),this.session.abort(),this.fetch?.abort(),clearTimeout(this.settle),clearTimeout(this.partial),this.quietSuggest(),clearInterval(r),e.off("data",this.onData),n.off("resize",this.onResize),this.write("\x1B_Ga=d,d=A,q=2\x1B\\\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H"),e.setRawMode(!1),e.pause(),this.saveProbes(),this.renders.close(),tc(this.scratch,{recursive:!0,force:!0}),ah(),o}write(e){process.stdout.write(e)}get saved(){return this.view.saved}finish(e){this.done?.(e===2&&this.saved?0:e)}probe(){return new Promise((e)=>{let n=setTimeout(()=>{this.probeWait=void 0,e(null)},1000);this.probeWait=(t)=>{clearTimeout(n),this.probeWait=void 0,e(t)},this.write(Fd)})}onData=(e)=>{this.input+=e.toString("utf8");for(let t=Du(this.input);t;t=Du(this.input))this.input=t.rest,this.probeWait?.(t.cell);if(this.probeWait)return;let n=Id(this.input);if(this.input=n.pending,this.view.editing===void 0&&n.keys.length>8&&/^(?:\/|~\/|file:|https?:)/.test(n.keys))this.pasted(n.keys),n.keys="";this.typed+=n.keys;for(let t of n.events)this.inbound(t);if(clearTimeout(this.partial),Wk(this.typed)){this.partial=setTimeout(this.flushKeys,Ak);return}this.flushKeys()};flushKeys=()=>{let e=Rd(this.typed);this.typed="";for(let n of e)this.key(n)};features(){if(process.env.TMUX)return Promise.resolve();return new Promise((e)=>{let n=setTimeout(()=>{this.featureWait=void 0,e()},500);this.featureWait=()=>{clearTimeout(n),this.featureWait=void 0,e()},this.write("\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c")})}inbound(e){if(e.kind==="mode"){if(e.mode===5522)this.grabber.clipboard=e.value!==0&&e.value!==4;return}if(e.kind==="attributes"){this.featureWait?.();return}if(e.kind==="osc"){if(e.code==="72"&&e.meta.t==="q"){this.grabber.drops=!0;return}this.grabber.take(e);return}this.pasted(e.text)}pasted(e){let n=this.view;if(n.editing!==void 0&&e.trim()!==""&&!this.picture(e)){n.editing+=e.replace(/[\r\n]+/g," "),this.suggest(),this.draw();return}if(n.installing!==void 0||n.asking!==void 0||n.panel!==void 0||n.help)return;if(e.trim()===""){this.fromClipboard();return}this.attach(e)}picture(e){let n=e.trim();if(/^https?:\/\/\S+$/i.test(n))return!ro(n,this.site??x[0]);return es(n).length>0}async got(e){if(e.kind==="error"){this.notice(e.message);return}if(e.kind==="text"){if(e.text.trim()===""){this.notice(`no picture on the clipboard — ${rg}`);return}this.pasted(e.text);return}await this.bring(()=>Do(e.bytes,e.source))}notice(e,n=Tk){let t=this.view;t.error=e,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(t.error===e)t.error=void 0,this.draw()},n),this.draw()}async peek(){let e=this.view,n;try{n=await Md()}catch{return}if(!n||n.stamp===this.peeked)return;if(this.peeked=n.stamp,!n.picture||e.installing!==void 0||e.asking!==void 0)return;e.hint=`picture on the clipboard · ${Uk} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{e.hint=void 0,this.draw()},Gk),this.draw()}async fromClipboard(){let e=this.view;if(Xu()){if(this.grabber.clipboard){this.grabber.ask();return}this.notice("over ssh the clipboard is not here — drop the file");return}let n;try{n=await vd(An(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`could not read the clipboard: ${mr(r)}`);return}if(clearTimeout(this.peekTimer),e.hint=void 0,"image"in n){await this.bring(async(r)=>({...await Yu(n.image,r),source:"clipboard"}));return}let t=n.text.trim();if(!t){this.notice(`no picture on the clipboard — ${rg}`);return}if(this.picture(t)){await this.attach(t);return}if(e.editing===void 0)e.editing="";this.pasted(t)}async attach(e){let n=e.trim();if(/^https?:\/\//i.test(n)){let i=ro(n,this.site??x[0]);if(i){await this.jump(i.site,i.id);return}}let[t,...r]=es(n).sort((i,o)=>Number(!tg.test(i))-Number(!tg.test(o)));if(!t){this.notice("nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>Yu(t,i),r.length)}async bring(e,n=0){let t=this.view;this.attaching?.abort();let r=new AbortController;this.attaching=r,t.error=void 0,t.saved=void 0,t.note="reading the picture…",this.draw();let i;try{i=await e(AbortSignal.any([r.signal,this.signal]))}catch(l){if(!r.signal.aborted)t.note=void 0,this.notice(mr(l),8000);return}if(r.signal.aborted)return;t.note=n>0?`the first picture of ${n+1} — drop one at a time to try the others`:void 0,this.quietSuggest(),t.editing=void 0,t.suggest=void 0,t.pick=void 0;let o=yd(i.bytes);Ed(o,i.source);let s=this.origPath(ns,o,i.ext);Pi(os(s),{recursive:!0}),Hi(s,i.bytes);let u=Ik(s).href,c={id:o,file:u,width:i.width,height:i.height,ext:i.ext,preview:u,owner:"",artist:"",score:0,rating:"s",md5:ug("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],solo:void 0,family:0,smaller:[]},a={site:ns,post:c},h=this.previewPath(a);Pi(os(h),{recursive:!0}),Hi(h,i.bytes),++this.gen,this.current=void 0,t.shown=void 0;let f=ss(`local|post:${o}`,!1);this.board=f,this.boards.set(f.key,f),this.single(f,a)}single(e,n){e.searching=!1,this.posts.set(Mn(n.site,n.post.id),n),e.groups=[{posts:[n],open:!1}],e.checked=1,e.total=1,this.thumbQueue.push(n),this.thumbs(),this.view.mode="try",this.show(),this.select(),this.draw()}onClock=()=>{let e=this.sites.reduce((r,i)=>xn(i)>xn(r)?i:r),n=Math.ceil((xn(e)-Date.now())/1000),t=n>0?n:void 0;if(t!==this.view.waiting)this.view.waiting=t,this.view.slow=e.name,this.draw()};onResize=()=>{if(this.cols=process.stdout.columns||this.cols,this.rows=process.stdout.rows||this.rows,this.scroll(),this.view.mode==="try"&&this.current)this.reveal();this.pump(),this.draw()};key(e){let n=this.view;if(e==="ctrl-c"){this.finish(2);return}if(n.installing!==void 0)return;if(n.asking!==void 0){this.askKey(e);return}if(e==="focus-in"){this.peek();return}if(e==="focus-out"||e==="nop")return;if((e==="ctrl-v"||e==="alt-v")&&n.panel===void 0){this.fromClipboard();return}if(n.editing!==void 0){this.editKey(e);return}if(n.panel!==void 0){this.panelKey(e);return}if(n.help){if(e==="?"||e==="esc")n.help=!1,this.draw();return}if(this.cols<Ut.cols||this.rows<Ut.rows){if(e==="esc")this.finish(2);return}if(e==="?"){n.help=!0,this.draw();return}if(n.mode==="try"){this.tryKey(e);return}this.gridKey(e)}gridKey(e){let n=this.view,{perRow:t,rowsVis:r}=lr(this.cols,this.rows),o={left:-1,right:1,up:-t,down:t,pgup:-t*r,pgdn:t*r,home:-n.focus,end:n.tiles.length}[e];if(o!==void 0){this.focus(n.focus+o);return}if(e==="enter"&&n.tiles[n.focus]){n.mode="try",n.error=void 0,this.select();return}if(e==="v"){this.fromClipboard();return}if(e==="c"){n.preset=n.preset==="cutouts"?"all":"cutouts",this.turn();return}if(e==="tab"){this.tab=(this.tab+1)%(x.length+1),this.syncSite(),this.turn();return}if(e==="/"){n.editing="",this.draw();return}if(e===" "){this.unfold();return}if(e==="o"){this.openPage();return}if(e==="s"){n.panel=0,this.draw();return}if(e==="esc")this.finish(2)}panelKey(e){let n=this.view,t=n.panel??0,r=n.settings[t];if(e==="up"||e==="down"){n.panel=Math.max(0,Math.min(n.settings.length-1,t+(e==="up"?-1:1))),this.draw();return}if((e==="left"||e==="right")&&r){let i=e==="left"?-1:1;if(r.multi)r.cursor=(r.cursor+i+r.choices.length)%r.choices.length;else{let o=r.choices.indexOf(r.value);r.value=r.choices[(o+i+r.choices.length)%r.choices.length]}this.draw();return}if(e===" "&&r?.multi){let i=r.value.split(" "),o=r.choices.filter((u,c)=>c===r.cursor?!i.includes(u):i.includes(u)),s=r.multi.none;if(o.length>0||s!==void 0)r.value=o.length>0?o.join(" "):s,this.draw();return}if(e==="esc"){n.settings.forEach((i,o)=>{i.value=this.setting(gr[o]?.name??"")}),n.panel=void 0,this.draw();return}if(e==="enter"||e==="alt-c")n.panel=void 0,this.adopt()}adopt(){let e=this.view,n=gr.map((r)=>this.setting(r.name));e.settings.forEach((r,i)=>{let o=gr[i];if(o)this.values.set(o.name,r.value)});let t=gr.filter((r,i)=>this.setting(r.name)!==n[i]);if(t.length===0){this.draw();return}this.save(t),e.rating=Xt(this.setting("TTHEME_FIND_RATING")),e.block=Vt(this.setting("TTHEME_FIND_BLOCK")),e.sets=this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",e.preset=this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",e.order=xd(this.setting("TTHEME_FIND_ORDER")),e.solo=this.setting("TTHEME_FIND_SOLO")==="on",this.boards.clear(),this.current=void 0,e.shown=void 0,e.mode="grid",this.search()}save(e){this.store(e.map((n)=>[n.name,this.setting(n.name)]))}store(e){let n=An(this.home,"ttheme","config.zsh");try{let t=dr(n)?cg(n,"utf8"):"";return Hi(n,e.reduce((r,[i,o])=>cf(r,i,o),t)),!0}catch(t){return this.view.error=t instanceof Error?t.message:String(t),!1}}askKey(e){let n=this.view;if(e==="y"){if(n.asking=void 0,this.store([["TTHEME_FIND_UNBLOCK","1"]])){this.unblock=!0,this.finish(0);return}this.draw();return}if(e==="n"||e==="esc")n.asking=void 0,this.draw()}editKey(e){let n=this.view,t=n.editing??"",r=n.suggest??[];if((e==="up"||e==="down")&&r.length>0){let i=n.pick??-1,o=e==="down"?Math.min(r.length-1,i+1):i-1;n.pick=o<0?void 0:o,this.draw();return}if(e==="esc"||e==="enter")this.quietSuggest();if(e==="esc"){if(n.editing=void 0,n.tag===""){this.finish(2);return}this.draw();return}if(e==="enter"){let i=n.pick===void 0?void 0:r[n.pick],o=i?t.replace(/\S*$/,i.value):t;if(n.editing=void 0,n.suggest=void 0,n.pick=void 0,o.trim()){this.commit(o.trim());return}if(n.tag===""){this.finish(2);return}this.draw();return}if(e==="backspace"){n.editing=t.slice(0,-1),this.suggest(),this.draw();return}if(e.length===1&&e>=" ")n.editing=t+e,this.suggest(),this.draw()}quietSuggest(){clearTimeout(this.suggestTimer),this.suggesting?.abort(),this.suggesting=void 0}suggest(){this.quietSuggest();let e=this.view;e.pick=void 0;let n=/\S*$/.exec(e.editing??"")?.[0]??"";if(!Rk(n)){e.suggest=void 0;return}let t=[...new Map(kl(this.catalog.palettes,this.entry,n).map((i)=>[i.booru,{value:i.booru,count:0,palette:i.name}])).values()].slice(0,Jk);e.suggest=t.length>0?t:void 0;let r=new AbortController;this.suggesting=r,this.suggestTimer=setTimeout(async()=>{try{let i=await gh(n,AbortSignal.any([this.signal,r.signal]));if(this.suggesting===r&&e.editing!==void 0){let o=new Map(i.map((u)=>[u.value,u.count])),s=new Set(t.map((u)=>u.value));e.suggest=[...t.map((u)=>({...u,count:o.get(u.value)??0})),...i.filter((u)=>!s.has(u.value))].slice(0,Ck),e.pick=e.pick!==void 0&&e.pick<t.length?e.pick:void 0,this.draw()}}catch{}},Pk)}async commit(e){let n=ro(e,this.site??x[0]);if(n){await this.jump(n.site,n.id);return}if(this.picture(e)){await this.attach(e);return}this.view.tag=e,this.boards.clear(),await this.search()}async jump(e,n){let t=++this.gen;this.tab=x.indexOf(e)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ss(`${e.key}|post:${n}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.draw();try{let i=await Cr(e,n,this.signal);if(t!==this.gen)return;if(!i){r.searching=!1,r.error=`${e.name} has no post ${n}`,this.view.error=r.error,this.show(),this.draw();return}this.single(r,{site:e,post:i})}catch(i){this.fail(t,i,e)}}async turn(){this.fetch?.abort(),this.current=void 0,this.view.shown=void 0;let e=this.boards.get(this.boardKey);if(!e){await this.search();return}this.gen++,this.board=e,this.view.error=e.error,this.show(),this.draw(),await this.pump()}unfold(){let e=this.view,n=0;for(let t of this.board.groups){let r=t.open?t.posts.length:1;if(e.focus<n+r){if(t.posts.length<2)return;t.open=!t.open,this.board.focus=n;for(let i of t.posts)if(!this.thumbPath.has(Mn(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.draw();return}n+=r}}openPage(){let e=this.view.tiles[this.view.focus],n=e&&this.posts.get(e.key);if(!n)return;let t=process.platform==="darwin"?"open":"xdg-open";try{yk(t,[n.site.pageUrl(n.post.id)],{stdio:"ignore",detached:!0}).unref()}catch{}}tryKey(e){let n=this.view;if(e==="left"||e==="right"){this.direction=e==="left"?-1:1,this.focus(n.focus+this.direction);return}if(e==="o"){this.openPage();return}if(e==="x"){this.swap();return}if(e==="v"){this.fromClipboard();return}if(e==="enter"){this.install();return}if(e==="esc")this.fetch?.abort(),clearTimeout(this.settle),n.fetching=void 0,n.mode="grid",n.error=void 0,this.draw()}focus(e){let n=this.view;if(n.tiles.length===0)return;let t=Math.max(0,Math.min(n.tiles.length-1,e));if(t===n.focus)return;if(n.focus=t,this.board.focus=t,this.scroll(),this.pump(),n.mode==="try")this.select();this.draw()}scroll(){let e=this.view,{perRow:n,rowsVis:t}=lr(this.cols,this.rows),r=Math.floor(e.focus/n);if(r<e.top)e.top=r;if(r>e.top+t-1)e.top=r-t+1;this.board.top=e.top}query(e){let n=this.view,t=n.tag===this.entry.booru?El(this.entry,e.key):[n.tag];if(t.length===0)return;let r=t.length>1,i=n.preset==="cutouts"?e.cutouts:"",o=r&&i.includes("~"),s=[r?t.map((a)=>`~${a}`).join(" "):t[0],e.rate(this.view.rating),o?"":i,n.order==="score"?e.best:""].filter(Boolean),u=[],c=[];for(let a of s)if(Cs([...u,a].join(" "))<=e.tagBudget)u.push(a);else c.push(a);return{tags:u.join(" "),notes:[...c.length>0?[`${e.name} takes ${e.tagBudget} tags — ${c.join(" ")} left out`]:[],...o?[`${e.name} ORs the names, so cutouts are told by the file`]:[]]}}async search(){let e=++this.gen,n=ss(this.boardKey,!0);this.board=n,this.boards.set(n.key,n),this.view.error=void 0;let t=this.sites.flatMap((o)=>{let s=this.query(o);return s?[{site:o,...s}]:[]}),r=this.sites.filter((o)=>!t.some((s)=>s.site===o)),i=[...t.flatMap(({notes:o})=>o),...r.length>0?[`${this.entry.name} has no tag on ${r.map((o)=>o.name).join(", ")}`]:[]];if(n.note=i.length>0?i.join(" · "):void 0,t.length===0)n.searching=!1;this.show(),this.draw(),this.tally(e,n,t);try{let o=await Promise.all(t.map(async(s)=>({plan:s,owners:await this.mateOwners(s.site)})));if(e!==this.gen)return;n.sources=o.flatMap(({plan:{site:s,tags:u},owners:c})=>[...Cs(u)+1<=s.tagBudget?[...c.keys()].map((a)=>({site:s,tags:`${u} user:${a}`,page:0,done:!1})):[],{site:s,tags:u,page:0,done:!1}]),this.show(),this.draw(),await this.pump()}catch(o){this.fail(e,o)}}async tally(e,n,t){let r=await Promise.allSettled(t.map(({site:i,tags:o})=>fh(i,o,this.signal)));if(e===this.gen)n.total=r.reduce((i,o)=>i+(o.status==="fulfilled"?o.value:0),0),this.show(),this.draw()}fail(e,n,t=this.site){if(e!==this.gen||this.signal.aborted)return;this.board.error=rc(t?.name??this.tabName,n),this.board.searching=!1,this.view.error=this.board.error,this.offer(t,n),this.show(),this.draw()}offer(e,n){if(e&&!this.view.unblocked&&Mi()&&mr(n)==="ECONNRESET")this.view.asking=e.name}drop(e,n,t){for(let r of e.sources)if(r.site===n)r.done=!0;e.note=[e.note,rc(n.name,t)].filter(Boolean).join(" · "),this.offer(n,t)}wants(){let{perRow:e,rowsVis:n}=lr(this.cols,this.rows);return this.view.tiles.length<(this.board.top+n+ig)*e}need(){let{perRow:e,rowsVis:n}=lr(this.cols,this.rows);return(n+ig)*e}live(e){return this.boards.get(e.key)===e}page(e,n,t){let r=`${e.key}|${n}|${t}`,i=this.pages.get(r);if(!i)i=hh(e,n,t,this.signal).then((o)=>this.borrow(o)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(e){let n=e.filter((t)=>t.solo===void 0&&t.md5!=="");if(n.length>0)try{lh(n,await dh(n.map((t)=>t.md5),this.signal))}catch{}return e}async round(e){let n=x.flatMap((u)=>{let c=e.sources.find((a)=>a.site===u&&!a.done);return c?[c]:[]}),t=await Promise.all(n.map(async(u)=>{try{return{source:u,posts:await this.page(u.site,u.tags,u.page)}}catch(c){if(e.sources.every((a)=>a.site===u.site)||this.signal.aborted)throw c;return this.drop(e,u.site,c),{source:u,posts:void 0}}}));if(!this.live(e))return;let r=[];for(let{source:u,posts:c}of t){if(!c)continue;u.page++,u.done=c.length<wt;let a=e.last.get(u);for(let h of c){let f=a&&qd(a.post,h)?a.set:`set:${u.site.key}:${h.id}`;a={post:h,set:f};let l=Mn(u.site,h.id);if(e.seen.has(l))continue;e.seen.add(l);let d={site:u.site,post:h};if(this.eligible(d))e.kin.set(d,[f,..._d(u.site,h)]),r.push(d);else e.checked++}if(a)e.last.set(u,a)}let i=this.dedupe(e,r),o=++e.rounds,s;if(this.view.order!=="fit")s=n.length>1?Wd(i):i;else{let u=is(i,this.frame(),this.matched),c=u.slice(0,this.need());if(await this.looks(c),!this.live(e))return;s=[...is(c,this.frame(),this.matched),...u.slice(c.length)]}for(let u of s)e.roundOf.set(u,o);e.queue.push(...s),this.ahead(e)}ahead(e){if(this.aheading||this.view.order!=="fit"||!this.live(e))return;let n=e.queue.slice(0,this.need()).filter((t)=>!this.looking.has(Mn(t.site,t.post.id)));if(n.length===0)return;this.aheading=!0,this.looks(n).then(()=>{this.aheading=!1;for(let t of new Set(n.map((r)=>e.roundOf.get(r)??0)))this.resort(e,t);this.ahead(e)})}resort(e,n){let t=e.queue.flatMap((i,o)=>e.roundOf.get(i)===n?[o]:[]),r=is(t.map((i)=>e.queue[i]),this.frame(),this.matched);t.forEach((i,o)=>{e.queue[i]=r[o]})}dedupe(e,n){let t=[];for(let r of n){let i=ec(r.post),o=i.map((u)=>e.same.get(u)).find(Boolean);if(!o){for(let u of i)e.same.set(u,r);t.push(r);continue}if(e.checked++,og(r.post)<=og(o.post))continue;for(let u of[...i,...ec(o.post)])e.same.set(u,r);let s=t.indexOf(o);if(s>=0){t[s]=r;continue}this.replace(e,o,r)}return t}replace(e,n,t){e.roundOf.set(t,e.roundOf.get(n)??0);let r=e.queue.indexOf(n);if(r>=0){e.queue[r]=t;return}for(let i of e.groups){let o=i.posts.indexOf(n);if(o>=0){i.posts[o]=t,this.posts.set(Mn(t.site,t.post.id),t),this.thumbQueue.push(t),this.thumbs();return}}}async looks(e){let n=0;await Promise.all(Array.from({length:ng},async()=>{while(n<e.length)await this.look(e[n++])}))}look(e){let n=Mn(e.site,e.post.id),t=this.looking.get(n);if(!t)t=(async()=>{let r=this.previewPath(e);await this.cached(e.site,r,e.post.preview);let i=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(n,i),this.matched.set(e.post,i.match),i})().catch(()=>{return}),this.looking.set(n,t);return t}async pump(){let e=this.gen,n=this.board;if(this.pumping===e||n.sources.length===0)return;this.pumping=e;let t=[],r;try{n.searching=!0;while(e===this.gen){while(t.length<eg&&n.queue.length>0&&this.wants()){let s=n.queue.shift();t.push({pick:s,passed:this.vet(s)})}if(this.ahead(n),!r&&n.queue.length<eg&&n.sources.some((s)=>!s.done)&&this.wants()){let s=this.round(n).then(()=>{if(r===s)r=void 0});s.catch(()=>{}),r=s}let i=t.shift();if(!i){if(!r)break;await r,this.show(),this.draw();continue}let o=await i.passed;if(e!==this.gen)return;if(n.checked++,o)this.admit(i.pick);this.show(),this.draw()}if(e===this.gen)n.searching=!1,this.show(),this.draw()}catch(i){this.fail(e,i)}finally{if(this.saveProbes(),this.pumping===e)this.pumping=0}}eligible({site:e,post:n}){let t=bt(n);if(!oo(e,n,this.view.rating)||io(n,this.view.block).length>0||!t)return!1;if(this.view.solo&&n.solo===!1)return!1;return this.view.preset==="all"?["png","jpg","jpeg"].includes(t.ext):n.ext==="png"}async vet(e){let[n]=await Promise.all([this.passes(e),this.look(e)]);return n}async passes({site:e,post:n}){return this.view.preset==="all"||e.vouched||this.transparent(e,n)}probes(e){let n=this.probed.get(e.key);if(!n)n=ic(e,"probes.json"),this.probed.set(e.key,n);return n}async transparent(e,n){let t=this.probes(e),r=t[n.id];if(r!==void 0)return r;try{let i=(await mh(e,n.file,this.signal))?.alpha===!0;return t[n.id]=i,this.unsaved.add(e.key),i}catch{return!1}}saveProbes(){for(let e of this.unsaved){let n=x.find((t)=>t.key===e);if(n)oc(n,"probes.json",this.probes(n))}this.unsaved.clear()}admit(e){let{site:n,post:t}=e,r=this.board,i=Mn(n,t.id);this.posts.set(i,e);let o=r.kin.get(e)??[],s=this.looked.get(i),u=s&&{hash:s.hash,width:t.width,height:t.height},c=this.view.sets==="fold"?this.kindred(r,o,u):void 0;if(c){if(c.posts.push(e),this.register(r,c,o,u),c.open)this.thumbQueue.push(e),this.thumbs();return}let a={posts:[e],open:!1};r.groups.push(a),this.register(r,a,o,u),this.thumbQueue.push(e),this.thumbs()}kindred(e,n,t){for(let r of n){let i=e.kindred.get(r);if(i)return i}return t&&e.shapes.find((r)=>Zd(r.shape,t))?.group}register(e,n,t,r){for(let i of t)if(!e.kindred.has(i))e.kindred.set(i,n);if(r)e.shapes.push({shape:r,group:n})}async mateOwners(e){let n=this.owners.get(e.key);if(n)return n;let t=Bh(this.home),r=ic(e,"owners.json"),i=this.catalog.palettes.flatMap((c)=>{let a=t.get(c.name);return c.group===this.entry.group&&c.name!==this.entry.name&&a?.site===e.key?[{name:c.name,id:a.id}]:[]}),o=await Promise.all(i.map(async(c)=>{let a=r[c.id];if(a!==void 0)return{...c,owner:a};try{return{...c,owner:(await Cr(e,c.id,this.signal))?.owner??""}}catch{return}})),s=new Map;for(let c of o)if(c)r[c.id]=c.owner,s.set(c.name,c.owner);oc(e,"owners.json",r);let u=ch(s);return this.owners.set(e.key,u),u}async cached(e,n,t,r){if(dr(n))return vk(n).size;let i=this.inflight.get(n);if(i)return i;let o=(async()=>{let s=await uo(e,t,this.signal,r);return Pi(os(n),{recursive:!0}),Hi(n,s),s.length})();this.inflight.set(n,o);try{return await o}finally{this.inflight.delete(n)}}thumbs(){while(this.thumbing<ng&&this.thumbQueue.length>0){let e=this.thumbQueue.shift();this.thumbing++,this.thumb(e).catch(()=>{}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(e){let{site:n,post:t}=e,r=ze.cols*this.cell.w,i=ze.rows*this.cell.h,o=An(pn(n),"tile",`${sg(t)}-${r}x${i}.png`);if(!dr(o)){let s=this.previewPath(e);await this.cached(n,s,t.preview),await this.renders.run({job:"thumb",from:s,to:o,width:r,height:i})}this.thumbPath.set(Mn(n,t.id),o),this.show(),this.draw()}select(){let e=this.view,n=e.tiles[e.focus];if(this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,!n)return;if(this.current?.key===n.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(n),Lk),this.draw()}async load(e){let n=this.view,t=this.posts.get(e.key),r=t&&bt(t.post);if(!t||!r)return;let{site:i}=t,o=this.board,s=new AbortController;this.fetch=s;try{let u=this.origPath(i,e.id,r.ext);if(!dr(u))n.fetching={id:e.key,got:0,size:0},this.draw();let c=await this.cached(i,u,r.file,(f,l)=>{if(n.fetching?.id===e.key)n.fetching={id:e.key,got:f,size:l},this.draw()});if(s.signal.aborted)return;if(n.fetching=void 0,o!==this.board)return;let a={site:i,id:e.id,key:e.key,path:u,ext:r.ext,size:c,using:"plain",failed:!1};n.preparing=e.key,this.flush();let h=await this.render(a,"plain");if(s.signal.aborted||o!==this.board)return;if(h.clear===0&&vi()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(n.preparing=void 0,n.cutting=e.key,this.flush(),a.cut=await this.cutOut(i,e.id,u,s.signal),s.signal.aborted||o!==this.board)return;if(n.cutting=void 0,a.cut){n.preparing=e.key,this.flush();let f=await this.render(a,"cut").catch(()=>{return});if(s.signal.aborted||o!==this.board)return;if(f&&Qo(f.clear))a.using="cut";else tc(a.cut,{force:!0}),a.cut=void 0,a.failed=!0}else a.failed=!0}if(this.current=a,n.tiles[n.focus]?.key===e.key)await this.present();this.preload()}catch(u){if(!s.signal.aborted&&!this.signal.aborted)n.error=rc(i.name,u)}finally{if(n.fetching?.id===e.key)n.fetching=void 0;if(n.preparing===e.key)n.preparing=void 0;if(n.cutting===e.key)n.cutting=void 0;this.draw()}}async cutOut(e,n,t,r){let i=An(pn(e),"cut",`${n}.png`);if(dr(i))return i;try{return Pi(os(i),{recursive:!0}),await Zo(t,i,r),i}catch{tc(i,{force:!0});return}}swap(){let e=this.current;if(!e?.cut||this.view.shown?.id!==e.key)return;e.using=e.using==="cut"?"plain":"cut",this.reveal()}preload(){let e=this.view;if(e.mode!=="try")return;for(let n of[e.focus+this.direction,e.focus-this.direction]){if(this.prefetching>=Hk)return;let t=e.tiles[n],r=t&&this.posts.get(t.key),i=r&&bt(r.post);if(!r||!i)continue;let{site:o,post:s}=r,u=this.origPath(o,s.id,i.ext);this.prefetching++,this.cached(o,u,i.file).then(()=>this.render({site:o,id:s.id,key:t.key,path:u,ext:i.ext,size:0,using:"plain",failed:!1},"plain")).catch(()=>{}).finally(()=>{this.prefetching--})}}async render(e,n){let t=this.cols*this.cell.w,r=this.rows*this.cell.h,i=Math.min(t,jk),o=Math.max(1,Math.round(r*i/t)),s=An(this.scratch,`${e.site.key}-${e.id}${n==="cut"?"c":""}-${i}x${o}.png`),u=`${e.site.key}:${e.id}:${n}`,c=this.clarity.get(u);if(c!==void 0&&dr(s))return{clear:c,path:s};let a=await this.renders.run({job:"show",from:n==="cut"?e.cut:e.path,to:s,width:i,height:o,colors:this.entry,tone:this.tone});return this.clarity.set(u,a),{clear:a,path:s}}async present(){let e=this.current;if(!e)return;let n=e.using,{clear:t,path:r}=await this.render(e,n);if(this.current!==e||e.using!==n)return;this.view.shown={id:e.key,clear:t,bytes:e.size,path:r,cut:e.cut?n==="cut"?"on":"off":e.failed?"failed":"none"}}reveal(){let e=this.view;e.preparing=this.current?.key,this.flush(),this.present().catch((n)=>{e.error=n instanceof Error?n.message:String(n)}).finally(()=>{if(e.preparing===this.current?.key)e.preparing=void 0;this.draw()})}async install(){let e=this.view,n=e.tiles[e.focus],t=this.current;if(!n||t?.key!==n.key||e.preparing!==void 0||e.shown?.id!==n.key)return;e.installing=n.key,e.error=void 0,this.flush();try{await this.renders.run({job:"backdrop",from:t.using==="cut"?t.cut:t.path,source:t.path,home:this.home,colors:this.entry,tone:this.tone,origin:{site:t.site.key,id:t.id,ext:t.ext,from:`${t.site.name} ${t.id} ${t.site.pageUrl(t.id)}`},width:this.cols*this.cell.w,height:this.rows*this.cell.h});let r=ic(t.site,"owners.json");r[t.id]=this.posts.get(t.key)?.post.owner??"",oc(t.site,"owners.json",r),at(this.home),e.saved=`background · ${this.entry.name} ← ${t.site.name} ${t.id}`,e.installed.push(n.key),this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,e.mode="grid"}catch(r){e.error=r instanceof Error?r.message:String(r)}e.installing=void 0,this.draw()}draw(){if(this.dirty)return;this.dirty=!0,setImmediate(()=>{this.dirty=!1,this.flush()})}flush(){let e=Jd(this.view,this.cols,this.rows),n="\x1B[?2026h";e.lines.forEach((r,i)=>{n+=`\x1B[${i+1};1H\x1B[K${r}`});let t=new Set;for(let r of e.images){if(t.add(r.id),this.sent.get(r.id)!==r.path)n+=Pd(r),this.sent.set(r.id,r.path),this.placed.delete(r.id);let i=`${r.row};${r.col};${r.cols};${r.rows};${r.z}`;if(this.placed.get(r.id)!==i)n+=Hd(r),this.placed.set(r.id,i)}for(let r of this.sent.keys())if(!t.has(r))n+=Ld(r),this.sent.delete(r),this.placed.delete(r);this.write(`${n}\x1B[?2026l`)}}async function hg(e){if(Ni())return Ii();let n=de(),t=ur(n),r=Pt(t.palettes,e);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new ag(n,t,r,r.booru??""),o=await i.run(),s=i.unblock?await Ii():o;if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
516
+ `),0;return s}function fg(e,n){let t=de();if(Pt(ur(t).palettes,e),n==="next"||n==="prev"){let{key:r,at:i,of:o}=Zh(t,e,n==="next"?1:-1);return at(t),process.stderr.write(`background · ${e} ${i}/${o} ${r}
517
+ `),0}if(n==="drop"){let{key:r,left:i}=Yh(t,e);return at(t),process.stderr.write(`background · ${e} removed ${r} · ${i} left
518
+ `),0}if(n==="tuned")return at(t),0;throw Error(`unknown image action ${n} — next, prev, drop or tuned`)}import{execFileSync as Lg,spawnSync as Dk}from"node:child_process";import{chmodSync as xk,copyFileSync as e1,existsSync as rn,mkdirSync as fc,readdirSync as n1,readFileSync as wr,rmSync as Pg,writeFileSync as t1}from"node:fs";import{homedir as r1}from"node:os";import{dirname as pr,join as ye}from"node:path";import{existsSync as Bk}from"node:fs";import{openSync as Kk,writeSync as _k}from"node:fs";import{ReadStream as qk}from"node:tty";var lg=["10","11","12","17",...Array.from({length:16},(e,n)=>`4;${n}`)];function Li(e=process.env){return Boolean(e.NO_COLOR)||e.TERM==="dumb"}function us(e){return[`\x1B]11;${e.background}\x1B\\`,`\x1B]10;${e.foreground}\x1B\\`,`\x1B]12;${e.cursor}\x1B\\`,`\x1B]17;${e.selection}\x1B\\`,...e.ansi.map((n,t)=>`\x1B]4;${t};${n}\x1B\\`)].join("")}function dg(e){let n=new Map;for(let t of e.split("\x1B")){let r=t.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,o]=r??[];if(i&&o)n.set(i,o)}return n}function gg(e){return[...e].map(([n,t])=>`\x1B]${n};${t}\x1B\\`).join("")}async function mg(){let e,n;try{e=Kk("/dev/tty","r+"),n=new qk(e),n.setRawMode(!0)}catch{return new Map}try{_k(e,lg.map((r)=>`\x1B]${r};?\x1B\\`).join(""));let t="";return await new Promise((r)=>{let i=setTimeout(r,120);n.on("data",(o)=>{if(t+=o.toString(),dg(t).size>=lg.length)clearTimeout(i),r()})}),dg(t)}finally{n.setRawMode(!1),n.destroy()}}function sc(e){let n=e.replace("#","");return[n.slice(0,2),n.slice(2,4),n.slice(4,6)].map((t)=>Number.parseInt(t,16)).join(";")}function Ai(e){return`\x1B[38;2;${sc(e)}m`}function pg(e,n){return`\x1B[48;2;${sc(e)};38;2;${sc(n)}m`}function wg(e,n="\x1B[39m"){return`${e.map((t)=>`${Ai(t)}■`).join(" ")}${n}`}function cs(e,n){let t=n.toLowerCase();return[e.name,e.group,e.native??""].some((r)=>r.toLowerCase().includes(t))}function bg(e,n,t){let r=t.trim(),i=[],o=new Set;for(let s of e){if(s.default||o.has(s.group))continue;o.add(s.group);let u=e.filter((h)=>!h.default&&h.group===s.group),c=r?u.filter((h)=>cs(h,r)):u;if(r&&c.length===0)continue;let a=r.length>0||n.has(s.group);if(i.push({kind:"group",name:s.group,native:s.native,lead:u.find((h)=>h.lead)??s,expanded:a,count:c.length}),a)i.push(...c.map((h)=>({kind:"palette",entry:h})))}return i}function Qk(e,n){let t=n.trim(),r=new Set(e.filter((i)=>!i.default&&(t===""||cs(i,t))).map((i)=>i.group));return bg(e,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function Zk(e){return e.includes("@")}function Yk(e){let n=e.findIndex((t)=>t.kind==="group"&&Zk(t.name));return n>0&&e.slice(0,n).some((t)=>t.kind==="group")?[...e.slice(0,n),{kind:"rule"},...e.slice(n)]:e}function Xk(e){let n=e.findIndex((t)=>t.kind==="palette");return n===-1?0:n}var Ti="\x1B[0m",uc="\x1B[2m",$g="\x1B[1m",cc="\x1B[22m",Vk="\x1B[36m",zk="\x1B[33m";function kg(e){return e==="decode"||e==="glitch"?e:"typewriter"}class ac extends Rn{picked;scope;entries;named;series;seriesPad;namePad;expanded=new Set;rows=[];cursor=0;top=0;maxItems;color;lastInput="";lastFocused="";onFocus;example="";fx;fxStep=0;fxSeed=0;fxTimer;constructor(e){super({render:()=>this.draw(),input:e.input,output:e.output,validate:e.required?()=>this.picked.size===0?`pick at least one ${this.scope}`:void 0:void 0},!0);this.entries=e.entries,this.scope=e.scope??"palette",this.picked=new Set(e.installed??[]),this.named=e.entries.filter((t)=>!t.default),this.series=[...new Set(this.named.map((t)=>t.group))],this.seriesPad=Math.max(0,...this.series.map((t)=>t.length)),this.namePad=Math.max(0,...this.named.map((t)=>t.name.length)),this.maxItems=e.maxItems??12,this.color=e.color??!0,this.fx=e.fx??"typewriter",this.onFocus=e.onFocus,this.rollExample();let n=setInterval(()=>{this.rollExample(),this.fxStep=8,this.output.emit("resize")},3000);n.unref?.(),this.once("finalize",()=>{clearInterval(n),clearTimeout(this.fxTimer)}),this.rebuild("first"),this.on("cursor",(t)=>{if(t==="up")this.move(-1);else if(t==="down")this.move(1);else if(t==="left")this.fold(!1);else if(t==="right")this.fold(!0)}),this.on("userInput",(t)=>{if(t!==this.lastInput)this.lastInput=t,this.rebuild("keep")}),this.on("key",(t,r)=>{if(r?.name==="space")this.pick(this.rows[this.cursor])})}_isActionKey(e){return e==="\t"||e===" "}members(e){let n=this.scope==="palette"?this.userInput.trim():"";return this.named.filter((t)=>t.group===e&&(n===""||cs(t,n)))}everyone(e){return e.flatMap((n)=>n.kind==="group"?this.members(n.name):[])}pick(e){let n=e?.kind==="palette"?[e.entry.name]:e?.kind==="group"?this.members(e.name).map((r)=>r.name):e?.kind==="all"?this.everyone(this.rows).map((r)=>r.name):[];if(n.length===0)return;let t=n.some((r)=>!this.picked.has(r));for(let r of n)if(t)this.picked.add(r);else this.picked.delete(r)}pickedIn(e){return this.members(e).filter((n)=>this.picked.has(n.name)).length}pickedCount(){if(this.scope==="palette")return this.picked.size;return this.series.filter((e)=>this.members(e).every((n)=>this.picked.has(n.name))).length}rollExample(){let e=this.named[Math.floor(Math.random()*this.named.length)],n=this.series[Math.floor(Math.random()*this.series.length)];if(!e||!n){this.example="";return}let t=`${e.name} | ${n}`;this.example=t.length>30?`${t.slice(0,29)}…`:t,this.fxSeed=Math.floor(Math.random()*997)}animatedExample(){if(this.fxStep===0)return this.example;if(!this.fxTimer)this.fxTimer=setTimeout(()=>{this.fxTimer=void 0,this.fxStep-=1,this.output.emit("resize")},60),this.fxTimer.unref?.();let e=Math.floor(this.example.length*(8-this.fxStep)/8);if(this.fx==="typewriter")return`${this.example.slice(0,e)}▏`;let n=this.fx==="decode"?"abcdefghijklmnopqrstuvwxyz":"▓▒░#*+=<>?/-_",t=this.fx==="decode"?(r)=>!/[a-z0-9]/i.test(r):(r)=>r===" ";return[...this.example].map((r,i)=>i+(i*7+this.fxSeed)%3<e||t(r)?r:n[Math.floor(Math.random()*n.length)]??r).join("")}sync(){let e=this.rows[this.cursor],n=e?.kind==="palette"?e.entry:e?.kind==="group"&&this.scope==="series"?e.lead:void 0;if(n&&n.name!==this.lastFocused)this.lastFocused=n.name,this.onFocus?.(n)}rebuild(e){let n=this.rows[this.cursor],t=this.scope==="series"?Qk(this.entries,this.userInput):bg(this.entries,this.expanded,this.userInput);this.rows=t.length>0?Yk([{kind:"all",count:this.allCount(t)},...t]):[];let r=t.length>0?this.rows.indexOf(t[Xk(t)]):0;if(e==="first")this.cursor=r;else if(e==="keep"){let i=n?.kind==="palette"?n.entry.name:"",o=i?this.rows.findIndex((s)=>s.kind==="palette"&&s.entry.name===i):-1;this.cursor=o===-1?r:o}else if(this.cursor>=this.rows.length)this.cursor=Math.max(0,this.rows.length-1);this.sync()}allCount(e){return this.scope==="series"?e.length:this.everyone(e).length}move(e){let n=this.cursor+e;if(this.rows[n]?.kind==="rule")n+=e;if(n>=0&&n<this.rows.length)this.cursor=n;this.sync()}toggle(e){if(this.expanded.has(e))this.expanded.delete(e);else this.expanded.add(e);this.rebuild("clamp")}fold(e){if(this.userInput||this.scope==="series")return;let n=this.rows[this.cursor];if(n?.kind==="group"){if(e!==n.expanded)this.toggle(n.name)}else if(n?.kind==="palette"&&!e&&!n.entry.default){let t=n.entry.group;if(this.expanded.delete(t),this.rebuild("clamp"),this.cursor=this.rows.findIndex((r)=>r.kind==="group"&&r.name===t),this.cursor===-1)this.cursor=0;this.sync()}}renderRow(e,n){if(e.kind==="rule")return` ${this.color?`${uc}${"── markets ──────────"}${Ti}`:"── markets ──────────"}`;let t=e.kind==="palette"?e.entry:e.kind==="group"?e.lead:void 0,r=this.color&&n&&t!==void 0,i=(d)=>this.color?`${uc}${d}${cc}`:d,o=(d)=>this.color?`${$g}${d}${cc}`:d,s=(d)=>this.color?` ${wg(lo(d),r?Ai(d.foreground):"\x1B[39m")}`:"",u=n?r?`${Ai(t.cursor)}▌\x1B[39m `:"▌ ":" ",c=(d)=>r?`${u}${pg(t.selection,t.foreground)} ${d} ${Ti}`:`${u} ${d}`;if(e.kind==="all"){let d=this.everyone(this.rows).every((g)=>this.picked.has(g.name))?"●":"○";return c(`${d} select all ${i(`(${e.count})`)}`)}if(e.kind==="group"&&this.scope==="series"){let d=this.pickedIn(e.name)===e.count?"●":"○",g=`(${e.count})${e.native?` ${e.native}`:""}`;return c(`${d} ${o(e.name.padEnd(this.seriesPad))}${s(e.lead)}${this.color?" ":" "}${i(g)}`)}if(e.kind==="group"){let d=this.rows[this.cursor],g=d?.kind==="palette"&&d.entry.group===e.name?d.entry:void 0,m=this.color&&g?`${$g}${Ai(g.cursor)}${e.name}${cc}\x1B[39m`:o(e.name),b=e.native?` ${i(e.native)}`:"";return c(`${e.expanded?"▾":"▸"} ${m} ${i(`(${this.pickedIn(e.name)}/${e.count})`)}${b}`)}let a=e.entry,h=this.picked.has(a.name)?"●":"○",f=this.color?a.name.padEnd(this.namePad):a.name,l=n?o(f):f;return c(` ${h} ${l}${s(a)}`)}draw(){let e=(m)=>this.color?`${uc}${m}${Ti}`:m,n=(m)=>this.color?`${Vk}${m}${Ti}`:m,t=this.scope==="series"?"series":"catalog";if(this.state==="submit")return`${e("◇")} ${t} ${e(`· ${this.pickedCount()} picked`)}`;if(this.state==="cancel")return`${e(`◇ ${t} · cancelled`)}`;let r=this.userInput.trim(),i=this.scope==="series"?this.series.length:this.named.length,o=this.scope==="series"?this.rows.filter((m)=>m.kind==="group").length:r?this.named.filter((m)=>cs(m,r)).length:i,s=`${n("◆")} ${t} ${e(`(${o}/${i} · ${this.pickedCount()} picked)`)}`,u=`${n("│")} ${this.userInput?`${this.userInput}_`:e(`search…${this.example?` e.g. ${this.animatedExample()}`:""}`)}`;if(this.cursor<this.top)this.top=this.cursor;if(this.cursor>=this.top+this.maxItems)this.top=this.cursor-this.maxItems+1;this.top=Math.min(this.top,Math.max(0,this.rows.length-this.maxItems));let c=this.rows.slice(this.top,this.top+this.maxItems),a=c.length>0?c.map((m,b)=>`${n("│")} ${this.renderRow(m,this.top+b===this.cursor)}`):[`${n("│")} ${e(`no ${this.scope==="series"?"series":"palettes"} match '${this.userInput}'`)}`];while(a.length<this.maxItems)a.push(n("│"));let h=this.rows.length-this.top-c.length,f=h>0?`${n("│")} ${e(`↓ ${h} more`)}`:n("│"),l=this.scope==="series"?"":" · ←→ fold",d=this.scope==="series"?"continue":"install",g=this.state==="error"?`${n("└")} ${this.color?`${zk}${this.error}${Ti}`:this.error}`:`${n("└")} ${e(`↑↓ move${l} · space pick · type to filter · enter ${d} · esc cancel`)}`;return[s,u,...a,f,g].join(`
519
+ `)}}function hc(e){console.log(`
520
+ ${e} palettes installed — open a new tab, or reload your terminal config`)}async function Eg(e){let n=de(),t=He(n),r=[...new Set(e.map((c)=>c.startsWith(ut)?ud(n,c,t):c))],i=ke(n),o=r.filter((c)=>i.palettes.includes(c)),s=r.filter((c)=>!i.palettes.includes(c));if(s.length===0){nn(n,t,i),console.log(`already installed: ${o.join(", ")}`);return}let u={...i,palettes:[...i.palettes,...s]};ht(n,t,i,u);for(let c of s)console.log(` + ${c}`);await Gt(n,Ue(n,t,!1).palettes.filter((c)=>s.includes(c.name)),u.terminals),hc(u.palettes.length)}function yg(e){let n=de(),t=He(n),r=ke(n),i=e.filter((u)=>r.palettes.includes(u)),o=e.filter((u)=>!r.palettes.includes(u));if(i.length===0)throw Error(`not installed: ${o.join(", ")} — \`ttheme list\` marks what is`);let s={...r,palettes:r.palettes.filter((u)=>!i.includes(u))};ht(n,t,r,s),Ju(n,t,r.terminals,i);for(let u of i)console.log(` - ${u}`);if(hc(s.palettes.length),o.length>0)return console.error(`ttheme remove: not installed: ${o.join(", ")}`),1;return 0}function Sg(e){let n=de(),t=He(n),r=ke(n);if(!r.palettes.includes(e))throw Error(`${e} is not installed — \`ttheme add ${e}\` first`);let{off:i,...o}=r,s=_n(),u=Ei({...o,startup:e},s);nn(n,t,u),qn(n,u);let c=At(u,s);console.log(Ig(e,u.terminals,c&&s.running()).join(`
521
+ `))}function vg(){let e=de(),n=ke(e),t=Qn(n);if(!t)throw Error("no palettes installed — `ttheme browse` picks some");if(!n.off){console.log(`already on · ${t}`);return}let{off:r,...i}=n,o=ht(e,He(e),n,i);console.log(Ig(t,i.terminals,o).join(`
522
+ `))}function Mg(){let e=de(),n=ke(e);if(n.off){console.log("already off");return}let t=ht(e,He(e),n,{...n,off:!0}),r=Qn(n);if(console.log(`off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`),t)console.log("iterm2 new tabs open on your own profile once iTerm2 restarts")}function Ig(e,n,t){let r=n.filter((o)=>o!=="iterm2"),i=r.length>0?[`default ${e} · ${r.join(", ")} open new tabs with it once their config reloads`]:[];if(n.includes("iterm2"))i.push(t?'iterm2 new tabs open with it once iTerm2 restarts — "ttheme · default" is now its default profile':'iterm2 new tabs open with it — "ttheme · default" is its default profile');return i.length>0?i:[`default ${e} · no terminal is wired to open with it — \`ttheme init\` wires one`]}function Ng(e,n){let t=new Map(n.palettes.map((r)=>[r.name,"market"]));for(let r of Po(e,n.palettes,!1))t.set(r.name,"mine");return t}function Og(e,n=!1){let t=de(),r=He(t),i=new Set(ke(t).palettes),o=Ng(t,r),s=an(Ue(t,r).palettes),u=_r(e?bl(s,e):s),c=(f)=>o.get(f)??"kept";if(n){let f=u.map((l)=>({name:l.name,group:l.group,installed:i.has(l.name),source:c(l.name)}));console.log(JSON.stringify(f,null,2));return}let a=Math.max(...u.map((f)=>f.name.length),0),h={market:"",mine:" · yours",kept:" · in no market you added"};for(let f of u)console.log(` ${i.has(f.name)?"●":"○"} ${f.name.padEnd(a)} ${f.group}${h[c(f.name)]}`);if(process.stdout.isTTY){let f=e?`${u.length} of ${s.length}`:`${s.length}`;console.log(`
523
+ ${f} palettes — ${u.filter((l)=>i.has(l.name)).length} installed`)}}async function Rg(){let e=de(),n=or(e);if(n.length===0)console.log("no markets to update — `ttheme market add official` brings the ttheme catalog back");for(let u of n)try{console.log(` ${await Dl(e,u)}`)}catch(c){let a=$n(u);console.log(` ${a}: ${c.message} — kept the copy from the last update`)}if(!Bk(ir(e)))return;let t=He(e),r=ke(e),i=Ng(e,t),o=r.palettes.filter((u)=>!i.has(u)),s=new Map(bi(e).map((u)=>[u.name,u.pictures]));nn(e,t,r);for(let u of o)console.log(` ${u} left its market — ttheme keeps the copy you have`);await Gt(e,Ue(e,t,!1).palettes.filter((u)=>r.palettes.includes(u.name)&&s.has(u.name)).map((u)=>Yo(u,s.get(u.name))),r.terminals)}async function as(e,n,t,r=!1){let i=process.env.TTHEME_SORT==="series"?e.palettes:_r(e.palettes),o=process.stdout.isTTY===!0&&!Li(),s=o?await mg():new Map,u=new ac({entries:i,scope:t,installed:n,required:r,color:!Li(),fx:kg(process.env.TTHEME_FX),onFocus:o?(a)=>process.stdout.write(us(a)):void 0}),c=await u.prompt();if(process.stdout.write(gg(s)),en(c))return;return e.palettes.filter((a)=>u.picked.has(a.name)).map((a)=>a.name)}async function Fg(){let e=de(),n=He(e),t=ke(e),r=await as(Ue(e,n),t.palettes,"palette");if(!r){console.log("nothing changed");return}let i=t.palettes.filter((u)=>!r.includes(u)),o=r.filter((u)=>!t.palettes.includes(u));if(o.length===0&&i.length===0){console.log("nothing changed");return}let s={...t,palettes:r};ht(e,n,t,s),Ju(e,n,t.terminals,i);for(let u of o)console.log(` + ${u}`);for(let u of i)console.log(` - ${u}`);await Gt(e,Ue(e,n,!1).palettes.filter((u)=>o.includes(u.name)),s.terminals),hc(s.palettes.length)}function i1(e,n,t){for(let r of n1(n))e.push({from:ye(n,r),to:ye(t,r)})}function Ag(e){return JSON.parse(wr(ye(e,"dist","manifest.json"),"utf8"))}function lc(e,n){let t=ye(n.configHome,"ttheme"),r=[{from:ye(n.root,"bin","ttheme.js"),to:ye(t,"ttheme.js")},{from:ye(n.root,"bin","ttheme.js.map"),to:ye(t,"ttheme.js.map")},{from:ye(n.root,"shell","ttheme.zsh"),to:ye(t,"ttheme.zsh")},{from:ye(n.root,"shell","launch-tab.zsh"),to:ye(t,"launch-tab.zsh"),executable:!0}];i1(r,ye(n.root,"shell","adapters"),ye(t,"adapters"));let i=[{file:ye(n.zdotdir,".zshrc"),block:of(t)}],o=ye(t,"config.zsh"),s=af(rn(o)?wr(o,"utf8"):""),u={file:o,content:s},c=[];if(e.terminals.includes("alacritty")){let f=Tt(n.configHome);if(rn(f)&&si(wr(f,"utf8"),void 0)===void 0)c.push(`${f} already imports files under [general] — ttheme left it alone; add ${ye(n.configHome,"alacritty","themes")}/<palette>.toml to that import list yourself`)}if(e.terminals.includes("wezterm")){let f=hr(n.configHome,n.home);if(rn(f)&&ui(wr(f,"utf8"),"")===void 0)c.push(`${f} has no \`return config\` line — ttheme left it alone; call \`dofile("${ye(t,"wezterm.lua")}")(config)\` from it yourself`)}let a=e.terminals.includes("windows-terminal");if(a&&!n.wtHome)c.push("windows terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself");if(e.terminals.includes("warp"))c.push("warp: wears the default palette app-wide through its settings.toml — the shell layer stays off in it, since Warp paints no tab background of its own");let h={terminals:e.terminals,palettes:e.palettes,...a&&n.wtHome?{wtHome:n.wtHome}:{},...a&&n.wtProfile?{wtProfile:n.wtProfile}:{},...e.off?{off:!0}:{}};return c.push(...Al(n.configHome,e.terminals,n.home)),{home:n.home,copies:r,edits:i,settings:u,catalog:Ag(n.root),installed:h,notes:c}}function o1(e){try{return ke(e)}catch{return}}function s1(e){try{return Ue(e,He(e),!1).palettes}catch{return[]}}function u1(e,n){let t=lc({terminals:e.terminals,palettes:e.palettes,off:e.off},n),r=new Set([...t.catalog.palettes,...s1(n.configHome)].map((h)=>h.name)),i=e.palettes.filter((h)=>r.has(h)),o=e.palettes.filter((h)=>!r.has(h)),{startup:s,...u}=e,c={...u,palettes:i,...s&&i.includes(s)?{startup:s}:{}},a=o.length>0?[`dropped ${o.join(", ")} — no longer in the catalog`,...t.notes]:t.notes;return{...t,installed:c,notes:a}}function c1(e){try{return Lg(process.execPath,[ye(e,"ttheme","ttheme.js"),"--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function Tg(e){let n=kn(e);return[e.terminals.join(", "),`${e.palettes.length} palettes`,n?`default ${n}`:"no default — ttheme is off"].join(" · ")}function a1(e){try{return ke(e).itermBase}catch{return}}function dc(e,n=_n()){for(let o of e.copies)if(fc(pr(o.to),{recursive:!0}),Pg(o.to,{force:!0}),Pg(`${o.to}.zwc`,{force:!0}),e1(o.from,o.to),o.executable)xk(o.to,493);fc(pr(e.settings.file),{recursive:!0}),t1(e.settings.file,e.settings.content);let t=pr(pr(e.settings.file)),r=a1(t),i=Ei(r?{...e.installed,itermBase:r}:e.installed,n);if(Jn(i.markets).includes(Ge))wi(t,e.catalog);qn(t,i),nn(t,He(t),i,e.home);for(let o of e.edits){fc(pr(o.file),{recursive:!0});let s=rn(o.file)?wr(o.file,"utf8"):"";Xr(o.file,ri(s,o.block))}return At(i,n)}class ft extends Error{}function hs(e){if(en(e))throw rr("nothing changed"),new ft;return e}function Gg(e){return go.filter((n)=>{if(n==="iterm2")return process.platform==="darwin";if(n==="windows-terminal")return e.wtHome!==void 0;return n!=="warp"||process.platform!=="win32"})}function h1(e,n){if(e==="iterm2")return rn(ye(n.home,"Library","Application Support","iTerm2"));if(e==="windows-terminal")return n.wtHome!==void 0;if(e==="warp")return rn(pr(Uo(n.home)));if(e==="wezterm")return rn(ye(n.configHome,"wezterm"))||rn(ye(n.home,".wezterm.lua"));return rn(ye(n.configHome,e))}function f1(){if(process.platform==="win32")return process.env.LOCALAPPDATA;if(!process.env.WSL_DISTRO_NAME)return;let e=(n,t)=>Lg(n,t,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();try{return e("wslpath",["-u",e("cmd.exe",["/d","/c","echo %LOCALAPPDATA%"])])||void 0}catch{return}}async function l1(e,n,t){return hs(await rl({message:"wire which terminals?",options:Gg(t).map((r)=>({value:r,hint:r===e?"detected":void 0})),initialValues:n,required:!0}))}function gc(e){let n=[...e.copies.filter((t)=>!rn(t.to)).map((t)=>t.to),...rn(e.settings.file)?[]:[e.settings.file],...e.edits.filter((t)=>!wr(t.file,"utf8").includes("# ttheme begin")).map((t)=>t.file)];if(n.length>0)throw Error(`init left gaps:
522
524
  ${n.join(`
523
- `)}`)}function Md(e,n){return[...new Set(e.palettes.filter((t)=>n.includes(t.name)).map((t)=>t.group))]}function n1(e,n){let t=e.palettes.find((i)=>i.name===bn(n)),r=process.stdout.isTTY===!0&&!Ui()&&!process.env.TMUX&&po(process.env)!=="warp";if(!t||!r)return!1;return process.stdout.write(us(t)),!0}function t1(e,n){let t=bn(e);if(!t)return["default none — new tabs keep the terminal colors",`turn on \`ttheme on\` wears ${qn(e)}`];return[`default ${t}${n?" — this tab wears it already":""}`,"change it `ttheme preview`, enter on a palette, then default"]}function r1(e){Ck("zsh",["-c",'source "$1" && __tt_preview init',"zsh",ye(e,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function i1(e,n,t,r){let i=Md(e.catalog,n.palettes);Mt([`${i.join(", ")} (${n.palettes.length})`,...t1(e.installed,t)].join(`
524
- `),`installed ${n.palettes.length} palettes`),Mt(["exec zsh the ttheme command in this tab",...Id(n.terminals,e,r)].join(`
525
- `),"next"),ku("done")}function Id(e,n,t){let r=[];if(e.includes("ghostty"))r.push("restart ghostty new tabs pick up its config");if(e.includes("kitty"))r.push("new kitty window pictures follow it — kitty reloads its colors by itself");if(e.includes("alacritty"))r.push("alacritty reloads its config by itself");if(e.includes("wezterm"))r.push("wezterm reloads its config by itself");if(e.includes("windows-terminal"))r.push("windows terminal reloads its settings by itself");if(e.includes("iterm2"))r.push(...o1(bn(n.installed),t));return[...r,...n.notes]}function kd(e,n,t){let r=Vk(e,n),i=_n(),o=sc(r,i);uc(r);let s=["exec zsh open tabs run the new layer — new tabs already do",...Id(r.installed.terminals,r,o&&i.running())],u=`updated to ${_e.version} — kept ${Sd(r.installed)}`;if(!t){console.log([u,...s].join(`
526
- `));return}Mt(s.join(`
527
- `),u),ku("done")}function o1(e,n){let t=['iterm2 profiles a "ttheme · <palette>" per palette in Settings › Profiles'];if(e)t.push(n?`restart iterm2 new tabs open on "ttheme · default", which wears ${e}`:`iterm2 default "ttheme · default" wears ${e} and follows \`ttheme default\``);return t}function s1(e,n){let t=[`placed ${e.copies.length} files`,`settings in ${e.settings.file} — edit later with \`ttheme config\``,...e.edits.map((r)=>`wired ${r.file}`)];if(n.terminals.includes("ghostty"))t.push("restart ghostty to pick up its config");if(n.terminals.includes("kitty"))t.push("kitty reloads its colors by itself; pictures show in kitty windows opened from now on");if(n.terminals.includes("alacritty"))t.push("alacritty reloads its config by itself");if(n.terminals.includes("wezterm")||n.terminals.includes("windows-terminal"))t.push("wezterm and windows terminal reload their config by themselves");if(n.terminals.includes("iterm2"))t.push('iterm2 gets a "ttheme · <palette>" profile per palette under Settings › Profiles');t.push(...e.notes),t.push("no palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"),console.log(t.join(`
528
- `))}async function Nd(e={}){let n=ye(import.meta.dirname,"..");if(!tn(ye(n,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!tn(ye(n,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await ko()}let t=qk(),r=ge(),i=process.env.ZDOTDIR??t,o=xk(),s=process.env.WT_PROFILE_ID,u={root:n,home:t,configHome:r,zdotdir:i,...o?{wtHome:o}:{},...s?{wtProfile:s}:{}},c=po(process.env),a=vd(u).filter((N)=>N===c||Dk(N,u));if(!e.yes&&(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0))throw Error("init asks before it edits your configs — run it in a terminal, or pass --yes to accept the defaults");let h=Zk(r);if(e.yes&&h){kd(h,u,!1);return}if(e.yes){if(a.length===0)throw Error("no supported terminal detected — run this inside ghostty, kitty, alacritty, wezterm, iterm2, windows terminal or warp");let N={terminals:a,palettes:[]},H=oc(N,u);sc(H),uc(H),s1(H,N);return}if(No("ttheme init"),h){let N=zk(r);if(hs(await st({message:`ttheme${N?` ${N}`:""} is installed — ${Sd(h)}
529
- ${N===_e.version?"reinstall":"update to"} ${_e.version} and keep all of it?`,active:"yes",inactive:"no, set it up again",initialValue:!0}))){kd(h,u,!0);return}}let f=await e1(c,h?.terminals??a,u),l=yd(n),g=h?await as(l,h.palettes,"palette",!0):await as(l,[],"series",!0);if(!g)throw tr("nothing changed"),new lt;let m=h&&qn(h),d=m&&g.includes(m)?m:void 0,b=d??g[0],y=g.length>1&&po(process.env)!=="warp",I=hs(await st({message:y?"pick a default palette in ttheme preview once installed?":`wear ${b} in every tab?`,initialValue:h?!h.off:!0})),k={terminals:f,palettes:g,off:!I},S=oc(k,u),p=d?{...S,installed:{...S.installed,startup:d}}:S;if(Mt([`install ${g.length} palettes — ${Md(p.catalog,g).join(", ")}`,`copy ${p.copies.length} files under ${r}`,`write ${p.settings.file}`,...p.edits.map((N)=>`edit ${N.file} — a ttheme block: source ttheme.zsh`),...Ol(r,p.installed,t),"each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out",I?y?`open ttheme preview — every tab wears the palette picked there, ${b} until then`:`paint every tab with ${b}, this one now`:"leave the terminal colors as they are — `ttheme on` wears a palette later",...f.includes("iterm2")&&I?['make "ttheme · default" the iTerm2 default profile']:[]].join(`
530
- `),`wiring ${f.join(", ")}`),!hs(await st({message:"apply these changes?"})))throw tr("nothing changed"),new lt;let P=_n(),E=sc(p,P);if(uc(p),I&&y)r1(r);let R=ke(r);i1({...p,installed:R},k,n1(p.catalog,R),E&&P.running())}import{existsSync as fs,readdirSync as u1,readFileSync as c1,rmSync as a1,utimesSync as h1}from"node:fs";import{homedir as f1}from"node:os";import{dirname as l1,join as kr}from"node:path";function cc(e){return fs(e)?c1(e,"utf8"):""}function g1(e){try{return ke(e)}catch{return}}function d1(e,n){let t=Jo(n,e),r=cc(t);if(!wo(r)?.includes(`path = "${fe("")}`))return;return{file:t,content:$o(r,cc(Hu(e))||Pu)}}function m1(e){let{home:n,configHome:t}=e,r=g1(t),i=[],o=(a,h)=>{let f=cc(a),l=h(f);if(l!==f)i.push({file:a,content:l})};o(kr(e.zdotdir,".zshrc"),si),o(Ht("ghostty",t),si),o(Ht("kitty",t),si),o(At(t),si),o(fr(t,n),cf);let s=d1(t,n);if(s)i.push(s);let u=[];for(let a of["ghostty","kitty","alacritty","wezterm","warp"]){let h=Pt(a,t,n);if(fs(h))u.push(...u1(h).flatMap((f)=>f.startsWith(fe(""))?[kr(h,f)]:[]))}let c=[Mi(n),...r?.wtHome?[l1(Co(r.wtHome))]:[],kr(t,"ttheme"),e.cacheDir,e.stateDir];return u.push(...c.filter((a)=>fs(a))),{edits:i,removals:u,touches:r?.wtHome?Lu(r.wtHome):[],...r?{state:r}:{}}}function p1(e,n=_n()){let t=[];for(let{file:i,content:o}of e.edits){let s=Mh(i,o);t.push(s==="removed"?`removed ${i} — ttheme had created it`:s==="restored"?`took ttheme out of ${i}`:`took ttheme out of ${i} — kept ${i}.ttheme.bak, since the file changed after ttheme's first edit`)}if(e.state&&Lt({...e.state,off:!0},n))t.push("gave iTerm2 its own default profile back — it takes it at its next start");for(let i of e.removals)a1(i,{recursive:!0,force:!0});if(e.removals.length>0)t.push(`deleted ${e.removals.length} files and folders ttheme wrote`);let r=new Date;for(let i of e.touches)h1(i,r,r);return t}function w1(){let e=f1();return{home:e,configHome:ge(),zdotdir:process.env.ZDOTDIR??e,cacheDir:co(),stateDir:kr(process.env.XDG_STATE_HOME??kr(e,".local","state"),"ttheme")}}async function Od(e=!1){let n=w1(),t=m1(n);if(t.edits.length===0&&t.removals.length===0){console.log("nothing of ttheme is installed");return}if(!e){if(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0)throw Error("uninstall asks before it deletes anything — run it in a terminal, or pass --yes");let r=kr(n.configHome,"ttheme");No("ttheme uninstall"),Mt([...t.edits.map((o)=>`take ttheme out of ${o.file}`),...t.removals.map((o)=>o===r?`delete ${o} — settings, pins, every installed picture${fs(ur(n.configHome))?`, and your market at ${ur(n.configHome)} (push it to GitHub first to keep it)`:""}`:`delete ${o}`)].join(`
531
- `),"uninstall");let i=await st({message:"remove ttheme?"});if(an(i)||!i)throw tr("nothing changed"),new lt}for(let r of p1(t))console.log(r);console.log("open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}var Er=(e)=>(...n)=>Pi()&&Ri()?Fi():e(...n),b1={default:([e])=>fd(e),on:()=>ld(),off:()=>gd(),browse:Er(()=>$d()),list:([e],{json:n})=>pd(e,n),add:Er((e)=>ad(e)),remove:(e)=>hd(e),update:Er(()=>wd()),market:Er(([e,n])=>jl(e,n)),new:Er(([e],{from:n,in:t})=>zl(e,n,t)),edit:Er(([e])=>Bl(e)),check:([e],{fix:n})=>xl(e,n),share:([e])=>eg(e),init:(e,{yes:n})=>Nd({yes:n}),uninstall:(e,{yes:n})=>Od(n),build:(e,{only:n})=>ko({only:n}),find:([e])=>Dg(e),image:([e,n])=>xg(e,n)},k1=ti.map((e)=>({...e,run:b1[e.name]}));class Ut extends Error{verb;constructor(e,n){super(e);this.verb=n}}function Rd(e){let n=k1.find((t)=>t.name===e);if(!n)throw new Ut(e.startsWith("-")?`unknown option '${e}'`:`unknown command '${e}'`);return n}function E1(e,n){let t={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:o,multiple:s}]of Object.entries(e.flags??{}))t[r]={type:i,multiple:s===!0,...o?{short:o}:{}};try{return $1({args:n,options:t,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Ut(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,e)}}function y1(e){let[n,...t]=e;if(n===void 0)return{kind:"help",code:1};if(n==="-h"||n==="--help")return{kind:"help",code:0};if(n==="-V"||n==="--version")return{kind:"version"};if(n==="help"){if(t[0]===void 0||t[0]==="all")return{kind:"help",all:t[0]==="all",code:0};return{kind:"help",verb:Rd(t[0]),code:0}}let r=Rd(n),i=E1(r,t);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[h,{choices:f}]of Object.entries(r.flags??{}))for(let l of[i.values[h]??[]].flat())if(f&&!f.includes(String(l)))throw new Ut(`--${h} takes ${f.join(", ")} — not ${l}`,r);let o=i.positionals,s=r.args.filter((h)=>h.startsWith("<")).length,u=r.args.some((h)=>h.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(o.length<s)throw new Ut(`missing ${r.args[o.length]}`,r);if(o.length>u)throw new Ut(`too many arguments: ${o.slice(u).join(" ")}`,r);let{help:c,...a}=i.values;return{kind:"run",verb:r,args:o,flags:a}}function Fd(e){let n=Math.max(0,...e.map(([t])=>t.length));return e.map(([t,r])=>` ${t.padEnd(n)} ${r}`)}function ac(e,n=!1){if(!e)return ri(n);let t=Object.entries(e.flags??{}).map(([r,{short:i,value:o,about:s}])=>[`${i?`-${i}, `:""}--${r}${o?` ${o}`:""}`,s]);return[`Usage: ttheme ${ni(e)}`,"",e.about,...e.actions?["","Actions:",...Fd(e.actions)]:[],...t.length>0?["","Options:",...Fd(t)]:[]].join(`
532
- `)}async function Pd(e){let n;try{let t=y1(e);if(t.kind==="version")return console.log(_e.version),0;if(t.kind==="help"){if(t.code===0)console.log(ac(t.verb,t.all));else console.error(ac(t.verb,t.all));return t.code}if(n=t.verb,!t.verb.run)throw Error("runs in the shell layer — open a new tab once `ttheme init` has wired it");let r=await t.verb.run(t.args,t.flags);return typeof r==="number"?r:0}catch(t){if(t instanceof Ut)return console.error(t.verb?`ttheme ${t.verb.name}: ${t.message}
525
+ `)}`)}function Ug(e,n){return[...new Set(e.palettes.filter((t)=>n.includes(t.name)).map((t)=>t.group))]}function d1(e,n){let t=e.palettes.find((i)=>i.name===kn(n)),r=process.stdout.isTTY===!0&&!Li()&&!process.env.TMUX&&mo(process.env)!=="warp";if(!t||!r)return!1;return process.stdout.write(us(t)),!0}function g1(e,n){let t=kn(e);if(!t)return["default none — new tabs keep the terminal colors",`turn on \`ttheme on\` wears ${Qn(e)}`];return[`default ${t}${n?" — this tab wears it already":""}`,"change it `ttheme preview`, enter on a palette, then default"]}function m1(e){Dk("zsh",["-c",'source "$1" && __tt_preview init',"zsh",ye(e,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function p1(e,n,t,r){let i=Ug(e.catalog,n.palettes);vt([`${i.join(", ")} (${n.palettes.length})`,...g1(e.installed,t)].join(`
526
+ `),`installed ${n.palettes.length} palettes`),vt(["exec zsh the ttheme command in this tab",...jg(n.terminals,e,r)].join(`
527
+ `),"next"),Eu("done")}function jg(e,n,t){let r=[];if(e.includes("ghostty"))r.push("restart ghostty new tabs pick up its config");if(e.includes("kitty"))r.push("new kitty window pictures follow it — kitty reloads its colors by itself");if(e.includes("alacritty"))r.push("alacritty reloads its config by itself");if(e.includes("wezterm"))r.push("wezterm reloads its config by itself");if(e.includes("windows-terminal"))r.push("windows terminal reloads its settings by itself");if(e.includes("iterm2"))r.push(...w1(kn(n.installed),t));return[...r,...n.notes]}function Hg(e,n,t){let r=u1(e,n),i=_n(),o=dc(r,i);gc(r);let s=["exec zsh open tabs run the new layer — new tabs already do",...jg(r.installed.terminals,r,o&&i.running())],u=`updated to ${_e.version} — kept ${Tg(r.installed)}`;if(!t){console.log([u,...s].join(`
528
+ `));return}vt(s.join(`
529
+ `),u),Eu("done")}function w1(e,n){let t=['iterm2 profiles a "ttheme · <palette>" per palette in Settings › Profiles'];if(e)t.push(n?`restart iterm2 new tabs open on "ttheme · default", which wears ${e}`:`iterm2 default "ttheme · default" wears ${e} and follows \`ttheme default\``);return t}function $1(e,n){let t=[`placed ${e.copies.length} files`,`settings in ${e.settings.file} — edit later with \`ttheme config\``,...e.edits.map((r)=>`wired ${r.file}`)];if(n.terminals.includes("ghostty"))t.push("restart ghostty to pick up its config");if(n.terminals.includes("kitty"))t.push("kitty reloads its colors by itself; pictures show in kitty windows opened from now on");if(n.terminals.includes("alacritty"))t.push("alacritty reloads its config by itself");if(n.terminals.includes("wezterm")||n.terminals.includes("windows-terminal"))t.push("wezterm and windows terminal reload their config by themselves");if(n.terminals.includes("iterm2"))t.push('iterm2 gets a "ttheme · <palette>" profile per palette under Settings › Profiles');t.push(...e.notes),t.push("no palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"),console.log(t.join(`
530
+ `))}async function Jg(e={}){let n=ye(import.meta.dirname,"..");if(!rn(ye(n,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!rn(ye(n,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await bo()}let t=r1(),r=de(),i=process.env.ZDOTDIR??t,o=f1(),s=process.env.WT_PROFILE_ID,u={root:n,home:t,configHome:r,zdotdir:i,...o?{wtHome:o}:{},...s?{wtProfile:s}:{}},c=mo(process.env),a=Gg(u).filter((N)=>N===c||h1(N,u));if(!e.yes&&(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0))throw Error("init asks before it edits your configs — run it in a terminal, or pass --yes to accept the defaults");let h=o1(r);if(e.yes&&h){Hg(h,u,!1);return}if(e.yes){if(a.length===0)throw Error("no supported terminal detected — run this inside ghostty, kitty, alacritty, wezterm, iterm2, windows terminal or warp");let N={terminals:a,palettes:[]},H=lc(N,u);dc(H),gc(H),$1(H,N);return}if(Io("ttheme init"),h){let N=c1(r);if(hs(await st({message:`ttheme${N?` ${N}`:""} is installed — ${Tg(h)}
531
+ ${N===_e.version?"reinstall":"update to"} ${_e.version} and keep all of it?`,active:"yes",inactive:"no, set it up again",initialValue:!0}))){Hg(h,u,!0);return}}let f=await l1(c,h?.terminals??a,u),l=Ag(n),d=h?await as(l,h.palettes,"palette",!0):await as(l,[],"series",!0);if(!d)throw rr("nothing changed"),new ft;let g=h&&Qn(h),m=g&&d.includes(g)?g:void 0,b=m??d[0],S=d.length>1&&mo(process.env)!=="warp",I=hs(await st({message:S?"pick a default palette in ttheme preview once installed?":`wear ${b} in every tab?`,initialValue:h?!h.off:!0})),k={terminals:f,palettes:d,off:!I},y=lc(k,u),p=m?{...y,installed:{...y.installed,startup:m}}:y;if(vt([`install ${d.length} palettes — ${Ug(p.catalog,d).join(", ")}`,`copy ${p.copies.length} files under ${r}`,`write ${p.settings.file}`,...p.edits.map((N)=>`edit ${N.file} — a ttheme block: source ttheme.zsh`),...Ll(r,p.installed,t),"each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out",I?S?`open ttheme preview — every tab wears the palette picked there, ${b} until then`:`paint every tab with ${b}, this one now`:"leave the terminal colors as they are — `ttheme on` wears a palette later",...f.includes("iterm2")&&I?['make "ttheme · default" the iTerm2 default profile']:[]].join(`
532
+ `),`wiring ${f.join(", ")}`),!hs(await st({message:"apply these changes?"})))throw rr("nothing changed"),new ft;let P=_n(),E=dc(p,P);if(gc(p),I&&S)m1(r);let R=ke(r);p1({...p,installed:R},k,d1(p.catalog,R),E&&P.running())}import{existsSync as fs,readdirSync as b1,readFileSync as k1,rmSync as E1,utimesSync as y1}from"node:fs";import{homedir as S1}from"node:os";import{dirname as v1,join as $r}from"node:path";function mc(e){return fs(e)?k1(e,"utf8"):""}function M1(e){try{return ke(e)}catch{return}}function I1(e,n){let t=jo(n,e),r=mc(t);if(!po(r)?.includes(`path = "${fe("")}`))return;return{file:t,content:wo(r,mc(Uu(e))||Gu)}}function N1(e){let{home:n,configHome:t}=e,r=M1(t),i=[],o=(a,h)=>{let f=mc(a),l=h(f);if(l!==f)i.push({file:a,content:l})};o($r(e.zdotdir,".zshrc"),ii),o(Lt("ghostty",t),ii),o(Lt("kitty",t),ii),o(Tt(t),ii),o(hr(t,n),gf);let s=I1(t,n);if(s)i.push(s);let u=[];for(let a of["ghostty","kitty","alacritty","wezterm","warp"]){let h=Ht(a,t,n);if(fs(h))u.push(...b1(h).flatMap((f)=>f.startsWith(fe(""))?[$r(h,f)]:[]))}let c=[yi(n),...r?.wtHome?[v1(Jo(r.wtHome))]:[],$r(t,"ttheme"),e.cacheDir,e.stateDir];return u.push(...c.filter((a)=>fs(a))),{edits:i,removals:u,touches:r?.wtHome?ju(r.wtHome):[],...r?{state:r}:{}}}function O1(e,n=_n()){let t=[];for(let{file:i,content:o}of e.edits){let s=Ph(i,o);t.push(s==="removed"?`removed ${i} — ttheme had created it`:s==="restored"?`took ttheme out of ${i}`:`took ttheme out of ${i} — kept ${i}.ttheme.bak, since the file changed after ttheme's first edit`)}if(e.state&&At({...e.state,off:!0},n))t.push("gave iTerm2 its own default profile back — it takes it at its next start");for(let i of e.removals)E1(i,{recursive:!0,force:!0});if(e.removals.length>0)t.push(`deleted ${e.removals.length} files and folders ttheme wrote`);let r=new Date;for(let i of e.touches)y1(i,r,r);return t}function R1(){let e=S1();return{home:e,configHome:de(),zdotdir:process.env.ZDOTDIR??e,cacheDir:so(),stateDir:$r(process.env.XDG_STATE_HOME??$r(e,".local","state"),"ttheme")}}async function Cg(e=!1){let n=R1(),t=N1(n);if(t.edits.length===0&&t.removals.length===0){console.log("nothing of ttheme is installed");return}if(!e){if(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0)throw Error("uninstall asks before it deletes anything — run it in a terminal, or pass --yes");let r=$r(n.configHome,"ttheme");Io("ttheme uninstall"),vt([...t.edits.map((o)=>`take ttheme out of ${o.file}`),...t.removals.map((o)=>o===r?`delete ${o} — settings, pins, every installed picture${fs(Ro(n.configHome))?`, and your markets under ${Ro(n.configHome)} (push them to GitHub first to keep them)`:""}`:`delete ${o}`)].join(`
533
+ `),"uninstall");let i=await st({message:"remove ttheme?"});if(en(i)||!i)throw rr("nothing changed"),new ft}for(let r of O1(t))console.log(r);console.log("open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}var br=(e)=>(...n)=>Ni()&&Mi()?Ii():e(...n),P1={default:([e])=>Sg(e),on:()=>vg(),off:()=>Mg(),browse:br(()=>Fg()),list:([e],{json:n})=>Og(e,n),add:br((e)=>Eg(e)),remove:(e)=>yg(e),update:br(()=>Rg()),market:br(([e,n])=>Bl(e,n)),new:br(([e],{from:n,in:t})=>cd(e,n,t)),edit:br(([e])=>ad(e)),check:([e],{fix:n})=>fd(e,n),share:([e])=>ld(e),init:(e,{yes:n})=>Jg({yes:n}),uninstall:(e,{yes:n})=>Cg(n),build:(e,{only:n})=>bo({only:n}),find:([e])=>hg(e),image:([e,n])=>fg(e,n)},H1=ei.map((e)=>({...e,run:P1[e.name]}));class jt extends Error{verb;constructor(e,n){super(e);this.verb=n}}function Wg(e){let n=H1.find((t)=>t.name===e);if(!n)throw new jt(e.startsWith("-")?`unknown option '${e}'`:`unknown command '${e}'`);return n}function L1(e,n){let t={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:o,multiple:s}]of Object.entries(e.flags??{}))t[r]={type:i,multiple:s===!0,...o?{short:o}:{}};try{return F1({args:n,options:t,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new jt(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,e)}}function A1(e){let[n,...t]=e;if(n===void 0)return{kind:"help",code:1};if(n==="-h"||n==="--help")return{kind:"help",code:0};if(n==="-V"||n==="--version")return{kind:"version"};if(n==="help"){if(t[0]===void 0||t[0]==="all")return{kind:"help",all:t[0]==="all",code:0};return{kind:"help",verb:Wg(t[0]),code:0}}let r=Wg(n),i=L1(r,t);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[h,{choices:f}]of Object.entries(r.flags??{}))for(let l of[i.values[h]??[]].flat())if(f&&!f.includes(String(l)))throw new jt(`--${h} takes ${f.join(", ")} — not ${l}`,r);let o=i.positionals,s=r.args.filter((h)=>h.startsWith("<")).length,u=r.args.some((h)=>h.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(o.length<s)throw new jt(`missing ${r.args[o.length]}`,r);if(o.length>u)throw new jt(`too many arguments: ${o.slice(u).join(" ")}`,r);let{help:c,...a}=i.values;return{kind:"run",verb:r,args:o,flags:a}}function Kg(e){let n=Math.max(0,...e.map(([t])=>t.length));return e.map(([t,r])=>` ${t.padEnd(n)} ${r}`)}function pc(e,n=!1){if(!e)return ni(n);let t=Object.entries(e.flags??{}).map(([r,{short:i,value:o,about:s}])=>[`${i?`-${i}, `:""}--${r}${o?` ${o}`:""}`,s]);return[`Usage: ttheme ${xr(e)}`,"",e.about,...e.actions?["","Actions:",...Kg(e.actions)]:[],...t.length>0?["","Options:",...Kg(t)]:[]].join(`
534
+ `)}async function _g(e){let n;try{let t=A1(e);if(t.kind==="version")return console.log(_e.version),0;if(t.kind==="help"){if(t.code===0)console.log(pc(t.verb,t.all));else console.error(pc(t.verb,t.all));return t.code}if(n=t.verb,!t.verb.run)throw Error("runs in the shell layer — open a new tab once `ttheme init` has wired it");let r=await t.verb.run(t.args,t.flags);return typeof r==="number"?r:0}catch(t){if(t instanceof jt)return console.error(t.verb?`ttheme ${t.verb.name}: ${t.message}
533
535
 
534
- ${ac(t.verb)}`:`ttheme: ${t.message} — see \`ttheme help\``),1;if(t instanceof lt)return 1;let r=process.env.TTHEME_DEBUG&&t instanceof Error?t.stack:void 0;return console.error(`
535
- ttheme${n?` ${n.name}`:""}: ${r??(t instanceof Error?t.message:String(t))}`),1}}if(v1)if(process.env.TTHEME_DEBUG&&typeof Bun>"u"&&!process.sourceMapsEnabled){let e=S1(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=e.status??1}else process.exitCode=await Pd(process.argv.slice(2));
536
+ ${pc(t.verb)}`:`ttheme: ${t.message} — see \`ttheme help\``),1;if(t instanceof ft)return 1;let r=process.env.TTHEME_DEBUG&&t instanceof Error?t.stack:void 0;return console.error(`
537
+ ttheme${n?` ${n.name}`:""}: ${r??(t instanceof Error?t.message:String(t))}`),1}}if(G1)if(process.env.TTHEME_DEBUG&&typeof Bun>"u"&&!process.sourceMapsEnabled){let e=T1(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=e.status??1}else process.exitCode=await _g(process.argv.slice(2));
536
538
 
537
- //# debugId=043466E2F29EA8D064756E2164756E21
539
+ //# debugId=CE5D91446602141364756E2164756E21
538
540
  //# sourceMappingURL=ttheme.js.map