@kecan0406/ttheme 1.0.40 → 1.0.41

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,66 +1,66 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as el}from"node:module";var Xf=Object.create;var{getPrototypeOf:Vf,defineProperty:gs,getOwnPropertyNames:Yf}=Object;var zf=Object.prototype.hasOwnProperty;function Bf(t){return this[t]}var Df,tl,yr=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?Df??=new WeakMap:tl??=new WeakMap,o=i.get(t);if(o)return o}n=t!=null?Xf(Vf(t)):{};let s=e||!t||!t.__esModule?gs(n,"default",{value:t,enumerable:!0}):n;for(let c of Yf(t))if(!zf.call(s,c))gs(s,c,{get:Bf.bind(t,c),enumerable:!0});if(r)i.set(t,s);return s};var $t=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Gt=el(import.meta.url);var Ws=$t((Vw,Fr)=>{var Js=Js||function(t){return Buffer.from(t).toString("base64")};function kl(t){var e=this,n=Math.round,r=Math.floor,i=Array(64),o=Array(64),s=Array(64),c=Array(64),u,h,a,f,l=Array(65535),p=Array(65535),b=Array(64),g=Array(64),$=[],y=0,F=7,E=Array(64),v=Array(64),d=Array(64),j=Array(256),k=Array(2048),H,R=[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],L=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],P=[0,1,2,3,4,5,6,7,8,9,10,11],C=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],U=[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],Ft=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],K=[0,1,2,3,4,5,6,7,8,9,10,11],z=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],yt=[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 mt(m){var G=[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 J=0;J<64;J++){var A=r((G[J]*m+50)/100);if(A<1)A=1;else if(A>255)A=255;i[R[J]]=A}var Z=[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 q=0;q<64;q++){var rt=r((Z[q]*m+50)/100);if(rt<1)rt=1;else if(rt>255)rt=255;o[R[q]]=rt}var it=[1,1.387039845,1.306562965,1.175875602,1,0.785694958,0.5411961,0.275899379],St=0;for(var bt=0;bt<8;bt++)for(var M=0;M<8;M++)s[St]=1/(i[R[St]]*it[bt]*it[M]*8),c[St]=1/(o[R[St]]*it[bt]*it[M]*8),St++}function B(m,G){var J=0,A=0,Z=[];for(var q=1;q<=16;q++){for(var rt=1;rt<=m[q];rt++)Z[G[A]]=[],Z[G[A]][0]=J,Z[G[A]][1]=q,A++,J++;J*=2}return Z}function Nt(){u=B(L,P),h=B(Ft,K),a=B(C,U),f=B(z,yt)}function ot(){var m=1,G=2;for(var J=1;J<=15;J++){for(var A=m;A<G;A++)p[32767+A]=J,l[32767+A]=[],l[32767+A][1]=J,l[32767+A][0]=A;for(var Z=-(G-1);Z<=-m;Z++)p[32767+Z]=J,l[32767+Z]=[],l[32767+Z][1]=J,l[32767+Z][0]=G-1+Z;m<<=1,G<<=1}}function tt(){for(var m=0;m<256;m++)k[m]=19595*m,k[m+256>>0]=38470*m,k[m+512>>0]=7471*m+32768,k[m+768>>0]=-11059*m,k[m+1024>>0]=-21709*m,k[m+1280>>0]=32768*m+8421375,k[m+1536>>0]=-27439*m,k[m+1792>>0]=-5329*m}function X(m){var G=m[0],J=m[1]-1;while(J>=0){if(G&1<<J)y|=1<<F;if(J--,F--,F<0){if(y==255)w(255),w(0);else w(y);F=7,y=0}}}function w(m){$.push(m)}function T(m){w(m>>8&255),w(m&255)}function at(m,G){var J,A,Z,q,rt,it,St,bt,M=0,O,Q=8,Mt=64;for(O=0;O<Q;++O){J=m[M],A=m[M+1],Z=m[M+2],q=m[M+3],rt=m[M+4],it=m[M+5],St=m[M+6],bt=m[M+7];var _=J+bt,D=J-bt,lt=A+St,W=A-St,st=Z+it,Ht=Z-it,Et=q+rt,Ct=q-rt,re=_+Et,je=_-Et,_e=lt+st,Ce=lt-st;m[M]=re+_e,m[M+4]=re-_e;var yn=(Ce+je)*0.707106781;m[M+2]=je+yn,m[M+6]=je-yn,re=Ct+Ht,_e=Ht+W,Ce=W+D;var Mn=(re-Ce)*0.382683433,br=0.5411961*re+Mn,vn=1.306562965*Ce+Mn,Sn=_e*0.707106781,In=D+Sn,Fn=D-Sn;m[M+5]=Fn+br,m[M+3]=Fn-br,m[M+1]=In+vn,m[M+7]=In-vn,M+=8}M=0;for(O=0;O<Q;++O){J=m[M],A=m[M+8],Z=m[M+16],q=m[M+24],rt=m[M+32],it=m[M+40],St=m[M+48],bt=m[M+56];var ts=J+bt,wi=J-bt,es=A+St,ns=A-St,rs=Z+it,is=Z-it,os=q+rt,Cf=q-rt,Nn=ts+os,bi=ts-os,$r=es+rs,kr=es-rs;m[M]=Nn+$r,m[M+32]=Nn-$r;var ss=(kr+bi)*0.707106781;m[M+16]=bi+ss,m[M+48]=bi-ss,Nn=Cf+is,$r=is+ns,kr=ns+wi;var cs=(Nn-kr)*0.382683433,us=0.5411961*Nn+cs,hs=1.306562965*kr+cs,as=$r*0.707106781,fs=wi+as,ls=wi-as;m[M+40]=ls+us,m[M+24]=ls-us,m[M+8]=fs+hs,m[M+56]=fs-hs,M++}var Er;for(O=0;O<Mt;++O)Er=m[O]*G[O],b[O]=Er>0?Er+0.5|0:Er-0.5|0;return b}function ft(){T(65504),T(16),w(74),w(70),w(73),w(70),w(0),w(1),w(1),w(0),T(1),T(1),w(0),w(0)}function et(m){if(!m)return;if(T(65505),m[0]===69&&m[1]===120&&m[2]===105&&m[3]===102)T(m.length+2);else T(m.length+5+2),w(69),w(120),w(105),w(102),w(0);for(var G=0;G<m.length;G++)w(m[G])}function nt(m,G){T(65472),T(17),w(8),T(G),T(m),w(3),w(1),w(17),w(0),w(2),w(17),w(1),w(3),w(17),w(1)}function V(){T(65499),T(132),w(0);for(var m=0;m<64;m++)w(i[m]);w(1);for(var G=0;G<64;G++)w(o[G])}function N(){T(65476),T(418),w(0);for(var m=0;m<16;m++)w(L[m+1]);for(var G=0;G<=11;G++)w(P[G]);w(16);for(var J=0;J<16;J++)w(C[J+1]);for(var A=0;A<=161;A++)w(U[A]);w(1);for(var Z=0;Z<16;Z++)w(Ft[Z+1]);for(var q=0;q<=11;q++)w(K[q]);w(17);for(var rt=0;rt<16;rt++)w(z[rt+1]);for(var it=0;it<=161;it++)w(yt[it])}function I(m){if(typeof m>"u"||m.constructor!==Array)return;m.forEach((G)=>{if(typeof G!=="string")return;T(65534);var J=G.length;T(J+2);var A;for(A=0;A<J;A++)w(G.charCodeAt(A))})}function wt(){T(65498),T(12),w(3),w(1),w(0),w(2),w(17),w(3),w(17),w(0),w(63),w(0)}function x(m,G,J,A,Z){var q=Z[0],rt=Z[240],it,St=16,bt=63,M=64,O=at(m,G);for(var Q=0;Q<M;++Q)g[R[Q]]=O[Q];var Mt=g[0]-J;if(J=g[0],Mt==0)X(A[0]);else it=32767+Mt,X(A[p[it]]),X(l[it]);var _=63;for(;_>0&&g[_]==0;_--);if(_==0)return X(q),J;var D=1,lt;while(D<=_){var W=D;for(;g[D]==0&&D<=_;++D);var st=D-W;if(st>=St){lt=st>>4;for(var Ht=1;Ht<=lt;++Ht)X(rt);st=st&15}it=32767+g[D],X(Z[(st<<4)+p[it]]),X(l[it]),D++}if(_!=bt)X(q);return J}function Y(){var m=String.fromCharCode;for(var G=0;G<256;G++)j[G]=m(G)}this.encode=function(m,G){var J=new Date().getTime();if(G)_t(G);$=[],y=0,F=7,T(65496),ft(),I(m.comments),et(m.exifBuffer),V(),nt(m.width,m.height),N(),wt();var A=0,Z=0,q=0;y=0,F=7,this.encode.displayName="_encode_";var{data:rt,width:it,height:St}=m,bt=it*4,M=it*3,O,Q=0,Mt,_,D,lt,W,st,Ht,Et;while(Q<St){O=0;while(O<bt){lt=bt*Q+O,W=lt,st=-1,Ht=0;for(Et=0;Et<64;Et++){if(Ht=Et>>3,st=(Et&7)*4,W=lt+Ht*bt+st,Q+Ht>=St)W-=bt*(Q+1+Ht-St);if(O+st>=bt)W-=O+st-bt+4;Mt=rt[W++],_=rt[W++],D=rt[W++],E[Et]=(k[Mt]+k[_+256>>0]+k[D+512>>0]>>16)-128,v[Et]=(k[Mt+768>>0]+k[_+1024>>0]+k[D+1280>>0]>>16)-128,d[Et]=(k[Mt+1280>>0]+k[_+1536>>0]+k[D+1792>>0]>>16)-128}A=x(E,s,A,u,a),Z=x(v,c,Z,h,f),q=x(d,c,q,h,f),O+=32}Q+=8}if(F>=0){var Ct=[];Ct[1]=F+1,Ct[0]=(1<<F+1)-1,X(Ct)}if(T(65497),typeof Fr>"u")return new Uint8Array($);return Buffer.from($);var re,je};function _t(m){if(m<=0)m=1;if(m>100)m=100;if(H==m)return;var G=0;if(m<50)G=Math.floor(5000/m);else G=Math.floor(200-m*2);mt(G),H=m}function zt(){var m=new Date().getTime();if(!t)t=50;Y(),Nt(),ot(),tt(),_t(t);var G=new Date().getTime()-m}zt()}if(typeof Fr<"u")Fr.exports=Ks;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].encode=Ks;function Ks(t,e){if(typeof e>"u")e=50;var n=new kl(e),r=n.encode(t,e);return{data:r,width:t.width,height:t.height}}});var Qs=$t((Yw,Ni)=>{var Fi=function(){var e=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]),n=4017,r=799,i=3406,o=2276,s=1567,c=3784,u=5793,h=2896;function a(){}function f(F,E){var v=0,d=[],j,k,H=16;while(H>0&&!F[H-1])H--;d.push({children:[],index:0});var R=d[0],L;for(j=0;j<H;j++){for(k=0;k<F[j];k++){R=d.pop(),R.children[R.index]=E[v];while(R.index>0){if(d.length===0)throw Error("Could not recreate Huffman Table");R=d.pop()}R.index++,d.push(R);while(d.length<=j)d.push(L={children:[],index:0}),R.children[R.index]=L.children,R=L;v++}if(j+1<H)d.push(L={children:[],index:0}),R.children[R.index]=L.children,R=L}return d[0].children}function l(F,E,v,d,j,k,H,R,L,P){var{precision:C,samplesPerLine:U,scanLines:Ft,mcusPerLine:K,progressive:z,maxH:yt,maxV:mt}=v,B=E,Nt=0,ot=0;function tt(){if(ot>0)return ot--,Nt>>ot&1;if(Nt=F[E++],Nt==255){var M=F[E++];if(M)throw Error("unexpected marker: "+(Nt<<8|M).toString(16))}return ot=7,Nt>>>7}function X(M){var O=M,Q;while((Q=tt())!==null){if(O=O[Q],typeof O==="number")return O;if(typeof O!=="object")throw Error("invalid huffman sequence")}return null}function w(M){var O=0;while(M>0){var Q=tt();if(Q===null)return;O=O<<1|Q,M--}return O}function T(M){var O=w(M);if(O>=1<<M-1)return O;return O+(-1<<M)+1}function at(M,O){var Q=X(M.huffmanTableDC),Mt=Q===0?0:T(Q);O[0]=M.pred+=Mt;var _=1;while(_<64){var D=X(M.huffmanTableAC),lt=D&15,W=D>>4;if(lt===0){if(W<15)break;_+=16;continue}_+=W;var st=e[_];O[st]=T(lt),_++}}function ft(M,O){var Q=X(M.huffmanTableDC),Mt=Q===0?0:T(Q)<<L;O[0]=M.pred+=Mt}function et(M,O){O[0]|=tt()<<L}var nt=0;function V(M,O){if(nt>0){nt--;return}var Q=k,Mt=H;while(Q<=Mt){var _=X(M.huffmanTableAC),D=_&15,lt=_>>4;if(D===0){if(lt<15){nt=w(lt)+(1<<lt)-1;break}Q+=16;continue}Q+=lt;var W=e[Q];O[W]=T(D)*(1<<L),Q++}}var N=0,I;function wt(M,O){var Q=k,Mt=H,_=0;while(Q<=Mt){var D=e[Q],lt=O[D]<0?-1:1;switch(N){case 0:var W=X(M.huffmanTableAC),st=W&15,_=W>>4;if(st===0)if(_<15)nt=w(_)+(1<<_),N=4;else _=16,N=1;else{if(st!==1)throw Error("invalid ACn encoding");I=T(st),N=_?2:3}continue;case 1:case 2:if(O[D])O[D]+=(tt()<<L)*lt;else if(_--,_===0)N=N==2?3:0;break;case 3:if(O[D])O[D]+=(tt()<<L)*lt;else O[D]=I<<L,N=0;break;case 4:if(O[D])O[D]+=(tt()<<L)*lt;break}Q++}if(N===4){if(nt--,nt===0)N=0}}function x(M,O,Q,Mt,_){var D=Q/K|0,lt=Q%K,W=D*M.v+Mt,st=lt*M.h+_;if(M.blocks[W]===void 0&&P.tolerantDecoding)return;O(M,M.blocks[W][st])}function Y(M,O,Q){var Mt=Q/M.blocksPerLine|0,_=Q%M.blocksPerLine;if(M.blocks[Mt]===void 0&&P.tolerantDecoding)return;O(M,M.blocks[Mt][_])}var _t=d.length,zt,m,G,J,A,Z;if(z)if(k===0)Z=R===0?ft:et;else Z=R===0?V:wt;else Z=at;var q=0,rt,it;if(_t==1)it=d[0].blocksPerLine*d[0].blocksPerColumn;else it=K*v.mcusPerColumn;if(!j)j=it;var St,bt;while(q<it){for(m=0;m<_t;m++)d[m].pred=0;if(nt=0,_t==1){zt=d[0];for(A=0;A<j;A++)Y(zt,Z,q),q++}else for(A=0;A<j;A++){for(m=0;m<_t;m++){zt=d[m],St=zt.h,bt=zt.v;for(G=0;G<bt;G++)for(J=0;J<St;J++)x(zt,Z,q,G,J)}if(q++,q===it)break}if(q===it)do{if(F[E]===255){if(F[E+1]!==0)break}E+=1}while(E<F.length-2);if(ot=0,rt=F[E]<<8|F[E+1],rt<65280)throw Error("marker was not found");if(rt>=65488&&rt<=65495)E+=2;else break}return E-B}function p(F,E){var v=[],d=E.blocksPerLine,j=E.blocksPerColumn,k=d<<3,H=new Int32Array(64),R=new Uint8Array(64);function L(B,Nt,ot){var tt=E.quantizationTable,X,w,T,at,ft,et,nt,V,N,I=ot,wt;for(wt=0;wt<64;wt++)I[wt]=B[wt]*tt[wt];for(wt=0;wt<8;++wt){var x=8*wt;if(I[1+x]==0&&I[2+x]==0&&I[3+x]==0&&I[4+x]==0&&I[5+x]==0&&I[6+x]==0&&I[7+x]==0){N=u*I[0+x]+512>>10,I[0+x]=N,I[1+x]=N,I[2+x]=N,I[3+x]=N,I[4+x]=N,I[5+x]=N,I[6+x]=N,I[7+x]=N;continue}X=u*I[0+x]+128>>8,w=u*I[4+x]+128>>8,T=I[2+x],at=I[6+x],ft=h*(I[1+x]-I[7+x])+128>>8,V=h*(I[1+x]+I[7+x])+128>>8,et=I[3+x]<<4,nt=I[5+x]<<4,N=X-w+1>>1,X=X+w+1>>1,w=N,N=T*c+at*s+128>>8,T=T*s-at*c+128>>8,at=N,N=ft-nt+1>>1,ft=ft+nt+1>>1,nt=N,N=V+et+1>>1,et=V-et+1>>1,V=N,N=X-at+1>>1,X=X+at+1>>1,at=N,N=w-T+1>>1,w=w+T+1>>1,T=N,N=ft*o+V*i+2048>>12,ft=ft*i-V*o+2048>>12,V=N,N=et*r+nt*n+2048>>12,et=et*n-nt*r+2048>>12,nt=N,I[0+x]=X+V,I[7+x]=X-V,I[1+x]=w+nt,I[6+x]=w-nt,I[2+x]=T+et,I[5+x]=T-et,I[3+x]=at+ft,I[4+x]=at-ft}for(wt=0;wt<8;++wt){var Y=wt;if(I[8+Y]==0&&I[16+Y]==0&&I[24+Y]==0&&I[32+Y]==0&&I[40+Y]==0&&I[48+Y]==0&&I[56+Y]==0){N=u*ot[wt+0]+8192>>14,I[0+Y]=N,I[8+Y]=N,I[16+Y]=N,I[24+Y]=N,I[32+Y]=N,I[40+Y]=N,I[48+Y]=N,I[56+Y]=N;continue}X=u*I[0+Y]+2048>>12,w=u*I[32+Y]+2048>>12,T=I[16+Y],at=I[48+Y],ft=h*(I[8+Y]-I[56+Y])+2048>>12,V=h*(I[8+Y]+I[56+Y])+2048>>12,et=I[24+Y],nt=I[40+Y],N=X-w+1>>1,X=X+w+1>>1,w=N,N=T*c+at*s+2048>>12,T=T*s-at*c+2048>>12,at=N,N=ft-nt+1>>1,ft=ft+nt+1>>1,nt=N,N=V+et+1>>1,et=V-et+1>>1,V=N,N=X-at+1>>1,X=X+at+1>>1,at=N,N=w-T+1>>1,w=w+T+1>>1,T=N,N=ft*o+V*i+2048>>12,ft=ft*i-V*o+2048>>12,V=N,N=et*r+nt*n+2048>>12,et=et*n-nt*r+2048>>12,nt=N,I[0+Y]=X+V,I[56+Y]=X-V,I[8+Y]=w+nt,I[48+Y]=w-nt,I[16+Y]=T+et,I[40+Y]=T-et,I[24+Y]=at+ft,I[32+Y]=at-ft}for(wt=0;wt<64;++wt){var _t=128+(I[wt]+8>>4);Nt[wt]=_t<0?0:_t>255?255:_t}}y(k*j*8);var P,C;for(var U=0;U<j;U++){var Ft=U<<3;for(P=0;P<8;P++)v.push(new Uint8Array(k));for(var K=0;K<d;K++){L(E.blocks[U][K],R,H);var z=0,yt=K<<3;for(C=0;C<8;C++){var mt=v[Ft+C];for(P=0;P<8;P++)mt[yt+P]=R[z++]}}}return v}function b(F){return F<0?0:F>255?255:F}a.prototype={load:function(E){var v=new XMLHttpRequest;v.open("GET",E,!0),v.responseType="arraybuffer",v.onload=function(){var d=new Uint8Array(v.response||v.mozResponseArrayBuffer);if(this.parse(d),this.onload)this.onload()}.bind(this),v.send(null)},parse:function(E){var v=this.opts.maxResolutionInMP*1000*1000,d=0,j=E.length;function k(){var W=E[d]<<8|E[d+1];return d+=2,W}function H(){var W=k(),st=E.subarray(d,d+W-2);return d+=st.length,st}function R(W){var st=1,Ht=1,Et,Ct;for(Ct in W.components)if(W.components.hasOwnProperty(Ct)){if(Et=W.components[Ct],st<Et.h)st=Et.h;if(Ht<Et.v)Ht=Et.v}var re=Math.ceil(W.samplesPerLine/8/st),je=Math.ceil(W.scanLines/8/Ht);for(Ct in W.components)if(W.components.hasOwnProperty(Ct)){Et=W.components[Ct];var _e=Math.ceil(Math.ceil(W.samplesPerLine/8)*Et.h/st),Ce=Math.ceil(Math.ceil(W.scanLines/8)*Et.v/Ht),yn=re*Et.h,Mn=je*Et.v,br=Mn*yn,vn=[];y(br*256);for(var Sn=0;Sn<Mn;Sn++){var In=[];for(var Fn=0;Fn<yn;Fn++)In.push(new Int32Array(64));vn.push(In)}Et.blocksPerLine=_e,Et.blocksPerColumn=Ce,Et.blocks=vn}W.maxH=st,W.maxV=Ht,W.mcusPerLine=re,W.mcusPerColumn=je}var L=null,P=null,C=null,U,Ft,K=[],z=[],yt=[],mt=[],B=k(),Nt=-1;if(this.comments=[],B!=65496)throw Error("SOI not found");B=k();while(B!=65497){var ot,tt,X;switch(B){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 w=H();if(B===65534){var T=String.fromCharCode.apply(null,w);this.comments.push(T)}if(B===65504){if(w[0]===74&&w[1]===70&&w[2]===73&&w[3]===70&&w[4]===0)L={version:{major:w[5],minor:w[6]},densityUnits:w[7],xDensity:w[8]<<8|w[9],yDensity:w[10]<<8|w[11],thumbWidth:w[12],thumbHeight:w[13],thumbData:w.subarray(14,14+3*w[12]*w[13])}}if(B===65505){if(w[0]===69&&w[1]===120&&w[2]===105&&w[3]===102&&w[4]===0)this.exifBuffer=w.subarray(5,w.length)}if(B===65518){if(w[0]===65&&w[1]===100&&w[2]===111&&w[3]===98&&w[4]===101&&w[5]===0)P={version:w[6],flags0:w[7]<<8|w[8],flags1:w[9]<<8|w[10],transformCode:w[11]}}break;case 65499:var at=k(),ft=at+d-2;while(d<ft){var et=E[d++];y(256);var nt=new Int32Array(64);if(et>>4===0)for(tt=0;tt<64;tt++){var V=e[tt];nt[V]=E[d++]}else if(et>>4===1)for(tt=0;tt<64;tt++){var V=e[tt];nt[V]=k()}else throw Error("DQT: invalid table spec");K[et&15]=nt}break;case 65472:case 65473:case 65474:k(),U={},U.extended=B===65473,U.progressive=B===65474,U.precision=E[d++],U.scanLines=k(),U.samplesPerLine=k(),U.components={},U.componentsOrder=[];var N=U.scanLines*U.samplesPerLine;if(N>v){var I=Math.ceil((N-v)/1e6);throw Error(`maxResolutionInMP limit exceeded by ${I}MP`)}var wt=E[d++],x,Y=0,_t=0;for(ot=0;ot<wt;ot++){x=E[d];var zt=E[d+1]>>4,m=E[d+1]&15,G=E[d+2];if(zt<=0||m<=0)throw Error("Invalid sampling factor, expected values above 0");U.componentsOrder.push(x),U.components[x]={h:zt,v:m,quantizationIdx:G},d+=3}R(U),z.push(U);break;case 65476:var J=k();for(ot=2;ot<J;){var A=E[d++],Z=new Uint8Array(16),q=0;for(tt=0;tt<16;tt++,d++)q+=Z[tt]=E[d];y(16+q);var rt=new Uint8Array(q);for(tt=0;tt<q;tt++,d++)rt[tt]=E[d];ot+=17+q,(A>>4===0?mt:yt)[A&15]=f(Z,rt)}break;case 65501:k(),Ft=k();break;case 65500:k(),k();break;case 65498:var it=k(),St=E[d++],bt=[],M;for(ot=0;ot<St;ot++){M=U.components[E[d++]];var O=E[d++];M.huffmanTableDC=mt[O>>4],M.huffmanTableAC=yt[O&15],bt.push(M)}var Q=E[d++],Mt=E[d++],_=E[d++],D=l(E,d,U,bt,Ft,Q,Mt,_>>4,_&15,this.opts);d+=D;break;case 65535:if(E[d]!==255)d--;break;default:if(E[d-3]==255&&E[d-2]>=192&&E[d-2]<=254){d-=3;break}else if(B===224||B==225){if(Nt!==-1)throw Error(`first unknown JPEG marker at offset ${Nt.toString(16)}, second unknown JPEG marker ${B.toString(16)} at offset ${(d-1).toString(16)}`);Nt=d-1;let W=k();if(E[d+W-2]===255){d+=W-2;break}}throw Error("unknown JPEG marker "+B.toString(16))}B=k()}if(z.length!=1)throw Error("only single frame JPEGs supported");for(var ot=0;ot<z.length;ot++){var lt=z[ot].components;for(var tt in lt)lt[tt].quantizationTable=K[lt[tt].quantizationIdx],delete lt[tt].quantizationIdx}this.width=U.samplesPerLine,this.height=U.scanLines,this.jfif=L,this.adobe=P,this.components=[];for(var ot=0;ot<U.componentsOrder.length;ot++){var M=U.components[U.componentsOrder[ot]];this.components.push({lines:p(U,M),scaleX:M.h/U.maxH,scaleY:M.v/U.maxV})}},getData:function(E,v){var d=this.width/E,j=this.height/v,k,H,R,L,P,C,U,Ft,K,z,yt=0,mt,B,Nt,ot,tt,X,w,T,at,ft,et,nt=E*v*this.components.length;y(nt);var V=new Uint8Array(nt);switch(this.components.length){case 1:k=this.components[0];for(z=0;z<v;z++){P=k.lines[0|z*k.scaleY*j];for(K=0;K<E;K++)mt=P[0|K*k.scaleX*d],V[yt++]=mt}break;case 2:k=this.components[0],H=this.components[1];for(z=0;z<v;z++){P=k.lines[0|z*k.scaleY*j],C=H.lines[0|z*H.scaleY*j];for(K=0;K<E;K++)mt=P[0|K*k.scaleX*d],V[yt++]=mt,mt=C[0|K*H.scaleX*d],V[yt++]=mt}break;case 3:if(et=!0,this.adobe&&this.adobe.transformCode)et=!0;else if(typeof this.opts.colorTransform<"u")et=!!this.opts.colorTransform;k=this.components[0],H=this.components[1],R=this.components[2];for(z=0;z<v;z++){P=k.lines[0|z*k.scaleY*j],C=H.lines[0|z*H.scaleY*j],U=R.lines[0|z*R.scaleY*j];for(K=0;K<E;K++){if(!et)T=P[0|K*k.scaleX*d],at=C[0|K*H.scaleX*d],ft=U[0|K*R.scaleX*d];else mt=P[0|K*k.scaleX*d],B=C[0|K*H.scaleX*d],Nt=U[0|K*R.scaleX*d],T=b(mt+1.402*(Nt-128)),at=b(mt-0.3441363*(B-128)-0.71413636*(Nt-128)),ft=b(mt+1.772*(B-128));V[yt++]=T,V[yt++]=at,V[yt++]=ft}}break;case 4:if(!this.adobe)throw Error("Unsupported color mode (4 components)");if(et=!1,this.adobe&&this.adobe.transformCode)et=!0;else if(typeof this.opts.colorTransform<"u")et=!!this.opts.colorTransform;k=this.components[0],H=this.components[1],R=this.components[2],L=this.components[3];for(z=0;z<v;z++){P=k.lines[0|z*k.scaleY*j],C=H.lines[0|z*H.scaleY*j],U=R.lines[0|z*R.scaleY*j],Ft=L.lines[0|z*L.scaleY*j];for(K=0;K<E;K++){if(!et)tt=P[0|K*k.scaleX*d],X=C[0|K*H.scaleX*d],w=U[0|K*R.scaleX*d],ot=Ft[0|K*L.scaleX*d];else mt=P[0|K*k.scaleX*d],B=C[0|K*H.scaleX*d],Nt=U[0|K*R.scaleX*d],ot=Ft[0|K*L.scaleX*d],tt=255-b(mt+1.402*(Nt-128)),X=255-b(mt-0.3441363*(B-128)-0.71413636*(Nt-128)),w=255-b(mt+1.772*(B-128));V[yt++]=255-tt,V[yt++]=255-X,V[yt++]=255-w,V[yt++]=255-ot}}break;default:throw Error("Unsupported color mode")}return V},copyToImageData:function(E,v){var{width:d,height:j,data:k}=E,H=this.getData(d,j),R=0,L=0,P,C,U,Ft,K,z,yt,mt,B;switch(this.components.length){case 1:for(C=0;C<j;C++)for(P=0;P<d;P++)if(U=H[R++],k[L++]=U,k[L++]=U,k[L++]=U,v)k[L++]=255;break;case 3:for(C=0;C<j;C++)for(P=0;P<d;P++)if(yt=H[R++],mt=H[R++],B=H[R++],k[L++]=yt,k[L++]=mt,k[L++]=B,v)k[L++]=255;break;case 4:for(C=0;C<j;C++)for(P=0;P<d;P++)if(K=H[R++],z=H[R++],U=H[R++],Ft=H[R++],yt=255-b(K*(1-Ft/255)+Ft),mt=255-b(z*(1-Ft/255)+Ft),B=255-b(U*(1-Ft/255)+Ft),k[L++]=yt,k[L++]=mt,k[L++]=B,v)k[L++]=255;break;default:throw Error("Unsupported color mode")}}};var g=0,$=0;function y(F=0){var E=g+F;if(E>$){var v=Math.ceil((E-$)/1024/1024);throw Error(`maxMemoryUsageInMB limit exceeded by at least ${v}MB`)}g=E}return a.resetMaxMemoryUsage=function(F){g=0,$=F},a.getBytesAllocated=function(){return g},a.requestMemoryAllocation=y,a}();if(typeof Ni<"u")Ni.exports=xs;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].decode=xs;function xs(t,e={}){var n={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512},r={...n,...e},i=new Uint8Array(t),o=new Fi;o.opts=r,Fi.resetMaxMemoryUsage(r.maxMemoryUsageInMB*1024*1024),o.parse(i);var s=r.formatAsRGBA?4:3,c=o.width*o.height*s;try{Fi.requestMemoryAllocation(c);var u={width:o.width,height:o.height,exifBuffer:o.exifBuffer,data:r.useTArray?new Uint8Array(c):Buffer.alloc(c)};if(o.comments.length>0)u.comments=o.comments}catch(h){if(h instanceof RangeError)throw Error("Could not allocate enough memory for the image. Required: "+c);if(h instanceof ReferenceError){if(h.message==="Buffer is not defined")throw Error("Buffer is not globally defined in this environment. Consider setting useTArray to true")}throw h}return o.copyToImageData(u,r.formatAsRGBA),u}});var qs=$t((zw,Zs)=>{var El=Ws(),yl=Qs();Zs.exports={encode:El,decode:yl}});var Ri=$t((Bw,Cs)=>{var Ml=Gt("util"),_s=Gt("stream"),Dt=Cs.exports=function(){_s.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Ml.inherits(Dt,_s);Dt.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){if(this._process(),this._paused&&this._reads&&this._reads.length>0)this._paused=!1,this.emit("drain")}.bind(this))};Dt.prototype.write=function(t,e){if(!this.writable)return this.emit("error",Error("Stream not writable")),!1;let n;if(Buffer.isBuffer(t))n=t;else n=Buffer.from(t,e||this._encoding);if(this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0)this._paused=!0;return this.writable&&!this._paused};Dt.prototype.end=function(t,e){if(t)this.write(t,e);if(this.writable=!1,!this._buffers)return;if(this._buffers.length===0)this._end();else this._buffers.push(null),this._process()};Dt.prototype.destroySoon=Dt.prototype.end;Dt.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};Dt.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};Dt.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];if(e.length>t.length)this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length));else this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e)};Dt.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);while(e<t.length){let i=this._buffers[n++],o=Math.min(i.length,t.length-e);if(i.copy(r,e,0,o),e+=o,o!==i.length)this._buffers[--n]=i.slice(o)}if(n>0)this._buffers.splice(0,n);this._buffered-=t.length,t.func.call(this,r)};Dt.prototype._process=function(){try{while(this._buffered>0&&this._reads&&this._reads.length>0){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}if(this._buffers&&!this.writable)this._end()}catch(t){this.emit("error",t)}}});var Oi=$t((vl)=>{var Ee=[{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]}];vl.getImagePasses=function(t,e){let n=[],r=t%8,i=e%8,o=(t-r)/8,s=(e-i)/8;for(let c=0;c<Ee.length;c++){let u=Ee[c],h=o*u.x.length,a=s*u.y.length;for(let f=0;f<u.x.length;f++)if(u.x[f]<r)h++;else break;for(let f=0;f<u.y.length;f++)if(u.y[f]<i)a++;else break;if(h>0&&a>0)n.push({width:h,height:a,index:c})}return n};vl.getInterlaceIterator=function(t){return function(e,n,r){let i=e%Ee[r].x.length,o=(e-i)/Ee[r].x.length*8+Ee[r].x[i],s=n%Ee[r].y.length,c=(n-s)/Ee[r].y.length*8+Ee[r].y[s];return o*4+c*t*4}}});var Hi=$t((tb,Xs)=>{Xs.exports=function(e,n,r){let i=e+n-r,o=Math.abs(i-e),s=Math.abs(i-n),c=Math.abs(i-r);if(o<=s&&o<=c)return e;if(s<=c)return n;return r}});var ji=$t((eb,Ys)=>{var Fl=Oi(),Nl=Hi();function Vs(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var Ye=Ys.exports=function(t,e){let{width:n,height:r,interlace:i,bpp:o,depth:s}=t;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],i){let c=Fl.getImagePasses(n,r);for(let u=0;u<c.length;u++)this._images.push({byteWidth:Vs(c[u].width,o,s),height:c[u].height,lineIndex:0})}else this._images.push({byteWidth:Vs(n,o,s),height:r,lineIndex:0});if(s===8)this._xComparison=o;else if(s===16)this._xComparison=o*2;else this._xComparison=1};Ye.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Ye.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,i=r-1;for(let o=0;o<n;o++){let s=t[1+o],c=o>i?e[o-r]:0;e[o]=s+c}};Ye.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let i=0;i<n;i++){let o=t[1+i],s=r?r[i]:0;e[i]=o+s}};Ye.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<n;s++){let c=t[1+s],u=o?o[s]:0,h=s>i?e[s-r]:0,a=Math.floor((h+u)/2);e[s]=c+a}};Ye.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<n;s++){let c=t[1+s],u=o?o[s]:0,h=s>i?e[s-r]:0,a=s>i&&o?o[s-r]:0,f=Nl(h,u,a);e[s]=c+f}};Ye.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],i=r.byteWidth;if(e===0)n=t.slice(1,i+1);else switch(n=Buffer.alloc(i),e){case 1:this._unFilterType1(t,n,i);break;case 2:this._unFilterType2(t,n,i);break;case 3:this._unFilterType3(t,n,i);break;case 4:this._unFilterType4(t,n,i);break;default:throw Error("Unrecognised filter type - "+e)}if(this.write(n),r.lineIndex++,r.lineIndex>=r.height)this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex];else this._lastLine=n;if(r)this.read(r.byteWidth+1,this._reverseFilterLine.bind(this));else this._lastLine=null,this.complete()}});var Ds=$t((nb,Bs)=>{var Rl=Gt("util"),zs=Ri(),Ol=ji(),Hl=Bs.exports=function(t){zs.call(this);let e=[],n=this;this._filter=new Ol(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};Rl.inherits(Hl,zs)});var ze=$t((rb,tc)=>{tc.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 Li=$t((ib,ec)=>{var Pi=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)if(e&1)e=3988292384^e>>>1;else e=e>>>1;Pi[t]=e}})();var Gi=ec.exports=function(){this._crc=-1};Gi.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Pi[(this._crc^t[e])&255]^this._crc>>>8;return!0};Gi.prototype.crc32=function(){return this._crc^-1};Gi.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Pi[(e^t[n])&255]^e>>>8;return e^-1}});var Ti=$t((ob,nc)=>{var Rt=ze(),jl=Li(),Ot=nc.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[Rt.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Rt.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Rt.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Rt.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Rt.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Rt.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};Ot.prototype.start=function(){this.read(Rt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Ot.prototype._parseSignature=function(t){let e=Rt.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};Ot.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let o=4;o<8;o++)r+=String.fromCharCode(t[o]);let i=Boolean(t[4]&32);if(!this._hasIHDR&&n!==Rt.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new jl,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!i){this.error(Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};Ot.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Ot.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Ot.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(Error("Crc error - "+e+" - "+n));return}if(!this._hasIEND)this.read(8,this._parseChunkBegin.bind(this))};Ot.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};Ot.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],i=t[9],o=t[10],s=t[11],c=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(Error("Unsupported bit depth "+r));return}if(!(i in Rt.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(c!==0&&c!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let u=Rt.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:Boolean(c),palette:Boolean(i&Rt.COLORTYPE_PALETTE),color:Boolean(i&Rt.COLORTYPE_COLOR),alpha:Boolean(i&Rt.COLORTYPE_ALPHA),bpp:u,colorType:i}),this._handleChunkEnd()};Ot.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};Ot.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};Ot.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};Ot.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===Rt.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}if(this._colorType===Rt.COLORTYPE_GRAYSCALE)this.transColor([t.readUInt16BE(0)]);if(this._colorType===Rt.COLORTYPE_COLOR)this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]);this._handleChunkEnd()};Ot.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};Ot.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/Rt.GAMMA_DIVISION),this._handleChunkEnd()};Ot.prototype._handleIDAT=function(t){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-t,this._parseIDAT.bind(this,t))};Ot.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===Rt.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(e);let n=t-e.length;if(n>0)this._handleIDAT(n);else this._handleChunkEnd()};Ot.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};Ot.prototype._parseIEND=function(t){if(this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var Ai=$t((Ul)=>{var rc=Oi(),Pl=[function(){},function(t,e,n,r){if(r===e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],Gl=[function(){},function(t,e,n,r){let i=e[0];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function Ll(t,e){let n=[],r=0;function i(){if(r===t.length)throw Error("Ran out of data");let o=t[r];r++;let s,c,u,h,a,f,l,p;switch(e){default:throw Error("unrecognised depth");case 16:l=t[r],r++,n.push((o<<8)+l);break;case 4:l=o&15,p=o>>4,n.push(p,l);break;case 2:a=o&3,f=o>>2&3,l=o>>4&3,p=o>>6&3,n.push(p,l,f,a);break;case 1:s=o&1,c=o>>1&1,u=o>>2&1,h=o>>3&1,a=o>>4&1,f=o>>5&1,l=o>>6&1,p=o>>7&1,n.push(p,l,f,a,h,u,c,s);break}}return{get:function(o){while(n.length<o)i();let s=n.slice(0,o);return n=n.slice(o),s},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw Error("extra data found")}}}function Tl(t,e,n,r,i,o){let{width:s,height:c,index:u}=t;for(let h=0;h<c;h++)for(let a=0;a<s;a++){let f=n(a,h,u);Pl[r](e,i,f,o),o+=r}return o}function Al(t,e,n,r,i,o){let{width:s,height:c,index:u}=t;for(let h=0;h<c;h++){for(let a=0;a<s;a++){let f=i.get(r),l=n(a,h,u);Gl[r](e,f,l,o)}i.resetAfterLine()}}Ul.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:o,interlace:s}=e,c;if(i!==8)c=Ll(t,i);let u;if(i<=8)u=Buffer.alloc(n*r*4);else u=new Uint16Array(n*r*4);let h=Math.pow(2,i)-1,a=0,f,l;if(s)f=rc.getImagePasses(n,r),l=rc.getInterlaceIterator(n,r);else{let p=0;l=function(){let b=p;return p+=4,b},f=[{width:n,height:r}]}for(let p=0;p<f.length;p++)if(i===8)a=Tl(f[p],u,l,o,t,a);else Al(f[p],u,l,o,c,h);if(i===8){if(a!==t.length)throw Error("extra data found")}else c.end();return u}});var Ui=$t((cb,ic)=>{function Jl(t,e,n,r,i){let o=0;for(let s=0;s<r;s++)for(let c=0;c<n;c++){let u=i[t[o]];if(!u)throw Error("index "+t[o]+" not in palette");for(let h=0;h<4;h++)e[o+h]=u[h];o+=4}}function Wl(t,e,n,r,i){let o=0;for(let s=0;s<r;s++)for(let c=0;c<n;c++){let u=!1;if(i.length===1){if(i[0]===t[o])u=!0}else if(i[0]===t[o]&&i[1]===t[o+1]&&i[2]===t[o+2])u=!0;if(u)for(let h=0;h<4;h++)e[o+h]=0;o+=4}}function xl(t,e,n,r,i){let o=255,s=Math.pow(2,i)-1,c=0;for(let u=0;u<r;u++)for(let h=0;h<n;h++){for(let a=0;a<4;a++)e[c+a]=Math.floor(t[c+a]*o/s+0.5);c+=4}}ic.exports=function(t,e,n=!1){let{depth:r,width:i,height:o,colorType:s,transColor:c,palette:u}=e,h=t;if(s===3)Jl(t,h,i,o,u);else{if(c)Wl(t,h,i,o,c);if(r!==8&&!n){if(r===16)h=Buffer.alloc(i*o*4);xl(t,h,i,o,r)}}return h}});var cc=$t((ub,sc)=>{var Ql=Gt("util"),Ki=Gt("zlib"),oc=Ri(),Zl=Ds(),ql=Ti(),_l=Ai(),Cl=Ui(),oe=sc.exports=function(t){oc.call(this),this._parser=new ql(t,{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=t,this.writable=!0,this._parser.start()};Ql.inherits(oe,oc);oe.prototype._handleError=function(t){if(this.emit("error",t),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};oe.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=Ki.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 n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,Ki.Z_MIN_CHUNK);this._inflate=Ki.createInflate({chunkSize:r});let i=n,o=this.emit.bind(this,"error");this._inflate.on("error",function(c){if(!i)return;o(c)}),this._filter.on("complete",this._complete.bind(this));let s=this._filter.write.bind(this._filter);this._inflate.on("data",function(c){if(!i)return;if(c.length>i)c=c.slice(0,i);i-=c.length,s(c)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};oe.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new Zl(this._bitmapInfo)};oe.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};oe.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};oe.prototype._simpleTransparency=function(){this._metaData.alpha=!0};oe.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};oe.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};oe.prototype._complete=function(t){if(this.errord)return;let e;try{let n=_l.dataToBitMap(t,this._bitmapInfo);e=Cl(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var hc=$t((hb,uc)=>{var Xt=ze();uc.exports=function(t,e,n,r){let i=[Xt.COLORTYPE_COLOR_ALPHA,Xt.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let b=function(){let g=new ArrayBuffer(2);return new DataView(g).setInt16(0,256,!0),new Int16Array(g)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&b)return t}let o=r.bitDepth!==16?t:new Uint16Array(t.buffer),s=255,c=Xt.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(c===4&&!r.inputHasAlpha)c=3;let u=Xt.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)s=65535,u*=2;let h=Buffer.alloc(e*n*u),a=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 p(){let b,g,$,y=s;switch(r.inputColorType){case Xt.COLORTYPE_COLOR_ALPHA:y=o[a+3],b=o[a],g=o[a+1],$=o[a+2];break;case Xt.COLORTYPE_COLOR:b=o[a],g=o[a+1],$=o[a+2];break;case Xt.COLORTYPE_ALPHA:y=o[a+1],b=o[a],g=b,$=b;break;case Xt.COLORTYPE_GRAYSCALE:b=o[a],g=b,$=b;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)y/=s,b=Math.min(Math.max(Math.round((1-y)*l.red+y*b),0),s),g=Math.min(Math.max(Math.round((1-y)*l.green+y*g),0),s),$=Math.min(Math.max(Math.round((1-y)*l.blue+y*$),0),s)}return{red:b,green:g,blue:$,alpha:y}}for(let b=0;b<n;b++)for(let g=0;g<e;g++){let $=p(o,a);switch(r.colorType){case Xt.COLORTYPE_COLOR_ALPHA:case Xt.COLORTYPE_COLOR:if(r.bitDepth===8){if(h[f]=$.red,h[f+1]=$.green,h[f+2]=$.blue,i)h[f+3]=$.alpha}else if(h.writeUInt16BE($.red,f),h.writeUInt16BE($.green,f+2),h.writeUInt16BE($.blue,f+4),i)h.writeUInt16BE($.alpha,f+6);break;case Xt.COLORTYPE_ALPHA:case Xt.COLORTYPE_GRAYSCALE:{let y=($.red+$.green+$.blue)/3;if(r.bitDepth===8){if(h[f]=y,i)h[f+1]=$.alpha}else if(h.writeUInt16BE(y,f),i)h.writeUInt16BE($.alpha,f+2);break}default:throw Error("unrecognised color Type "+r.colorType)}a+=c,f+=u}return h}});var lc=$t((ab,fc)=>{var ac=Hi();function Xl(t,e,n,r,i){for(let o=0;o<n;o++)r[i+o]=t[e+o]}function Vl(t,e,n){let r=0,i=e+n;for(let o=e;o<i;o++)r+=Math.abs(t[o]);return r}function Yl(t,e,n,r,i,o){for(let s=0;s<n;s++){let c=s>=o?t[e+s-o]:0,u=t[e+s]-c;r[i+s]=u}}function zl(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,c=t[e+o]-s;i+=Math.abs(c)}return i}function Bl(t,e,n,r,i){for(let o=0;o<n;o++){let s=e>0?t[e+o-n]:0,c=t[e+o]-s;r[i+o]=c}}function Dl(t,e,n){let r=0,i=e+n;for(let o=e;o<i;o++){let s=e>0?t[o-n]:0,c=t[o]-s;r+=Math.abs(c)}return r}function tg(t,e,n,r,i,o){for(let s=0;s<n;s++){let c=s>=o?t[e+s-o]:0,u=e>0?t[e+s-n]:0,h=t[e+s]-(c+u>>1);r[i+s]=h}}function eg(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,c=e>0?t[e+o-n]:0,u=t[e+o]-(s+c>>1);i+=Math.abs(u)}return i}function ng(t,e,n,r,i,o){for(let s=0;s<n;s++){let c=s>=o?t[e+s-o]:0,u=e>0?t[e+s-n]:0,h=e>0&&s>=o?t[e+s-(n+o)]:0,a=t[e+s]-ac(c,u,h);r[i+s]=a}}function rg(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,c=e>0?t[e+o-n]:0,u=e>0&&o>=r?t[e+o-(n+r)]:0,h=t[e+o]-ac(s,c,u);i+=Math.abs(h)}return i}var ig={0:Xl,1:Yl,2:Bl,3:tg,4:ng},og={0:Vl,1:zl,2:Dl,3:eg,4:rg};fc.exports=function(t,e,n,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=e*i,c=0,u=0,h=Buffer.alloc((s+1)*n),a=o[0];for(let f=0;f<n;f++){if(o.length>1){let l=1/0;for(let p=0;p<o.length;p++){let b=og[o[p]](t,u,s,i);if(b<l)a=o[p],l=b}}h[c]=a,c++,ig[a](t,u,s,h,c,i),c+=s,u+=s}return h}});var Ji=$t((fb,gc)=>{var Lt=ze(),sg=Li(),cg=hc(),ug=lc(),hg=Gt("zlib"),ye=gc.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32768,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||hg.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType==="number"?t.colorType:Lt.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType==="number"?t.inputColorType:Lt.COLORTYPE_COLOR_ALPHA,[Lt.COLORTYPE_GRAYSCALE,Lt.COLORTYPE_COLOR,Lt.COLORTYPE_COLOR_ALPHA,Lt.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw Error("option color type:"+t.colorType+" is not supported at present");if([Lt.COLORTYPE_GRAYSCALE,Lt.COLORTYPE_COLOR,Lt.COLORTYPE_COLOR_ALPHA,Lt.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw Error("option bit depth:"+t.bitDepth+" is not supported at present")};ye.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};ye.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};ye.prototype.filterData=function(t,e,n){let r=cg(t,e,n,this._options),i=Lt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return ug(r,e,n,this._options,i)};ye.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);if(r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e)e.copy(r,8);return r.writeInt32BE(sg.crc32(r.slice(4,r.length-4)),r.length-4),r};ye.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*Lt.GAMMA_DIVISION),0),this._packChunk(Lt.TYPE_gAMA,e)};ye.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(Lt.TYPE_IHDR,n)};ye.prototype.packIDAT=function(t){return this._packChunk(Lt.TYPE_IDAT,t)};ye.prototype.packIEND=function(){return this._packChunk(Lt.TYPE_IEND,null)}});var wc=$t((lb,pc)=>{var ag=Gt("util"),dc=Gt("stream"),fg=ze(),lg=Ji(),mc=pc.exports=function(t){dc.call(this);let e=t||{};this._packer=new lg(e),this._deflate=this._packer.createDeflate(),this.readable=!0};ag.inherits(mc,dc);mc.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(fg.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r)this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(t,e,n);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 Mc=$t((Ln,yc)=>{var bc=Gt("assert").ok,Be=Gt("zlib"),gg=Gt("util"),$c=Gt("buffer").kMaxLength;function Pe(t){if(!(this instanceof Pe))return new Pe(t);if(t&&t.chunkSize<Be.Z_MIN_CHUNK)t.chunkSize=Be.Z_MIN_CHUNK;if(Be.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null)this._maxLength=t.maxLength}function dg(t){return new Pe(t)}function kc(t,e){if(e)process.nextTick(e);if(!t._handle)return;t._handle.close(),t._handle=null}Pe.prototype._processChunk=function(t,e,n){if(typeof n==="function")return Be.Inflate._processChunk.call(this,t,e,n);let r=this,i=t&&t.length,o=this._chunkSize-this._offset,s=this._maxLength,c=0,u=[],h=0,a;this.on("error",function(b){a=b});function f(b,g){if(r._hadError)return;let $=o-g;if(bc($>=0,"have should not go down"),$>0){let y=r._buffer.slice(r._offset,r._offset+$);if(r._offset+=$,y.length>s)y=y.slice(0,s);if(u.push(y),h+=y.length,s-=y.length,s===0)return!1}if(g===0||r._offset>=r._chunkSize)o=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if(g===0)return c+=i-b,i=b,!0;return!1}bc(this._handle,"zlib binding closed");let l;do l=this._handle.writeSync(e,t,c,i,this._buffer,this._offset,o),l=l||this._writeState;while(!this._hadError&&f(l[0],l[1]));if(this._hadError)throw a;if(h>=$c)throw kc(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+$c.toString(16)+" bytes");let p=Buffer.concat(u,h);return kc(this),p};gg.inherits(Pe,Be.Inflate);function mg(t,e){if(typeof e==="string")e=Buffer.from(e);if(!(e instanceof Buffer))throw TypeError("Not a string or buffer");let n=t._finishFlushFlag;if(n==null)n=Be.Z_FINISH;return t._processChunk(e,n)}function Ec(t,e){return mg(new Pe(e),t)}yc.exports=Ln=Ec;Ln.Inflate=Pe;Ln.createInflate=dg;Ln.inflateSync=Ec});var Wi=$t((gb,Sc)=>{var vc=Sc.exports=function(t){this._buffer=t,this._reads=[]};vc.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};vc.prototype.process=function(){while(this._reads.length>0&&this._buffer.length){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.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 Ic=$t((bg)=>{var pg=Wi(),wg=ji();bg.process=function(t,e){let n=[],r=new pg(t);return new wg(e,{read:r.read.bind(r),write:function(o){n.push(o)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Oc=$t((mb,Rc)=>{var Fc=!0,Nc=Gt("zlib"),kg=Mc();if(!Nc.deflateSync)Fc=!1;var Eg=Wi(),yg=Ic(),Mg=Ti(),vg=Ai(),Sg=Ui();Rc.exports=function(t,e){if(!Fc)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(v){n=v}let i;function o(v){i=v}function s(v){i.transColor=v}function c(v){i.palette=v}function u(){i.alpha=!0}let h;function a(v){h=v}let f=[];function l(v){f.push(v)}let p=new Eg(t);if(new Mg(e,{read:p.read.bind(p),error:r,metadata:o,gamma:a,palette:c,transColor:s,inflateData:l,simpleTransparency:u}).start(),p.process(),n)throw n;let g=Buffer.concat(f);f.length=0;let $;if(i.interlace)$=Nc.inflateSync(g);else{let d=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;$=kg(g,{chunkSize:d,maxLength:d})}if(g=null,!$||!$.length)throw Error("bad png - invalid inflate data response");let y=yg.process($,i);g=null;let F=vg.dataToBitMap(y,i);y=null;let E=Sg(F,i,e.skipRescale);return i.data=E,i.gamma=h||0,i}});var Gc=$t((pb,Pc)=>{var Hc=!0,jc=Gt("zlib");if(!jc.deflateSync)Hc=!1;var Ig=ze(),Fg=Ji();Pc.exports=function(t,e){if(!Hc)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new Fg(e||{}),i=[];if(i.push(Buffer.from(Ig.PNG_SIGNATURE)),i.push(r.packIHDR(t.width,t.height)),t.gamma)i.push(r.packGAMA(t.gamma));let o=r.filterData(t.data,t.width,t.height),s=jc.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 Lc=$t((Og)=>{var Ng=Oc(),Rg=Gc();Og.read=function(t,e){return Ng(t,e||{})};Og.write=function(t,e){return Rg(t,e)}});var Ac=$t((Ag)=>{var Pg=Gt("util"),Tc=Gt("stream"),Gg=cc(),Lg=wc(),Tg=Lc(),At=Ag.PNG=function(t){if(Tc.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data)this.data.fill(0);this.gamma=0,this.readable=this.writable=!0,this._parser=new Gg(t),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(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new Lg(t),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"))};Pg.inherits(At,Tc);At.sync=Tg;At.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};At.prototype.parse=function(t,e){if(e){let n,r;n=function(i){this.removeListener("error",r),this.data=i,e(null,this)}.bind(this),r=function(i){this.removeListener("parsed",n),e(i,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};At.prototype.write=function(t){return this._parser.write(t),!0};At.prototype.end=function(t){this._parser.end(t)};At.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};At.prototype._gamma=function(t){this.gamma=t};At.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};At.bitblt=function(t,e,n,r,i,o,s,c){if(n|=0,r|=0,i|=0,o|=0,s|=0,c|=0,n>t.width||r>t.height||n+i>t.width||r+o>t.height)throw Error("bitblt reading outside image");if(s>e.width||c>e.height||s+i>e.width||c+o>e.height)throw Error("bitblt writing outside image");for(let u=0;u<o;u++)t.data.copy(e.data,(c+u)*e.width+s<<2,(r+u)*t.width+n<<2,(r+u)*t.width+n+i<<2)};At.prototype.bitblt=function(t,e,n,r,i,o,s){return At.bitblt(this,t,e,n,r,i,o,s),this};At.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let i=0;i<3;i++){let o=t.data[r+i]/255;o=Math.pow(o,0.45454545454545453/t.gamma),t.data[r+i]=Math.round(o*255)}}t.gamma=0}};At.prototype.adjustGamma=function(){At.adjustGamma(this)}});var Go=$t((zk,Xa)=>{var Po={to(t,e){if(!e)return`\x1B[${t+1}G`;return`\x1B[${e+1};${t+1}H`},move(t,e){let n="";if(t<0)n+=`\x1B[${-t}D`;else if(t>0)n+=`\x1B[${t}C`;if(e<0)n+=`\x1B[${-e}A`;else if(e>0)n+=`\x1B[${e}B`;return n},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},c0={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},u0={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let n=0;n<t;n++)e+=this.line+(n<t-1?Po.up():"");if(t)e+=Po.left;return e}};Xa.exports={cursor:Po,scroll:c0,erase:u0,beep:"\x07"}});import{spawnSync as Nw}from"node:child_process";import{isMainThread as Rw}from"node:worker_threads";import{parseArgs as Mw}from"node:util";var ie={name:"@kecan0406/ttheme",version:"1.0.40",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",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=20.11"}};import{rmSync as hh}from"node:fs";import{basename as Dd,join as nr}from"node:path";var rl=/^#[0-9a-f]{6}$/;function ds(t){return rl.test(t)}function jt(t){let e=Number.parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function Bt(t){let[e,n,r]=jt(t).map((i)=>{let o=i/255;return o<=0.03928?o/12.92:((o+0.055)/1.055)**2.4});return 0.2126*e+0.7152*n+0.0722*r}function fe(t,e){let n=Bt(t),r=Bt(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function Mr(t,e){return Math.round(fe(t,e)*100)/100}function il(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function ms(t){let[e,n,r]=jt(t).map(il),i=Math.cbrt(0.4122214708*e+0.5363325363*n+0.0514459929*r),o=Math.cbrt(0.2119034982*e+0.6806995451*n+0.1073969566*r),s=Math.cbrt(0.0883024619*e+0.2817188376*n+0.6299787005*r),c=1.9779984951*i-2.428592205*o+0.4505937099*s,u=0.0259040371*i+0.7827717662*o-0.808675766*s;return{l:0.2104542553*i+0.793617785*o-0.0040720468*s,c:Math.hypot(c,u),h:(Math.atan2(u,c)*180/Math.PI+360)%360}}var $e=7,ps=3,$i=0.15,ws=1.6,yi=[1,2,3,4,5,6,9,10,11,12,13,14],bs=[7,15],vr=[1,2,3,4,5,6],Ms={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}},ol=0.03,ki=25,vs=15,Ss=0.08;function le(t,e){let n=t.ansi[e];if(n===void 0)throw Error(`${t.name}: missing ANSI ${e}`);return n}function Ei(t,e,n){let r=t.background;return e.flatMap((i)=>{let o=le(t,i);return fe(o,r)<n?[`ANSI ${i} ${o} on ${r} is ${Mr(o,r)}:1, needs ${n}:1`]:[]})}function $s(t,e){return Math.min(...e.map((n)=>fe(le(t,n),t.background)))}var Is=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:$e,measure:({foreground:t,background:e})=>fe(t,e),check:({foreground:t,background:e})=>fe(t,e)<$e?[`foreground ${t} on ${e} is ${Mr(t,e)}:1, needs ${$e}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:ps,measure:(t)=>$s(t,yi),check:(t)=>Ei(t,yi,ps)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:$i,measure:(t)=>Bt(le(t,0)),check:(t)=>{let e=le(t,0);return Bt(e)>$i?[`ANSI 0 ${e} has luminance ${Bt(e).toFixed(3)}, needs <= ${$i}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:$e,measure:(t)=>$s(t,bs),check:(t)=>Ei(t,bs,$e)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:ws,measure:(t)=>fe(le(t,8),t.background),check:(t)=>Ei(t,[8],ws)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:$e,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:fe(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&fe(t,e)<$e?[`foreground ${t} on selection ${e} is ${Mr(t,e)}:1, needs ${$e}:1`]:[]}];function Mi(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var vi=(t)=>t>8?t-8:t;function Fs(t){let e=t.signatureSlots.filter((n)=>n.startsWith("ansi")).map((n)=>Number(n.slice(4)));return new Set(e.flatMap((n)=>vr.includes(vi(n))?[n,n>8?n-8:n+8]:[n]))}function Rn(t,e){let n=ms(le(t,e));return n.c<ol?void 0:n}function ks(t){let e=Fs(t);return yi.flatMap((n)=>{let r=Rn(t,n),i=Ms[vi(n)];if(r===void 0||i===void 0||e.has(n))return[];let o=Mi(r.h,i.center)-i.width;return o>0?[{slot:n,hue:r.h,over:o}]:[]})}function Es(t){let e=new Set(t.signatureSlots);return vr.flatMap((n)=>{let r=Rn(t,n),i=Rn(t,n+8);if(r===void 0||i===void 0||e.has(`ansi${n}`)&&e.has(`ansi${n+8}`))return[];return[{normal:n,gap:Mi(r.h,i.h)}]})}function ys(t){let e=Fs(t);return[0,8].flatMap((n)=>vr.flatMap((r)=>vr.filter((i)=>i>r).flatMap((i)=>{let[o,s]=[n+r,n+i],c=Rn(t,o),u=Rn(t,s);if(c===void 0||u===void 0||e.has(o)&&e.has(s))return[];return Mi(c.h,u.h)<vs&&Math.abs(c.l-u.l)<Ss?[[o,s]]:[]})))}var sl=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...ks(t).map((e)=>e.over)),check:(t)=>ks(t).map(({slot:e,hue:n,over:r})=>{let i=Ms[vi(e)];return`ANSI ${e} ${le(t,e)} has hue ${n.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:ki,measure:(t)=>Math.max(0,...Es(t).map((e)=>e.gap)),check:(t)=>Es(t).filter((e)=>e.gap>ki).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${ki}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(t)=>ys(t).length,check:(t)=>ys(t).map(([e,n])=>`ANSI ${e} ${le(t,e)} and ANSI ${n} ${le(t,n)} are within ${vs}° hue and ${Ss} lightness`)}],Sr=[...Is,...sl],Lw=Sr.map((t)=>t.rule),Ir=Sr.map(({rule:t,label:e,unit:n,min:r,max:i})=>({rule:t,label:e,unit:n,...r===void 0?{}:{min:r},...i===void 0?{}:{max:i}}));function Ns(t){return Sr.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Rs(t,e){return t.filter((n)=>!e.waive.includes(n.rule)).flatMap((n)=>n.check(e).map((r)=>({theme:e.name,rule:n.rule,detail:r})))}function cl(t){return Rs(Sr,t)}function Os(t){return Rs(Is,t)}function Hs(t){return t.flatMap(cl)}var ul=["black","red","green","yellow","blue","magenta","cyan","white"];function js(t,e){return[t,...ul.map((n,r)=>`${n} = '${e[r]}'`),""].join(`
3
- `)}var On={id:"alacritty",limits:"no runtime color API (OSC only)",emit(t){let e=[...Xe(t),"","[colors.primary]",`background = '${t.background}'`,`foreground = '${t.foreground}'`,"","[colors.cursor]",`cursor = '${t.cursor}'`,`text = '${t.background}'`,"","[colors.selection]",`background = '${t.selectionBackground}'`,`text = '${t.foreground}'`,"",js("[colors.normal]",t.ansi.slice(0,8)),js("[colors.bright]",t.ansi.slice(8,16))].join(`
4
- `);return[{path:`alacritty/themes/${ut(t.name)}.toml`,content:e}]}};var Hn={id:"ghostty",emit(t){let e=[...Xe(t),`background = ${t.background}`,`foreground = ${t.foreground}`,`cursor-color = ${t.cursor}`,`selection-background = ${t.selectionBackground}`,`selection-foreground = ${t.foreground}`,...t.ansi.map((n,r)=>`palette = ${r}=${n}`),"palette-generate = true","","macos-icon = custom-style",`macos-icon-ghost-color = ${t.ghostty.iconGhost}`,`macos-icon-screen-color = ${t.ghostty.iconScreen.join(",")}`,"macos-icon-frame = chrome",""].join(`
5
- `);return[{path:`ghostty/themes/${ut(t.name)}`,content:e}]}};function ke(t){let[e,n,r]=jt(t);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":n/255,"Red Component":e/255}}function Ps(t){return{...Object.fromEntries(t.ansi.map((e,n)=>[`Ansi ${n} Color`,ke(e)])),"Background Color":ke(t.background),"Bold Color":ke(t.foreground),"Cursor Color":ke(t.cursor),"Cursor Text Color":ke(t.background),"Foreground Color":ke(t.foreground),"Selected Text Color":ke(t.foreground),"Selection Color":ke(t.selectionBackground)}}function hl(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function Gs(t,e,n,r){let i=(s,c)=>({Name:`ttheme · ${c}`,Guid:`ttheme-${c}`,...r?{"Dynamic Profile Parent GUID":r}:{},"Use Separate Colors for Light and Dark Mode":!1,"Harmonize 256 Colors":!0,...hl(e.get(s.name)),...Ps(s)}),o=[...n?[i(n,"default")]:[],...t.map((s)=>i(s,s.name))];return`${JSON.stringify({Profiles:o},null,2)}
6
- `}function al(t,e){return[` <key>${t}</key>`,"\t<dict>",...Object.entries(e).flatMap(([n,r])=>[` <key>${n}</key>`,typeof r==="string"?` <string>${r}</string>`:` <real>${r}</real>`]),"\t</dict>"].join(`
7
- `)}var jn={id:"iterm2",limits:"colors are Display P3, the space iTerm2 reads OSC colors in",emit(t){let e=['<?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(Ps(t)).map(([n,r])=>al(n,r)),"</dict>","</plist>",""].join(`
8
- `);return[{path:`iterm2/${ut(t.name)}.itermcolors`,content:e}]}};var Pn={id:"kitty",emit(t){let e=[...Xe(t),`background ${t.background}`,`foreground ${t.foreground}`,`cursor ${t.cursor}`,`cursor_text_color ${t.background}`,`selection_background ${t.selectionBackground}`,`selection_foreground ${t.foreground}`,...t.ansi.map((n,r)=>`color${r} ${n}`),""].join(`
9
- `);return[{path:`kitty/themes/${ut(t.name)}.conf`,content:e}]}};function Ls(t){return["# Generated by ttheme — rewritten on every add, remove and default; do not edit.","import os","",`THEMES = ${JSON.stringify(t.themes)}`,`BACKGROUNDS = ${JSON.stringify(t.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 + '.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 + '.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(`
10
- `)}import{createHash as Jg}from"node:crypto";import{existsSync as zc,mkdirSync as Wg,readdirSync as xg,readFileSync as Qg,renameSync as Bc,rmSync as tn}from"node:fs";import{basename as Zg,isAbsolute as qg,join as ct}from"node:path";import{chmodSync as fl,copyFileSync as ll,existsSync as Ve,mkdirSync as gl,readFileSync as Si,realpathSync as dl,renameSync as ml,rmSync as Ts,statSync as pl,writeFileSync as wl}from"node:fs";import{dirname as bl}from"node:path";function As(t){return`${t}.ttheme.bak`}var $l=/^(?:#|--) ttheme begin$|path = "ttheme-/m;function Ii(t){let e=As(t);if(Ve(t)&&!Ve(e)&&!$l.test(Si(t,"utf8")))ll(t,e)}function Tt(t,e){let n=Ve(t)?dl(t):t;gl(bl(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(wl(r,e),Ve(n))fl(r,pl(n).mode&4095);ml(r,n)}function Gn(t,e){if((Ve(t)?Si(t,"utf8"):void 0)===e)return!1;return Ii(t),Tt(t,e),!0}function Us(t,e){let n=As(t),r=Ve(n)?Si(n,"utf8"):void 0;if(e===""&&r===void 0)return Ts(t,{force:!0}),"removed";if(Tt(t,e),r===void 0||r===e)return Ts(n,{force:!0}),"restored";return"kept backup"}var Jc=yr(qs(),1),Nr=yr(Ac(),1),Uc=[137,80,78,71,13,10,26,10],Wc=13;function Tn(t){return t.length>=Uc.length&&Uc.every((e,n)=>t[n]===e)}function Ug(t){let e=Nr.PNG.sync.read(Buffer.from(t));return{width:e.width,height:e.height,data:new Uint8Array(e.data)}}function xc(t,e){if(Tn(t)){let n=An(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);return Ug(t)}if(t[0]===255&&t[1]===216){let n=Jc.decode(t,{useTArray:!0,formatAsRGBA:!0,maxResolutionInMP:e/1e6,maxMemoryUsageInMB:1024});return{width:n.width,height:n.height,data:n.data}}throw Error("not a PNG or JPEG image")}function De(t){let e=new Nr.PNG({width:t.width,height:t.height});return e.data=Buffer.from(t.data),Nr.PNG.sync.write(e)}function Kc(t,e){for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let i=0;i<e.length&&r;i++)r=t[n+i]===e.charCodeAt(i);if(r)return n}return-1}function An(t){if(t.length<33||!Tn(t))return null;let e=new DataView(t.buffer,t.byteOffset,t.byteLength),n=e.getUint32(16),r=e.getUint32(20);if(t[25]===4||t[25]===6)return{width:n,height:r,alpha:!0};let i=Kc(t,"IDAT");return{width:n,height:r,alpha:Kc(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function Qc(t,e=Wc){let{width:n,height:r}=t,i=-1,o=-1;for(let s=0;s<t.height;s++)for(let c=0;c<t.width;c++)if((t.data[(s*t.width+c)*4+3]??0)>=e)n=Math.min(n,c),i=Math.max(i,c),r=Math.min(r,s),o=Math.max(o,s);return i<0?null:{x:n,y:r,w:i-n+1,h:o-r+1}}function Un(t,e={x:0,y:0,w:t.width,h:t.height}){let n=0;for(let r=e.y;r<e.y+e.h;r++)for(let i=e.x;i<e.x+e.w;i++)if((t.data[(r*t.width+i)*4+3]??0)<Wc)n++;return Math.round(n*100/(e.w*e.h))}function Kg(t,e){if(e<=1)return t;let n=Math.max(1,Math.floor(t.width/e)),r=Math.max(1,Math.floor(t.height/e)),i=new Uint8Array(n*r*4),o=t.data;for(let s=0;s<r;s++)for(let c=0;c<n;c++){let u=0,h=0,a=0,f=0;for(let p=0;p<e;p++)for(let b=0;b<e;b++){let g=((s*e+p)*t.width+c*e+b)*4,$=o[g+3]??0;u+=(o[g]??0)*$,h+=(o[g+1]??0)*$,a+=(o[g+2]??0)*$,f+=$}let l=(s*n+c)*4;if(f>0)i[l]=Math.round(u/f),i[l+1]=Math.round(h/f),i[l+2]=Math.round(a/f);i[l+3]=Math.round(f/(e*e))}return{width:n,height:r,data:i}}function Zc(t,e,n){let r=Math.min(e/t.width,n/t.height),i=Math.max(1,Math.round(t.width*r)),o=Math.max(1,Math.round(t.height*r)),s=Rr(t,{x:0,y:0,w:t.width,h:t.height},i,o),c=new Uint8Array(e*n*4),u=Math.floor((e-i)/2),h=Math.floor((n-o)/2);for(let a=0;a<o;a++)c.set(s.data.subarray(a*i*4,(a+1)*i*4),((h+a)*e+u)*4);return{width:e,height:n,data:c}}function Rr(t,e,n,r){let i=Math.max(1,Math.floor(Math.min(e.w/n,e.h/r))),o=Kg(t,i),s=o.data,c=new Uint8Array(n*r*4);for(let u=0;u<r;u++){let h=Math.min(o.height-1,Math.max(0,e.y/i+(u+0.5)*e.h/i/r-0.5)),a=Math.floor(h),f=Math.min(o.height-1,a+1),l=h-a;for(let p=0;p<n;p++){let b=Math.min(o.width-1,Math.max(0,e.x/i+(p+0.5)*e.w/i/n-0.5)),g=Math.floor(b),$=Math.min(o.width-1,g+1),y=b-g,F=(a*o.width+g)*4,E=(a*o.width+$)*4,v=(f*o.width+g)*4,d=(f*o.width+$)*4,j=(s[F+3]??0)*(1-y)*(1-l),k=(s[E+3]??0)*y*(1-l),H=(s[v+3]??0)*(1-y)*l,R=(s[d+3]??0)*y*l,L=j+k+H+R,P=(u*n+p)*4;if(L>0)for(let C=0;C<3;C++){let U=(s[F+C]??0)*j+(s[E+C]??0)*k+(s[v+C]??0)*H+(s[d+C]??0)*R;c[P+C]=Math.round(U/L)}c[P+3]=Math.round(L)}}return{width:n,height:r,data:c}}var qc={width:2560,height:1550},_g=2560,Cg=0.1,ge={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Xg=Bt(Qi("#19161e","#9b86c8",0.2)),Vg="shelf",Or="originals",Yg="images.json",xi=1;function Qi(t,e,n){let r=jt(t),i=jt(e);return`#${r.map((o,s)=>Math.round(o+((i[s]??0)-o)*n).toString(16).padStart(2,"0")).join("")}`}function zg(t,e){if(e==="background"||e==="foreground"||e==="cursor")return t[e];if(e==="selection"&&t.selection)return t.selection;let n=/^ansi(\d|1[0-5])$/.exec(e),r=n?t.ansi[Number(n[1])]:void 0;if(!r)throw Error(`${t.name} has no slot ${e}`);return r}function _c(t){if(t(1))return 1;let e=0,n=1;for(let r=0;r<40;r++){let i=(e+n)/2;if(t(i))e=i;else n=i}return e}function Cc(t,e){let n=zg(t,e),i=_c((h)=>Os({name:t.name,background:Qi(t.background,n,h),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),o=_c((h)=>Bt(Qi(t.background,n,h))<=Xg),s=Math.floor(Math.min(i,o)*1000)/1000,c=jt(t.background),u=Math.hypot(...jt(n).map((h,a)=>(h-(c[a]??0))*s));return{slot:e,color:n,cap:i,matched:o,opacity:s,reach:u}}function jr(t,e){let n=Cc(t,"cursor");if(n.opacity>=Cg)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>Cc(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function Zi(t,e,n){let r=jt(e),i=jt(n),o=t.data;for(let s=0;s<o.length;s+=4){let c=(0.299*(o[s]??0)+0.587*(o[s+1]??0)+0.114*(o[s+2]??0))/255;for(let u=0;u<3;u++)o[s+u]=Math.round((r[u]??0)+((i[u]??0)-(r[u]??0))*c)}return t}function Bg(t,e,n){let r=jt(e),i=t.data,o=new Uint8Array(i.length);for(let s=0;s<i.length;s+=4){let c=(i[s+3]??0)/255*n;for(let u=0;u<3;u++)o[s+u]=Math.round((r[u]??0)*(1-c)+(i[s+u]??0)*c);o[s+3]=255}return{width:t.width,height:t.height,data:o}}function Dc(t){return Qc(t)??{x:0,y:0,w:t.width,h:t.height}}function Dg(t,e){if(t<=0||e<=0)return qc;let n=Math.min(1,qc.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function td(t,e){let n=Math.min(1,_g/Math.max(e.w,e.h));return Rr(t,e,Math.round(e.w*n),Math.round(e.h*n))}function tu(t,e,n,r){if(r<ge.stands){let u=t.w*n>t.h*e?{x:t.x+(t.w-t.h*e/n)/2,y:t.y,w:t.h*e/n,h:t.h}:{x:t.x,y:t.y,w:t.w,h:t.w*n/e};return{crop:u,at:{x:0,y:0,w:e,h:n},focus:(u.y-t.y+u.h/2)/t.h}}let i=Math.max(ge.tall*n,ge.reach*e*t.h/t.w),o=i*t.w/t.h;if(o>ge.widest*e)o=ge.widest*e,i=o*t.h/t.w;let s=ge.headroom*n,c=Math.min(1,(n-s)/i);return{crop:{x:t.x,y:t.y,w:t.w,h:t.h*c},at:{x:e*(1-ge.margin)-o,y:s,w:o,h:i*c},focus:Math.min(1,(n/2-s)/i)}}function eu(t,e,n,r){let i=Math.max(1,Math.round(e.at.w)),o=Math.max(1,Math.round(e.at.h)),s=Rr(t,e.crop,i,o),c=new Uint8Array(n*r*4),u=Math.round(e.at.x),h=Math.round(e.at.y);for(let a=0;a<o;a++){let f=h+a,l=Math.max(0,-u),p=Math.min(i,n-u);if(f<0||f>=r||p<=l)continue;c.set(s.data.subarray((a*i+l)*4,(a*i+p)*4),(f*n+u+l)*4)}return{width:n,height:r,data:c}}function nu(t,e,n,r,i){let o=Dc(t),s=eu(t,tu(o,r,i,Un(t,o)),r,i);return Bg(Zi(s,e.background,n.color),e.background,n.opacity)}function de(t){return ct(t,"ttheme","backgrounds")}function qi(t){return ct(t,Yg)}function Hr(t){try{return Qg(t,"utf8")}catch{return}}function Me(t){try{return xg(t)}catch{return[]}}function en(t){let e=Hr(qi(t));if(e===void 0)return nd(t);let n=JSON.parse(e);if(n.version!==xi)throw Error(`${qi(t)} is version ${n.version} — this ttheme reads version ${xi}`);return n}function ed(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${n+1}/${e.pictures.length}`,`background-image = ${ct(t,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(`
11
- `)}function Pr(t,e,n){Tt(qi(t),`${JSON.stringify(e,null,2)}
12
- `);for(let r of n){let i=e.palettes[r],o=ct(t,`${r}.conf`);if(i)Tt(o,ed(t,i));else tn(o,{force:!0})}}function ru(t,e){for(let n of Me(t))if(n.startsWith(`${e.stem}.`)||n.startsWith(`${e.stem}@`))tn(ct(t,n),{force:!0});if(e.original)tn(ct(t,e.original),{force:!0})}function Xc(t,e,n,r){let i=Zg(/^background-image\s*=\s*(.*?)\s*$/m.exec(e??"")?.[1]??"");if(!i.startsWith(`${t}.`)||!/^\.[0-9a-f]{8}@fill-\d+\.png$/.test(i.slice(t.length)))return;let o=i.slice(0,i.indexOf("@")),s=r??/^# image (\S+)$/m.exec(e??"")?.[1]??`picture_${o.slice(t.length+1)}`,c=/^# from (.+)$/m.exec(e??"")?.[1],u=Number(/^background-image-opacity\s*=\s*(\S+)/m.exec(e??"")?.[1]??1),h=n.find((a)=>a.startsWith(`${t}-${s}.`));return{key:s,stem:o,fill:i,opacity:Number.isFinite(u)?u:1,...c?{from:c}:{},...h?{original:ct(Or,h)}:{}}}function Vc(t,e){if(zc(t))Bc(t,e)}function nd(t){let e={version:xi,palettes:{}};if(!zc(t))return e;let n=Me(ct(t,Or)),r=Me(t).filter((o)=>o.endsWith(".conf")&&o!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(o)).map((o)=>o.slice(0,-5)),i=ct(t,Vg);for(let o of new Set([...r,...Me(i)])){let s=[],c=Xc(o,Hr(ct(t,`${o}.conf`)),n);if(c)Vc(ct(t,`${o}.tune.conf`),ct(t,`${c.stem}.tune.conf`)),Vc(ct(t,`${o}.off.conf`),ct(t,`${c.stem}.off.conf`)),s.push(c);for(let u of Me(ct(i,o))){let h=ct(i,o,u),a=Xc(o,Hr(ct(h,".conf")),n,u);if(!a)continue;for(let f of Me(h)){let l=f===".tune.conf"||f===".off.conf"?`${a.stem}${f}`:`${o}${f}`;if(f!==".conf")Bc(ct(h,f),ct(t,l))}tn(h,{recursive:!0}),s.push(a)}if(Me(ct(i,o)).length===0)tn(ct(i,o),{recursive:!0,force:!0});if(s.length>0)s.sort((u,h)=>u.key<h.key?-1:u.key>h.key?1:0),e.palettes[o]={active:(c??s[0]).key,pictures:s}}if(Me(i).length===0)tn(i,{recursive:!0,force:!0});return Pr(t,e,Object.keys(e.palettes)),e}function Yc(t,e,n){return e.startsWith("~/")?ct(n,e.slice(2)):qg(e)?e:ct(t,e)}function iu(t,e,n){let r=new Map,i=(c,u)=>{let h=Hr(c);if(h===void 0)return!1;for(let a of h.split(`
13
- `)){let f=/^([a-z-]+)\s*=\s*(.*?)\s*$/.exec(a);if(f?.[1]==="config-file"&&u<4)i(Yc(t,f[2].replace(/^\?/,""),n),u+1);else if(f&&/^background-image(?:-fit|-opacity)?$/.test(f[1]))r.set(f[1],f[2])}return!0};if(!i(ct(t,`${e}.conf`),0))return;let o=r.get("background-image")??"";if(o==="")return;let s=Number(r.get("background-image-opacity")??1);return{image:Yc(t,o,n),opacity:Number.isFinite(s)?s:1,cover:r.get("background-image-fit")==="cover"}}function rd(t){return`${t.site}_${t.id}`}function ou(t,e,n){let r=de(t),i=en(r),o=i.palettes[e];if(!o||o.pictures.length<2)throw Error(`${e} has no other image`);let s=o.pictures.length,c=(o.pictures.findIndex((u)=>u.key===o.active)+n+s)%s;return o.active=o.pictures[c].key,Pr(r,i,[e]),{key:o.active,at:c+1,of:s}}function su(t,e){let n=de(t),r=en(n),i=r.palettes[e];if(!i)throw Error(`${e} has no image`);let o=i.pictures.findIndex((u)=>u.key===i.active),[s]=i.pictures.splice(o,1);ru(n,s);let c=i.pictures[o%Math.max(i.pictures.length,1)];if(c)i.active=c.key;else delete r.palettes[e];return Pr(n,r,[e]),{key:s.key,left:i.pictures.length}}function cu(t,e,n,r,i,o){let s=de(t),c=e.name,u=rd(i),h=en(s),a=h.palettes[c]??{active:u,pictures:[]},f=Dc(r),{width:l,height:p}=Dg(o.width,o.height),b=tu(f,l,p,Un(r,f)),g=De(Zi(td(r,f),e.background,n.color)),$=De(Zi(eu(r,b,l,p),e.background,n.color)),y=`${c}.${Jg("sha1").update(g).update($).digest("hex").slice(0,8)}`,F={key:u,stem:y,fill:`${y}@fill-${Math.round(b.focus*100)}.png`,opacity:n.opacity,...i.from?{from:i.from}:{},original:ct(Or,`${c}-${u}.${i.ext}`)},E=a.pictures.find((d)=>d.key===u);if(E)ru(s,E);let v=[ct(s,`${y}.png`),ct(s,F.fill),ct(s,F.original)];return Wg(ct(s,Or),{recursive:!0}),Tt(v[0],g),Tt(v[1],$),Tt(v[2],i.bytes),a.pictures=E?a.pictures.map((d)=>d===E?F:d):[...a.pictures,F],a.active=u,h.palettes[c]=a,Pr(s,h,[c]),[...v,ct(s,`${c}.conf`)]}function uu(t){let e=new Map;for(let[n,r]of Object.entries(en(de(t)).palettes)){let[,i,o]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&o)e.set(n,{site:i,id:Number(o)})}return e}function _i(t){let{slot:e,color:n,opacity:r}=jr({name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi,waived:t.waive},t.signatureSlots);return{name:t.name,group:t.group,...t.native?{native:t.native}:{},...t.lead?{lead:!0}:{},order:t.order,ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},...t.role==="default"?{default:!0}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,signature:t.signature,signatureSlots:t.signatureSlots,ansi:t.ansi,gate:Ns(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r}}}function Ge(t){return t.filter((e)=>e.default!==!0)}function id(t){let[e]=t;if(!e)throw Error("manifest needs at least one theme");return{version:ie.version,gate:Ir,placement:ge,palettes:t.map(_i)}}var Ci={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(id(t),null,2)}
14
- `}]}};import{readdirSync as Td,readFileSync as Gu}from"node:fs";import{basename as Ad,join as Lu}from"node:path";import{readdirSync as od,rmSync as sd,statSync as cd}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as ud}from"node:net";import{homedir as hd}from"node:os";import{join as Jn}from"node:path";import{setTimeout as ad}from"node:timers/promises";var Le=100,Ae=25000000,fd=536870912,Wn=["safe","questionable","explicit"],Te=["nudity","underwear"],ld={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},Kn={safe:"s",questionable:"q",explicit:"e"},gd=8191,dd=20000,md=5000,hu=3000,au=8,pd=3000,du=60000,fu=3,Vi=`ttheme/${ie.version} (+${ie.homepage})`,wd=["orig","tile","thumb","cut"],mu=new Map,bd=Nd(process.env.TTHEME_FIND_HOSTS),$d=Fd(process.env.TTHEME_FIND_CUTOUTS);ud(pd);function lu(t){try{return od(t)}catch{return[]}}function Gr(t){return t.startsWith("//")?`https:${t}`:t}function xn(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function Qn(t){let e=t.trim();if(!e)return[];let n=JSON.parse(e);if(Array.isArray(n))return n;let r=n.posts;return Array.isArray(r)?r:[]}function kd(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,o])=>[i,String(o)]))}function Xi(t,e,n){let r=Gr(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:xn(r)}}function pu(t,e){let n=Gr(String(e.preview??""));if(!e.file||!n||!Number(t.id))return[];let r=Number(t.width??t.image_width)||0,i=Number(t.height??t.image_height)||0;return[{id:Number(t.id),width:r,height:i,file:e.file,preview:n,ext:e.ext,owner:String(e.owner??""),artist:e.artist,score:Number(t.score)||0,rating:String(t.rating??""),md5:String(e.md5??""),source:String(t.source??""),tags:e.tags.split(/\s+/).filter(Boolean),solo:e.solo,family:Number(t.parent_id)||(t.has_children===!0?Number(t.id):0),smaller:e.versions.filter((o)=>o.file&&o.width>0&&o.height>0&&o.width*o.height<r*i)}]}function Ed(t){let e=kd(t);return Qn(t).flatMap((n)=>{let r=Gr(String(n.file_url??"")),i=String(n.tags??"");return pu(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||xn(r)).toLowerCase(),owner:n.author,artist:i.split(/\s+/).find((o)=>e.get(o)==="artist")??"",md5:n.md5,tags:i,solo:void 0,versions:[Xi(n.jpeg_url,n.jpeg_width,n.jpeg_height),Xi(n.sample_url,n.sample_width,n.sample_height)]})})}function yd(t){return Qn(t).flatMap((e)=>{let n=Gr(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return pu(e,{preview:i.variants?.find((o)=>o.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||xn(n)).toLowerCase(),owner:"",artist:String(e.tag_string_artist??"").split(/\s+/)[0]??"",md5:e.md5,tags:r,solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((o)=>Xi(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 Md(t){return Qn(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function vd(t){return Qn(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function Sd(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function Id(t){let e=t.trim()?JSON.parse(t):{};return Number(e.counts?.posts)||0}function Fd(t){let e=new Map;for(let n of(t??"").split(/\s+/).filter(Boolean)){let r=n.indexOf("=");if(r>0)e.set(n.slice(0,r),n.slice(r+1).split(",").filter(Boolean))}return e}function Nd(t){let e=new Map;for(let n of(t??"").split(/[\s,]+/).filter(Boolean)){let r=n.indexOf("="),i=n.slice(0,r);try{let o=new URL(n.slice(r+1));if(i&&o.protocol==="https:")e.set(i,o.origin)}catch{}}return e}function wu(t,e,n,r){let i=(t??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let o=e.filter((s)=>i.includes(s));return o.length>0?o:[...n]}function Lr(t){return wu(t,Wn,["safe"])}function Tr(t){return wu(t,Te,Te,"none")}function bu(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function $u(t){let e=bd.get(t.key),n=$d.get(t.key);return{...t,origin:e??t.origin,moved:e!==void 0&&e!==t.origin,cutouts:n??t.cutouts,vouched:t.vouched&&n===void 0}}function ku(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function gu(t){let e=$u(t),n=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...e,cutouts:ku(e.cutouts),ratings:bu([Kn.safe],[Kn.questionable],[Kn.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${Kn[i]}`;let o=Wn.filter((c)=>!r.includes(c)),[s]=o;return o.length===1&&s?`-rating:${Kn[s]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(Le),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/post.xml?${new URLSearchParams({limit:"1",tags:r})}`,postUrl:(r)=>`${e.origin}/post.json?${n({tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/post/show/${r}`,parse:Ed,count:Sd}}function Rd(t){let e=$u(t),n=bu(["g"],["s","q"],["e"]);return{...e,cutouts:ku(e.cutouts),ratings:n,rate:(r)=>r.length===Wn.length?"":`rating:${r.flatMap((i)=>[...n[i]]).join(",")}`,best:"order:score",tagBudget:2,postsUrl:(r,i)=>`${e.origin}/posts.json?${new URLSearchParams({limit:String(Le),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/counts/posts.json?${new URLSearchParams({tags:r})}`,postUrl:(r)=>`${e.origin}/posts.json?${new URLSearchParams({limit:"1",tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/posts/${r}`,parse:yd,count:Id}}function Od(t){return gt.find((e)=>e.key===t||e.name===t||new URL(e.origin).host===t)}function Yi(t){return t.split(/\s+/).filter((e)=>e&&!e.startsWith("rating:")).length}function Ar(t,e){let n=t.trim();if(/^\d+$/.test(n))return{site:e,id:Number(n)};let r=/^([\w.]+):(\d+)$/.exec(n);if(r){let c=gt.find((u)=>u.key===r[1]||u.name===r[1]);return c&&{site:c,id:Number(r[2])}}let i;try{i=new URL(n)}catch{return}let o=Od(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 gt=[Rd({key:"danbooru",name:"danbooru",origin:"https://danbooru.donmai.us",cutouts:["transparent_background"],vouched:!1,tunneled:!0,ansi:2}),gu({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,tunneled:!1,ansi:6}),gu({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,tunneled:!1,ansi:5})],me=134217728;function se(t,e){let n=gt.indexOf(t);return(n===-1?gt.length:n)*me+e}function zi(t){let e;try{e=new URL(t).hostname}catch{return""}return e.split(".").slice(-2).join(".")}function Eu(){return gt.filter((t)=>!t.tunneled).map((t)=>zi(t.origin)).flatMap((t)=>[t,`.${t}`]).join(",")}function yu(t,e=Te){return t.tags.filter((n)=>e.some((r)=>ld[r].has(n)))}function Mu(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function Zn(t){return[t,...t.smaller].find((e)=>e.width*e.height<=Ae)}function vu(t){let e=new Map;for(let[n,r]of[...t].sort(([i],[o])=>i<o?-1:1)){if(r==="")continue;e.set(r,[...e.get(r)??[],n])}return e}function Ur(){return Jn(process.env.XDG_CACHE_HOME??Jn(hd(),".cache"),"ttheme")}function Ie(t){return Jn(Ur(),t.key)}function Su(t=fd,e=Ur()){let n=[],r=0;for(let i of lu(e))for(let o of wd){let s=Jn(e,i,o);for(let c of lu(s)){let u=Jn(s,c);try{let{size:h,mtimeMs:a}=cd(u);n.push({path:u,size:h,at:a}),r+=h}catch{}}}n.sort((i,o)=>i.at-o.at);for(let i of n){if(r<=t)return;try{sd(i.path,{force:!0}),r-=i.size}catch{}}}function Hd(t,e){if(t!==null&&/^\s*\d+\s*$/.test(t))return Number(t)*1000;let n=t===null?Number.NaN:Date.parse(t);return Number.isNaN(n)?du:Math.max(0,n-e)}function ve(t){return mu.get(t.key)??0}function jd(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function Pd(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}async function Se(t,e,n,r={},i=dd){for(let o=1;;o++){let s=ve(t)-Date.now();if(s>0)await ad(s,void 0,{signal:n});let c;try{c=await fetch(e,{headers:{"User-Agent":Vi,Referer:`${t.origin}/`,...r},signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(u){if(o<fu&&!n.aborted&&jd(u))continue;throw u}if(c.status===429&&o<fu){await c.body?.cancel();let u=Hd(c.headers.get("retry-after"),Date.now());if(u>du)throw Error(`${t.name} asks to wait ${Math.ceil(u/1000)}s`);mu.set(t.key,Math.max(ve(t),Date.now()+u));continue}if(!c.ok)throw await c.body?.cancel(),Error(Pd(c)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${c.status}`);return c}}async function Iu(t,e,n,r){return t.parse(await(await Se(t,t.postsUrl(e,n),r)).text())}async function Fu(t,e,n){return t.count(await(await Se(t,t.countUrl(e),n)).text())}async function Bi(t,e,n){let[r]=t.parse(await(await Se(t,t.postUrl(e),n)).text());return r}function Gd(t){let e=gt.find((r)=>r.key==="danbooru"),n=new URLSearchParams({limit:String(2*Le),only:"md5,tag_string",tags:`md5:${t.join(",")}`});return`${e.origin}/posts.json?${n}`}function Ld(t){return new Map(Qn(t).flatMap((e)=>{let n=String(e.md5??"");return n?[[n,String(e.tag_string??"").split(/\s+/).filter(Boolean)]]:[]}))}function Nu(t,e){for(let n of t){let r=e.get(n.md5);if(r)n.tags=[...new Set([...n.tags,...r])],n.solo=r.includes("solo")}}async function Ru(t,e){let n=gt.find((i)=>i.key==="danbooru"),r=new Map;if(ve(n)>Date.now())return r;for(let i=0;i<t.length;i+=Le){let o=await(await Se(n,Gd(t.slice(i,i+Le)),e,{},md)).text();for(let[s,c]of Ld(o))r.set(s,c)}return r}async function Ou(t,e){let n=gt.find((o)=>o.key==="danbooru");if(ve(n)<=Date.now())try{let o=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(au)}),s=`${n.origin}/autocomplete.json?${o}`;return Md(await(await Se(n,s,e,{},hu)).text())}catch(o){if(e.aborted)throw o}let r=gt.find((o)=>o.key==="yande"),i=new URLSearchParams({name:t,order:"count",limit:String(au)});return vd(await(await Se(r,`${r.origin}/tag.json?${i}`,e,{},hu)).text())}async function Hu(t,e,n){let r=await Se(t,e,n,{Range:`bytes=0-${gd}`});return An(new Uint8Array(await r.arrayBuffer()))}async function ju(t,e,n,r){let i=await Se(t,e,n,{},0),o=Number(i.headers.get("content-length"))||0,s=i.body?.getReader();if(!s)return new Uint8Array(await i.arrayBuffer());let c=[],u=0;for(;;){let{done:f,value:l}=await s.read();if(f)break;c.push(l),u+=l.length,r?.(u,o)}let h=new Uint8Array(u),a=0;for(let f of c)h.set(f,a),a+=f.length;return h}var pe="_groups.toml",Pu=3,Tu=["background","foreground","cursor","selection"];function It(t,e){throw Error(`${t}: ${e}`)}function Ue(t,e,n){if(typeof n!=="string"||!ds(n))It(t,`${e} must be "#rrggbb" (lowercase), got ${JSON.stringify(n)}`);return n}function Fe(t,e,n){if(typeof n!=="string"||n.length===0)It(t,`${e} must be a non-empty string`);return n}function qn(t){return t&&typeof t==="object"?t:{}}function Ud(t,e,n){if(e===void 0)return[n.cursor,n.selectionBackground,n.background];let r=Array.isArray(e)?e:[e];if(r.length===0)It(t,"ghostty.icon_screen must not be empty");return r.map((i,o)=>Ue(t,`ghostty.icon_screen[${o}]`,i))}function Kd(t,e,n){let r=qn(e);return{iconGhost:r.icon_ghost===void 0?n.cursor:Ue(t,"ghostty.icon_ghost",r.icon_ghost),iconScreen:Ud(t,r.icon_screen,n)}}function Jd(t){return new Map([...Tu.map((e)=>[e,t[e]]),...t.ansi.map((e,n)=>[`ansi${n}`,e])])}function Wd(t,e,n){if(!Array.isArray(e)||e.length!==Pu)It(t,`meta.signature must name exactly ${Pu} palette slots`);let r=Jd(n),i=[],o=[];for(let[s,c]of e.entries()){let u=`meta.signature[${s}]`,h=Fe(t,u,c),a=r.get(h);if(a===void 0)It(t,`${u} ${JSON.stringify(c)} is not a palette slot — use ${Tu.join(", ")} or ansi0-ansi15`);i.push(h),o.push(a)}if(new Set(o).size!==o.length)It(t,"meta.signature slots must resolve to three different colors");return{names:i,colors:o}}function xd(t,e,n){if(e===void 0)return;if(!n)It(t,"meta.booru_sites renames meta.booru per site, so it needs meta.booru");if(!e||typeof e!=="object"||Array.isArray(e))It(t,'meta.booru_sites must be a table of site = "tag" or site = ["tag", ...]');let r={};for(let[i,o]of Object.entries(e)){let s=gt.find((u)=>u.key===i);if(!s)It(t,`meta.booru_sites.${i} is not a find site — use ${gt.map((u)=>u.key).join(", ")}`);let c=typeof o==="string"?[o]:Array.isArray(o)?o:void 0;if(!c||c.some((u)=>typeof u!=="string"||u===""||/\s/.test(u)))It(t,`meta.booru_sites.${i} must be one tag or a list of tags, got ${JSON.stringify(o)}`);if(c.length>1&&Number.isFinite(s.tagBudget))It(t,`meta.booru_sites.${i} takes one tag — ${s.name} searches ${s.tagBudget} tags at a time`);r[i]=c}return r}function Qd(t){let n=Bun.TOML.parse(Gu(Lu(t,pe),"utf8")).group;if(!Array.isArray(n)||n.length===0)It(pe,"needs at least one [[group]] table");return n.map((r)=>{let i=qn(r);return{name:Fe(pe,"group.name",i.name),native:i.native===void 0?void 0:Fe(pe,"group.native",i.native),lead:Fe(pe,"group.lead",i.lead)}})}function Zd(t,e,n){let r=Bun.TOML.parse(e),i=qn(r.meta),o=qn(r.colors),s=qn(r.contrast),c=o.ansi;if(!Array.isArray(c)||c.length!==16)It(t,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(c)?c.length:typeof c}`);let u=Fe(t,"meta.name",i.name);if(u!==Ad(t,".toml"))It(t,`meta.name "${u}" does not match the filename`);if(u.startsWith("-"))It(t,`meta.name "${u}" would be read as a flag by the ttheme CLI`);let h=i.role;if(h!==void 0&&h!=="default")It(t,`meta.role must be "default", got ${JSON.stringify(h)}`);let a=Fe(t,"meta.group",i.group),f=n.get(a);if(!f)It(t,`meta.group "${a}" has no [[group]] table in ${pe}`);let l=Ue(t,"colors.background",o.background),p=Ue(t,"colors.foreground",o.foreground),b=Ue(t,"colors.cursor",o.cursor),g=Ue(t,"colors.selection_background",o.selection_background),$=c.map((d,j)=>Ue(t,`colors.ansi[${j}]`,d)),y=Wd(t,i.signature,{background:l,foreground:p,cursor:b,selection:g,ansi:$}),F=i.booru===void 0?void 0:Fe(t,"meta.booru",i.booru);if(F!==void 0&&/\s/.test(F))It(t,`meta.booru must be a single booru tag, got ${JSON.stringify(F)}`);let E=xd(t,i.booru_sites,F),v=Array.isArray(s.waive)?s.waive.map(String):[];if(v.length>0&&typeof s.reason!=="string")It(t,"contrast.waive needs a contrast.reason explaining why");return{name:u,group:a,native:f.native,lead:f.lead===u,order:Number(i.order),role:h,ansiSource:Fe(t,"meta.ansi_source",i.ansi_source),...F?{booru:F}:{},...E?{booruSites:E}:{},background:l,foreground:p,cursor:b,selectionBackground:g,ansi:$,signature:y.colors,signatureSlots:y.names,ghostty:Kd(t,r.ghostty,{background:l,cursor:b,selectionBackground:g}),waive:v,waiveReason:typeof s.reason==="string"?s.reason:void 0}}function Au(t){let e=Qd(t),n=new Map(e.map((o)=>[o.name,o]));if(n.size!==e.length)It(pe,"group.name must be unique");let r=Td(t).filter((o)=>o.endsWith(".toml")&&!o.startsWith("_")).map((o)=>Zd(o,Gu(Lu(t,o),"utf8"),n)).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 e){let s=r.filter((c)=>c.group===o.name);if(s.length===0)It(pe,`group "${o.name}" has no themes`);if(!s.some((c)=>c.name===o.lead))It(pe,`group "${o.name}" lead "${o.lead}" is not one of its themes`)}return r}function Uu(t){return t.filter((e)=>e.role===void 0)}function _n(t){let e=(n,r)=>n<r?-1:n>r?1:0;return[...t].sort((n,r)=>e(n.group.toLowerCase(),r.group.toLowerCase())||e(n.name,r.name))}var qd=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],Kr=[{name:"use",args:["<palette>"],about:"paint this tab — a unique prefix works: ttheme use ho",section:"tab",shell:!0},{name:"preview",args:[],about:"browse live — focus repaints, enter keeps (this tab or default), esc restores, ? lists keys",section:"tab",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:"tab"},{name:"on",args:[],about:"wear the default palette in new tabs again",section:"tab"},{name:"off",args:[],about:"take the palette and picture off every tab — the terminal's own colors until `ttheme on`",section:"tab"},{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:"tab",shell:!0},{name:"browse",args:[],about:"pick palettes from the catalog in a live picker",section:"catalog"},{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",section:"catalog"},{name:"remove",args:["<palette...>"],about:"uninstall palettes",section:"catalog"},{name:"update",args:[],about:"refresh the catalog from the registry",section:"catalog"},{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:qd,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}];var Jr=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],xu="# ttheme begin",Qu="# ttheme end",Cn=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function Xn(t,e){let n=`${xu}
2
+ import{createRequire as ol}from"node:module";var Bf=Object.create;var{getPrototypeOf:Df,defineProperty:ws,getOwnPropertyNames:tl}=Object;var el=Object.prototype.hasOwnProperty;function nl(t){return this[t]}var rl,il,yr=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?rl??=new WeakMap:il??=new WeakMap,o=i.get(t);if(o)return o}n=t!=null?Bf(Df(t)):{};let s=e||!t||!t.__esModule?ws(n,"default",{value:t,enumerable:!0}):n;for(let c of tl(t))if(!el.call(s,c))ws(s,c,{get:nl.bind(t,c),enumerable:!0});if(r)i.set(t,s);return s};var kt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Gt=ol(import.meta.url);var qs=kt((eb,Fr)=>{var Zs=Zs||function(t){return Buffer.from(t).toString("base64")};function Ml(t){var e=this,n=Math.round,r=Math.floor,i=Array(64),o=Array(64),s=Array(64),c=Array(64),u,h,a,f,l=Array(65535),m=Array(65535),b=Array(64),d=Array(64),$=[],M=0,N=7,E=Array(64),v=Array(64),g=Array(64),P=Array(256),k=Array(2048),O,I=[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],j=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],G=[0,1,2,3,4,5,6,7,8,9,10,11],C=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],U=[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],Ft=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],K=[0,1,2,3,4,5,6,7,8,9,10,11],z=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],yt=[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 mt(p){var L=[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 J=0;J<64;J++){var A=r((L[J]*p+50)/100);if(A<1)A=1;else if(A>255)A=255;i[I[J]]=A}var Z=[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 q=0;q<64;q++){var rt=r((Z[q]*p+50)/100);if(rt<1)rt=1;else if(rt>255)rt=255;o[I[q]]=rt}var it=[1,1.387039845,1.306562965,1.175875602,1,0.785694958,0.5411961,0.275899379],St=0;for(var $t=0;$t<8;$t++)for(var y=0;y<8;y++)s[St]=1/(i[I[St]]*it[$t]*it[y]*8),c[St]=1/(o[I[St]]*it[$t]*it[y]*8),St++}function B(p,L){var J=0,A=0,Z=[];for(var q=1;q<=16;q++){for(var rt=1;rt<=p[q];rt++)Z[L[A]]=[],Z[L[A]][0]=J,Z[L[A]][1]=q,A++,J++;J*=2}return Z}function Nt(){u=B(j,G),h=B(Ft,K),a=B(C,U),f=B(z,yt)}function ot(){var p=1,L=2;for(var J=1;J<=15;J++){for(var A=p;A<L;A++)m[32767+A]=J,l[32767+A]=[],l[32767+A][1]=J,l[32767+A][0]=A;for(var Z=-(L-1);Z<=-p;Z++)m[32767+Z]=J,l[32767+Z]=[],l[32767+Z][1]=J,l[32767+Z][0]=L-1+Z;p<<=1,L<<=1}}function tt(){for(var p=0;p<256;p++)k[p]=19595*p,k[p+256>>0]=38470*p,k[p+512>>0]=7471*p+32768,k[p+768>>0]=-11059*p,k[p+1024>>0]=-21709*p,k[p+1280>>0]=32768*p+8421375,k[p+1536>>0]=-27439*p,k[p+1792>>0]=-5329*p}function X(p){var L=p[0],J=p[1]-1;while(J>=0){if(L&1<<J)M|=1<<N;if(J--,N--,N<0){if(M==255)w(255),w(0);else w(M);N=7,M=0}}}function w(p){$.push(p)}function T(p){w(p>>8&255),w(p&255)}function at(p,L){var J,A,Z,q,rt,it,St,$t,y=0,H,Q=8,vt=64;for(H=0;H<Q;++H){J=p[y],A=p[y+1],Z=p[y+2],q=p[y+3],rt=p[y+4],it=p[y+5],St=p[y+6],$t=p[y+7];var _=J+$t,D=J-$t,lt=A+St,x=A-St,st=Z+it,Ht=Z-it,Et=q+rt,Xt=q-rt,ie=_+Et,je=_-Et,Xe=lt+st,Ve=lt-st;p[y]=ie+Xe,p[y+4]=ie-Xe;var vn=(Ve+je)*0.707106781;p[y+2]=je+vn,p[y+6]=je-vn,ie=Xt+Ht,Xe=Ht+x,Ve=x+D;var Mn=(ie-Ve)*0.382683433,br=0.5411961*ie+Mn,Sn=1.306562965*Ve+Mn,In=Xe*0.707106781,Fn=D+In,Nn=D-In;p[y+5]=Nn+br,p[y+3]=Nn-br,p[y+1]=Fn+Sn,p[y+7]=Fn-Sn,y+=8}y=0;for(H=0;H<Q;++H){J=p[y],A=p[y+8],Z=p[y+16],q=p[y+24],rt=p[y+32],it=p[y+40],St=p[y+48],$t=p[y+56];var is=J+$t,$i=J-$t,os=A+St,ss=A-St,cs=Z+it,us=Z-it,hs=q+rt,zf=q-rt,Rn=is+hs,ki=is-hs,$r=os+cs,kr=os-cs;p[y]=Rn+$r,p[y+32]=Rn-$r;var as=(kr+ki)*0.707106781;p[y+16]=ki+as,p[y+48]=ki-as,Rn=zf+us,$r=us+ss,kr=ss+$i;var fs=(Rn-kr)*0.382683433,ls=0.5411961*Rn+fs,gs=1.306562965*kr+fs,ds=$r*0.707106781,ms=$i+ds,ps=$i-ds;p[y+40]=ps+ls,p[y+24]=ps-ls,p[y+8]=ms+gs,p[y+56]=ms-gs,y++}var Er;for(H=0;H<vt;++H)Er=p[H]*L[H],b[H]=Er>0?Er+0.5|0:Er-0.5|0;return b}function ft(){T(65504),T(16),w(74),w(70),w(73),w(70),w(0),w(1),w(1),w(0),T(1),T(1),w(0),w(0)}function et(p){if(!p)return;if(T(65505),p[0]===69&&p[1]===120&&p[2]===105&&p[3]===102)T(p.length+2);else T(p.length+5+2),w(69),w(120),w(105),w(102),w(0);for(var L=0;L<p.length;L++)w(p[L])}function nt(p,L){T(65472),T(17),w(8),T(L),T(p),w(3),w(1),w(17),w(0),w(2),w(17),w(1),w(3),w(17),w(1)}function V(){T(65499),T(132),w(0);for(var p=0;p<64;p++)w(i[p]);w(1);for(var L=0;L<64;L++)w(o[L])}function R(){T(65476),T(418),w(0);for(var p=0;p<16;p++)w(j[p+1]);for(var L=0;L<=11;L++)w(G[L]);w(16);for(var J=0;J<16;J++)w(C[J+1]);for(var A=0;A<=161;A++)w(U[A]);w(1);for(var Z=0;Z<16;Z++)w(Ft[Z+1]);for(var q=0;q<=11;q++)w(K[q]);w(17);for(var rt=0;rt<16;rt++)w(z[rt+1]);for(var it=0;it<=161;it++)w(yt[it])}function F(p){if(typeof p>"u"||p.constructor!==Array)return;p.forEach((L)=>{if(typeof L!=="string")return;T(65534);var J=L.length;T(J+2);var A;for(A=0;A<J;A++)w(L.charCodeAt(A))})}function bt(){T(65498),T(12),w(3),w(1),w(0),w(2),w(17),w(3),w(17),w(0),w(63),w(0)}function W(p,L,J,A,Z){var q=Z[0],rt=Z[240],it,St=16,$t=63,y=64,H=at(p,L);for(var Q=0;Q<y;++Q)d[I[Q]]=H[Q];var vt=d[0]-J;if(J=d[0],vt==0)X(A[0]);else it=32767+vt,X(A[m[it]]),X(l[it]);var _=63;for(;_>0&&d[_]==0;_--);if(_==0)return X(q),J;var D=1,lt;while(D<=_){var x=D;for(;d[D]==0&&D<=_;++D);var st=D-x;if(st>=St){lt=st>>4;for(var Ht=1;Ht<=lt;++Ht)X(rt);st=st&15}it=32767+d[D],X(Z[(st<<4)+m[it]]),X(l[it]),D++}if(_!=$t)X(q);return J}function Y(){var p=String.fromCharCode;for(var L=0;L<256;L++)P[L]=p(L)}this.encode=function(p,L){var J=new Date().getTime();if(L)Ct(L);$=[],M=0,N=7,T(65496),ft(),F(p.comments),et(p.exifBuffer),V(),nt(p.width,p.height),R(),bt();var A=0,Z=0,q=0;M=0,N=7,this.encode.displayName="_encode_";var{data:rt,width:it,height:St}=p,$t=it*4,y=it*3,H,Q=0,vt,_,D,lt,x,st,Ht,Et;while(Q<St){H=0;while(H<$t){lt=$t*Q+H,x=lt,st=-1,Ht=0;for(Et=0;Et<64;Et++){if(Ht=Et>>3,st=(Et&7)*4,x=lt+Ht*$t+st,Q+Ht>=St)x-=$t*(Q+1+Ht-St);if(H+st>=$t)x-=H+st-$t+4;vt=rt[x++],_=rt[x++],D=rt[x++],E[Et]=(k[vt]+k[_+256>>0]+k[D+512>>0]>>16)-128,v[Et]=(k[vt+768>>0]+k[_+1024>>0]+k[D+1280>>0]>>16)-128,g[Et]=(k[vt+1280>>0]+k[_+1536>>0]+k[D+1792>>0]>>16)-128}A=W(E,s,A,u,a),Z=W(v,c,Z,h,f),q=W(g,c,q,h,f),H+=32}Q+=8}if(N>=0){var Xt=[];Xt[1]=N+1,Xt[0]=(1<<N+1)-1,X(Xt)}if(T(65497),typeof Fr>"u")return new Uint8Array($);return Buffer.from($);var ie,je};function Ct(p){if(p<=0)p=1;if(p>100)p=100;if(O==p)return;var L=0;if(p<50)L=Math.floor(5000/p);else L=Math.floor(200-p*2);mt(L),O=p}function Dt(){var p=new Date().getTime();if(!t)t=50;Y(),Nt(),ot(),tt(),Ct(t);var L=new Date().getTime()-p}Dt()}if(typeof Fr<"u")Fr.exports=Qs;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].encode=Qs;function Qs(t,e){if(typeof e>"u")e=50;var n=new Ml(e),r=n.encode(t,e);return{data:r,width:t.width,height:t.height}}});var Cs=kt((nb,Oi)=>{var Ri=function(){var e=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]),n=4017,r=799,i=3406,o=2276,s=1567,c=3784,u=5793,h=2896;function a(){}function f(N,E){var v=0,g=[],P,k,O=16;while(O>0&&!N[O-1])O--;g.push({children:[],index:0});var I=g[0],j;for(P=0;P<O;P++){for(k=0;k<N[P];k++){I=g.pop(),I.children[I.index]=E[v];while(I.index>0){if(g.length===0)throw Error("Could not recreate Huffman Table");I=g.pop()}I.index++,g.push(I);while(g.length<=P)g.push(j={children:[],index:0}),I.children[I.index]=j.children,I=j;v++}if(P+1<O)g.push(j={children:[],index:0}),I.children[I.index]=j.children,I=j}return g[0].children}function l(N,E,v,g,P,k,O,I,j,G){var{precision:C,samplesPerLine:U,scanLines:Ft,mcusPerLine:K,progressive:z,maxH:yt,maxV:mt}=v,B=E,Nt=0,ot=0;function tt(){if(ot>0)return ot--,Nt>>ot&1;if(Nt=N[E++],Nt==255){var y=N[E++];if(y)throw Error("unexpected marker: "+(Nt<<8|y).toString(16))}return ot=7,Nt>>>7}function X(y){var H=y,Q;while((Q=tt())!==null){if(H=H[Q],typeof H==="number")return H;if(typeof H!=="object")throw Error("invalid huffman sequence")}return null}function w(y){var H=0;while(y>0){var Q=tt();if(Q===null)return;H=H<<1|Q,y--}return H}function T(y){var H=w(y);if(H>=1<<y-1)return H;return H+(-1<<y)+1}function at(y,H){var Q=X(y.huffmanTableDC),vt=Q===0?0:T(Q);H[0]=y.pred+=vt;var _=1;while(_<64){var D=X(y.huffmanTableAC),lt=D&15,x=D>>4;if(lt===0){if(x<15)break;_+=16;continue}_+=x;var st=e[_];H[st]=T(lt),_++}}function ft(y,H){var Q=X(y.huffmanTableDC),vt=Q===0?0:T(Q)<<j;H[0]=y.pred+=vt}function et(y,H){H[0]|=tt()<<j}var nt=0;function V(y,H){if(nt>0){nt--;return}var Q=k,vt=O;while(Q<=vt){var _=X(y.huffmanTableAC),D=_&15,lt=_>>4;if(D===0){if(lt<15){nt=w(lt)+(1<<lt)-1;break}Q+=16;continue}Q+=lt;var x=e[Q];H[x]=T(D)*(1<<j),Q++}}var R=0,F;function bt(y,H){var Q=k,vt=O,_=0;while(Q<=vt){var D=e[Q],lt=H[D]<0?-1:1;switch(R){case 0:var x=X(y.huffmanTableAC),st=x&15,_=x>>4;if(st===0)if(_<15)nt=w(_)+(1<<_),R=4;else _=16,R=1;else{if(st!==1)throw Error("invalid ACn encoding");F=T(st),R=_?2:3}continue;case 1:case 2:if(H[D])H[D]+=(tt()<<j)*lt;else if(_--,_===0)R=R==2?3:0;break;case 3:if(H[D])H[D]+=(tt()<<j)*lt;else H[D]=F<<j,R=0;break;case 4:if(H[D])H[D]+=(tt()<<j)*lt;break}Q++}if(R===4){if(nt--,nt===0)R=0}}function W(y,H,Q,vt,_){var D=Q/K|0,lt=Q%K,x=D*y.v+vt,st=lt*y.h+_;if(y.blocks[x]===void 0&&G.tolerantDecoding)return;H(y,y.blocks[x][st])}function Y(y,H,Q){var vt=Q/y.blocksPerLine|0,_=Q%y.blocksPerLine;if(y.blocks[vt]===void 0&&G.tolerantDecoding)return;H(y,y.blocks[vt][_])}var Ct=g.length,Dt,p,L,J,A,Z;if(z)if(k===0)Z=I===0?ft:et;else Z=I===0?V:bt;else Z=at;var q=0,rt,it;if(Ct==1)it=g[0].blocksPerLine*g[0].blocksPerColumn;else it=K*v.mcusPerColumn;if(!P)P=it;var St,$t;while(q<it){for(p=0;p<Ct;p++)g[p].pred=0;if(nt=0,Ct==1){Dt=g[0];for(A=0;A<P;A++)Y(Dt,Z,q),q++}else for(A=0;A<P;A++){for(p=0;p<Ct;p++){Dt=g[p],St=Dt.h,$t=Dt.v;for(L=0;L<$t;L++)for(J=0;J<St;J++)W(Dt,Z,q,L,J)}if(q++,q===it)break}if(q===it)do{if(N[E]===255){if(N[E+1]!==0)break}E+=1}while(E<N.length-2);if(ot=0,rt=N[E]<<8|N[E+1],rt<65280)throw Error("marker was not found");if(rt>=65488&&rt<=65495)E+=2;else break}return E-B}function m(N,E){var v=[],g=E.blocksPerLine,P=E.blocksPerColumn,k=g<<3,O=new Int32Array(64),I=new Uint8Array(64);function j(B,Nt,ot){var tt=E.quantizationTable,X,w,T,at,ft,et,nt,V,R,F=ot,bt;for(bt=0;bt<64;bt++)F[bt]=B[bt]*tt[bt];for(bt=0;bt<8;++bt){var W=8*bt;if(F[1+W]==0&&F[2+W]==0&&F[3+W]==0&&F[4+W]==0&&F[5+W]==0&&F[6+W]==0&&F[7+W]==0){R=u*F[0+W]+512>>10,F[0+W]=R,F[1+W]=R,F[2+W]=R,F[3+W]=R,F[4+W]=R,F[5+W]=R,F[6+W]=R,F[7+W]=R;continue}X=u*F[0+W]+128>>8,w=u*F[4+W]+128>>8,T=F[2+W],at=F[6+W],ft=h*(F[1+W]-F[7+W])+128>>8,V=h*(F[1+W]+F[7+W])+128>>8,et=F[3+W]<<4,nt=F[5+W]<<4,R=X-w+1>>1,X=X+w+1>>1,w=R,R=T*c+at*s+128>>8,T=T*s-at*c+128>>8,at=R,R=ft-nt+1>>1,ft=ft+nt+1>>1,nt=R,R=V+et+1>>1,et=V-et+1>>1,V=R,R=X-at+1>>1,X=X+at+1>>1,at=R,R=w-T+1>>1,w=w+T+1>>1,T=R,R=ft*o+V*i+2048>>12,ft=ft*i-V*o+2048>>12,V=R,R=et*r+nt*n+2048>>12,et=et*n-nt*r+2048>>12,nt=R,F[0+W]=X+V,F[7+W]=X-V,F[1+W]=w+nt,F[6+W]=w-nt,F[2+W]=T+et,F[5+W]=T-et,F[3+W]=at+ft,F[4+W]=at-ft}for(bt=0;bt<8;++bt){var Y=bt;if(F[8+Y]==0&&F[16+Y]==0&&F[24+Y]==0&&F[32+Y]==0&&F[40+Y]==0&&F[48+Y]==0&&F[56+Y]==0){R=u*ot[bt+0]+8192>>14,F[0+Y]=R,F[8+Y]=R,F[16+Y]=R,F[24+Y]=R,F[32+Y]=R,F[40+Y]=R,F[48+Y]=R,F[56+Y]=R;continue}X=u*F[0+Y]+2048>>12,w=u*F[32+Y]+2048>>12,T=F[16+Y],at=F[48+Y],ft=h*(F[8+Y]-F[56+Y])+2048>>12,V=h*(F[8+Y]+F[56+Y])+2048>>12,et=F[24+Y],nt=F[40+Y],R=X-w+1>>1,X=X+w+1>>1,w=R,R=T*c+at*s+2048>>12,T=T*s-at*c+2048>>12,at=R,R=ft-nt+1>>1,ft=ft+nt+1>>1,nt=R,R=V+et+1>>1,et=V-et+1>>1,V=R,R=X-at+1>>1,X=X+at+1>>1,at=R,R=w-T+1>>1,w=w+T+1>>1,T=R,R=ft*o+V*i+2048>>12,ft=ft*i-V*o+2048>>12,V=R,R=et*r+nt*n+2048>>12,et=et*n-nt*r+2048>>12,nt=R,F[0+Y]=X+V,F[56+Y]=X-V,F[8+Y]=w+nt,F[48+Y]=w-nt,F[16+Y]=T+et,F[40+Y]=T-et,F[24+Y]=at+ft,F[32+Y]=at-ft}for(bt=0;bt<64;++bt){var Ct=128+(F[bt]+8>>4);Nt[bt]=Ct<0?0:Ct>255?255:Ct}}M(k*P*8);var G,C;for(var U=0;U<P;U++){var Ft=U<<3;for(G=0;G<8;G++)v.push(new Uint8Array(k));for(var K=0;K<g;K++){j(E.blocks[U][K],I,O);var z=0,yt=K<<3;for(C=0;C<8;C++){var mt=v[Ft+C];for(G=0;G<8;G++)mt[yt+G]=I[z++]}}}return v}function b(N){return N<0?0:N>255?255:N}a.prototype={load:function(E){var v=new XMLHttpRequest;v.open("GET",E,!0),v.responseType="arraybuffer",v.onload=function(){var g=new Uint8Array(v.response||v.mozResponseArrayBuffer);if(this.parse(g),this.onload)this.onload()}.bind(this),v.send(null)},parse:function(E){var v=this.opts.maxResolutionInMP*1000*1000,g=0,P=E.length;function k(){var x=E[g]<<8|E[g+1];return g+=2,x}function O(){var x=k(),st=E.subarray(g,g+x-2);return g+=st.length,st}function I(x){var st=1,Ht=1,Et,Xt;for(Xt in x.components)if(x.components.hasOwnProperty(Xt)){if(Et=x.components[Xt],st<Et.h)st=Et.h;if(Ht<Et.v)Ht=Et.v}var ie=Math.ceil(x.samplesPerLine/8/st),je=Math.ceil(x.scanLines/8/Ht);for(Xt in x.components)if(x.components.hasOwnProperty(Xt)){Et=x.components[Xt];var Xe=Math.ceil(Math.ceil(x.samplesPerLine/8)*Et.h/st),Ve=Math.ceil(Math.ceil(x.scanLines/8)*Et.v/Ht),vn=ie*Et.h,Mn=je*Et.v,br=Mn*vn,Sn=[];M(br*256);for(var In=0;In<Mn;In++){var Fn=[];for(var Nn=0;Nn<vn;Nn++)Fn.push(new Int32Array(64));Sn.push(Fn)}Et.blocksPerLine=Xe,Et.blocksPerColumn=Ve,Et.blocks=Sn}x.maxH=st,x.maxV=Ht,x.mcusPerLine=ie,x.mcusPerColumn=je}var j=null,G=null,C=null,U,Ft,K=[],z=[],yt=[],mt=[],B=k(),Nt=-1;if(this.comments=[],B!=65496)throw Error("SOI not found");B=k();while(B!=65497){var ot,tt,X;switch(B){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 w=O();if(B===65534){var T=String.fromCharCode.apply(null,w);this.comments.push(T)}if(B===65504){if(w[0]===74&&w[1]===70&&w[2]===73&&w[3]===70&&w[4]===0)j={version:{major:w[5],minor:w[6]},densityUnits:w[7],xDensity:w[8]<<8|w[9],yDensity:w[10]<<8|w[11],thumbWidth:w[12],thumbHeight:w[13],thumbData:w.subarray(14,14+3*w[12]*w[13])}}if(B===65505){if(w[0]===69&&w[1]===120&&w[2]===105&&w[3]===102&&w[4]===0)this.exifBuffer=w.subarray(5,w.length)}if(B===65518){if(w[0]===65&&w[1]===100&&w[2]===111&&w[3]===98&&w[4]===101&&w[5]===0)G={version:w[6],flags0:w[7]<<8|w[8],flags1:w[9]<<8|w[10],transformCode:w[11]}}break;case 65499:var at=k(),ft=at+g-2;while(g<ft){var et=E[g++];M(256);var nt=new Int32Array(64);if(et>>4===0)for(tt=0;tt<64;tt++){var V=e[tt];nt[V]=E[g++]}else if(et>>4===1)for(tt=0;tt<64;tt++){var V=e[tt];nt[V]=k()}else throw Error("DQT: invalid table spec");K[et&15]=nt}break;case 65472:case 65473:case 65474:k(),U={},U.extended=B===65473,U.progressive=B===65474,U.precision=E[g++],U.scanLines=k(),U.samplesPerLine=k(),U.components={},U.componentsOrder=[];var R=U.scanLines*U.samplesPerLine;if(R>v){var F=Math.ceil((R-v)/1e6);throw Error(`maxResolutionInMP limit exceeded by ${F}MP`)}var bt=E[g++],W,Y=0,Ct=0;for(ot=0;ot<bt;ot++){W=E[g];var Dt=E[g+1]>>4,p=E[g+1]&15,L=E[g+2];if(Dt<=0||p<=0)throw Error("Invalid sampling factor, expected values above 0");U.componentsOrder.push(W),U.components[W]={h:Dt,v:p,quantizationIdx:L},g+=3}I(U),z.push(U);break;case 65476:var J=k();for(ot=2;ot<J;){var A=E[g++],Z=new Uint8Array(16),q=0;for(tt=0;tt<16;tt++,g++)q+=Z[tt]=E[g];M(16+q);var rt=new Uint8Array(q);for(tt=0;tt<q;tt++,g++)rt[tt]=E[g];ot+=17+q,(A>>4===0?mt:yt)[A&15]=f(Z,rt)}break;case 65501:k(),Ft=k();break;case 65500:k(),k();break;case 65498:var it=k(),St=E[g++],$t=[],y;for(ot=0;ot<St;ot++){y=U.components[E[g++]];var H=E[g++];y.huffmanTableDC=mt[H>>4],y.huffmanTableAC=yt[H&15],$t.push(y)}var Q=E[g++],vt=E[g++],_=E[g++],D=l(E,g,U,$t,Ft,Q,vt,_>>4,_&15,this.opts);g+=D;break;case 65535:if(E[g]!==255)g--;break;default:if(E[g-3]==255&&E[g-2]>=192&&E[g-2]<=254){g-=3;break}else if(B===224||B==225){if(Nt!==-1)throw Error(`first unknown JPEG marker at offset ${Nt.toString(16)}, second unknown JPEG marker ${B.toString(16)} at offset ${(g-1).toString(16)}`);Nt=g-1;let x=k();if(E[g+x-2]===255){g+=x-2;break}}throw Error("unknown JPEG marker "+B.toString(16))}B=k()}if(z.length!=1)throw Error("only single frame JPEGs supported");for(var ot=0;ot<z.length;ot++){var lt=z[ot].components;for(var tt in lt)lt[tt].quantizationTable=K[lt[tt].quantizationIdx],delete lt[tt].quantizationIdx}this.width=U.samplesPerLine,this.height=U.scanLines,this.jfif=j,this.adobe=G,this.components=[];for(var ot=0;ot<U.componentsOrder.length;ot++){var y=U.components[U.componentsOrder[ot]];this.components.push({lines:m(U,y),scaleX:y.h/U.maxH,scaleY:y.v/U.maxV})}},getData:function(E,v){var g=this.width/E,P=this.height/v,k,O,I,j,G,C,U,Ft,K,z,yt=0,mt,B,Nt,ot,tt,X,w,T,at,ft,et,nt=E*v*this.components.length;M(nt);var V=new Uint8Array(nt);switch(this.components.length){case 1:k=this.components[0];for(z=0;z<v;z++){G=k.lines[0|z*k.scaleY*P];for(K=0;K<E;K++)mt=G[0|K*k.scaleX*g],V[yt++]=mt}break;case 2:k=this.components[0],O=this.components[1];for(z=0;z<v;z++){G=k.lines[0|z*k.scaleY*P],C=O.lines[0|z*O.scaleY*P];for(K=0;K<E;K++)mt=G[0|K*k.scaleX*g],V[yt++]=mt,mt=C[0|K*O.scaleX*g],V[yt++]=mt}break;case 3:if(et=!0,this.adobe&&this.adobe.transformCode)et=!0;else if(typeof this.opts.colorTransform<"u")et=!!this.opts.colorTransform;k=this.components[0],O=this.components[1],I=this.components[2];for(z=0;z<v;z++){G=k.lines[0|z*k.scaleY*P],C=O.lines[0|z*O.scaleY*P],U=I.lines[0|z*I.scaleY*P];for(K=0;K<E;K++){if(!et)T=G[0|K*k.scaleX*g],at=C[0|K*O.scaleX*g],ft=U[0|K*I.scaleX*g];else mt=G[0|K*k.scaleX*g],B=C[0|K*O.scaleX*g],Nt=U[0|K*I.scaleX*g],T=b(mt+1.402*(Nt-128)),at=b(mt-0.3441363*(B-128)-0.71413636*(Nt-128)),ft=b(mt+1.772*(B-128));V[yt++]=T,V[yt++]=at,V[yt++]=ft}}break;case 4:if(!this.adobe)throw Error("Unsupported color mode (4 components)");if(et=!1,this.adobe&&this.adobe.transformCode)et=!0;else if(typeof this.opts.colorTransform<"u")et=!!this.opts.colorTransform;k=this.components[0],O=this.components[1],I=this.components[2],j=this.components[3];for(z=0;z<v;z++){G=k.lines[0|z*k.scaleY*P],C=O.lines[0|z*O.scaleY*P],U=I.lines[0|z*I.scaleY*P],Ft=j.lines[0|z*j.scaleY*P];for(K=0;K<E;K++){if(!et)tt=G[0|K*k.scaleX*g],X=C[0|K*O.scaleX*g],w=U[0|K*I.scaleX*g],ot=Ft[0|K*j.scaleX*g];else mt=G[0|K*k.scaleX*g],B=C[0|K*O.scaleX*g],Nt=U[0|K*I.scaleX*g],ot=Ft[0|K*j.scaleX*g],tt=255-b(mt+1.402*(Nt-128)),X=255-b(mt-0.3441363*(B-128)-0.71413636*(Nt-128)),w=255-b(mt+1.772*(B-128));V[yt++]=255-tt,V[yt++]=255-X,V[yt++]=255-w,V[yt++]=255-ot}}break;default:throw Error("Unsupported color mode")}return V},copyToImageData:function(E,v){var{width:g,height:P,data:k}=E,O=this.getData(g,P),I=0,j=0,G,C,U,Ft,K,z,yt,mt,B;switch(this.components.length){case 1:for(C=0;C<P;C++)for(G=0;G<g;G++)if(U=O[I++],k[j++]=U,k[j++]=U,k[j++]=U,v)k[j++]=255;break;case 3:for(C=0;C<P;C++)for(G=0;G<g;G++)if(yt=O[I++],mt=O[I++],B=O[I++],k[j++]=yt,k[j++]=mt,k[j++]=B,v)k[j++]=255;break;case 4:for(C=0;C<P;C++)for(G=0;G<g;G++)if(K=O[I++],z=O[I++],U=O[I++],Ft=O[I++],yt=255-b(K*(1-Ft/255)+Ft),mt=255-b(z*(1-Ft/255)+Ft),B=255-b(U*(1-Ft/255)+Ft),k[j++]=yt,k[j++]=mt,k[j++]=B,v)k[j++]=255;break;default:throw Error("Unsupported color mode")}}};var d=0,$=0;function M(N=0){var E=d+N;if(E>$){var v=Math.ceil((E-$)/1024/1024);throw Error(`maxMemoryUsageInMB limit exceeded by at least ${v}MB`)}d=E}return a.resetMaxMemoryUsage=function(N){d=0,$=N},a.getBytesAllocated=function(){return d},a.requestMemoryAllocation=M,a}();if(typeof Oi<"u")Oi.exports=_s;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].decode=_s;function _s(t,e={}){var n={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512},r={...n,...e},i=new Uint8Array(t),o=new Ri;o.opts=r,Ri.resetMaxMemoryUsage(r.maxMemoryUsageInMB*1024*1024),o.parse(i);var s=r.formatAsRGBA?4:3,c=o.width*o.height*s;try{Ri.requestMemoryAllocation(c);var u={width:o.width,height:o.height,exifBuffer:o.exifBuffer,data:r.useTArray?new Uint8Array(c):Buffer.alloc(c)};if(o.comments.length>0)u.comments=o.comments}catch(h){if(h instanceof RangeError)throw Error("Could not allocate enough memory for the image. Required: "+c);if(h instanceof ReferenceError){if(h.message==="Buffer is not defined")throw Error("Buffer is not globally defined in this environment. Consider setting useTArray to true")}throw h}return o.copyToImageData(u,r.formatAsRGBA),u}});var Vs=kt((rb,Xs)=>{var Sl=qs(),Il=Cs();Xs.exports={encode:Sl,decode:Il}});var Hi=kt((ib,zs)=>{var Fl=Gt("util"),Ys=Gt("stream"),ee=zs.exports=function(){Ys.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Fl.inherits(ee,Ys);ee.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){if(this._process(),this._paused&&this._reads&&this._reads.length>0)this._paused=!1,this.emit("drain")}.bind(this))};ee.prototype.write=function(t,e){if(!this.writable)return this.emit("error",Error("Stream not writable")),!1;let n;if(Buffer.isBuffer(t))n=t;else n=Buffer.from(t,e||this._encoding);if(this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0)this._paused=!0;return this.writable&&!this._paused};ee.prototype.end=function(t,e){if(t)this.write(t,e);if(this.writable=!1,!this._buffers)return;if(this._buffers.length===0)this._end();else this._buffers.push(null),this._process()};ee.prototype.destroySoon=ee.prototype.end;ee.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};ee.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};ee.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];if(e.length>t.length)this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length));else this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e)};ee.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);while(e<t.length){let i=this._buffers[n++],o=Math.min(i.length,t.length-e);if(i.copy(r,e,0,o),e+=o,o!==i.length)this._buffers[--n]=i.slice(o)}if(n>0)this._buffers.splice(0,n);this._buffered-=t.length,t.func.call(this,r)};ee.prototype._process=function(){try{while(this._buffered>0&&this._reads&&this._reads.length>0){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}if(this._buffers&&!this.writable)this._end()}catch(t){this.emit("error",t)}}});var ji=kt((Nl)=>{var ye=[{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]}];Nl.getImagePasses=function(t,e){let n=[],r=t%8,i=e%8,o=(t-r)/8,s=(e-i)/8;for(let c=0;c<ye.length;c++){let u=ye[c],h=o*u.x.length,a=s*u.y.length;for(let f=0;f<u.x.length;f++)if(u.x[f]<r)h++;else break;for(let f=0;f<u.y.length;f++)if(u.y[f]<i)a++;else break;if(h>0&&a>0)n.push({width:h,height:a,index:c})}return n};Nl.getInterlaceIterator=function(t){return function(e,n,r){let i=e%ye[r].x.length,o=(e-i)/ye[r].x.length*8+ye[r].x[i],s=n%ye[r].y.length,c=(n-s)/ye[r].y.length*8+ye[r].y[s];return o*4+c*t*4}}});var Pi=kt((sb,Bs)=>{Bs.exports=function(e,n,r){let i=e+n-r,o=Math.abs(i-e),s=Math.abs(i-n),c=Math.abs(i-r);if(o<=s&&o<=c)return e;if(s<=c)return n;return r}});var Gi=kt((cb,tc)=>{var Hl=ji(),jl=Pi();function Ds(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var Be=tc.exports=function(t,e){let{width:n,height:r,interlace:i,bpp:o,depth:s}=t;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],i){let c=Hl.getImagePasses(n,r);for(let u=0;u<c.length;u++)this._images.push({byteWidth:Ds(c[u].width,o,s),height:c[u].height,lineIndex:0})}else this._images.push({byteWidth:Ds(n,o,s),height:r,lineIndex:0});if(s===8)this._xComparison=o;else if(s===16)this._xComparison=o*2;else this._xComparison=1};Be.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Be.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,i=r-1;for(let o=0;o<n;o++){let s=t[1+o],c=o>i?e[o-r]:0;e[o]=s+c}};Be.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let i=0;i<n;i++){let o=t[1+i],s=r?r[i]:0;e[i]=o+s}};Be.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<n;s++){let c=t[1+s],u=o?o[s]:0,h=s>i?e[s-r]:0,a=Math.floor((h+u)/2);e[s]=c+a}};Be.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<n;s++){let c=t[1+s],u=o?o[s]:0,h=s>i?e[s-r]:0,a=s>i&&o?o[s-r]:0,f=jl(h,u,a);e[s]=c+f}};Be.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],i=r.byteWidth;if(e===0)n=t.slice(1,i+1);else switch(n=Buffer.alloc(i),e){case 1:this._unFilterType1(t,n,i);break;case 2:this._unFilterType2(t,n,i);break;case 3:this._unFilterType3(t,n,i);break;case 4:this._unFilterType4(t,n,i);break;default:throw Error("Unrecognised filter type - "+e)}if(this.write(n),r.lineIndex++,r.lineIndex>=r.height)this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex];else this._lastLine=n;if(r)this.read(r.byteWidth+1,this._reverseFilterLine.bind(this));else this._lastLine=null,this.complete()}});var rc=kt((ub,nc)=>{var Pl=Gt("util"),ec=Hi(),Gl=Gi(),Ll=nc.exports=function(t){ec.call(this);let e=[],n=this;this._filter=new Gl(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};Pl.inherits(Ll,ec)});var De=kt((hb,ic)=>{ic.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 Ai=kt((ab,oc)=>{var Li=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)if(e&1)e=3988292384^e>>>1;else e=e>>>1;Li[t]=e}})();var Ti=oc.exports=function(){this._crc=-1};Ti.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Li[(this._crc^t[e])&255]^this._crc>>>8;return!0};Ti.prototype.crc32=function(){return this._crc^-1};Ti.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Li[(e^t[n])&255]^e>>>8;return e^-1}});var Ui=kt((fb,sc)=>{var Rt=De(),Tl=Ai(),Ot=sc.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[Rt.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Rt.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Rt.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Rt.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Rt.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Rt.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};Ot.prototype.start=function(){this.read(Rt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Ot.prototype._parseSignature=function(t){let e=Rt.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};Ot.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let o=4;o<8;o++)r+=String.fromCharCode(t[o]);let i=Boolean(t[4]&32);if(!this._hasIHDR&&n!==Rt.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new Tl,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!i){this.error(Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};Ot.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Ot.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Ot.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(Error("Crc error - "+e+" - "+n));return}if(!this._hasIEND)this.read(8,this._parseChunkBegin.bind(this))};Ot.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};Ot.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],i=t[9],o=t[10],s=t[11],c=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(Error("Unsupported bit depth "+r));return}if(!(i in Rt.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(c!==0&&c!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let u=Rt.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:Boolean(c),palette:Boolean(i&Rt.COLORTYPE_PALETTE),color:Boolean(i&Rt.COLORTYPE_COLOR),alpha:Boolean(i&Rt.COLORTYPE_ALPHA),bpp:u,colorType:i}),this._handleChunkEnd()};Ot.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};Ot.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};Ot.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};Ot.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===Rt.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}if(this._colorType===Rt.COLORTYPE_GRAYSCALE)this.transColor([t.readUInt16BE(0)]);if(this._colorType===Rt.COLORTYPE_COLOR)this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]);this._handleChunkEnd()};Ot.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};Ot.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/Rt.GAMMA_DIVISION),this._handleChunkEnd()};Ot.prototype._handleIDAT=function(t){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-t,this._parseIDAT.bind(this,t))};Ot.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===Rt.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(e);let n=t-e.length;if(n>0)this._handleIDAT(n);else this._handleChunkEnd()};Ot.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};Ot.prototype._parseIEND=function(t){if(this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var Ki=kt((Wl)=>{var cc=ji(),Al=[function(){},function(t,e,n,r){if(r===e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],Ul=[function(){},function(t,e,n,r){let i=e[0];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function Kl(t,e){let n=[],r=0;function i(){if(r===t.length)throw Error("Ran out of data");let o=t[r];r++;let s,c,u,h,a,f,l,m;switch(e){default:throw Error("unrecognised depth");case 16:l=t[r],r++,n.push((o<<8)+l);break;case 4:l=o&15,m=o>>4,n.push(m,l);break;case 2:a=o&3,f=o>>2&3,l=o>>4&3,m=o>>6&3,n.push(m,l,f,a);break;case 1:s=o&1,c=o>>1&1,u=o>>2&1,h=o>>3&1,a=o>>4&1,f=o>>5&1,l=o>>6&1,m=o>>7&1,n.push(m,l,f,a,h,u,c,s);break}}return{get:function(o){while(n.length<o)i();let s=n.slice(0,o);return n=n.slice(o),s},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw Error("extra data found")}}}function Jl(t,e,n,r,i,o){let{width:s,height:c,index:u}=t;for(let h=0;h<c;h++)for(let a=0;a<s;a++){let f=n(a,h,u);Al[r](e,i,f,o),o+=r}return o}function xl(t,e,n,r,i,o){let{width:s,height:c,index:u}=t;for(let h=0;h<c;h++){for(let a=0;a<s;a++){let f=i.get(r),l=n(a,h,u);Ul[r](e,f,l,o)}i.resetAfterLine()}}Wl.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:o,interlace:s}=e,c;if(i!==8)c=Kl(t,i);let u;if(i<=8)u=Buffer.alloc(n*r*4);else u=new Uint16Array(n*r*4);let h=Math.pow(2,i)-1,a=0,f,l;if(s)f=cc.getImagePasses(n,r),l=cc.getInterlaceIterator(n,r);else{let m=0;l=function(){let b=m;return m+=4,b},f=[{width:n,height:r}]}for(let m=0;m<f.length;m++)if(i===8)a=Jl(f[m],u,l,o,t,a);else xl(f[m],u,l,o,c,h);if(i===8){if(a!==t.length)throw Error("extra data found")}else c.end();return u}});var Ji=kt((gb,uc)=>{function Zl(t,e,n,r,i){let o=0;for(let s=0;s<r;s++)for(let c=0;c<n;c++){let u=i[t[o]];if(!u)throw Error("index "+t[o]+" not in palette");for(let h=0;h<4;h++)e[o+h]=u[h];o+=4}}function ql(t,e,n,r,i){let o=0;for(let s=0;s<r;s++)for(let c=0;c<n;c++){let u=!1;if(i.length===1){if(i[0]===t[o])u=!0}else if(i[0]===t[o]&&i[1]===t[o+1]&&i[2]===t[o+2])u=!0;if(u)for(let h=0;h<4;h++)e[o+h]=0;o+=4}}function _l(t,e,n,r,i){let o=255,s=Math.pow(2,i)-1,c=0;for(let u=0;u<r;u++)for(let h=0;h<n;h++){for(let a=0;a<4;a++)e[c+a]=Math.floor(t[c+a]*o/s+0.5);c+=4}}uc.exports=function(t,e,n=!1){let{depth:r,width:i,height:o,colorType:s,transColor:c,palette:u}=e,h=t;if(s===3)Zl(t,h,i,o,u);else{if(c)ql(t,h,i,o,c);if(r!==8&&!n){if(r===16)h=Buffer.alloc(i*o*4);_l(t,h,i,o,r)}}return h}});var fc=kt((db,ac)=>{var Cl=Gt("util"),xi=Gt("zlib"),hc=Hi(),Xl=rc(),Vl=Ui(),Yl=Ki(),zl=Ji(),oe=ac.exports=function(t){hc.call(this),this._parser=new Vl(t,{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=t,this.writable=!0,this._parser.start()};Cl.inherits(oe,hc);oe.prototype._handleError=function(t){if(this.emit("error",t),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};oe.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=xi.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 n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,xi.Z_MIN_CHUNK);this._inflate=xi.createInflate({chunkSize:r});let i=n,o=this.emit.bind(this,"error");this._inflate.on("error",function(c){if(!i)return;o(c)}),this._filter.on("complete",this._complete.bind(this));let s=this._filter.write.bind(this._filter);this._inflate.on("data",function(c){if(!i)return;if(c.length>i)c=c.slice(0,i);i-=c.length,s(c)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};oe.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new Xl(this._bitmapInfo)};oe.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};oe.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};oe.prototype._simpleTransparency=function(){this._metaData.alpha=!0};oe.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};oe.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};oe.prototype._complete=function(t){if(this.errord)return;let e;try{let n=Yl.dataToBitMap(t,this._bitmapInfo);e=zl(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var gc=kt((mb,lc)=>{var Vt=De();lc.exports=function(t,e,n,r){let i=[Vt.COLORTYPE_COLOR_ALPHA,Vt.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let b=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&&b)return t}let o=r.bitDepth!==16?t:new Uint16Array(t.buffer),s=255,c=Vt.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(c===4&&!r.inputHasAlpha)c=3;let u=Vt.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)s=65535,u*=2;let h=Buffer.alloc(e*n*u),a=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 m(){let b,d,$,M=s;switch(r.inputColorType){case Vt.COLORTYPE_COLOR_ALPHA:M=o[a+3],b=o[a],d=o[a+1],$=o[a+2];break;case Vt.COLORTYPE_COLOR:b=o[a],d=o[a+1],$=o[a+2];break;case Vt.COLORTYPE_ALPHA:M=o[a+1],b=o[a],d=b,$=b;break;case Vt.COLORTYPE_GRAYSCALE:b=o[a],d=b,$=b;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)M/=s,b=Math.min(Math.max(Math.round((1-M)*l.red+M*b),0),s),d=Math.min(Math.max(Math.round((1-M)*l.green+M*d),0),s),$=Math.min(Math.max(Math.round((1-M)*l.blue+M*$),0),s)}return{red:b,green:d,blue:$,alpha:M}}for(let b=0;b<n;b++)for(let d=0;d<e;d++){let $=m(o,a);switch(r.colorType){case Vt.COLORTYPE_COLOR_ALPHA:case Vt.COLORTYPE_COLOR:if(r.bitDepth===8){if(h[f]=$.red,h[f+1]=$.green,h[f+2]=$.blue,i)h[f+3]=$.alpha}else if(h.writeUInt16BE($.red,f),h.writeUInt16BE($.green,f+2),h.writeUInt16BE($.blue,f+4),i)h.writeUInt16BE($.alpha,f+6);break;case Vt.COLORTYPE_ALPHA:case Vt.COLORTYPE_GRAYSCALE:{let M=($.red+$.green+$.blue)/3;if(r.bitDepth===8){if(h[f]=M,i)h[f+1]=$.alpha}else if(h.writeUInt16BE(M,f),i)h.writeUInt16BE($.alpha,f+2);break}default:throw Error("unrecognised color Type "+r.colorType)}a+=c,f+=u}return h}});var pc=kt((pb,mc)=>{var dc=Pi();function Bl(t,e,n,r,i){for(let o=0;o<n;o++)r[i+o]=t[e+o]}function Dl(t,e,n){let r=0,i=e+n;for(let o=e;o<i;o++)r+=Math.abs(t[o]);return r}function tg(t,e,n,r,i,o){for(let s=0;s<n;s++){let c=s>=o?t[e+s-o]:0,u=t[e+s]-c;r[i+s]=u}}function eg(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,c=t[e+o]-s;i+=Math.abs(c)}return i}function ng(t,e,n,r,i){for(let o=0;o<n;o++){let s=e>0?t[e+o-n]:0,c=t[e+o]-s;r[i+o]=c}}function rg(t,e,n){let r=0,i=e+n;for(let o=e;o<i;o++){let s=e>0?t[o-n]:0,c=t[o]-s;r+=Math.abs(c)}return r}function ig(t,e,n,r,i,o){for(let s=0;s<n;s++){let c=s>=o?t[e+s-o]:0,u=e>0?t[e+s-n]:0,h=t[e+s]-(c+u>>1);r[i+s]=h}}function og(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,c=e>0?t[e+o-n]:0,u=t[e+o]-(s+c>>1);i+=Math.abs(u)}return i}function sg(t,e,n,r,i,o){for(let s=0;s<n;s++){let c=s>=o?t[e+s-o]:0,u=e>0?t[e+s-n]:0,h=e>0&&s>=o?t[e+s-(n+o)]:0,a=t[e+s]-dc(c,u,h);r[i+s]=a}}function cg(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,c=e>0?t[e+o-n]:0,u=e>0&&o>=r?t[e+o-(n+r)]:0,h=t[e+o]-dc(s,c,u);i+=Math.abs(h)}return i}var ug={0:Bl,1:tg,2:ng,3:ig,4:sg},hg={0:Dl,1:eg,2:rg,3:og,4:cg};mc.exports=function(t,e,n,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=e*i,c=0,u=0,h=Buffer.alloc((s+1)*n),a=o[0];for(let f=0;f<n;f++){if(o.length>1){let l=1/0;for(let m=0;m<o.length;m++){let b=hg[o[m]](t,u,s,i);if(b<l)a=o[m],l=b}}h[c]=a,c++,ug[a](t,u,s,h,c,i),c+=s,u+=s}return h}});var Wi=kt((wb,wc)=>{var Lt=De(),ag=Ai(),fg=gc(),lg=pc(),gg=Gt("zlib"),ve=wc.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32768,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||gg.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType==="number"?t.colorType:Lt.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType==="number"?t.inputColorType:Lt.COLORTYPE_COLOR_ALPHA,[Lt.COLORTYPE_GRAYSCALE,Lt.COLORTYPE_COLOR,Lt.COLORTYPE_COLOR_ALPHA,Lt.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw Error("option color type:"+t.colorType+" is not supported at present");if([Lt.COLORTYPE_GRAYSCALE,Lt.COLORTYPE_COLOR,Lt.COLORTYPE_COLOR_ALPHA,Lt.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw Error("option bit depth:"+t.bitDepth+" is not supported at present")};ve.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};ve.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};ve.prototype.filterData=function(t,e,n){let r=fg(t,e,n,this._options),i=Lt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return lg(r,e,n,this._options,i)};ve.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);if(r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e)e.copy(r,8);return r.writeInt32BE(ag.crc32(r.slice(4,r.length-4)),r.length-4),r};ve.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*Lt.GAMMA_DIVISION),0),this._packChunk(Lt.TYPE_gAMA,e)};ve.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(Lt.TYPE_IHDR,n)};ve.prototype.packIDAT=function(t){return this._packChunk(Lt.TYPE_IDAT,t)};ve.prototype.packIEND=function(){return this._packChunk(Lt.TYPE_IEND,null)}});var Ec=kt((bb,kc)=>{var dg=Gt("util"),bc=Gt("stream"),mg=De(),pg=Wi(),$c=kc.exports=function(t){bc.call(this);let e=t||{};this._packer=new pg(e),this._deflate=this._packer.createDeflate(),this.readable=!0};dg.inherits($c,bc);$c.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(mg.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r)this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(t,e,n);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 Fc=kt((Tn,Ic)=>{var yc=Gt("assert").ok,tn=Gt("zlib"),wg=Gt("util"),vc=Gt("buffer").kMaxLength;function Pe(t){if(!(this instanceof Pe))return new Pe(t);if(t&&t.chunkSize<tn.Z_MIN_CHUNK)t.chunkSize=tn.Z_MIN_CHUNK;if(tn.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null)this._maxLength=t.maxLength}function bg(t){return new Pe(t)}function Mc(t,e){if(e)process.nextTick(e);if(!t._handle)return;t._handle.close(),t._handle=null}Pe.prototype._processChunk=function(t,e,n){if(typeof n==="function")return tn.Inflate._processChunk.call(this,t,e,n);let r=this,i=t&&t.length,o=this._chunkSize-this._offset,s=this._maxLength,c=0,u=[],h=0,a;this.on("error",function(b){a=b});function f(b,d){if(r._hadError)return;let $=o-d;if(yc($>=0,"have should not go down"),$>0){let M=r._buffer.slice(r._offset,r._offset+$);if(r._offset+=$,M.length>s)M=M.slice(0,s);if(u.push(M),h+=M.length,s-=M.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 c+=i-b,i=b,!0;return!1}yc(this._handle,"zlib binding closed");let l;do l=this._handle.writeSync(e,t,c,i,this._buffer,this._offset,o),l=l||this._writeState;while(!this._hadError&&f(l[0],l[1]));if(this._hadError)throw a;if(h>=vc)throw Mc(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+vc.toString(16)+" bytes");let m=Buffer.concat(u,h);return Mc(this),m};wg.inherits(Pe,tn.Inflate);function $g(t,e){if(typeof e==="string")e=Buffer.from(e);if(!(e instanceof Buffer))throw TypeError("Not a string or buffer");let n=t._finishFlushFlag;if(n==null)n=tn.Z_FINISH;return t._processChunk(e,n)}function Sc(t,e){return $g(new Pe(e),t)}Ic.exports=Tn=Sc;Tn.Inflate=Pe;Tn.createInflate=bg;Tn.inflateSync=Sc});var Qi=kt(($b,Rc)=>{var Nc=Rc.exports=function(t){this._buffer=t,this._reads=[]};Nc.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Nc.prototype.process=function(){while(this._reads.length>0&&this._buffer.length){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.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 Oc=kt((yg)=>{var kg=Qi(),Eg=Gi();yg.process=function(t,e){let n=[],r=new kg(t);return new Eg(e,{read:r.read.bind(r),write:function(o){n.push(o)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Gc=kt((Eb,Pc)=>{var Hc=!0,jc=Gt("zlib"),Mg=Fc();if(!jc.deflateSync)Hc=!1;var Sg=Qi(),Ig=Oc(),Fg=Ui(),Ng=Ki(),Rg=Ji();Pc.exports=function(t,e){if(!Hc)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(v){n=v}let i;function o(v){i=v}function s(v){i.transColor=v}function c(v){i.palette=v}function u(){i.alpha=!0}let h;function a(v){h=v}let f=[];function l(v){f.push(v)}let m=new Sg(t);if(new Fg(e,{read:m.read.bind(m),error:r,metadata:o,gamma:a,palette:c,transColor:s,inflateData:l,simpleTransparency:u}).start(),m.process(),n)throw n;let d=Buffer.concat(f);f.length=0;let $;if(i.interlace)$=jc.inflateSync(d);else{let g=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;$=Mg(d,{chunkSize:g,maxLength:g})}if(d=null,!$||!$.length)throw Error("bad png - invalid inflate data response");let M=Ig.process($,i);d=null;let N=Ng.dataToBitMap(M,i);M=null;let E=Rg(N,i,e.skipRescale);return i.data=E,i.gamma=h||0,i}});var Uc=kt((yb,Ac)=>{var Lc=!0,Tc=Gt("zlib");if(!Tc.deflateSync)Lc=!1;var Og=De(),Hg=Wi();Ac.exports=function(t,e){if(!Lc)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new Hg(e||{}),i=[];if(i.push(Buffer.from(Og.PNG_SIGNATURE)),i.push(r.packIHDR(t.width,t.height)),t.gamma)i.push(r.packGAMA(t.gamma));let o=r.filterData(t.data,t.width,t.height),s=Tc.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 Kc=kt((Gg)=>{var jg=Gc(),Pg=Uc();Gg.read=function(t,e){return jg(t,e||{})};Gg.write=function(t,e){return Pg(t,e)}});var xc=kt((xg)=>{var Ag=Gt("util"),Jc=Gt("stream"),Ug=fc(),Kg=Ec(),Jg=Kc(),At=xg.PNG=function(t){if(Jc.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data)this.data.fill(0);this.gamma=0,this.readable=this.writable=!0,this._parser=new Ug(t),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(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new Kg(t),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"))};Ag.inherits(At,Jc);At.sync=Jg;At.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};At.prototype.parse=function(t,e){if(e){let n,r;n=function(i){this.removeListener("error",r),this.data=i,e(null,this)}.bind(this),r=function(i){this.removeListener("parsed",n),e(i,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};At.prototype.write=function(t){return this._parser.write(t),!0};At.prototype.end=function(t){this._parser.end(t)};At.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};At.prototype._gamma=function(t){this.gamma=t};At.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};At.bitblt=function(t,e,n,r,i,o,s,c){if(n|=0,r|=0,i|=0,o|=0,s|=0,c|=0,n>t.width||r>t.height||n+i>t.width||r+o>t.height)throw Error("bitblt reading outside image");if(s>e.width||c>e.height||s+i>e.width||c+o>e.height)throw Error("bitblt writing outside image");for(let u=0;u<o;u++)t.data.copy(e.data,(c+u)*e.width+s<<2,(r+u)*t.width+n<<2,(r+u)*t.width+n+i<<2)};At.prototype.bitblt=function(t,e,n,r,i,o,s){return At.bitblt(this,t,e,n,r,i,o,s),this};At.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let i=0;i<3;i++){let o=t.data[r+i]/255;o=Math.pow(o,0.45454545454545453/t.gamma),t.data[r+i]=Math.round(o*255)}}t.gamma=0}};At.prototype.adjustGamma=function(){At.adjustGamma(this)}});var To=kt((r1,Ba)=>{var Lo={to(t,e){if(!e)return`\x1B[${t+1}G`;return`\x1B[${e+1};${t+1}H`},move(t,e){let n="";if(t<0)n+=`\x1B[${-t}D`;else if(t>0)n+=`\x1B[${t}C`;if(e<0)n+=`\x1B[${-e}A`;else if(e>0)n+=`\x1B[${e}B`;return n},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},f0={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},l0={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let n=0;n<t;n++)e+=this.line+(n<t-1?Lo.up():"");if(t)e+=Lo.left;return e}};Ba.exports={cursor:Lo,scroll:f0,erase:l0,beep:"\x07"}});import{spawnSync as Gw}from"node:child_process";import{isMainThread as Lw}from"node:worker_threads";import{parseArgs as Rw}from"node:util";var xt={name:"@kecan0406/ttheme",version:"1.0.41",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",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=20.11"}};import{rmSync as gh}from"node:fs";import{basename as rm,join as rr}from"node:path";var cl=/^#[0-9a-f]{6}$/;function bs(t){return cl.test(t)}function jt(t){let e=Number.parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function te(t){let[e,n,r]=jt(t).map((i)=>{let o=i/255;return o<=0.03928?o/12.92:((o+0.055)/1.055)**2.4});return 0.2126*e+0.7152*n+0.0722*r}function fe(t,e){let n=te(t),r=te(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function vr(t,e){return Math.round(fe(t,e)*100)/100}function ul(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function $s(t){let[e,n,r]=jt(t).map(ul),i=Math.cbrt(0.4122214708*e+0.5363325363*n+0.0514459929*r),o=Math.cbrt(0.2119034982*e+0.6806995451*n+0.1073969566*r),s=Math.cbrt(0.0883024619*e+0.2817188376*n+0.6299787005*r),c=1.9779984951*i-2.428592205*o+0.4505937099*s,u=0.0259040371*i+0.7827717662*o-0.808675766*s;return{l:0.2104542553*i+0.793617785*o-0.0040720468*s,c:Math.hypot(c,u),h:(Math.atan2(u,c)*180/Math.PI+360)%360}}var ke=7,ks=3,Ei=0.15,Es=1.6,Mi=[1,2,3,4,5,6,9,10,11,12,13,14],ys=[7,15],Mr=[1,2,3,4,5,6],Fs={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}},hl=0.03,yi=25,Ns=15,Rs=0.08;function le(t,e){let n=t.ansi[e];if(n===void 0)throw Error(`${t.name}: missing ANSI ${e}`);return n}function vi(t,e,n){let r=t.background;return e.flatMap((i)=>{let o=le(t,i);return fe(o,r)<n?[`ANSI ${i} ${o} on ${r} is ${vr(o,r)}:1, needs ${n}:1`]:[]})}function vs(t,e){return Math.min(...e.map((n)=>fe(le(t,n),t.background)))}var Os=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:ke,measure:({foreground:t,background:e})=>fe(t,e),check:({foreground:t,background:e})=>fe(t,e)<ke?[`foreground ${t} on ${e} is ${vr(t,e)}:1, needs ${ke}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:ks,measure:(t)=>vs(t,Mi),check:(t)=>vi(t,Mi,ks)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:Ei,measure:(t)=>te(le(t,0)),check:(t)=>{let e=le(t,0);return te(e)>Ei?[`ANSI 0 ${e} has luminance ${te(e).toFixed(3)}, needs <= ${Ei}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:ke,measure:(t)=>vs(t,ys),check:(t)=>vi(t,ys,ke)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:Es,measure:(t)=>fe(le(t,8),t.background),check:(t)=>vi(t,[8],Es)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:ke,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:fe(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&fe(t,e)<ke?[`foreground ${t} on selection ${e} is ${vr(t,e)}:1, needs ${ke}:1`]:[]}];function Si(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var Ii=(t)=>t>8?t-8:t;function Hs(t){let e=t.signatureSlots.filter((n)=>n.startsWith("ansi")).map((n)=>Number(n.slice(4)));return new Set(e.flatMap((n)=>Mr.includes(Ii(n))?[n,n>8?n-8:n+8]:[n]))}function On(t,e){let n=$s(le(t,e));return n.c<hl?void 0:n}function Ms(t){let e=Hs(t);return Mi.flatMap((n)=>{let r=On(t,n),i=Fs[Ii(n)];if(r===void 0||i===void 0||e.has(n))return[];let o=Si(r.h,i.center)-i.width;return o>0?[{slot:n,hue:r.h,over:o}]:[]})}function Ss(t){let e=new Set(t.signatureSlots);return Mr.flatMap((n)=>{let r=On(t,n),i=On(t,n+8);if(r===void 0||i===void 0||e.has(`ansi${n}`)&&e.has(`ansi${n+8}`))return[];return[{normal:n,gap:Si(r.h,i.h)}]})}function Is(t){let e=Hs(t);return[0,8].flatMap((n)=>Mr.flatMap((r)=>Mr.filter((i)=>i>r).flatMap((i)=>{let[o,s]=[n+r,n+i],c=On(t,o),u=On(t,s);if(c===void 0||u===void 0||e.has(o)&&e.has(s))return[];return Si(c.h,u.h)<Ns&&Math.abs(c.l-u.l)<Rs?[[o,s]]:[]})))}var al=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...Ms(t).map((e)=>e.over)),check:(t)=>Ms(t).map(({slot:e,hue:n,over:r})=>{let i=Fs[Ii(e)];return`ANSI ${e} ${le(t,e)} has hue ${n.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:yi,measure:(t)=>Math.max(0,...Ss(t).map((e)=>e.gap)),check:(t)=>Ss(t).filter((e)=>e.gap>yi).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${yi}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(t)=>Is(t).length,check:(t)=>Is(t).map(([e,n])=>`ANSI ${e} ${le(t,e)} and ANSI ${n} ${le(t,n)} are within ${Ns}° hue and ${Rs} lightness`)}],Sr=[...Os,...al],xw=Sr.map((t)=>t.rule),Ir=Sr.map(({rule:t,label:e,unit:n,min:r,max:i})=>({rule:t,label:e,unit:n,...r===void 0?{}:{min:r},...i===void 0?{}:{max:i}}));function js(t){return Sr.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Ps(t,e){return t.filter((n)=>!e.waive.includes(n.rule)).flatMap((n)=>n.check(e).map((r)=>({theme:e.name,rule:n.rule,detail:r})))}function fl(t){return Ps(Sr,t)}function Gs(t){return Ps(Os,t)}function Ls(t){return t.flatMap(fl)}var ll=["black","red","green","yellow","blue","magenta","cyan","white"];function Ts(t,e){return[t,...ll.map((n,r)=>`${n} = '${e[r]}'`),""].join(`
3
+ `)}var Hn={id:"alacritty",limits:"no runtime color API (OSC only)",emit(t){let e=[...Ye(t),"","[colors.primary]",`background = '${t.background}'`,`foreground = '${t.foreground}'`,"","[colors.cursor]",`cursor = '${t.cursor}'`,`text = '${t.background}'`,"","[colors.selection]",`background = '${t.selectionBackground}'`,`text = '${t.foreground}'`,"",Ts("[colors.normal]",t.ansi.slice(0,8)),Ts("[colors.bright]",t.ansi.slice(8,16))].join(`
4
+ `);return[{path:`alacritty/themes/${ut(t.name)}.toml`,content:e}]}};var jn={id:"ghostty",emit(t){let e=[...Ye(t),`background = ${t.background}`,`foreground = ${t.foreground}`,`cursor-color = ${t.cursor}`,`selection-background = ${t.selectionBackground}`,`selection-foreground = ${t.foreground}`,...t.ansi.map((n,r)=>`palette = ${r}=${n}`),"palette-generate = true","","macos-icon = custom-style",`macos-icon-ghost-color = ${t.ghostty.iconGhost}`,`macos-icon-screen-color = ${t.ghostty.iconScreen.join(",")}`,"macos-icon-frame = chrome",""].join(`
5
+ `);return[{path:`ghostty/themes/${ut(t.name)}`,content:e}]}};function Ee(t){let[e,n,r]=jt(t);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":n/255,"Red Component":e/255}}function As(t){return{...Object.fromEntries(t.ansi.map((e,n)=>[`Ansi ${n} Color`,Ee(e)])),"Background Color":Ee(t.background),"Bold Color":Ee(t.foreground),"Cursor Color":Ee(t.cursor),"Cursor Text Color":Ee(t.background),"Foreground Color":Ee(t.foreground),"Selected Text Color":Ee(t.foreground),"Selection Color":Ee(t.selectionBackground)}}function gl(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function Us(t,e,n,r){let i=(s,c)=>({Name:`ttheme · ${c}`,Guid:`ttheme-${c}`,...r?{"Dynamic Profile Parent GUID":r}:{},"Use Separate Colors for Light and Dark Mode":!1,"Harmonize 256 Colors":!0,...gl(e.get(s.name)),...As(s)}),o=[...n?[i(n,"default")]:[],...t.map((s)=>i(s,s.name))];return`${JSON.stringify({Profiles:o},null,2)}
6
+ `}function dl(t,e){return[` <key>${t}</key>`,"\t<dict>",...Object.entries(e).flatMap(([n,r])=>[` <key>${n}</key>`,typeof r==="string"?` <string>${r}</string>`:` <real>${r}</real>`]),"\t</dict>"].join(`
7
+ `)}var Pn={id:"iterm2",limits:"colors are Display P3, the space iTerm2 reads OSC colors in",emit(t){let e=['<?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(As(t)).map(([n,r])=>dl(n,r)),"</dict>","</plist>",""].join(`
8
+ `);return[{path:`iterm2/${ut(t.name)}.itermcolors`,content:e}]}};var Gn={id:"kitty",emit(t){let e=[...Ye(t),`background ${t.background}`,`foreground ${t.foreground}`,`cursor ${t.cursor}`,`cursor_text_color ${t.background}`,`selection_background ${t.selectionBackground}`,`selection_foreground ${t.foreground}`,...t.ansi.map((n,r)=>`color${r} ${n}`),""].join(`
9
+ `);return[{path:`kitty/themes/${ut(t.name)}.conf`,content:e}]}};function Ks(t){return["# Generated by ttheme — rewritten on every add, remove and default; do not edit.","import os","",`THEMES = ${JSON.stringify(t.themes)}`,`BACKGROUNDS = ${JSON.stringify(t.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 + '.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 + '.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(`
10
+ `)}import{createHash as Zg}from"node:crypto";import{existsSync as eu,mkdirSync as qg,readdirSync as _g,readFileSync as Cg,renameSync as nu,rmSync as nn}from"node:fs";import{basename as Xg,isAbsolute as Vg,join as ct}from"node:path";import{chmodSync as ml,copyFileSync as pl,existsSync as ze,mkdirSync as wl,readFileSync as Fi,realpathSync as bl,renameSync as $l,rmSync as Js,statSync as kl,writeFileSync as El}from"node:fs";import{dirname as yl}from"node:path";function xs(t){return`${t}.ttheme.bak`}var vl=/^(?:#|--) ttheme begin$|path = "ttheme-/m;function Ni(t){let e=xs(t);if(ze(t)&&!ze(e)&&!vl.test(Fi(t,"utf8")))pl(t,e)}function Tt(t,e){let n=ze(t)?bl(t):t;wl(yl(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(El(r,e),ze(n))ml(r,kl(n).mode&4095);$l(r,n)}function Ln(t,e){if((ze(t)?Fi(t,"utf8"):void 0)===e)return!1;return Ni(t),Tt(t,e),!0}function Ws(t,e){let n=xs(t),r=ze(n)?Fi(n,"utf8"):void 0;if(e===""&&r===void 0)return Js(t,{force:!0}),"removed";if(Tt(t,e),r===void 0||r===e)return Js(n,{force:!0}),"restored";return"kept backup"}var Zc=yr(Vs(),1),Nr=yr(xc(),1),Wc=[137,80,78,71,13,10,26,10],qc=13;function An(t){return t.length>=Wc.length&&Wc.every((e,n)=>t[n]===e)}function Wg(t){let e=Nr.PNG.sync.read(Buffer.from(t));return{width:e.width,height:e.height,data:new Uint8Array(e.data)}}function _c(t,e){if(An(t)){let n=Un(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);return Wg(t)}if(t[0]===255&&t[1]===216){let n=Zc.decode(t,{useTArray:!0,formatAsRGBA:!0,maxResolutionInMP:e/1e6,maxMemoryUsageInMB:1024});return{width:n.width,height:n.height,data:n.data}}throw Error("not a PNG or JPEG image")}function en(t){let e=new Nr.PNG({width:t.width,height:t.height});return e.data=Buffer.from(t.data),Nr.PNG.sync.write(e)}function Qc(t,e){for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let i=0;i<e.length&&r;i++)r=t[n+i]===e.charCodeAt(i);if(r)return n}return-1}function Un(t){if(t.length<33||!An(t))return null;let e=new DataView(t.buffer,t.byteOffset,t.byteLength),n=e.getUint32(16),r=e.getUint32(20);if(t[25]===4||t[25]===6)return{width:n,height:r,alpha:!0};let i=Qc(t,"IDAT");return{width:n,height:r,alpha:Qc(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function Cc(t,e=qc){let{width:n,height:r}=t,i=-1,o=-1;for(let s=0;s<t.height;s++)for(let c=0;c<t.width;c++)if((t.data[(s*t.width+c)*4+3]??0)>=e)n=Math.min(n,c),i=Math.max(i,c),r=Math.min(r,s),o=Math.max(o,s);return i<0?null:{x:n,y:r,w:i-n+1,h:o-r+1}}function Kn(t,e={x:0,y:0,w:t.width,h:t.height}){let n=0;for(let r=e.y;r<e.y+e.h;r++)for(let i=e.x;i<e.x+e.w;i++)if((t.data[(r*t.width+i)*4+3]??0)<qc)n++;return Math.round(n*100/(e.w*e.h))}function Qg(t,e){if(e<=1)return t;let n=Math.max(1,Math.floor(t.width/e)),r=Math.max(1,Math.floor(t.height/e)),i=new Uint8Array(n*r*4),o=t.data;for(let s=0;s<r;s++)for(let c=0;c<n;c++){let u=0,h=0,a=0,f=0;for(let m=0;m<e;m++)for(let b=0;b<e;b++){let d=((s*e+m)*t.width+c*e+b)*4,$=o[d+3]??0;u+=(o[d]??0)*$,h+=(o[d+1]??0)*$,a+=(o[d+2]??0)*$,f+=$}let l=(s*n+c)*4;if(f>0)i[l]=Math.round(u/f),i[l+1]=Math.round(h/f),i[l+2]=Math.round(a/f);i[l+3]=Math.round(f/(e*e))}return{width:n,height:r,data:i}}function Xc(t,e,n){let r=Math.min(e/t.width,n/t.height),i=Math.max(1,Math.round(t.width*r)),o=Math.max(1,Math.round(t.height*r)),s=Rr(t,{x:0,y:0,w:t.width,h:t.height},i,o),c=new Uint8Array(e*n*4),u=Math.floor((e-i)/2),h=Math.floor((n-o)/2);for(let a=0;a<o;a++)c.set(s.data.subarray(a*i*4,(a+1)*i*4),((h+a)*e+u)*4);return{width:e,height:n,data:c}}function Rr(t,e,n,r){let i=Math.max(1,Math.floor(Math.min(e.w/n,e.h/r))),o=Qg(t,i),s=o.data,c=new Uint8Array(n*r*4);for(let u=0;u<r;u++){let h=Math.min(o.height-1,Math.max(0,e.y/i+(u+0.5)*e.h/i/r-0.5)),a=Math.floor(h),f=Math.min(o.height-1,a+1),l=h-a;for(let m=0;m<n;m++){let b=Math.min(o.width-1,Math.max(0,e.x/i+(m+0.5)*e.w/i/n-0.5)),d=Math.floor(b),$=Math.min(o.width-1,d+1),M=b-d,N=(a*o.width+d)*4,E=(a*o.width+$)*4,v=(f*o.width+d)*4,g=(f*o.width+$)*4,P=(s[N+3]??0)*(1-M)*(1-l),k=(s[E+3]??0)*M*(1-l),O=(s[v+3]??0)*(1-M)*l,I=(s[g+3]??0)*M*l,j=P+k+O+I,G=(u*n+m)*4;if(j>0)for(let C=0;C<3;C++){let U=(s[N+C]??0)*P+(s[E+C]??0)*k+(s[v+C]??0)*O+(s[g+C]??0)*I;c[G+C]=Math.round(U/j)}c[G+3]=Math.round(j)}}return{width:n,height:r,data:c}}var Vc={width:2560,height:1550},Yg=2560,zg=0.1,ge={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Bg=te(qi("#19161e","#9b86c8",0.2)),Dg="shelf",Or="originals",td="images.json",Zi=1;function qi(t,e,n){let r=jt(t),i=jt(e);return`#${r.map((o,s)=>Math.round(o+((i[s]??0)-o)*n).toString(16).padStart(2,"0")).join("")}`}function ed(t,e){if(e==="background"||e==="foreground"||e==="cursor")return t[e];if(e==="selection"&&t.selection)return t.selection;let n=/^ansi(\d|1[0-5])$/.exec(e),r=n?t.ansi[Number(n[1])]:void 0;if(!r)throw Error(`${t.name} has no slot ${e}`);return r}function Yc(t){if(t(1))return 1;let e=0,n=1;for(let r=0;r<40;r++){let i=(e+n)/2;if(t(i))e=i;else n=i}return e}function zc(t,e){let n=ed(t,e),i=Yc((h)=>Gs({name:t.name,background:qi(t.background,n,h),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),o=Yc((h)=>te(qi(t.background,n,h))<=Bg),s=Math.floor(Math.min(i,o)*1000)/1000,c=jt(t.background),u=Math.hypot(...jt(n).map((h,a)=>(h-(c[a]??0))*s));return{slot:e,color:n,cap:i,matched:o,opacity:s,reach:u}}function jr(t,e){let n=zc(t,"cursor");if(n.opacity>=zg)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>zc(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function _i(t,e,n){let r=jt(e),i=jt(n),o=t.data;for(let s=0;s<o.length;s+=4){let c=(0.299*(o[s]??0)+0.587*(o[s+1]??0)+0.114*(o[s+2]??0))/255;for(let u=0;u<3;u++)o[s+u]=Math.round((r[u]??0)+((i[u]??0)-(r[u]??0))*c)}return t}function nd(t,e,n){let r=jt(e),i=t.data,o=new Uint8Array(i.length);for(let s=0;s<i.length;s+=4){let c=(i[s+3]??0)/255*n;for(let u=0;u<3;u++)o[s+u]=Math.round((r[u]??0)*(1-c)+(i[s+u]??0)*c);o[s+3]=255}return{width:t.width,height:t.height,data:o}}function ru(t){return Cc(t)??{x:0,y:0,w:t.width,h:t.height}}function rd(t,e){if(t<=0||e<=0)return Vc;let n=Math.min(1,Vc.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function id(t,e){let n=Math.min(1,Yg/Math.max(e.w,e.h));return Rr(t,e,Math.round(e.w*n),Math.round(e.h*n))}function iu(t,e,n,r){if(r<ge.stands){let u=t.w*n>t.h*e?{x:t.x+(t.w-t.h*e/n)/2,y:t.y,w:t.h*e/n,h:t.h}:{x:t.x,y:t.y,w:t.w,h:t.w*n/e};return{crop:u,at:{x:0,y:0,w:e,h:n},focus:(u.y-t.y+u.h/2)/t.h}}let i=Math.max(ge.tall*n,ge.reach*e*t.h/t.w),o=i*t.w/t.h;if(o>ge.widest*e)o=ge.widest*e,i=o*t.h/t.w;let s=ge.headroom*n,c=Math.min(1,(n-s)/i);return{crop:{x:t.x,y:t.y,w:t.w,h:t.h*c},at:{x:e*(1-ge.margin)-o,y:s,w:o,h:i*c},focus:Math.min(1,(n/2-s)/i)}}function ou(t,e,n,r){let i=Math.max(1,Math.round(e.at.w)),o=Math.max(1,Math.round(e.at.h)),s=Rr(t,e.crop,i,o),c=new Uint8Array(n*r*4),u=Math.round(e.at.x),h=Math.round(e.at.y);for(let a=0;a<o;a++){let f=h+a,l=Math.max(0,-u),m=Math.min(i,n-u);if(f<0||f>=r||m<=l)continue;c.set(s.data.subarray((a*i+l)*4,(a*i+m)*4),(f*n+u+l)*4)}return{width:n,height:r,data:c}}function su(t,e,n,r,i){let o=ru(t),s=ou(t,iu(o,r,i,Kn(t,o)),r,i);return nd(_i(s,e.background,n.color),e.background,n.opacity)}function de(t){return ct(t,"ttheme","backgrounds")}function Ci(t){return ct(t,td)}function Hr(t){try{return Cg(t,"utf8")}catch{return}}function Me(t){try{return _g(t)}catch{return[]}}function rn(t){let e=Hr(Ci(t));if(e===void 0)return sd(t);let n=JSON.parse(e);if(n.version!==Zi)throw Error(`${Ci(t)} is version ${n.version} — this ttheme reads version ${Zi}`);return n}function od(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${n+1}/${e.pictures.length}`,`background-image = ${ct(t,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(`
11
+ `)}function Pr(t,e,n){Tt(Ci(t),`${JSON.stringify(e,null,2)}
12
+ `);for(let r of n){let i=e.palettes[r],o=ct(t,`${r}.conf`);if(i)Tt(o,od(t,i));else nn(o,{force:!0})}}function cu(t,e){for(let n of Me(t))if(n.startsWith(`${e.stem}.`)||n.startsWith(`${e.stem}@`))nn(ct(t,n),{force:!0});if(e.original)nn(ct(t,e.original),{force:!0})}function Bc(t,e,n,r){let i=Xg(/^background-image\s*=\s*(.*?)\s*$/m.exec(e??"")?.[1]??"");if(!i.startsWith(`${t}.`)||!/^\.[0-9a-f]{8}@fill-\d+\.png$/.test(i.slice(t.length)))return;let o=i.slice(0,i.indexOf("@")),s=r??/^# image (\S+)$/m.exec(e??"")?.[1]??`picture_${o.slice(t.length+1)}`,c=/^# from (.+)$/m.exec(e??"")?.[1],u=Number(/^background-image-opacity\s*=\s*(\S+)/m.exec(e??"")?.[1]??1),h=n.find((a)=>a.startsWith(`${t}-${s}.`));return{key:s,stem:o,fill:i,opacity:Number.isFinite(u)?u:1,...c?{from:c}:{},...h?{original:ct(Or,h)}:{}}}function Dc(t,e){if(eu(t))nu(t,e)}function sd(t){let e={version:Zi,palettes:{}};if(!eu(t))return e;let n=Me(ct(t,Or)),r=Me(t).filter((o)=>o.endsWith(".conf")&&o!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(o)).map((o)=>o.slice(0,-5)),i=ct(t,Dg);for(let o of new Set([...r,...Me(i)])){let s=[],c=Bc(o,Hr(ct(t,`${o}.conf`)),n);if(c)Dc(ct(t,`${o}.tune.conf`),ct(t,`${c.stem}.tune.conf`)),Dc(ct(t,`${o}.off.conf`),ct(t,`${c.stem}.off.conf`)),s.push(c);for(let u of Me(ct(i,o))){let h=ct(i,o,u),a=Bc(o,Hr(ct(h,".conf")),n,u);if(!a)continue;for(let f of Me(h)){let l=f===".tune.conf"||f===".off.conf"?`${a.stem}${f}`:`${o}${f}`;if(f!==".conf")nu(ct(h,f),ct(t,l))}nn(h,{recursive:!0}),s.push(a)}if(Me(ct(i,o)).length===0)nn(ct(i,o),{recursive:!0,force:!0});if(s.length>0)s.sort((u,h)=>u.key<h.key?-1:u.key>h.key?1:0),e.palettes[o]={active:(c??s[0]).key,pictures:s}}if(Me(i).length===0)nn(i,{recursive:!0,force:!0});return Pr(t,e,Object.keys(e.palettes)),e}function tu(t,e,n){return e.startsWith("~/")?ct(n,e.slice(2)):Vg(e)?e:ct(t,e)}function uu(t,e,n){let r=new Map,i=(c,u)=>{let h=Hr(c);if(h===void 0)return!1;for(let a of h.split(`
13
+ `)){let f=/^([a-z-]+)\s*=\s*(.*?)\s*$/.exec(a);if(f?.[1]==="config-file"&&u<4)i(tu(t,f[2].replace(/^\?/,""),n),u+1);else if(f&&/^background-image(?:-fit|-opacity)?$/.test(f[1]))r.set(f[1],f[2])}return!0};if(!i(ct(t,`${e}.conf`),0))return;let o=r.get("background-image")??"";if(o==="")return;let s=Number(r.get("background-image-opacity")??1);return{image:tu(t,o,n),opacity:Number.isFinite(s)?s:1,cover:r.get("background-image-fit")==="cover"}}function cd(t){return`${t.site}_${t.id}`}function hu(t,e,n){let r=de(t),i=rn(r),o=i.palettes[e];if(!o||o.pictures.length<2)throw Error(`${e} has no other image`);let s=o.pictures.length,c=(o.pictures.findIndex((u)=>u.key===o.active)+n+s)%s;return o.active=o.pictures[c].key,Pr(r,i,[e]),{key:o.active,at:c+1,of:s}}function au(t,e){let n=de(t),r=rn(n),i=r.palettes[e];if(!i)throw Error(`${e} has no image`);let o=i.pictures.findIndex((u)=>u.key===i.active),[s]=i.pictures.splice(o,1);cu(n,s);let c=i.pictures[o%Math.max(i.pictures.length,1)];if(c)i.active=c.key;else delete r.palettes[e];return Pr(n,r,[e]),{key:s.key,left:i.pictures.length}}function fu(t,e,n,r,i,o){let s=de(t),c=e.name,u=cd(i),h=rn(s),a=h.palettes[c]??{active:u,pictures:[]},f=ru(r),{width:l,height:m}=rd(o.width,o.height),b=iu(f,l,m,Kn(r,f)),d=en(_i(id(r,f),e.background,n.color)),$=en(_i(ou(r,b,l,m),e.background,n.color)),M=`${c}.${Zg("sha1").update(d).update($).digest("hex").slice(0,8)}`,N={key:u,stem:M,fill:`${M}@fill-${Math.round(b.focus*100)}.png`,opacity:n.opacity,...i.from?{from:i.from}:{},original:ct(Or,`${c}-${u}.${i.ext}`)},E=a.pictures.find((g)=>g.key===u);if(E)cu(s,E);let v=[ct(s,`${M}.png`),ct(s,N.fill),ct(s,N.original)];return qg(ct(s,Or),{recursive:!0}),Tt(v[0],d),Tt(v[1],$),Tt(v[2],i.bytes),a.pictures=E?a.pictures.map((g)=>g===E?N:g):[...a.pictures,N],a.active=u,h.palettes[c]=a,Pr(s,h,[c]),[...v,ct(s,`${c}.conf`)]}function lu(t){let e=new Map;for(let[n,r]of Object.entries(rn(de(t)).palettes)){let[,i,o]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&o)e.set(n,{site:i,id:Number(o)})}return e}function Xi(t){let{slot:e,color:n,opacity:r}=jr({name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi,waived:t.waive},t.signatureSlots);return{name:t.name,group:t.group,...t.native?{native:t.native}:{},...t.lead?{lead:!0}:{},order:t.order,ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},...t.role==="default"?{default:!0}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,signature:t.signature,signatureSlots:t.signatureSlots,ansi:t.ansi,gate:js(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r}}}function Ge(t){return t.filter((e)=>e.default!==!0)}function ud(t){let[e]=t;if(!e)throw Error("manifest needs at least one theme");return{version:xt.version,gate:Ir,placement:ge,palettes:t.map(Xi)}}var Vi={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(ud(t),null,2)}
14
+ `}]}};import{readdirSync as Jd,readFileSync as Uu}from"node:fs";import{basename as xd,join as Ku}from"node:path";import{readdirSync as hd,rmSync as ad,statSync as fd}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as ld}from"node:net";import{homedir as gd}from"node:os";import{join as xn}from"node:path";import{setTimeout as dd}from"node:timers/promises";var Le=100,Ae=25000000,md=536870912,Wn=["safe","questionable","explicit"],Te=["nudity","underwear"],pd={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},Jn={safe:"s",questionable:"q",explicit:"e"},wd=8191,bd=20000,$d=5000,gu=3000,du=8,kd=3000,bu=60000,mu=3,zi=`ttheme/${xt.version} (+${xt.homepage})`,Ed=["orig","tile","thumb","cut"],$u=new Map,yd=jd(process.env.TTHEME_FIND_HOSTS),vd=Hd(process.env.TTHEME_FIND_CUTOUTS);ld(kd);function pu(t){try{return hd(t)}catch{return[]}}function Gr(t){return t.startsWith("//")?`https:${t}`:t}function Qn(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function Zn(t){let e=t.trim();if(!e)return[];let n=JSON.parse(e);if(Array.isArray(n))return n;let r=n.posts;return Array.isArray(r)?r:[]}function Md(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,o])=>[i,String(o)]))}function Yi(t,e,n){let r=Gr(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:Qn(r)}}function ku(t,e){let n=Gr(String(e.preview??""));if(!e.file||!n||!Number(t.id))return[];let r=Number(t.width??t.image_width)||0,i=Number(t.height??t.image_height)||0;return[{id:Number(t.id),width:r,height:i,file:e.file,preview:n,ext:e.ext,owner:String(e.owner??""),artist:e.artist,score:Number(t.score)||0,rating:String(t.rating??""),md5:String(e.md5??""),source:String(t.source??""),tags:e.tags.split(/\s+/).filter(Boolean),solo:e.solo,family:Number(t.parent_id)||(t.has_children===!0?Number(t.id):0),smaller:e.versions.filter((o)=>o.file&&o.width>0&&o.height>0&&o.width*o.height<r*i)}]}function Sd(t){let e=Md(t);return Zn(t).flatMap((n)=>{let r=Gr(String(n.file_url??"")),i=String(n.tags??"");return ku(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||Qn(r)).toLowerCase(),owner:n.author,artist:i.split(/\s+/).find((o)=>e.get(o)==="artist")??"",md5:n.md5,tags:i,solo:void 0,versions:[Yi(n.jpeg_url,n.jpeg_width,n.jpeg_height),Yi(n.sample_url,n.sample_width,n.sample_height)]})})}function Id(t){return Zn(t).flatMap((e)=>{let n=Gr(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return ku(e,{preview:i.variants?.find((o)=>o.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||Qn(n)).toLowerCase(),owner:"",artist:String(e.tag_string_artist??"").split(/\s+/)[0]??"",md5:e.md5,tags:r,solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((o)=>Yi(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 Fd(t){return Zn(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function Nd(t){return Zn(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function Rd(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function Od(t){let e=t.trim()?JSON.parse(t):{};return Number(e.counts?.posts)||0}function Hd(t){let e=new Map;for(let n of(t??"").split(/\s+/).filter(Boolean)){let r=n.indexOf("=");if(r>0)e.set(n.slice(0,r),n.slice(r+1).split(",").filter(Boolean))}return e}function jd(t){let e=new Map;for(let n of(t??"").split(/[\s,]+/).filter(Boolean)){let r=n.indexOf("="),i=n.slice(0,r);try{let o=new URL(n.slice(r+1));if(i&&o.protocol==="https:")e.set(i,o.origin)}catch{}}return e}function Eu(t,e,n,r){let i=(t??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let o=e.filter((s)=>i.includes(s));return o.length>0?o:[...n]}function Lr(t){return Eu(t,Wn,["safe"])}function Tr(t){return Eu(t,Te,Te,"none")}function yu(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function vu(t){let e=yd.get(t.key),n=vd.get(t.key);return{...t,origin:e??t.origin,moved:e!==void 0&&e!==t.origin,cutouts:n??t.cutouts,vouched:t.vouched&&n===void 0}}function Mu(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function wu(t){let e=vu(t),n=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...e,cutouts:Mu(e.cutouts),ratings:yu([Jn.safe],[Jn.questionable],[Jn.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${Jn[i]}`;let o=Wn.filter((c)=>!r.includes(c)),[s]=o;return o.length===1&&s?`-rating:${Jn[s]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(Le),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/post.xml?${new URLSearchParams({limit:"1",tags:r})}`,postUrl:(r)=>`${e.origin}/post.json?${n({tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/post/show/${r}`,parse:Sd,count:Rd}}function Pd(t){let e=vu(t),n=yu(["g"],["s","q"],["e"]);return{...e,cutouts:Mu(e.cutouts),ratings:n,rate:(r)=>r.length===Wn.length?"":`rating:${r.flatMap((i)=>[...n[i]]).join(",")}`,best:"order:score",tagBudget:2,postsUrl:(r,i)=>`${e.origin}/posts.json?${new URLSearchParams({limit:String(Le),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/counts/posts.json?${new URLSearchParams({tags:r})}`,postUrl:(r)=>`${e.origin}/posts.json?${new URLSearchParams({limit:"1",tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/posts/${r}`,parse:Id,count:Od}}function Gd(t){return gt.find((e)=>e.key===t||e.name===t||new URL(e.origin).host===t)}function Bi(t){return t.split(/\s+/).filter((e)=>e&&!e.startsWith("rating:")).length}function Ar(t,e){let n=t.trim();if(/^\d+$/.test(n))return{site:e,id:Number(n)};let r=/^([\w.]+):(\d+)$/.exec(n);if(r){let c=gt.find((u)=>u.key===r[1]||u.name===r[1]);return c&&{site:c,id:Number(r[2])}}let i;try{i=new URL(n)}catch{return}let o=Gd(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 gt=[Pd({key:"danbooru",name:"danbooru",origin:"https://danbooru.donmai.us",cutouts:["transparent_background"],vouched:!1,tunneled:!0,ansi:2}),wu({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,tunneled:!1,ansi:6}),wu({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,tunneled:!1,ansi:5})],me=134217728;function se(t,e){let n=gt.indexOf(t);return(n===-1?gt.length:n)*me+e}function Di(t){let e;try{e=new URL(t).hostname}catch{return""}return e.split(".").slice(-2).join(".")}function Su(){return gt.filter((t)=>!t.tunneled).map((t)=>Di(t.origin)).flatMap((t)=>[t,`.${t}`]).join(",")}function Iu(t,e=Te){return t.tags.filter((n)=>e.some((r)=>pd[r].has(n)))}function Fu(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function qn(t){return[t,...t.smaller].find((e)=>e.width*e.height<=Ae)}function Nu(t){let e=new Map;for(let[n,r]of[...t].sort(([i],[o])=>i<o?-1:1)){if(r==="")continue;e.set(r,[...e.get(r)??[],n])}return e}function Ur(){return xn(process.env.XDG_CACHE_HOME??xn(gd(),".cache"),"ttheme")}function Fe(t){return xn(Ur(),t.key)}function Ru(t=md,e=Ur()){let n=[],r=0;for(let i of pu(e))for(let o of Ed){let s=xn(e,i,o);for(let c of pu(s)){let u=xn(s,c);try{let{size:h,mtimeMs:a}=fd(u);n.push({path:u,size:h,at:a}),r+=h}catch{}}}n.sort((i,o)=>i.at-o.at);for(let i of n){if(r<=t)return;try{ad(i.path,{force:!0}),r-=i.size}catch{}}}function Ld(t,e){if(t!==null&&/^\s*\d+\s*$/.test(t))return Number(t)*1000;let n=t===null?Number.NaN:Date.parse(t);return Number.isNaN(n)?bu:Math.max(0,n-e)}function Se(t){return $u.get(t.key)??0}function Td(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function Ad(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}async function Ie(t,e,n,r={},i=bd){for(let o=1;;o++){let s=Se(t)-Date.now();if(s>0)await dd(s,void 0,{signal:n});let c;try{c=await fetch(e,{headers:{"User-Agent":zi,Referer:`${t.origin}/`,...r},signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(u){if(o<mu&&!n.aborted&&Td(u))continue;throw u}if(c.status===429&&o<mu){await c.body?.cancel();let u=Ld(c.headers.get("retry-after"),Date.now());if(u>bu)throw Error(`${t.name} asks to wait ${Math.ceil(u/1000)}s`);$u.set(t.key,Math.max(Se(t),Date.now()+u));continue}if(!c.ok)throw await c.body?.cancel(),Error(Ad(c)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${c.status}`);return c}}async function Ou(t,e,n,r){return t.parse(await(await Ie(t,t.postsUrl(e,n),r)).text())}async function Hu(t,e,n){return t.count(await(await Ie(t,t.countUrl(e),n)).text())}async function to(t,e,n){let[r]=t.parse(await(await Ie(t,t.postUrl(e),n)).text());return r}function Ud(t){let e=gt.find((r)=>r.key==="danbooru"),n=new URLSearchParams({limit:String(2*Le),only:"md5,tag_string",tags:`md5:${t.join(",")}`});return`${e.origin}/posts.json?${n}`}function Kd(t){return new Map(Zn(t).flatMap((e)=>{let n=String(e.md5??"");return n?[[n,String(e.tag_string??"").split(/\s+/).filter(Boolean)]]:[]}))}function ju(t,e){for(let n of t){let r=e.get(n.md5);if(r)n.tags=[...new Set([...n.tags,...r])],n.solo=r.includes("solo")}}async function Pu(t,e){let n=gt.find((i)=>i.key==="danbooru"),r=new Map;if(Se(n)>Date.now())return r;for(let i=0;i<t.length;i+=Le){let o=await(await Ie(n,Ud(t.slice(i,i+Le)),e,{},$d)).text();for(let[s,c]of Kd(o))r.set(s,c)}return r}async function Gu(t,e){let n=gt.find((o)=>o.key==="danbooru");if(Se(n)<=Date.now())try{let o=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(du)}),s=`${n.origin}/autocomplete.json?${o}`;return Fd(await(await Ie(n,s,e,{},gu)).text())}catch(o){if(e.aborted)throw o}let r=gt.find((o)=>o.key==="yande"),i=new URLSearchParams({name:t,order:"count",limit:String(du)});return Nd(await(await Ie(r,`${r.origin}/tag.json?${i}`,e,{},gu)).text())}async function Lu(t,e,n){let r=await Ie(t,e,n,{Range:`bytes=0-${wd}`});return Un(new Uint8Array(await r.arrayBuffer()))}async function Tu(t,e,n,r){let i=await Ie(t,e,n,{},0),o=Number(i.headers.get("content-length"))||0,s=i.body?.getReader();if(!s)return new Uint8Array(await i.arrayBuffer());let c=[],u=0;for(;;){let{done:f,value:l}=await s.read();if(f)break;c.push(l),u+=l.length,r?.(u,o)}let h=new Uint8Array(u),a=0;for(let f of c)h.set(f,a),a+=f.length;return h}var pe="_groups.toml",Au=3,Ju=["background","foreground","cursor","selection"];function It(t,e){throw Error(`${t}: ${e}`)}function Ue(t,e,n){if(typeof n!=="string"||!bs(n))It(t,`${e} must be "#rrggbb" (lowercase), got ${JSON.stringify(n)}`);return n}function Ne(t,e,n){if(typeof n!=="string"||n.length===0)It(t,`${e} must be a non-empty string`);return n}function _n(t){return t&&typeof t==="object"?t:{}}function Wd(t,e,n){if(e===void 0)return[n.cursor,n.selectionBackground,n.background];let r=Array.isArray(e)?e:[e];if(r.length===0)It(t,"ghostty.icon_screen must not be empty");return r.map((i,o)=>Ue(t,`ghostty.icon_screen[${o}]`,i))}function Qd(t,e,n){let r=_n(e);return{iconGhost:r.icon_ghost===void 0?n.cursor:Ue(t,"ghostty.icon_ghost",r.icon_ghost),iconScreen:Wd(t,r.icon_screen,n)}}function Zd(t){return new Map([...Ju.map((e)=>[e,t[e]]),...t.ansi.map((e,n)=>[`ansi${n}`,e])])}function qd(t,e,n){if(!Array.isArray(e)||e.length!==Au)It(t,`meta.signature must name exactly ${Au} palette slots`);let r=Zd(n),i=[],o=[];for(let[s,c]of e.entries()){let u=`meta.signature[${s}]`,h=Ne(t,u,c),a=r.get(h);if(a===void 0)It(t,`${u} ${JSON.stringify(c)} is not a palette slot — use ${Ju.join(", ")} or ansi0-ansi15`);i.push(h),o.push(a)}if(new Set(o).size!==o.length)It(t,"meta.signature slots must resolve to three different colors");return{names:i,colors:o}}function _d(t,e,n){if(e===void 0)return;if(!n)It(t,"meta.booru_sites renames meta.booru per site, so it needs meta.booru");if(!e||typeof e!=="object"||Array.isArray(e))It(t,'meta.booru_sites must be a table of site = "tag" or site = ["tag", ...]');let r={};for(let[i,o]of Object.entries(e)){let s=gt.find((u)=>u.key===i);if(!s)It(t,`meta.booru_sites.${i} is not a find site — use ${gt.map((u)=>u.key).join(", ")}`);let c=typeof o==="string"?[o]:Array.isArray(o)?o:void 0;if(!c||c.some((u)=>typeof u!=="string"||u===""||/\s/.test(u)))It(t,`meta.booru_sites.${i} must be one tag or a list of tags, got ${JSON.stringify(o)}`);if(c.length>1&&Number.isFinite(s.tagBudget))It(t,`meta.booru_sites.${i} takes one tag — ${s.name} searches ${s.tagBudget} tags at a time`);r[i]=c}return r}function Cd(t){let n=Bun.TOML.parse(Uu(Ku(t,pe),"utf8")).group;if(!Array.isArray(n)||n.length===0)It(pe,"needs at least one [[group]] table");return n.map((r)=>{let i=_n(r);return{name:Ne(pe,"group.name",i.name),native:i.native===void 0?void 0:Ne(pe,"group.native",i.native),lead:Ne(pe,"group.lead",i.lead)}})}function Xd(t,e,n){let r=Bun.TOML.parse(e),i=_n(r.meta),o=_n(r.colors),s=_n(r.contrast),c=o.ansi;if(!Array.isArray(c)||c.length!==16)It(t,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(c)?c.length:typeof c}`);let u=Ne(t,"meta.name",i.name);if(u!==xd(t,".toml"))It(t,`meta.name "${u}" does not match the filename`);if(u.startsWith("-"))It(t,`meta.name "${u}" would be read as a flag by the ttheme CLI`);let h=i.role;if(h!==void 0&&h!=="default")It(t,`meta.role must be "default", got ${JSON.stringify(h)}`);let a=Ne(t,"meta.group",i.group),f=n.get(a);if(!f)It(t,`meta.group "${a}" has no [[group]] table in ${pe}`);let l=Ue(t,"colors.background",o.background),m=Ue(t,"colors.foreground",o.foreground),b=Ue(t,"colors.cursor",o.cursor),d=Ue(t,"colors.selection_background",o.selection_background),$=c.map((g,P)=>Ue(t,`colors.ansi[${P}]`,g)),M=qd(t,i.signature,{background:l,foreground:m,cursor:b,selection:d,ansi:$}),N=i.booru===void 0?void 0:Ne(t,"meta.booru",i.booru);if(N!==void 0&&/\s/.test(N))It(t,`meta.booru must be a single booru tag, got ${JSON.stringify(N)}`);let E=_d(t,i.booru_sites,N),v=Array.isArray(s.waive)?s.waive.map(String):[];if(v.length>0&&typeof s.reason!=="string")It(t,"contrast.waive needs a contrast.reason explaining why");return{name:u,group:a,native:f.native,lead:f.lead===u,order:Number(i.order),role:h,ansiSource:Ne(t,"meta.ansi_source",i.ansi_source),...N?{booru:N}:{},...E?{booruSites:E}:{},background:l,foreground:m,cursor:b,selectionBackground:d,ansi:$,signature:M.colors,signatureSlots:M.names,ghostty:Qd(t,r.ghostty,{background:l,cursor:b,selectionBackground:d}),waive:v,waiveReason:typeof s.reason==="string"?s.reason:void 0}}function xu(t){let e=Cd(t),n=new Map(e.map((o)=>[o.name,o]));if(n.size!==e.length)It(pe,"group.name must be unique");let r=Jd(t).filter((o)=>o.endsWith(".toml")&&!o.startsWith("_")).map((o)=>Xd(o,Uu(Ku(t,o),"utf8"),n)).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 e){let s=r.filter((c)=>c.group===o.name);if(s.length===0)It(pe,`group "${o.name}" has no themes`);if(!s.some((c)=>c.name===o.lead))It(pe,`group "${o.name}" lead "${o.lead}" is not one of its themes`)}return r}function Wu(t){return t.filter((e)=>e.role===void 0)}function Cn(t){let e=(n,r)=>n<r?-1:n>r?1:0;return[...t].sort((n,r)=>e(n.group.toLowerCase(),r.group.toLowerCase())||e(n.name,r.name))}var Vd=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],Kr=[{name:"use",args:["<palette>"],about:"paint this tab — a unique prefix works: ttheme use ho",section:"tab",shell:!0},{name:"preview",args:[],about:"browse live — focus repaints, enter keeps (this tab or default), esc restores, ? lists keys",section:"tab",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:"tab"},{name:"on",args:[],about:"wear the default palette in new tabs again",section:"tab"},{name:"off",args:[],about:"take the palette and picture off every tab — the terminal's own colors until `ttheme on`",section:"tab"},{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:"tab",shell:!0},{name:"browse",args:[],about:"pick palettes from the catalog in a live picker",section:"catalog"},{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",section:"catalog"},{name:"remove",args:["<palette...>"],about:"uninstall palettes",section:"catalog"},{name:"update",args:[],about:"refresh the catalog from the registry",section:"catalog"},{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:Vd,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}];var Jr=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],_u="# ttheme begin",Cu="# ttheme end",Xn=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function Vn(t,e){let n=`${_u}
15
15
  ${e}
16
- ${Qu}
17
- `;if(Cn.test(t))return t.replace(Cn,n);if(t==="")return n;return`${t.replace(/\n*$/,`
16
+ ${Cu}
17
+ `;if(Xn.test(t))return t.replace(Xn,n);if(t==="")return n;return`${t.replace(/\n*$/,`
18
18
  `)}
19
- ${n}`}function Vn(t){let e=t.replace(/\n?# ttheme begin\n[\s\S]*?# ttheme end(?=\n|$)/,"");if(e===t)return t;return e.trim()===""?"":e.replace(/\n*$/,`
20
- `)}function Ke(t,e){let n=t.replace(Cn,"");return new RegExp(String.raw`^[ \t]*${e}(?:[ \t]*=|[ \t]+\S)`,"m").test(n)}function Wr(t){if(t.TERM_PROGRAM==="WarpTerminal")return"warp";if(t.GHOSTTY_RESOURCES_DIR||t.TERM_PROGRAM==="ghostty")return"ghostty";if(t.KITTY_WINDOW_ID)return"kitty";if(t.WEZTERM_PANE)return"wezterm";if(t.ALACRITTY_WINDOW_ID)return"alacritty";if(t.ITERM_SESSION_ID||t.TERM_PROGRAM==="iTerm.app")return"iterm2";if(t.TERM_PROGRAM==="Apple_Terminal")return"terminal-app";if(t.WT_SESSION&&!t.TERM_PROGRAM)return"windows-terminal";if(t.TERM?.startsWith("foot"))return"foot";return"unknown"}function Zu(t,e,n=""){let r=[];if(!Ke(n,"command")){if(r.push(`command = ${t}/launch-tab.zsh`),!Ke(n,"shell-integration"))r.push("shell-integration = zsh")}if(e)r.push(`theme = ${ut(e)}`);return r.push(`config-file = ?${t}/backgrounds/shown.conf`),r.join(`
21
- `)}function qu(t){return`source ${t}/ttheme.zsh`}var _d="# ttheme settings — uncomment a line to change it; exported variables win over this file",Yn={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 Di(t,e){let n=`: \${${t}:=${e}}`;return Yn[t]?.default===e?`# ${n}`:n}function _u(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function Cd(t,e){if(_u(e).test(t))return t;let n=Yn[e];return`${t.replace(/\n*$/,`
19
+ ${n}`}function Yn(t){let e=t.replace(/\n?# ttheme begin\n[\s\S]*?# ttheme end(?=\n|$)/,"");if(e===t)return t;return e.trim()===""?"":e.replace(/\n*$/,`
20
+ `)}function Ke(t,e){let n=t.replace(Xn,"");return new RegExp(String.raw`^[ \t]*${e}(?:[ \t]*=|[ \t]+\S)`,"m").test(n)}function xr(t){if(t.TERM_PROGRAM==="WarpTerminal")return"warp";if(t.GHOSTTY_RESOURCES_DIR||t.TERM_PROGRAM==="ghostty")return"ghostty";if(t.KITTY_WINDOW_ID)return"kitty";if(t.WEZTERM_PANE)return"wezterm";if(t.ALACRITTY_WINDOW_ID)return"alacritty";if(t.ITERM_SESSION_ID||t.TERM_PROGRAM==="iTerm.app")return"iterm2";if(t.TERM_PROGRAM==="Apple_Terminal")return"terminal-app";if(t.WT_SESSION&&!t.TERM_PROGRAM)return"windows-terminal";if(t.TERM?.startsWith("foot"))return"foot";return"unknown"}function Xu(t,e,n=""){let r=[];if(!Ke(n,"command")){if(r.push(`command = ${t}/launch-tab.zsh`),!Ke(n,"shell-integration"))r.push("shell-integration = zsh")}if(e)r.push(`theme = ${ut(e)}`);return r.push(`config-file = ?${t}/backgrounds/shown.conf`),r.join(`
21
+ `)}function Vu(t){return`source ${t}/ttheme.zsh`}var Yd="# ttheme settings — uncomment a line to change it; exported variables win over this file",zn={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 eo(t,e){let n=`: \${${t}:=${e}}`;return zn[t]?.default===e?`# ${n}`:n}function Yu(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function zd(t,e){if(Yu(e).test(t))return t;let n=zn[e];return`${t.replace(/\n*$/,`
22
22
  `)}
23
23
  ${n.doc}
24
- ${Di(e,n.default)}
25
- `}var Cu=Object.keys(Yn);function to(){let t=Object.entries(Yn).map(([e,n])=>`${n.doc}
26
- ${Di(e,n.default)}`);return`${[_d,...t].join(`
24
+ ${eo(e,n.default)}
25
+ `}var zu=Object.keys(zn);function no(){let t=Object.entries(zn).map(([e,n])=>`${n.doc}
26
+ ${eo(e,n.default)}`);return`${[Yd,...t].join(`
27
27
 
28
28
  `)}
29
- `}function Xu(t,e,n){let r=Di(e,n),i=_u(e);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
29
+ `}function Bu(t,e,n){let r=eo(e,n),i=Yu(e);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
30
30
  `)}
31
31
  ${r}
32
- `}function Vu(t){if(t==="")return to();return Object.keys(Yn).reduce(Cd,t)}function Yu(t,e,n=""){return[...t?[`include themes/${ut(t)}.conf`]:[],`watcher ${e}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!Ke(n,r.split(" ")[0]))].join(`
33
- `)}function zu(t){let e=t.replace(Cn,"");return/^[ \t]*\[colors[\].]/m.test(e)||/^[ \t]*colors[ \t]*[.=]/m.test(e)}var Xd=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,Ku=/^[ \t]*\[/m,Ju=/^[ \t]*import[ \t]*=/m,Vd=/^[ \t]*general[ \t]*[.=]/m;function Yd(t){return t?`[general]
34
- import = ["${t}"]`:""}function zn(t,e){let n=t.replace(Cn,""),r=Xd.exec(n);if(!r){let u=n.search(Ku),h=u<0?n:n.slice(0,u);if(Vd.test(n)||Ju.test(h))return;return Xn(t,Yd(e))}let i=r.index+r[0].length,o=n.slice(i),s=o.search(Ku);if(Ju.test(s<0?o:o.slice(0,s)))return;let c=e?`import = ["${e}"]
32
+ `}function Du(t){if(t==="")return no();return Object.keys(zn).reduce(zd,t)}function th(t,e,n=""){return[...t?[`include themes/${ut(t)}.conf`]:[],`watcher ${e}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!Ke(n,r.split(" ")[0]))].join(`
33
+ `)}function eh(t){let e=t.replace(Xn,"");return/^[ \t]*\[colors[\].]/m.test(e)||/^[ \t]*colors[ \t]*[.=]/m.test(e)}var Bd=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,Qu=/^[ \t]*\[/m,Zu=/^[ \t]*import[ \t]*=/m,Dd=/^[ \t]*general[ \t]*[.=]/m;function tm(t){return t?`[general]
34
+ import = ["${t}"]`:""}function Bn(t,e){let n=t.replace(Xn,""),r=Bd.exec(n);if(!r){let u=n.search(Qu),h=u<0?n:n.slice(0,u);if(Dd.test(n)||Zu.test(h))return;return Vn(t,tm(e))}let i=r.index+r[0].length,o=n.slice(i),s=o.search(Qu);if(Zu.test(s<0?o:o.slice(0,s)))return;let c=e?`import = ["${e}"]
35
35
  `:"";return`${n.slice(0,i)}
36
- ${xu}
37
- ${c}${Qu}${o}`}var Wu=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,zd=/^return config[ \t]*$/gm;function Bu(t){return`dofile(${JSON.stringify(t)})(config)`}var Du=`local wezterm = require 'wezterm'
36
+ ${_u}
37
+ ${c}${Cu}${o}`}var qu=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,em=/^return config[ \t]*$/gm;function nh(t){return`dofile(${JSON.stringify(t)})(config)`}var rh=`local wezterm = require 'wezterm'
38
38
  local config = wezterm.config_builder()
39
39
 
40
- `;function th(t){let e=t.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return e===`${Du}return config
41
- `?"":e}function Bn(t,e){let n=`-- ttheme begin
40
+ `;function ih(t){let e=t.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return e===`${rh}return config
41
+ `?"":e}function Dn(t,e){let n=`-- ttheme begin
42
42
  ${e}
43
43
  -- ttheme end
44
- `;if(Wu.test(t))return t.replace(Wu,n);if(t==="")return`${Du}${n}
44
+ `;if(qu.test(t))return t.replace(qu,n);if(t==="")return`${rh}${n}
45
45
  return config
46
- `;let r=[...t.matchAll(zd)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${n}
47
- ${t.slice(r.index)}`}var eh="[appearance.themes]";function nh(t){let e=t.findIndex((r)=>r.trim()===eh);if(e<0)return;let n=t.findIndex((r,i)=>i>e&&r.trimStart().startsWith("["));return[e,n<0?t.length:n]}function xr(t){let e=t.split(`
48
- `),n=nh(e);if(!n)return;return e.slice(n[0]+1,n[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function rh(t){return`{ custom = { name = "${t}", path = "${ut(t)}.yaml" } }`}function Qr(t,e){let n=t.split(`
49
- `),r=nh(n);if(!r)return e===void 0?t:`${t.replace(/\n*$/,`
46
+ `;let r=[...t.matchAll(em)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${n}
47
+ ${t.slice(r.index)}`}var oh="[appearance.themes]";function sh(t){let e=t.findIndex((r)=>r.trim()===oh);if(e<0)return;let n=t.findIndex((r,i)=>i>e&&r.trimStart().startsWith("["));return[e,n<0?t.length:n]}function Wr(t){let e=t.split(`
48
+ `),n=sh(e);if(!n)return;return e.slice(n[0]+1,n[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function ch(t){return`{ custom = { name = "${t}", path = "${ut(t)}.yaml" } }`}function Qr(t,e){let n=t.split(`
49
+ `),r=sh(n);if(!r)return e===void 0?t:`${t.replace(/\n*$/,`
50
50
  `)}
51
- ${eh}
51
+ ${oh}
52
52
  theme = ${e}
53
53
  `;let i=n.findIndex((o,s)=>s>r[0]&&s<r[1]&&/^theme\s*=/.test(o));if(i>=0)n.splice(i,1,...e===void 0?[]:[`theme = ${e}`]);else if(e!==void 0)n.splice(r[0]+1,0,`theme = ${e}`);return n.join(`
54
- `)}function eo(t,e,n=[]){for(let a of t)for(let f of[a.name,a.group,a.native??"",a.ansiSource])if(/["$`\\]/.test(f))throw Error(`${a.name}: "${f}" contains a character that breaks zsh quoting`);let r=Math.max(0,...t.map((a)=>a.name.length)),i=(a,f)=>` ${a.name.padEnd(r)} "${f}"`,o=(a)=>a.map((f)=>f.name).join(" "),s=Ge(t),c=(a)=>`'${a.replaceAll("'","'\\''")}'`,u=Kr.filter((a)=>a.section!=="setup"&&!a.hidden),h=u.flatMap((a,f)=>f>0&&u[f-1]?.section!==a.section?["-",a.name]:[a.name]);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${ie.version}`,"",'# the palette new tabs open with, which the iTerm2 "ttheme · default" profile wears',`typeset -g TTHEME_STARTUP=${e??""}`,"","# the terminals ttheme is wired into: a picture change reaches every one of them, from whichever runs the shell",`typeset -ga TTHEME_TERMINALS=(${n.join(" ")})`,"","# the commands the shell layer knows (src/verbs.ts): help, completion and argument checks read them",`typeset -ga TTHEME_VERBS=(${h.join(" ")})`,`typeset -ga TTHEME_SHELL_VERBS=(${u.filter((a)=>a.shell).map((a)=>a.name).join(" ")})`,"typeset -gA TTHEME_VERB_ARGS=(",...u.map((a)=>` ${a.name} ${c(a.args.join(" "))}`),")","typeset -gA TTHEME_VERB_ABOUT=(",...u.map((a)=>` ${a.name} ${c(a.about)}`),")","","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${Cu.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${to().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...t.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(_n(s))})`,"","typeset -gA TTHEME_GROUP=(",...t.map((a)=>i(a,a.group)),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...t.filter((a)=>a.native).map((a)=>i(a,a.native??"")),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...t.map((a)=>i(a,a.ansiSource)),")",""].join(`
55
- `)}var no={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:eo(t.map(_i))}]}};var Bd=["black","red","green","yellow","blue","magenta","cyan","white"];function ih(t,e){return[` ${t}:`,...Bd.map((n,r)=>` ${n}: "${e[r]}"`)]}var Dn={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(t){let e=[`name: "${t.name}"`,`background: "${t.background}"`,`foreground: "${t.foreground}"`,`accent: "${t.cursor}"`,`cursor: "${t.cursor}"`,`details: ${Bt(t.background)<0.18?"darker":"lighter"}`,"terminal_colors:",...ih("normal",t.ansi.slice(0,8)),...ih("bright",t.ansi.slice(8,16)),""].join(`
56
- `);return[{path:`warp/themes/${ut(t.name)}.yaml`,content:e}]}};var oh=(t)=>`[${t.map((e)=>`"${e}"`).join(", ")}]`,tr={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(t){let e=["[metadata]",`name = "${ut(t.name)}"`,`origin_url = "${t.ansiSource}"`,"","[colors]",`foreground = "${t.foreground}"`,`background = "${t.background}"`,`cursor_bg = "${t.cursor}"`,`cursor_border = "${t.cursor}"`,`cursor_fg = "${t.background}"`,`selection_bg = "${t.selectionBackground}"`,`selection_fg = "${t.foreground}"`,"",`ansi = ${oh(t.ansi.slice(0,8))}`,`brights = ${oh(t.ansi.slice(8,16))}`,""].join(`
57
- `);return[{path:`wezterm/colors/${ut(t.name)}.toml`,content:e}]}},nn=(t)=>JSON.stringify(t);function sh(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${nn(t.path)}`,`local COLORS = ${nn(t.colors)}`,`local BACKGROUNDS = ${nn(t.backgrounds)}`,`local STARTUP = ${t.startup?nn(ut(t.startup)):"nil"}`,"local PALETTES = {",...t.palettes.map((e)=>` [${nn(e.name)}] = ${nn(e.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 .. '.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(`
58
- `)}var ch=["black","red","green","yellow","blue","purple","cyan","white"];function uh(t){return{name:ut(t.name),background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(ch.map((e,n)=>[e,t.ansi[n]])),...Object.fromEntries(ch.map((e,n)=>[`bright${e[0]?.toUpperCase()}${e.slice(1)}`,t.ansi[n+8]]))}}function ro(t,e,n){let r={...e&&n?{profiles:[{updates:e,colorScheme:ut(n)}]}:{},schemes:t.map(uh)};return`${JSON.stringify(r,null,2)}
59
- `}var er={id:"windows-terminal",limits:"no kitty graphics, so no pictures; OSC repaints per pane",emit(t){return[{path:`windows-terminal/schemes/${ut(t.name)}.json`,content:`${JSON.stringify(uh(t),null,2)}
60
- `}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:ro(t)}]}};function ut(t){return`ttheme-${t}`}function Xe(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}var ah=nr(import.meta.dirname,".."),tm=nr(ah,"themes"),io=nr(ah,"dist"),Zr=[Hn,Pn,On,tr,jn,er,Dn],em=[no,Ci],M$=Zr.map((t)=>t.id);async function qr({only:t}={}){if(typeof Bun>"u")throw Error("needs bun — run it from a checkout: bun src/bin.ts build");let e=t&&t.length>0?Zr.filter((o)=>t.includes(o.id)):Zr,n=Au(tm),r=Hs(n);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(e.length===Zr.length)hh(io,{recursive:!0,force:!0});else for(let o of e)hh(nr(io,o.id),{recursive:!0,force:!0});let i=0;for(let o of[...e,...em]){let s=n.flatMap((h)=>o.emit?.(h)??[]),c=o.emitShared?.(n)??[];for(let h of[...s,...c])await Bun.write(nr(io,h.path),h.content),i++;let u=s.length>0?`${n.length} themes${o.limits?` (${o.limits})`:""}`:c.map((h)=>Dd(h.path)).join(" ");console.log(` ${o.id.padEnd(16)} ${u}`)}console.log(`
61
- ${n.length} themes (${Uu(n).length} in the new-tab rotation) -> ${i} files in dist/`)}import{spawn as Fa}from"node:child_process";import{createHash as Na}from"node:crypto";import{existsSync as an,mkdirSync as fr,mkdtempSync as Rp,readFileSync as Ra,rmSync as Io,statSync as Op,writeFileSync as lr}from"node:fs";import{tmpdir as Hp}from"node:os";import{dirname as ci,join as ae}from"node:path";import{pathToFileURL as jp}from"node:url";import{execFile as nm}from"node:child_process";import{createHash as dh}from"node:crypto";import{existsSync as rm,mkdtempSync as im,readFileSync as Vr,rmSync as om,statSync as mh,writeFileSync as ph}from"node:fs";import{homedir as sm,tmpdir as cm}from"node:os";import{join as _r}from"node:path";import{fileURLToPath as um}from"node:url";import{promisify as hm}from"node:util";var ce=hm(nm),Cr=67108864,am=4096,co=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],fm=["text/uri-list","text/plain;charset=utf-8","text/plain"],oo=[...co,"text/uri-list","text/plain"];function lm(t){try{return mh(t).isFile()}catch{return!1}}function gm(t){let e=[],n="",r="",i=!1;for(let o=0;o<t.length;o++){let s=t[o];if(r==="'")if(s==="'")r="";else n+=s;else if(r==='"')if(s==='"')r="";else if(s==="\\"&&'"\\$`'.includes(t[o+1]??""))n+=t[++o];else n+=s;else if(s==="\\"&&o+1<t.length)n+=t[++o],i=!0;else if(s==="'"||s==='"')r=s,i=!0;else if(/\s/.test(s)){if(i)e.push(n);n="",i=!1}else n+=s,i=!0}if(i)e.push(n);return e}function fh(t){if(/^file:\/\//i.test(t))try{return um(t)}catch{return}if(t.startsWith("~/"))return _r(sm(),t.slice(2));return t.startsWith("/")?t:void 0}function Yr(t,e=lm){let n=[];for(let r of t.replace(/\r\n?/g,`
54
+ `)}function ro(t,e,n=[]){for(let a of t)for(let f of[a.name,a.group,a.native??"",a.ansiSource])if(/["$`\\]/.test(f))throw Error(`${a.name}: "${f}" contains a character that breaks zsh quoting`);let r=Math.max(0,...t.map((a)=>a.name.length)),i=(a,f)=>` ${a.name.padEnd(r)} "${f}"`,o=(a)=>a.map((f)=>f.name).join(" "),s=Ge(t),c=(a)=>`'${a.replaceAll("'","'\\''")}'`,u=Kr.filter((a)=>a.section!=="setup"&&!a.hidden),h=u.flatMap((a,f)=>f>0&&u[f-1]?.section!==a.section?["-",a.name]:[a.name]);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${xt.version}`,"",'# the palette new tabs open with, which the iTerm2 "ttheme · default" profile wears',`typeset -g TTHEME_STARTUP=${e??""}`,"","# the terminals ttheme is wired into: a picture change reaches every one of them, from whichever runs the shell",`typeset -ga TTHEME_TERMINALS=(${n.join(" ")})`,"","# the commands the shell layer knows (src/verbs.ts): help, completion and argument checks read them",`typeset -ga TTHEME_VERBS=(${h.join(" ")})`,`typeset -ga TTHEME_SHELL_VERBS=(${u.filter((a)=>a.shell).map((a)=>a.name).join(" ")})`,"typeset -gA TTHEME_VERB_ARGS=(",...u.map((a)=>` ${a.name} ${c(a.args.join(" "))}`),")","typeset -gA TTHEME_VERB_ABOUT=(",...u.map((a)=>` ${a.name} ${c(a.about)}`),")","","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${zu.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${no().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...t.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(Cn(s))})`,"","typeset -gA TTHEME_GROUP=(",...t.map((a)=>i(a,a.group)),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...t.filter((a)=>a.native).map((a)=>i(a,a.native??"")),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...t.map((a)=>i(a,a.ansiSource)),")",""].join(`
55
+ `)}var io={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:ro(t.map(Xi))}]}};var nm=["black","red","green","yellow","blue","magenta","cyan","white"];function uh(t,e){return[` ${t}:`,...nm.map((n,r)=>` ${n}: "${e[r]}"`)]}var tr={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(t){let e=[`name: "${t.name}"`,`background: "${t.background}"`,`foreground: "${t.foreground}"`,`accent: "${t.cursor}"`,`cursor: "${t.cursor}"`,`details: ${te(t.background)<0.18?"darker":"lighter"}`,"terminal_colors:",...uh("normal",t.ansi.slice(0,8)),...uh("bright",t.ansi.slice(8,16)),""].join(`
56
+ `);return[{path:`warp/themes/${ut(t.name)}.yaml`,content:e}]}};var hh=(t)=>`[${t.map((e)=>`"${e}"`).join(", ")}]`,er={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(t){let e=["[metadata]",`name = "${ut(t.name)}"`,`origin_url = "${t.ansiSource}"`,"","[colors]",`foreground = "${t.foreground}"`,`background = "${t.background}"`,`cursor_bg = "${t.cursor}"`,`cursor_border = "${t.cursor}"`,`cursor_fg = "${t.background}"`,`selection_bg = "${t.selectionBackground}"`,`selection_fg = "${t.foreground}"`,"",`ansi = ${hh(t.ansi.slice(0,8))}`,`brights = ${hh(t.ansi.slice(8,16))}`,""].join(`
57
+ `);return[{path:`wezterm/colors/${ut(t.name)}.toml`,content:e}]}},on=(t)=>JSON.stringify(t);function ah(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${on(t.path)}`,`local COLORS = ${on(t.colors)}`,`local BACKGROUNDS = ${on(t.backgrounds)}`,`local STARTUP = ${t.startup?on(ut(t.startup)):"nil"}`,"local PALETTES = {",...t.palettes.map((e)=>` [${on(e.name)}] = ${on(e.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 .. '.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(`
58
+ `)}var fh=["black","red","green","yellow","blue","purple","cyan","white"];function lh(t){return{name:ut(t.name),background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(fh.map((e,n)=>[e,t.ansi[n]])),...Object.fromEntries(fh.map((e,n)=>[`bright${e[0]?.toUpperCase()}${e.slice(1)}`,t.ansi[n+8]]))}}function oo(t,e,n){let r={...e&&n?{profiles:[{updates:e,colorScheme:ut(n)}]}:{},schemes:t.map(lh)};return`${JSON.stringify(r,null,2)}
59
+ `}var nr={id:"windows-terminal",limits:"no kitty graphics, so no pictures; OSC repaints per pane",emit(t){return[{path:`windows-terminal/schemes/${ut(t.name)}.json`,content:`${JSON.stringify(lh(t),null,2)}
60
+ `}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:oo(t)}]}};function ut(t){return`ttheme-${t}`}function Ye(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}var dh=rr(import.meta.dirname,".."),im=rr(dh,"themes"),so=rr(dh,"dist"),Zr=[jn,Gn,Hn,er,Pn,nr,tr],om=[io,Vi],R$=Zr.map((t)=>t.id);async function qr({only:t}={}){if(typeof Bun>"u")throw Error("needs bun — run it from a checkout: bun src/bin.ts build");let e=t&&t.length>0?Zr.filter((o)=>t.includes(o.id)):Zr,n=xu(im),r=Ls(n);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(e.length===Zr.length)gh(so,{recursive:!0,force:!0});else for(let o of e)gh(rr(so,o.id),{recursive:!0,force:!0});let i=0;for(let o of[...e,...om]){let s=n.flatMap((h)=>o.emit?.(h)??[]),c=o.emitShared?.(n)??[];for(let h of[...s,...c])await Bun.write(rr(so,h.path),h.content),i++;let u=s.length>0?`${n.length} themes${o.limits?` (${o.limits})`:""}`:c.map((h)=>rm(h.path)).join(" ");console.log(` ${o.id.padEnd(16)} ${u}`)}console.log(`
61
+ ${n.length} themes (${Wu(n).length} in the new-tab rotation) -> ${i} files in dist/`)}import{spawn as Ha}from"node:child_process";import{createHash as ja}from"node:crypto";import{existsSync as fn,mkdirSync as lr,mkdtempSync as Pp,readFileSync as Pa,rmSync as No,statSync as Gp,writeFileSync as gr}from"node:fs";import{tmpdir as Lp}from"node:os";import{dirname as ci,join as ae}from"node:path";import{pathToFileURL as Tp}from"node:url";import{execFile as sm}from"node:child_process";import{createHash as bh}from"node:crypto";import{existsSync as cm,mkdtempSync as um,readFileSync as Vr,rmSync as hm,statSync as $h,writeFileSync as kh}from"node:fs";import{homedir as am,tmpdir as fm}from"node:os";import{join as _r}from"node:path";import{fileURLToPath as lm}from"node:url";import{promisify as gm}from"node:util";var ce=gm(sm),Cr=67108864,dm=4096,ho=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],mm=["text/uri-list","text/plain;charset=utf-8","text/plain"],co=[...ho,"text/uri-list","text/plain"];function pm(t){try{return $h(t).isFile()}catch{return!1}}function wm(t){let e=[],n="",r="",i=!1;for(let o=0;o<t.length;o++){let s=t[o];if(r==="'")if(s==="'")r="";else n+=s;else if(r==='"')if(s==='"')r="";else if(s==="\\"&&'"\\$`'.includes(t[o+1]??""))n+=t[++o];else n+=s;else if(s==="\\"&&o+1<t.length)n+=t[++o],i=!0;else if(s==="'"||s==='"')r=s,i=!0;else if(/\s/.test(s)){if(i)e.push(n);n="",i=!1}else n+=s,i=!0}if(i)e.push(n);return e}function mh(t){if(/^file:\/\//i.test(t))try{return lm(t)}catch{return}if(t.startsWith("~/"))return _r(am(),t.slice(2));return t.startsWith("/")?t:void 0}function Yr(t,e=pm){let n=[];for(let r of t.replace(/\r\n?/g,`
62
62
  `).split(`
63
- `)){let i=fh(r.trim());if(i&&e(i)){n.push(i);continue}for(let o of gm(r)){if(/^https?:\/\/\S+$/i.test(o)){n.push(o);continue}let s=fh(o);if(s&&e(s))n.push(s)}}return n}function dm(t){if(t[0]!==255||t[1]!==216)return null;let e=2;while(e+9<t.length){if(t[e]!==255){e++;continue}let n=t[e+1];if(n===255){e++;continue}let r=t[e+2]<<8|t[e+3];if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204)return{height:t[e+5]<<8|t[e+6],width:t[e+7]<<8|t[e+8]};e+=2+r}return null}function lh(t){let e=Tn(t)?An(t):dm(t);if(!e)return;return{ext:Tn(t)?"png":"jpg",width:e.width,height:e.height}}async function Xr(t,e){let n=lh(t);if(n&&n.width*n.height<=Ae)return{bytes:t,...n,source:e};if(process.platform!=="darwin")throw Error(n?`${n.width}×${n.height} is over ${Ae/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=im(_r(cm(),"ttheme-attach-"));try{let i=_r(r,"in"),o=_r(r,"out.png");ph(i,t);let s=!n||n.width*n.height>Ae?["--resampleHeightWidthMax",String(am)]:[];await ce("sips",["-s","format","png",...s,i,"--out",o]).catch(()=>{throw Error("that is not a picture macOS can read")});let c=new Uint8Array(Vr(o)),u=lh(c);if(!u)throw Error("that is not a picture macOS can read");return{bytes:c,...u,source:e}}finally{om(r,{recursive:!0,force:!0})}}async function uo(t,e){if(/^https?:\/\//i.test(t)){let n=await fetch(t,{headers:{"User-Agent":Vi},signal:e});if(!n.ok)throw Error(`${new URL(t).host} answered ${n.status}`);if(Number(n.headers.get("content-length")??0)>Cr)throw Error("that picture is over 64 MB");let r=new Uint8Array(await n.arrayBuffer());if(/^text\/html/i.test(n.headers.get("content-type")??""))throw Error(`${new URL(t).host} sent a web page, not a picture — copy the image address instead`);return Xr(r,t)}if(mh(t).size>Cr)throw Error("that picture is over 64 MB");return Xr(new Uint8Array(Vr(t)),t)}var wh=new Map,zr={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:(t)=>wh.get(t)??"",parse:()=>[],count:()=>0};function bh(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function $h(t,e){wh.set(t,e)}function kh(t){return Number.parseInt(dh("sha1").update(t).digest("hex").slice(0,8),16)%me}var mm=`ObjC.import('AppKit')
63
+ `)){let i=mh(r.trim());if(i&&e(i)){n.push(i);continue}for(let o of wm(r)){if(/^https?:\/\/\S+$/i.test(o)){n.push(o);continue}let s=mh(o);if(s&&e(s))n.push(s)}}return n}function bm(t){if(t[0]!==255||t[1]!==216)return null;let e=2;while(e+9<t.length){if(t[e]!==255){e++;continue}let n=t[e+1];if(n===255){e++;continue}let r=t[e+2]<<8|t[e+3];if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204)return{height:t[e+5]<<8|t[e+6],width:t[e+7]<<8|t[e+8]};e+=2+r}return null}function ph(t){let e=An(t)?Un(t):bm(t);if(!e)return;return{ext:An(t)?"png":"jpg",width:e.width,height:e.height}}async function Xr(t,e){let n=ph(t);if(n&&n.width*n.height<=Ae)return{bytes:t,...n,source:e};if(process.platform!=="darwin")throw Error(n?`${n.width}×${n.height} is over ${Ae/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=um(_r(fm(),"ttheme-attach-"));try{let i=_r(r,"in"),o=_r(r,"out.png");kh(i,t);let s=!n||n.width*n.height>Ae?["--resampleHeightWidthMax",String(dm)]:[];await ce("sips",["-s","format","png",...s,i,"--out",o]).catch(()=>{throw Error("that is not a picture macOS can read")});let c=new Uint8Array(Vr(o)),u=ph(c);if(!u)throw Error("that is not a picture macOS can read");return{bytes:c,...u,source:e}}finally{hm(r,{recursive:!0,force:!0})}}async function ao(t,e){if(/^https?:\/\//i.test(t)){let n=await fetch(t,{headers:{"User-Agent":zi},signal:e});if(!n.ok)throw Error(`${new URL(t).host} answered ${n.status}`);if(Number(n.headers.get("content-length")??0)>Cr)throw Error("that picture is over 64 MB");let r=new Uint8Array(await n.arrayBuffer());if(/^text\/html/i.test(n.headers.get("content-type")??""))throw Error(`${new URL(t).host} sent a web page, not a picture — copy the image address instead`);return Xr(r,t)}if($h(t).size>Cr)throw Error("that picture is over 64 MB");return Xr(new Uint8Array(Vr(t)),t)}var Eh=new Map,zr={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:(t)=>Eh.get(t)??"",parse:()=>[],count:()=>0};function yh(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function vh(t,e){Eh.set(t,e)}function Mh(t){return Number.parseInt(bh("sha1").update(t).digest("hex").slice(0,8),16)%me}var $m=`ObjC.import('AppKit')
64
64
  function run(argv) {
65
65
  const pb = $.NSPasteboard.generalPasteboard
66
66
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -85,16 +85,16 @@ function run(argv) {
85
85
  if (web && web.count > 0) return web.objectAtIndex(0).absoluteString.js
86
86
  const text = pb.stringForType('public.utf8-plain-text')
87
87
  return text && !text.isNil() ? text.js : ''
88
- }`,pm=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
88
+ }`,km=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
89
89
  $c = [Windows.Forms.Clipboard]
90
90
  $f = $c::GetFileDropList(); if ($f.Count) { $f; exit }
91
91
  $p = Join-Path $env:TEMP 'ttheme-clipboard.png'
92
92
  $s = $c::GetData('PNG'); if ($s -is [IO.MemoryStream]) { [IO.File]::WriteAllBytes($p, $s.ToArray()); $p; exit }
93
93
  $i = $c::GetImage(); if ($i) { $i.Save($p, [Drawing.Imaging.ImageFormat]::Png); $p; exit }
94
- $c::GetText()`;function Eh(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(Vr("/proc/version","utf8"))}catch{return!1}}async function wm(t){let e=Boolean(process.env.WAYLAND_DISPLAY),n=e?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await ce(n[0],n[1])).stdout.split(`
95
- `).map((s)=>s.trim()),i=(s)=>e?ce("wl-paste",["--no-newline","--type",s],{encoding:"buffer",maxBuffer:Cr}):ce("xclip",["-selection","clipboard","-t",s,"-o"],{encoding:"buffer",maxBuffer:Cr});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let o=co.find((s)=>r.includes(s));if(o)return ph(t,(await i(o)).stdout),{image:t};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 ho(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function yh(t){if(process.platform==="darwin"){let e=(await ce("osascript",["-l","JavaScript","-e",mm,t])).stdout.trim();return e===t?{image:t}:{text:e}}if(Eh()){let e=(await ce("powershell.exe",["-NoProfile","-STA","-Command",pm])).stdout.replace(/\r/g,"").trim(),n=await Promise.all(e.split(`
94
+ $c::GetText()`;function Sh(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(Vr("/proc/version","utf8"))}catch{return!1}}async function Em(t){let e=Boolean(process.env.WAYLAND_DISPLAY),n=e?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await ce(n[0],n[1])).stdout.split(`
95
+ `).map((s)=>s.trim()),i=(s)=>e?ce("wl-paste",["--no-newline","--type",s],{encoding:"buffer",maxBuffer:Cr}):ce("xclip",["-selection","clipboard","-t",s,"-o"],{encoding:"buffer",maxBuffer:Cr});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let o=ho.find((s)=>r.includes(s));if(o)return kh(t,(await i(o)).stdout),{image:t};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 fo(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function Ih(t){if(process.platform==="darwin"){let e=(await ce("osascript",["-l","JavaScript","-e",$m,t])).stdout.trim();return e===t?{image:t}:{text:e}}if(Sh()){let e=(await ce("powershell.exe",["-NoProfile","-STA","-Command",km])).stdout.replace(/\r/g,"").trim(),n=await Promise.all(e.split(`
96
96
  `).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await ce("wslpath",["-u",r])).stdout.trim():r));return n.length===1&&/ttheme-clipboard\.png$/.test(n[0]??"")?{image:n[0]}:{text:n.join(`
97
- `)}}if(process.platform==="linux")return wm(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var bm=`ObjC.import('AppKit')
97
+ `)}}if(process.platform==="linux")return Em(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var ym=`ObjC.import('AppKit')
98
98
  function run() {
99
99
  const pb = $.NSPasteboard.generalPasteboard
100
100
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -106,8 +106,8 @@ function run() {
106
106
  picture = ['public.png', 'public.tiff', 'public.jpeg', 'public.heic'].some((t) => types.includes(t))
107
107
  }
108
108
  return pb.changeCount + '\\t' + (picture ? 'picture' : '')
109
- }`;async function Mh(){if(ho())return;if(process.platform==="darwin"){let[t="",e=""]=(await ce("osascript",["-l","JavaScript","-e",bm])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!Eh()){let e=Boolean(process.env.WAYLAND_DISPLAY)?(await ce("wl-paste",["--list-types"])).stdout:(await ce("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:e,picture:/^image\//m.test(e)}}return}function vh(t){let e=[],n="",r=0;while(r<t.length){if(t[r]!=="\x1B"){n+=t[r],r++;continue}if(t.startsWith("\x1B[200~",r)){let o=t.indexOf("\x1B[201~",r+6);if(o===-1)return{events:e,keys:n,pending:t.slice(r)};e.push({kind:"paste",text:t.slice(r+6,o)}),r=o+6;continue}if(t.startsWith("\x1B]5522;",r)||t.startsWith("\x1B]72;",r)){let o=[t.indexOf("\x1B\\",r),t.indexOf("\x07",r)].filter((f)=>f!==-1);if(o.length===0)return{events:e,keys:n,pending:t.slice(r)};let s=Math.min(...o),c=t.slice(r+2,s),[u="",h="",...a]=c.split(";");e.push({kind:"osc",code:u,meta:$m(h),payload:a.join(";")}),r=s+(t[s]==="\x07"?1:2);continue}let i=/^\[\?([\d;]*)(\$y|c)/.exec(t.slice(r+1,r+64));if(i){if(i[2]==="c")e.push({kind:"attributes"});else{let[o="0",s="0"]=(i[1]??"").split(";");e.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(t.slice(r+1)))return{events:e,keys:n,pending:t.slice(r)};n+=t[r],r++}return{events:e,keys:n,pending:""}}function $m(t){let e={};for(let n of t.split(":")){let r=n.indexOf("=");if(r>0)e[n.slice(0,r)]=n.slice(r+1)}return e}var rr=(t)=>Buffer.from(t).toString("base64"),so=(t)=>Buffer.from(t,"base64");function gh(t,e){return e.find((n)=>t.includes(n))}class ao{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=rr(dh("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(t,e){this.send=t,this.deliver=e}start(){let t="\x1B[?2004h";if(this.clipboard)t+="\x1B[?5522h";if(this.drops)t+=`\x1B]72;t=a;${oo.join(" ")}\x1B\\`;this.send(t)}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=${rr("ttheme")}:pw=${this.pw};${rr(".")}\x1B\\`)}take(t){if(t.code==="5522")this.clip(t.meta,t.payload);else if(t.code==="72")this.drop(t.meta,t.payload)}clip(t,e){if(t.type!=="read")return;let n=t.status??"";if(n==="OK"){if(this.reading??={mime:".",chunks:[],pw:t.pw??"",listing:!0},t.pw)this.reading.pw=t.pw;return}let r=this.reading;if(!r)return;if(n==="DATA"){if(r.mime=t.mime?so(t.mime).toString("utf8"):r.mime,e)r.chunks.push(so(e));return}if(this.reading=void 0,n!=="DONE"){this.deliver({kind:"error",message:n==="EPERM"?"the clipboard read was not allowed":`the terminal answered ${n}`});return}let i=Buffer.concat(r.chunks);if(r.listing){let o=i.toString("utf8").split(/\s+/).filter(Boolean),s=gh(o,[...co,...fm]);if(!s){this.deliver({kind:"text",text:""});return}let c=r.pw||this.pw,u=r.pw?"Paste event":"ttheme";this.reading={mime:s,chunks:[],pw:c,listing:!1},this.send(`\x1B]5522;type=read:name=${rr(u)}:pw=${c};${rr(s)}\x1B\\`);return}this.deliver(r.mime.startsWith("image/")?{kind:"bytes",bytes:new Uint8Array(i),source:"clipboard"}:{kind:"text",text:i.toString("utf8")})}drop(t,e){let n=t.t??"";if(n==="m"){if(t.x==="-1"){this.offered=[];return}if(e){this.offered=e.split(" ").filter(Boolean);let c=oo.filter((u)=>this.offered.includes(u));this.send(`\x1B]72;t=m:o=${c.length>0?1:0};${c.join(" ")}\x1B\\`)}return}if(n==="M"){let c=e?e.split(" ").filter(Boolean):this.offered,u=gh(c,oo);if(!u){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:c,index:c.indexOf(u)+1,chunks:[]},this.send(`\x1B]72;t=r:x=${this.dropping.index}\x1B\\`);return}let r=this.dropping;if(!r)return;if(n==="R"){this.dropping=void 0,this.send("\x1B]72;t=r:o=0\x1B\\"),this.deliver({kind:"error",message:`the drop failed: ${e.split(":")[0]||"unknown error"}`});return}if(n!=="r"&&n!=="")return;if(e)r.chunks.push(so(e));if(t.m==="1"||e)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 c=i.toString("utf8"),u=o==="text/uri-list"?Yr(c).find((h)=>rm(h)):void 0;s=u?{kind:"bytes",bytes:new Uint8Array(Vr(u)),source:u}:{kind:"text",text:c}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(s)}}import{existsSync as km,readFileSync as Em}from"node:fs";import{join as ym}from"node:path";var Sh="https://kecan0406.github.io/ttheme/manifest.json",Mm=20000;function Br(t){return ym(t,"ttheme","catalog.json")}function Dr(t,e){Tt(Br(t),`${JSON.stringify(e,null,2)}
110
- `)}function Ut(t){let e=Br(t);if(!km(e))throw Error(`no catalog at ${e} — run \`ttheme init\` first`);return Ih(Em(e,"utf8"))}function Ih(t){let e;try{e=JSON.parse(t)}catch{throw Error("catalog is not valid JSON")}let n=e;if(typeof n?.version!=="string"||!Array.isArray(n.palettes))throw Error("catalog has no version or palettes");for(let r of n.palettes)if(typeof r?.name!=="string"||!Array.isArray(r.ansi)||r.ansi.length!==16)throw Error(`catalog entry ${JSON.stringify(r?.name)} is missing name or its 16 ANSI colors`);return n}async function Fh(t){let e;try{e=await fetch(t,{signal:AbortSignal.timeout(Mm)})}catch(n){throw Error(`cannot reach the registry at ${t} — ${n instanceof Error?n.message:String(n)}`)}if(!e.ok)throw Error(`registry at ${t} answered ${e.status}`);return Ih(await e.text())}function Nh(t){let e=new Set(t.waived??[]);return Ir.flatMap((n,r)=>{let i=t.gate?.[r];if(e.has(n.rule)||typeof i!=="number")return[];if(n.min!==void 0&&i<n.min)return[`${n.label} ${i} < ${n.min}`];if(n.max!==void 0&&i>n.max)return[`${n.label} ${i} > ${n.max}`];return[]})}function ti(t,e){let n=t.find((r)=>r.name===e);if(!n)throw Error(`no palette named ${e} in the catalog — ${fo(t,[e])}`);return n}function fo(t,e){let n=e.map((s)=>s.toLowerCase()),r=t.filter((s)=>n.some((c)=>s.name.includes(c))),i=t.filter((s)=>!r.includes(s)&&n.some((c)=>s.group.toLowerCase().includes(c))),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 Rh(t,e){let n=e.toLowerCase();return t.filter((r)=>[r.name,r.group,r.native??"",r.ansiSource].some((i)=>i.toLowerCase().includes(n)))}function Oh(t,e,n){let r=n.toLowerCase(),i=(o)=>o.name===e.name?0:o.group===e.group?1:2;return t.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 Hh(t,e){return t.booruSites?.[e]??(t.booru?[t.booru]:[])}import{spawn as vm}from"node:child_process";var Sm=30000,Im=3,Fm=97,Nm=`ObjC.import('Vision')
109
+ }`;async function Fh(){if(fo())return;if(process.platform==="darwin"){let[t="",e=""]=(await ce("osascript",["-l","JavaScript","-e",ym])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!Sh()){let e=Boolean(process.env.WAYLAND_DISPLAY)?(await ce("wl-paste",["--list-types"])).stdout:(await ce("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:e,picture:/^image\//m.test(e)}}return}function Nh(t){let e=[],n="",r=0;while(r<t.length){if(t[r]!=="\x1B"){n+=t[r],r++;continue}if(t.startsWith("\x1B[200~",r)){let o=t.indexOf("\x1B[201~",r+6);if(o===-1)return{events:e,keys:n,pending:t.slice(r)};e.push({kind:"paste",text:t.slice(r+6,o)}),r=o+6;continue}if(t.startsWith("\x1B]5522;",r)||t.startsWith("\x1B]72;",r)){let o=[t.indexOf("\x1B\\",r),t.indexOf("\x07",r)].filter((f)=>f!==-1);if(o.length===0)return{events:e,keys:n,pending:t.slice(r)};let s=Math.min(...o),c=t.slice(r+2,s),[u="",h="",...a]=c.split(";");e.push({kind:"osc",code:u,meta:vm(h),payload:a.join(";")}),r=s+(t[s]==="\x07"?1:2);continue}let i=/^\[\?([\d;]*)(\$y|c)/.exec(t.slice(r+1,r+64));if(i){if(i[2]==="c")e.push({kind:"attributes"});else{let[o="0",s="0"]=(i[1]??"").split(";");e.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(t.slice(r+1)))return{events:e,keys:n,pending:t.slice(r)};n+=t[r],r++}return{events:e,keys:n,pending:""}}function vm(t){let e={};for(let n of t.split(":")){let r=n.indexOf("=");if(r>0)e[n.slice(0,r)]=n.slice(r+1)}return e}var ir=(t)=>Buffer.from(t).toString("base64"),uo=(t)=>Buffer.from(t,"base64");function wh(t,e){return e.find((n)=>t.includes(n))}class lo{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=ir(bh("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(t,e){this.send=t,this.deliver=e}start(){let t="\x1B[?2004h";if(this.clipboard)t+="\x1B[?5522h";if(this.drops)t+=`\x1B]72;t=a;${co.join(" ")}\x1B\\`;this.send(t)}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=${ir("ttheme")}:pw=${this.pw};${ir(".")}\x1B\\`)}take(t){if(t.code==="5522")this.clip(t.meta,t.payload);else if(t.code==="72")this.drop(t.meta,t.payload)}clip(t,e){if(t.type!=="read")return;let n=t.status??"";if(n==="OK"){if(this.reading??={mime:".",chunks:[],pw:t.pw??"",listing:!0},t.pw)this.reading.pw=t.pw;return}let r=this.reading;if(!r)return;if(n==="DATA"){if(r.mime=t.mime?uo(t.mime).toString("utf8"):r.mime,e)r.chunks.push(uo(e));return}if(this.reading=void 0,n!=="DONE"){this.deliver({kind:"error",message:n==="EPERM"?"the clipboard read was not allowed":`the terminal answered ${n}`});return}let i=Buffer.concat(r.chunks);if(r.listing){let o=i.toString("utf8").split(/\s+/).filter(Boolean),s=wh(o,[...ho,...mm]);if(!s){this.deliver({kind:"text",text:""});return}let c=r.pw||this.pw,u=r.pw?"Paste event":"ttheme";this.reading={mime:s,chunks:[],pw:c,listing:!1},this.send(`\x1B]5522;type=read:name=${ir(u)}:pw=${c};${ir(s)}\x1B\\`);return}this.deliver(r.mime.startsWith("image/")?{kind:"bytes",bytes:new Uint8Array(i),source:"clipboard"}:{kind:"text",text:i.toString("utf8")})}drop(t,e){let n=t.t??"";if(n==="m"){if(t.x==="-1"){this.offered=[];return}if(e){this.offered=e.split(" ").filter(Boolean);let c=co.filter((u)=>this.offered.includes(u));this.send(`\x1B]72;t=m:o=${c.length>0?1:0};${c.join(" ")}\x1B\\`)}return}if(n==="M"){let c=e?e.split(" ").filter(Boolean):this.offered,u=wh(c,co);if(!u){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:c,index:c.indexOf(u)+1,chunks:[]},this.send(`\x1B]72;t=r:x=${this.dropping.index}\x1B\\`);return}let r=this.dropping;if(!r)return;if(n==="R"){this.dropping=void 0,this.send("\x1B]72;t=r:o=0\x1B\\"),this.deliver({kind:"error",message:`the drop failed: ${e.split(":")[0]||"unknown error"}`});return}if(n!=="r"&&n!=="")return;if(e)r.chunks.push(uo(e));if(t.m==="1"||e)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 c=i.toString("utf8"),u=o==="text/uri-list"?Yr(c).find((h)=>cm(h)):void 0;s=u?{kind:"bytes",bytes:new Uint8Array(Vr(u)),source:u}:{kind:"text",text:c}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(s)}}import{existsSync as Mm,readFileSync as Sm}from"node:fs";import{join as Im}from"node:path";var Rh="https://kecan0406.github.io/ttheme/manifest.json",Fm=20000;function Br(t){return Im(t,"ttheme","catalog.json")}function Dr(t,e){Tt(Br(t),`${JSON.stringify(e,null,2)}
110
+ `)}function Ut(t){let e=Br(t);if(!Mm(e))throw Error(`no catalog at ${e} — run \`ttheme init\` first`);return Oh(Sm(e,"utf8"))}function Oh(t){let e;try{e=JSON.parse(t)}catch{throw Error("catalog is not valid JSON")}let n=e;if(typeof n?.version!=="string"||!Array.isArray(n.palettes))throw Error("catalog has no version or palettes");for(let r of n.palettes)if(typeof r?.name!=="string"||!Array.isArray(r.ansi)||r.ansi.length!==16)throw Error(`catalog entry ${JSON.stringify(r?.name)} is missing name or its 16 ANSI colors`);return n}async function Hh(t){let e;try{e=await fetch(t,{signal:AbortSignal.timeout(Fm)})}catch(n){throw Error(`cannot reach the registry at ${t} — ${n instanceof Error?n.message:String(n)}`)}if(!e.ok)throw Error(`registry at ${t} answered ${e.status}`);return Oh(await e.text())}function jh(t){let e=new Set(t.waived??[]);return Ir.flatMap((n,r)=>{let i=t.gate?.[r];if(e.has(n.rule)||typeof i!=="number")return[];if(n.min!==void 0&&i<n.min)return[`${n.label} ${i} < ${n.min}`];if(n.max!==void 0&&i>n.max)return[`${n.label} ${i} > ${n.max}`];return[]})}function ti(t,e){let n=t.find((r)=>r.name===e);if(!n)throw Error(`no palette named ${e} in the catalog — ${go(t,[e])}`);return n}function go(t,e){let n=e.map((s)=>s.toLowerCase()),r=t.filter((s)=>n.some((c)=>s.name.includes(c))),i=t.filter((s)=>!r.includes(s)&&n.some((c)=>s.group.toLowerCase().includes(c))),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 Ph(t,e){let n=e.toLowerCase();return t.filter((r)=>[r.name,r.group,r.native??"",r.ansiSource].some((i)=>i.toLowerCase().includes(n)))}function Gh(t,e,n){let r=n.toLowerCase(),i=(o)=>o.name===e.name?0:o.group===e.group?1:2;return t.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 Lh(t,e){return t.booruSites?.[e]??(t.booru?[t.booru]:[])}import{spawn as Nm}from"node:child_process";var Rm=30000,Om=3,Hm=97,jm=`ObjC.import('Vision')
111
111
  ObjC.import('CoreImage')
112
112
  ObjC.import('CoreGraphics')
113
113
  function run(argv) {
@@ -126,99 +126,102 @@ function run(argv) {
126
126
  $.CIImage.imageWithCVPixelBuffer(buffer), $.NSURL.fileURLWithPath(argv[1]), $.kCIFormatRGBA8,
127
127
  $.CGColorSpaceCreateWithName($.kCGColorSpaceSRGB), $({}), error)
128
128
  if (!written) throw new Error('write failed')
129
- }`;function lo(){return process.platform==="darwin"}function jh(t){return t>=Im&&t<=Fm}function Ph(t,e,n){return new Promise((r,i)=>{let o=vm("osascript",["-l","JavaScript","-e",Nm,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(Sm)])}),s="";o.stderr.on("data",(c)=>{s+=c}),o.on("error",i),o.on("close",(c)=>{if(c===0){r();return}i(Error(s.trim().split(`
130
- `).at(-1)||`osascript exited ${c}`))})})}var Jt={pitch:25,cols:22,rows:9,height:13},Je={cols:25,rows:16},Rm=2147483648,Om=-1073741826,Hm=1600,jm="\x1B[0m",he="\x1B[1m",ht="\x1B[2m",ir="\x1B[31m",ue="\x1B[32m",Qt="\x1B[33m",ei="\x1B[1;34m",Pm="\x1B[35m",Gm={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 Th(t){let e=[],n=0;while(n<t.length){let r=t[n]??"";if(r==="\x1B"){let i=/^(?:\[([0-9;]*)([A-Za-z~])|O([A-Za-z]))/.exec(t.slice(n+1));if(i){e.push(Gm[`${i[1]??""}${i[2]??i[3]??""}`]??"nop"),n+=1+i[0].length;continue}let o=t[n+1]??"";if(/^[a-z]$/.test(o)){e.push(`alt-${o}`),n+=2;continue}e.push("esc"),n++;continue}e.push(r==="\r"||r===`
131
- `?"enter":r==="\t"?"tab":r==="\x03"?"ctrl-c":r==="\x16"?"ctrl-v":r===""||r==="\b"?"backspace":r),n++}return e}var Ah="\x1B]1337;ReportCellSize\x07\x1B[16t",Gh="\x1B]1337;ReportCellSize=";function po(t){let e=t.indexOf(Gh);if(e!==-1){let i=t.slice(e+Gh.length),o=[i.indexOf("\x07"),i.indexOf("\x1B\\")].filter((u)=>u!==-1),s=o.length>0?Math.min(...o):-1,c=s===-1?null:/^([\d.]+);([\d.]+);([\d.]+)$/.exec(i.slice(0,s));if(c){let u=Number(c[3]);return{cell:{h:Math.round(Number(c[1])*u),w:Math.round(Number(c[2])*u)},rest:t.slice(0,e)+i.slice(s+(i[s]==="\x07"?1:2))}}}let n=t.indexOf("\x1B[6;"),r=n===-1?null:/^\[6;(\d+);(\d+)t/.exec(t.slice(n+1));if(!r)return null;return{cell:{h:Number(r[1]),w:Number(r[2])},rest:t.slice(0,n)+t.slice(n+1+r[0].length)}}function rn(t,e){return{perRow:Math.max(1,Math.floor((t+1)/Jt.pitch)),rowsVis:Math.max(1,Math.floor((e-4)/Jt.height))}}function Uh(t){return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`}function Kh(t){return`\x1B[${t.row+1};${t.col+1}H\x1B_Ga=p,i=${t.id},p=${t.id},c=${t.cols},r=${t.rows},C=1,z=${t.z},q=2\x1B\\`}function Jh(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function Wh(t){return`\x1B[38;2;${jt(t).join(";")}m`}function go(t){return`\x1B[48;2;${jt(t).join(";")}m`}function Vt(t){return Array.from(t).length}class ni{parts=[];cols;constructor(t){this.cols=t}put(t,e,n=""){return this.parts.push({col:t,text:e,sgr:n}),t+Vt(e)}run(t,e){let n=t;for(let[r,i]of e)n=this.put(n,r,i);return n}right(t,e){this.run(t-e.reduce((n,[r])=>n+Vt(r),0),e)}render(){let t="";for(let{col:e,text:n,sgr:r}of this.parts){if(e>=this.cols||e<0)continue;let i=Array.from(n).slice(0,this.cols-e).join("");t+=`\x1B[${e+1}G${r}${i}${r?jm:""}`}return t}}function xh(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function Lm(t,e){if(!e)return xh(t);return e>=1e6?`${(t/1e6).toFixed(1)}/${(e/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(e/1000)} KB`}function Qh(t){return t.replace(/_\([^)]*\)?$/,"")}function Zh(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<Hm?Qt:ht]}function or(t,e,n,r){let i=[...r.keys??[]],o=r.lead,s=r.right,c=()=>{let a=[...o?[Vt(o[0])]:[],...i.map(([l,p])=>Vt(l)+1+Vt(p))];return(r.badge?Vt(r.badge)+4:0)+a.reduce((l,p)=>l+p,0)+3*Math.max(0,a.length-1)+(s?3+Vt(s[0])+1+Vt(s[1]):0)};while(c()>e)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&&c()>e){let a=Math.max(0,Vt(o[0])-(c()-e)-1);o=[`${Array.from(o[0]).slice(0,a).join("")}…`,o[1]]}let u=0;if(r.badge)u=t.put(0,` ${r.badge} `,`\x1B[7;1m${n}`)+2;if([...o?[[o]]:[],...i.map(([a,f])=>[[a,he],[` ${f}`,ht]])].forEach((a,f)=>{u=t.run(u+(f?3:0),a)}),s)t.right(e,[[s[0],he],[` ${s[1]}`,ht]])}function Tm(t,e,n,r,i,o){let{ansi:s,selection:c,cursor:u}=o.colors,h=r<44?3:4;if(r>=56)h=Math.min(7,Math.floor((r+1)/8)-1);let a=n;for(let b=0;b<8;b++)a=(t[e]?.put(a,"▀".repeat(h),Wh(s[b]??u)+go(s[b+8]??u))??a)+1;let f=["❯ ",ue],l=[[["~/code/demo",ei],[" on ",ht],["main",Pm],[" +2",ue],[" ~1",Qt]]];if(l.push([f,["git status -sb",""]]),r>=44)l.push([["## ",""],["main",ue],["...",""],["origin/main",ir],[" [ahead 1]",Qt]]);if(l.push([[" M",ir],[" src/main.rs",""]]),l.push([["??",ir],[" notes.md",""]]),l.push([]),r>=44)l.push([f,["ls",""]]),l.push([["docs",ei],[" ",""],["src",ei],[" ",""],["tests",ei],[" Cargo.toml README.md",""]]),l.push([]);l.push([f,["cargo test",""]]),l.push([[" ✓",ue],[" parses config",""]]);let p=[[" ✗",ir],[" renders frame",""]];if(r>=44)p.push([" expected ",ht],["3",ue],[", received ",ht],["2",ir]);l.push(p),l.push([]),l.push([f,["echo ",""],["selected text",go(c)],[" ",""],[" ",go(u)]]),l.forEach((b,g)=>{let $=e+2+g;if($<=i)t[$]?.run(n,b)})}function Am(t,e,n,r,i,o){t[e]?.put(n,`╭${"─".repeat(i-2)}╮`,o);for(let s=e+1;s<e+r-1;s++)t[s]?.put(n,"│",o),t[s]?.put(n+i-1,"│",o);t[e+r-1]?.put(n,`╰${"─".repeat(i-2)}╯`,o)}function mo(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function Um(t){return`${gt[Math.floor(t/me)]?.name??"local"} ${t%me}`}function Km(t,e,n){let r=[{name:"all",moved:!1},...gt].flatMap((s,c)=>{let u=`${s.name}${s.moved?"*":""}`,h=s.name===n.site?mo(n,u):[` ${u} `,ht];return c?[[" ",""],h]:[h]}),i=r.reduce((s,[c])=>s+Vt(c),0)<=e,o=t.run(0,i?r:[mo(n)]);if(n.asking!==void 0)t.run(o,[[` ${n.asking} was cut off — this network may block it. turn on the unblock proxy? `,Qt],["y",he],[" turn on ",ht],["n",he],[" not now",ht]])}function Jm(t,e,n,r){if(n.editing!==void 0){let c=t.run(0,[["⌕ ",r],[n.editing,""],["█",r]]),u=n.suggest?.length?" ↑↓ pick enter searches":" enter searches";t.put(c,n.editing?u:` a tag, a post url or an id, or drop a picture or ctrl+v — ${n.tag||"esc leaves"}`,ht);return}let i=t.run(0,[["⌕ ",r],[n.tag||"nothing yet — / searches, ctrl+v pastes a picture",n.tag?"":ht]]),o=Te.filter((c)=>!n.block.includes(c)),s=[n.preset,...n.solo?["solo"]:[],n.order,...n.rating.join("+")==="safe"?[]:[n.rating.join("+")],...o.length>0?[`allows ${o.join("+")}`]:[],...n.unblocked?["unblock"]:[]];if(t.put(i,` ${s.join(" ")}`,ht),n.total>0||!n.searching){let c=[[`${n.tiles.length}/${n.checked}`,""]];if(n.checked<n.total)c.push([` of ${n.total}`,ht]);t.right(e,c)}}function Wm(t){if(t.cut==="on")return[[`cut out · ${t.clear}% transparent`,ue]];if(t.cut==="off")return[["opaque · x cuts out",Qt]];if(t.cut==="failed")return[["opaque · no cut-out",Qt]];return[t.clear>0?[`${t.clear}% transparent`,ue]:["opaque",Qt]]}function Lh(t){return t.site==="all"?"any site":t.site}function qh(t){if(t.installing!==void 0)return[`installing ${t.palette} ← ${Um(t.installing)}`,Qt];if(t.hint)return[t.hint,ue];if(t.error)return[t.error,Qt];if(t.waiting!==void 0)return[`${t.slow??t.site} asked to slow down · ${t.waiting}s`,Qt];if(t.fetching)return[`fetching ${t.fetching.id%me} · ${Lm(t.fetching.got,t.fetching.size)}`,Qt];if(t.cutting!==void 0)return[`cutting out ${t.cutting%me}`,Qt];if(t.preparing!==void 0)return[`preparing ${t.preparing%me}`,Qt];if(t.saved)return[t.saved,ue];if(t.note)return[t.note,ht];return}function xm(t,e,n,r,i,o){let{perRow:s,rowsVis:c}=rn(n,r);Jm(t[0],n,i,o),Km(t[1],n,i);for(let p=0;p<s*c;p++){let b=i.top*s+p,g=i.tiles[b];if(!g)break;let $=2+Math.floor(p/s)*Jt.height,y=p%s*Jt.pitch,F=b===i.focus;if(F)Am(t,$,y,Jt.height,Jt.pitch-1,o);if(g.thumb)e.push({id:g.key,path:g.thumb,row:$+1,col:y+1,cols:Jt.cols,rows:Jt.rows,z:-1});if(t[$+10]?.run(y+1,[...i.installed.includes(g.key)?[["✓ ",ue]]:[],...i.site==="all"?[["● ",`\x1B[${30+g.siteAnsi}m`]]:[],[String(g.id),F?he:""],[" ",""],Zh(g)]),g.mates.length>0)t[$+10]?.put(y+Jt.cols,"≈",o);let E=g.artist?Qh(g.artist):g.owner&&`@${g.owner}`;if(E)t[$+11]?.put(y+1,E.slice(0,Jt.cols-8),ht);let v=[];if(g.score>0)v.push([`★${g.score}`,ht]);if(g.variants>1)v.push([` ×${g.variants}`,o]);if(v.length>0)t[$+11]?.right(y+Jt.cols+1,v)}let u=i.top*s,h=i.tiles.length-(i.top+c)*s,a=[...u>0?[`↑ ${u} above`]:[],...h>0?[`↓ ${h} more`]:[]];if(a.length>0)t[r-2]?.put(0,a.join(" "),ht);if(!i.searching&&i.tiles.length===0&&!i.error)t[3]?.put(0,i.preset==="cutouts"?`no transparent cutouts of ${i.tag} on ${Lh(i)} — c searches every post, tab tries ${i.nextSite}`:`no posts of ${i.tag} on ${Lh(i)} — tab tries ${i.nextSite}`,ht);let f=t[r-1],l=qh(i);if(i.searching&&i.tiles.length===0&&!l){or(f,n,o,{badge:"FIND",lead:[i.preset==="cutouts"?"checking png headers":"fetching posts",ht],right:["esc","back"]});return}or(f,n,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 Qm(t,e,n,r,i,o){let s=i.tiles[i.focus];if(!s)return;let c=i.shown?.id===s.key?i.shown:void 0,u=[mo(i,s.site,s.siteAnsi),[" ",""],[String(s.id),he],[" ",""],Zh(s)];if(s.artist)u.push([` · ${Qh(s.artist)}`,""]);if(s.score>0)u.push([` · ★${s.score}`,ht]);if(c)u.push([` · ${xh(c.bytes)}`,ht]);if(s.owner)u.push([` · ${s.owner}`,ht]);if(s.origin)u.push([` · ${s.origin}`,ht]);if(c)u.push([" ",""],...Wm(c));if(t[0]?.run(0,u),s.mates.length>0)t[0]?.right(n,[["≈ ",o],[s.mates.join(" "),ht]]);if(Tm(t,3,2,n-4,r-2,i),i.shown)e.push({id:Rm+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:Om});let h=qh(i);or(t[r-1],n,o,{badge:"TRY",lead:h,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 Zm={grid:[["move","←↑↓→ home end pgup pgdn"],["try on","enter"],["site",`tab all, ${gt.map((t)=>t.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 qm(t,e,n,r,i){let o=r.panel??0,s=Math.max(...r.settings.map((l)=>l.label.length)),c=Math.max(...r.settings.map((l)=>l.choices.reduce((p,b)=>p+b.length+(l.multi?6:3),0))),u=Math.min(e-2,Math.max(28,s+c+8)),h=r.settings.length+4,a=Math.floor((e-u)/2),f=Math.max(2,Math.floor((n-h)/2));t[f]?.put(a,`╭─ settings ${"─".repeat(Math.max(0,u-13))}╮`);for(let l=f+1;l<f+h-1;l++)t[l]?.put(a,`│${" ".repeat(u-2)}│`);r.settings.forEach((l,p)=>{let b=t[f+2+p];b.put(a+3,l.label,p===o?he:ht);let g=a+5+s,$=l.value.split(" ");l.choices.forEach((y,F)=>{let E=$.includes(y),v=l.multi&&p===o&&F===l.cursor?"4;":"",d=l.multi?` ${E?"[x]":"[ ]"} ${y} `:` ${y} `;g=b.put(g,d,E?`\x1B[${v}7;${30+r.siteAnsi}m`:v?`\x1B[4m${ht}`:ht)+1})}),t[f+h-1]?.put(a,`╰${"─".repeat(u-2)}╯`),or(t[n-1],e,i,{badge:"SET",keys:[["↑↓","setting"],["←→","value"],["space","toggle"],["enter","save"]],right:["esc","undo"]})}function _m(t,e,n,r,i){let o=Zm[r.mode],s=Math.min(e-2,50),c=o.length+4,u=Math.floor((e-s)/2),h=Math.max(2,Math.floor((n-c)/2));t[h]?.put(u,`╭─ keys ${"─".repeat(s-9)}╮`);for(let a=h+1;a<h+c-1;a++)t[a]?.put(u,`│${" ".repeat(s-2)}│`);o.forEach(([a,f],l)=>{t[h+2+l]?.put(u+3,a,he),t[h+2+l]?.put(u+13,f.slice(0,s-16))}),t[h+c-1]?.put(u,`╰${"─".repeat(s-2)}╯`),or(t[n-1],e,i,{badge:"KEYS",right:["? esc","close"]})}function Cm(t,e,n){let r=e.suggest??[],i=r.map((c)=>c.count>0?String(c.count):c.palette??"0"),o=Math.max(...r.map((c)=>Vt(c.value))),s=Math.max(7,...i.map(Vt));r.forEach((c,u)=>{let h=u===e.pick,a=t[1+u];a?.run(0,[[h?"▸ ":" ",n],[c.value,h?he+n:""]]),a?.right(2+o+2+s,[[i[u],ht]])})}function _h(t,e,n){let r=Array.from({length:n},()=>new ni(e)),i=[],o=Wh(t.colors.cursor);if(e<Je.cols||n<Je.rows)return r[0]?.put(0,"ttheme find",he+o),r[1]?.put(0,`needs ${Je.cols}×${Je.rows} — now ${e}×${n}`),r[2]?.put(0,"esc quits",ht),{lines:r.map((s)=>s.render()),images:i};if(t.mode==="try")Qm(r,i,e,n,t,o);else xm(r,i,e,n,t,o);if(t.mode==="grid"&&t.editing!==void 0&&t.suggest?.length){for(let s=1;s<n-1;s++)r[s]=new ni(e);return Cm(r,t,o),{lines:r.map((s)=>s.render()),images:[]}}if(t.help||t.panel!==void 0){let s=t.mode==="try"?i:[];for(let c=0;c<n;c++)r[c]=new ni(e);if(t.help)_m(r,e,n,t,o);else qm(r,e,n,t,o);return{lines:r.map((c)=>c.render()),images:s}}return{lines:r.map((s)=>s.render()),images:i}}var Xm=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),Vm=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),Ym=0.04,zm=0.1,Bm=0.05,Dm=4096;function tp(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function ep(t,e,n,r=0){let{site:i,post:o}=t,s=new Set(o.tags),c=[...tp(i)].some((a)=>s.has(a)),u=Math.min(o.width,o.height),h=o.width>0&&o.height>0?o.width/o.height/(e.w/e.h):1;return(o.solo?2:0)+([...Xm].some((a)=>s.has(a))?-3:0)+([...Vm].some((a)=>s.has(a))?-1.5:0)+2*Math.min(1,u/e.h)+(c?1.5:-Math.min(1.5,Math.abs(Math.log(h))))+(n>0?1.5*Math.log1p(Math.max(0,o.score))/Math.log1p(n):0)+2*r}function ri(t,e,n=new Map){let r=new Map;for(let{site:i,post:o}of t)r.set(i,Math.max(r.get(i)??0,o.score));return t.map((i,o)=>({pick:i,at:o,score:ep(i,e,r.get(i.site)??0,n.get(i.post))})).sort((i,o)=>o.score-i.score||i.at-o.at).map(({pick:i})=>i)}function Xh(t){let e=new Map;for(let r of t)e.set(r.site,[...e.get(r.site)??[],r]);let n=[];for(let r=0;n.length<t.length;r++)for(let i of e.values()){let o=i[r];if(o)n.push(o)}return n}function wo(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function Ch(t,e,n){let[r,i,o]=[wo(t),wo(e),wo(n)],s=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*o),c=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*o),u=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*o);return[0.2104542553*s+0.793617785*c-0.0040720468*u,1.9779984951*s-2.428592205*c+0.4505937099*u,0.0259040371*s+0.7827717662*c-0.808675766*u]}function Vh(t,e){let n=e.map((s)=>Ch(...jt(s))).filter(([,s,c])=>Math.hypot(s,c)>=Ym);if(n.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/Dm))),i=n.map(()=>0),o=0;for(let s=0;s<t.height;s+=r)for(let c=0;c<t.width;c+=r){let u=(s*t.width+c)*4;if(t.data[u+3]<128)continue;o++;let[h,a,f]=Ch(t.data[u],t.data[u+1],t.data[u+2]);n.forEach(([l,p,b],g)=>{if(Math.hypot(h-l,a-p,f-b)<zm)i[g]=i[g]+1})}if(o===0)return 0;return i.reduce((s,c)=>s+Math.min(1,c/o/Bm),0)/n.length}import{execFileSync as np,spawn as rp}from"node:child_process";import{existsSync as te,mkdirSync as ip,readFileSync as on,realpathSync as op,rmSync as bo,utimesSync as sp,writeFileSync as cp}from"node:fs";import{homedir as sn}from"node:os";import{dirname as up,join as pt}from"node:path";var hp={ghostty:Hn,kitty:Pn,alacritty:On,wezterm:tr,iterm2:jn,"windows-terminal":er,warp:Dn},Yh="ttheme-default";function Ne(t=process.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"){let e=(n,r)=>np(n,r,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();return{read:()=>{try{return process.platform==="darwin"?e("defaults",["read",t,"Default Bookmark Guid"])||void 0:void 0}catch{return}},write:(n)=>{if(process.platform==="darwin")e("defaults",["write",t,"Default Bookmark Guid","-string",n])},running:()=>{try{return e("pgrep",["-x","iTerm2"])!==""}catch{return!1}}}}function ee(t){return t.off?void 0:un(t)}function cr(t,e){if(!t.terminals.includes("iterm2"))return t;let n=e.read();return n&&!n.startsWith("ttheme-")?{...t,itermBase:n}:t}function Qe(t,e){if(!t.terminals.includes("iterm2"))return!1;let n=e.read(),r=ee(t)?Yh:n===Yh?t.itermBase:void 0;if(!r||r===n)return!1;return e.write(r),!0}function Pt(){return process.env.XDG_CONFIG_HOME??pt(sn(),".config")}function ur(t){return pt(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function zh(t){return pt(t,"ttheme","installed.json")}function Wt(t){let e=zh(t);if(!te(e))throw Error(`nothing installed yet at ${e} — run \`ttheme init\` first`);let n=JSON.parse(on(e,"utf8"));if(!Array.isArray(n?.palettes)||!Array.isArray(n.terminals))throw Error(`${e} has no palettes or terminals`);return{terminals:n.terminals.filter((r)=>Jr.includes(r)),...n.startup?{startup:n.startup}:{},...n.off?{off:!0}:{},...n.itermBase?{itermBase:n.itermBase}:{},...n.wtHome?{wtHome:n.wtHome}:{},...n.wtProfile?{wtProfile:n.wtProfile}:{},palettes:n.palettes}}function hr(t,e){Tt(zh(t),`${JSON.stringify(e,null,2)}
132
- `)}function sr(t){return{name:t.name,group:t.group,...t.native?{native:t.native}:{},lead:t.lead===!0,order:t.order,...t.default?{role:"default"}:{},ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selectionBackground:t.selection,ansi:t.ansi,signature:t.signature,signatureSlots:t.signatureSlots,ghostty:{iconGhost:t.cursor,iconScreen:[t.cursor,t.selection,t.background]},waive:t.waived??[]}}function Bh(t,e){let n=new Map(t.palettes.map((o)=>[o.name,o])),r=e.filter((o)=>!n.has(o));if(r.length>0)throw Error(`not in the catalog: ${r.join(", ")} — ${fo(Ge(t.palettes),r)}`);let i=e.flatMap((o)=>{let s=Nh(n.get(o));return s.length>0?[`${o}: ${s.join(", ")}`]:[]});if(i.length>0)throw Error(`these palettes fail the contrast gate:
129
+ }`;function mo(){return process.platform==="darwin"}function Th(t){return t>=Om&&t<=Hm}function Ah(t,e,n){return new Promise((r,i)=>{let o=Nm("osascript",["-l","JavaScript","-e",jm,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(Rm)])}),s="";o.stderr.on("data",(c)=>{s+=c}),o.on("error",i),o.on("close",(c)=>{if(c===0){r();return}i(Error(s.trim().split(`
130
+ `).at(-1)||`osascript exited ${c}`))})})}var Wt={pitch:25,cols:22,rows:9,height:13},Je={cols:25,rows:16},Pm=2147483648,Gm=-1073741826,Lm=1600,Tm="\x1B[0m",he="\x1B[1m",ht="\x1B[2m",or="\x1B[31m",ue="\x1B[32m",Zt="\x1B[33m",ei="\x1B[1;34m",Am="\x1B[35m",Um={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 Jh(t){let e=[],n=0;while(n<t.length){let r=t[n]??"";if(r==="\x1B"){let i=/^(?:\[([0-9;]*)([A-Za-z~])|O([A-Za-z]))/.exec(t.slice(n+1));if(i){e.push(Um[`${i[1]??""}${i[2]??i[3]??""}`]??"nop"),n+=1+i[0].length;continue}let o=t[n+1]??"";if(/^[a-z]$/.test(o)){e.push(`alt-${o}`),n+=2;continue}e.push("esc"),n++;continue}e.push(r==="\r"||r===`
131
+ `?"enter":r==="\t"?"tab":r==="\x03"?"ctrl-c":r==="\x16"?"ctrl-v":r===""||r==="\b"?"backspace":r),n++}return e}var xh="\x1B]1337;ReportCellSize\x07\x1B[16t",Uh="\x1B]1337;ReportCellSize=";function bo(t){let e=t.indexOf(Uh);if(e!==-1){let i=t.slice(e+Uh.length),o=[i.indexOf("\x07"),i.indexOf("\x1B\\")].filter((u)=>u!==-1),s=o.length>0?Math.min(...o):-1,c=s===-1?null:/^([\d.]+);([\d.]+);([\d.]+)$/.exec(i.slice(0,s));if(c){let u=Number(c[3]);return{cell:{h:Math.round(Number(c[1])*u),w:Math.round(Number(c[2])*u)},rest:t.slice(0,e)+i.slice(s+(i[s]==="\x07"?1:2))}}}let n=t.indexOf("\x1B[6;"),r=n===-1?null:/^\[6;(\d+);(\d+)t/.exec(t.slice(n+1));if(!r)return null;return{cell:{h:Number(r[1]),w:Number(r[2])},rest:t.slice(0,n)+t.slice(n+1+r[0].length)}}function sn(t,e){return{perRow:Math.max(1,Math.floor((t+1)/Wt.pitch)),rowsVis:Math.max(1,Math.floor((e-4)/Wt.height))}}function Wh(t){return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`}function Qh(t){return`\x1B[${t.row+1};${t.col+1}H\x1B_Ga=p,i=${t.id},p=${t.id},c=${t.cols},r=${t.rows},C=1,z=${t.z},q=2\x1B\\`}function Zh(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function qh(t){return`\x1B[38;2;${jt(t).join(";")}m`}function po(t){return`\x1B[48;2;${jt(t).join(";")}m`}function Yt(t){return Array.from(t).length}class ni{parts=[];cols;constructor(t){this.cols=t}put(t,e,n=""){return this.parts.push({col:t,text:e,sgr:n}),t+Yt(e)}run(t,e){let n=t;for(let[r,i]of e)n=this.put(n,r,i);return n}right(t,e){this.run(t-e.reduce((n,[r])=>n+Yt(r),0),e)}render(){let t="";for(let{col:e,text:n,sgr:r}of this.parts){if(e>=this.cols||e<0)continue;let i=Array.from(n).slice(0,this.cols-e).join("");t+=`\x1B[${e+1}G${r}${i}${r?Tm:""}`}return t}}function _h(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function Km(t,e){if(!e)return _h(t);return e>=1e6?`${(t/1e6).toFixed(1)}/${(e/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(e/1000)} KB`}function Ch(t){return t.replace(/_\([^)]*\)?$/,"")}function Xh(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<Lm?Zt:ht]}function sr(t,e,n,r){let i=[...r.keys??[]],o=r.lead,s=r.right,c=()=>{let a=[...o?[Yt(o[0])]:[],...i.map(([l,m])=>Yt(l)+1+Yt(m))];return(r.badge?Yt(r.badge)+4:0)+a.reduce((l,m)=>l+m,0)+3*Math.max(0,a.length-1)+(s?3+Yt(s[0])+1+Yt(s[1]):0)};while(c()>e)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&&c()>e){let a=Math.max(0,Yt(o[0])-(c()-e)-1);o=[`${Array.from(o[0]).slice(0,a).join("")}…`,o[1]]}let u=0;if(r.badge)u=t.put(0,` ${r.badge} `,`\x1B[7;1m${n}`)+2;if([...o?[[o]]:[],...i.map(([a,f])=>[[a,he],[` ${f}`,ht]])].forEach((a,f)=>{u=t.run(u+(f?3:0),a)}),s)t.right(e,[[s[0],he],[` ${s[1]}`,ht]])}function Jm(t,e,n,r,i,o){let{ansi:s,selection:c,cursor:u}=o.colors,h=r<44?3:4;if(r>=56)h=Math.min(7,Math.floor((r+1)/8)-1);let a=n;for(let b=0;b<8;b++)a=(t[e]?.put(a,"▀".repeat(h),qh(s[b]??u)+po(s[b+8]??u))??a)+1;let f=["❯ ",ue],l=[[["~/code/demo",ei],[" on ",ht],["main",Am],[" +2",ue],[" ~1",Zt]]];if(l.push([f,["git status -sb",""]]),r>=44)l.push([["## ",""],["main",ue],["...",""],["origin/main",or],[" [ahead 1]",Zt]]);if(l.push([[" M",or],[" src/main.rs",""]]),l.push([["??",or],[" notes.md",""]]),l.push([]),r>=44)l.push([f,["ls",""]]),l.push([["docs",ei],[" ",""],["src",ei],[" ",""],["tests",ei],[" Cargo.toml README.md",""]]),l.push([]);l.push([f,["cargo test",""]]),l.push([[" ✓",ue],[" parses config",""]]);let m=[[" ✗",or],[" renders frame",""]];if(r>=44)m.push([" expected ",ht],["3",ue],[", received ",ht],["2",or]);l.push(m),l.push([]),l.push([f,["echo ",""],["selected text",po(c)],[" ",""],[" ",po(u)]]),l.forEach((b,d)=>{let $=e+2+d;if($<=i)t[$]?.run(n,b)})}function xm(t,e,n,r,i,o){t[e]?.put(n,`╭${"─".repeat(i-2)}╮`,o);for(let s=e+1;s<e+r-1;s++)t[s]?.put(n,"│",o),t[s]?.put(n+i-1,"│",o);t[e+r-1]?.put(n,`╰${"─".repeat(i-2)}╯`,o)}function wo(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function Wm(t){return`${gt[Math.floor(t/me)]?.name??"local"} ${t%me}`}function Qm(t,e,n){let r=[{name:"all",moved:!1},...gt].flatMap((s,c)=>{let u=`${s.name}${s.moved?"*":""}`,h=s.name===n.site?wo(n,u):[` ${u} `,ht];return c?[[" ",""],h]:[h]}),i=r.reduce((s,[c])=>s+Yt(c),0)<=e,o=t.run(0,i?r:[wo(n)]);if(n.asking!==void 0)t.run(o,[[` ${n.asking} was cut off — this network may block it. turn on the unblock proxy? `,Zt],["y",he],[" turn on ",ht],["n",he],[" not now",ht]])}function Zm(t,e,n,r){if(n.editing!==void 0){let c=t.run(0,[["⌕ ",r],[n.editing,""],["█",r]]),u=n.suggest?.length?" ↑↓ pick enter searches":" enter searches";t.put(c,n.editing?u:` a tag, a post url or an id, or drop a picture or ctrl+v — ${n.tag||"esc leaves"}`,ht);return}let i=t.run(0,[["⌕ ",r],[n.tag||"nothing yet — / searches, ctrl+v pastes a picture",n.tag?"":ht]]),o=Te.filter((c)=>!n.block.includes(c)),s=[n.preset,...n.solo?["solo"]:[],n.order,...n.rating.join("+")==="safe"?[]:[n.rating.join("+")],...o.length>0?[`allows ${o.join("+")}`]:[],...n.unblocked?["unblock"]:[]];if(t.put(i,` ${s.join(" ")}`,ht),n.total>0||!n.searching){let c=[[`${n.tiles.length}/${n.checked}`,""]];if(n.checked<n.total)c.push([` of ${n.total}`,ht]);t.right(e,c)}}function qm(t){if(t.cut==="on")return[[`cut out · ${t.clear}% transparent`,ue]];if(t.cut==="off")return[["opaque · x cuts out",Zt]];if(t.cut==="failed")return[["opaque · no cut-out",Zt]];return[t.clear>0?[`${t.clear}% transparent`,ue]:["opaque",Zt]]}function Kh(t){return t.site==="all"?"any site":t.site}function Vh(t){if(t.installing!==void 0)return[`installing ${t.palette} ← ${Wm(t.installing)}`,Zt];if(t.hint)return[t.hint,ue];if(t.error)return[t.error,Zt];if(t.waiting!==void 0)return[`${t.slow??t.site} asked to slow down · ${t.waiting}s`,Zt];if(t.fetching)return[`fetching ${t.fetching.id%me} · ${Km(t.fetching.got,t.fetching.size)}`,Zt];if(t.cutting!==void 0)return[`cutting out ${t.cutting%me}`,Zt];if(t.preparing!==void 0)return[`preparing ${t.preparing%me}`,Zt];if(t.saved)return[t.saved,ue];if(t.note)return[t.note,ht];return}function _m(t,e,n,r,i,o){let{perRow:s,rowsVis:c}=sn(n,r);Zm(t[0],n,i,o),Qm(t[1],n,i);for(let m=0;m<s*c;m++){let b=i.top*s+m,d=i.tiles[b];if(!d)break;let $=2+Math.floor(m/s)*Wt.height,M=m%s*Wt.pitch,N=b===i.focus;if(N)xm(t,$,M,Wt.height,Wt.pitch-1,o);if(d.thumb)e.push({id:d.key,path:d.thumb,row:$+1,col:M+1,cols:Wt.cols,rows:Wt.rows,z:-1});if(t[$+10]?.run(M+1,[...i.installed.includes(d.key)?[["✓ ",ue]]:[],...i.site==="all"?[["● ",`\x1B[${30+d.siteAnsi}m`]]:[],[String(d.id),N?he:""],[" ",""],Xh(d)]),d.mates.length>0)t[$+10]?.put(M+Wt.cols,"≈",o);let E=d.artist?Ch(d.artist):d.owner&&`@${d.owner}`;if(E)t[$+11]?.put(M+1,E.slice(0,Wt.cols-8),ht);let v=[];if(d.score>0)v.push([`★${d.score}`,ht]);if(d.variants>1)v.push([` ×${d.variants}`,o]);if(v.length>0)t[$+11]?.right(M+Wt.cols+1,v)}let u=i.top*s,h=i.tiles.length-(i.top+c)*s,a=[...u>0?[`↑ ${u} above`]:[],...h>0?[`↓ ${h} more`]:[]];if(a.length>0)t[r-2]?.put(0,a.join(" "),ht);if(!i.searching&&i.tiles.length===0&&!i.error)t[3]?.put(0,i.preset==="cutouts"?`no transparent cutouts of ${i.tag} on ${Kh(i)} — c searches every post, tab tries ${i.nextSite}`:`no posts of ${i.tag} on ${Kh(i)} — tab tries ${i.nextSite}`,ht);let f=t[r-1],l=Vh(i);if(i.searching&&i.tiles.length===0&&!l){sr(f,n,o,{badge:"FIND",lead:[i.preset==="cutouts"?"checking png headers":"fetching posts",ht],right:["esc","back"]});return}sr(f,n,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 Cm(t,e,n,r,i,o){let s=i.tiles[i.focus];if(!s)return;let c=i.shown?.id===s.key?i.shown:void 0,u=[wo(i,s.site,s.siteAnsi),[" ",""],[String(s.id),he],[" ",""],Xh(s)];if(s.artist)u.push([` · ${Ch(s.artist)}`,""]);if(s.score>0)u.push([` · ★${s.score}`,ht]);if(c)u.push([` · ${_h(c.bytes)}`,ht]);if(s.owner)u.push([` · ${s.owner}`,ht]);if(s.origin)u.push([` · ${s.origin}`,ht]);if(c)u.push([" ",""],...qm(c));if(t[0]?.run(0,u),s.mates.length>0)t[0]?.right(n,[["≈ ",o],[s.mates.join(" "),ht]]);if(Jm(t,3,2,n-4,r-2,i),i.shown)e.push({id:Pm+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:Gm});let h=Vh(i);sr(t[r-1],n,o,{badge:"TRY",lead:h,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 Xm={grid:[["move","←↑↓→ home end pgup pgdn"],["try on","enter"],["site",`tab all, ${gt.map((t)=>t.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 Vm(t,e,n,r,i){let o=r.panel??0,s=Math.max(...r.settings.map((l)=>l.label.length)),c=Math.max(...r.settings.map((l)=>l.choices.reduce((m,b)=>m+b.length+(l.multi?6:3),0))),u=Math.min(e-2,Math.max(28,s+c+8)),h=r.settings.length+4,a=Math.floor((e-u)/2),f=Math.max(2,Math.floor((n-h)/2));t[f]?.put(a,`╭─ settings ${"─".repeat(Math.max(0,u-13))}╮`);for(let l=f+1;l<f+h-1;l++)t[l]?.put(a,`│${" ".repeat(u-2)}│`);r.settings.forEach((l,m)=>{let b=t[f+2+m];b.put(a+3,l.label,m===o?he:ht);let d=a+5+s,$=l.value.split(" ");l.choices.forEach((M,N)=>{let E=$.includes(M),v=l.multi&&m===o&&N===l.cursor?"4;":"",g=l.multi?` ${E?"[x]":"[ ]"} ${M} `:` ${M} `;d=b.put(d,g,E?`\x1B[${v}7;${30+r.siteAnsi}m`:v?`\x1B[4m${ht}`:ht)+1})}),t[f+h-1]?.put(a,`╰${"─".repeat(u-2)}╯`),sr(t[n-1],e,i,{badge:"SET",keys:[["↑↓","setting"],["←→","value"],["space","toggle"],["enter","save"]],right:["esc","undo"]})}function Ym(t,e,n,r,i){let o=Xm[r.mode],s=Math.min(e-2,50),c=o.length+4,u=Math.floor((e-s)/2),h=Math.max(2,Math.floor((n-c)/2));t[h]?.put(u,`╭─ keys ${"─".repeat(s-9)}╮`);for(let a=h+1;a<h+c-1;a++)t[a]?.put(u,`│${" ".repeat(s-2)}│`);o.forEach(([a,f],l)=>{t[h+2+l]?.put(u+3,a,he),t[h+2+l]?.put(u+13,f.slice(0,s-16))}),t[h+c-1]?.put(u,`╰${"─".repeat(s-2)}╯`),sr(t[n-1],e,i,{badge:"KEYS",right:["? esc","close"]})}function zm(t,e,n){let r=e.suggest??[],i=r.map((c)=>c.count>0?String(c.count):c.palette??"0"),o=Math.max(...r.map((c)=>Yt(c.value))),s=Math.max(7,...i.map(Yt));r.forEach((c,u)=>{let h=u===e.pick,a=t[1+u];a?.run(0,[[h?"▸ ":" ",n],[c.value,h?he+n:""]]),a?.right(2+o+2+s,[[i[u],ht]])})}function Yh(t,e,n){let r=Array.from({length:n},()=>new ni(e)),i=[],o=qh(t.colors.cursor);if(e<Je.cols||n<Je.rows)return r[0]?.put(0,"ttheme find",he+o),r[1]?.put(0,`needs ${Je.cols}×${Je.rows} — now ${e}×${n}`),r[2]?.put(0,"esc quits",ht),{lines:r.map((s)=>s.render()),images:i};if(t.mode==="try")Cm(r,i,e,n,t,o);else _m(r,i,e,n,t,o);if(t.mode==="grid"&&t.editing!==void 0&&t.suggest?.length){for(let s=1;s<n-1;s++)r[s]=new ni(e);return zm(r,t,o),{lines:r.map((s)=>s.render()),images:[]}}if(t.help||t.panel!==void 0){let s=t.mode==="try"?i:[];for(let c=0;c<n;c++)r[c]=new ni(e);if(t.help)Ym(r,e,n,t,o);else Vm(r,e,n,t,o);return{lines:r.map((c)=>c.render()),images:s}}return{lines:r.map((s)=>s.render()),images:i}}var Bm=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),Dm=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),tp=0.04,ep=0.1,np=0.05,rp=4096;function ip(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function op(t,e,n,r=0){let{site:i,post:o}=t,s=new Set(o.tags),c=[...ip(i)].some((a)=>s.has(a)),u=Math.min(o.width,o.height),h=o.width>0&&o.height>0?o.width/o.height/(e.w/e.h):1;return(o.solo?2:0)+([...Bm].some((a)=>s.has(a))?-3:0)+([...Dm].some((a)=>s.has(a))?-1.5:0)+2*Math.min(1,u/e.h)+(c?1.5:-Math.min(1.5,Math.abs(Math.log(h))))+(n>0?1.5*Math.log1p(Math.max(0,o.score))/Math.log1p(n):0)+2*r}function ri(t,e,n=new Map){let r=new Map;for(let{site:i,post:o}of t)r.set(i,Math.max(r.get(i)??0,o.score));return t.map((i,o)=>({pick:i,at:o,score:op(i,e,r.get(i.site)??0,n.get(i.post))})).sort((i,o)=>o.score-i.score||i.at-o.at).map(({pick:i})=>i)}function Bh(t){let e=new Map;for(let r of t)e.set(r.site,[...e.get(r.site)??[],r]);let n=[];for(let r=0;n.length<t.length;r++)for(let i of e.values()){let o=i[r];if(o)n.push(o)}return n}function $o(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function zh(t,e,n){let[r,i,o]=[$o(t),$o(e),$o(n)],s=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*o),c=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*o),u=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*o);return[0.2104542553*s+0.793617785*c-0.0040720468*u,1.9779984951*s-2.428592205*c+0.4505937099*u,0.0259040371*s+0.7827717662*c-0.808675766*u]}function Dh(t,e){let n=e.map((s)=>zh(...jt(s))).filter(([,s,c])=>Math.hypot(s,c)>=tp);if(n.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/rp))),i=n.map(()=>0),o=0;for(let s=0;s<t.height;s+=r)for(let c=0;c<t.width;c+=r){let u=(s*t.width+c)*4;if(t.data[u+3]<128)continue;o++;let[h,a,f]=zh(t.data[u],t.data[u+1],t.data[u+2]);n.forEach(([l,m,b],d)=>{if(Math.hypot(h-l,a-m,f-b)<ep)i[d]=i[d]+1})}if(o===0)return 0;return i.reduce((s,c)=>s+Math.min(1,c/o/np),0)/n.length}import{execFileSync as sp,spawn as cp}from"node:child_process";import{existsSync as ne,mkdirSync as up,readFileSync as cn,realpathSync as hp,rmSync as ko,utimesSync as ap,writeFileSync as fp}from"node:fs";import{homedir as un}from"node:os";import{dirname as lp,join as pt}from"node:path";var gp={ghostty:jn,kitty:Gn,alacritty:Hn,wezterm:er,iterm2:Pn,"windows-terminal":nr,warp:tr},ta="ttheme-default";function be(t=process.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"){let e=(n,r)=>sp(n,r,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();return{read:()=>{try{return process.platform==="darwin"?e("defaults",["read",t,"Default Bookmark Guid"])||void 0:void 0}catch{return}},write:(n)=>{if(process.platform==="darwin")e("defaults",["write",t,"Default Bookmark Guid","-string",n])},running:()=>{try{return e("pgrep",["-x","iTerm2"])!==""}catch{return!1}}}}function zt(t){return t.off?void 0:Ze(t)}function ur(t,e){if(!t.terminals.includes("iterm2"))return t;let n=e.read();return n&&!n.startsWith("ttheme-")?{...t,itermBase:n}:t}function Qe(t,e){if(!t.terminals.includes("iterm2"))return!1;let n=e.read(),r=zt(t)?ta:n===ta?t.itermBase:void 0;if(!r||r===n)return!1;return e.write(r),!0}function Pt(){return process.env.XDG_CONFIG_HOME??pt(un(),".config")}function hr(t){return pt(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function ea(t){return pt(t,"ttheme","installed.json")}function Kt(t){let e=ea(t);if(!ne(e))throw Error(`nothing installed yet at ${e} — run \`ttheme init\` first`);let n=JSON.parse(cn(e,"utf8"));if(!Array.isArray(n?.palettes)||!Array.isArray(n.terminals))throw Error(`${e} has no palettes or terminals`);return{terminals:n.terminals.filter((r)=>Jr.includes(r)),...n.startup?{startup:n.startup}:{},...n.off?{off:!0}:{},...n.itermBase?{itermBase:n.itermBase}:{},...n.wtHome?{wtHome:n.wtHome}:{},...n.wtProfile?{wtProfile:n.wtProfile}:{},palettes:n.palettes}}function ar(t,e){Tt(ea(t),`${JSON.stringify(e,null,2)}
132
+ `)}function cr(t){return{name:t.name,group:t.group,...t.native?{native:t.native}:{},lead:t.lead===!0,order:t.order,...t.default?{role:"default"}:{},ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selectionBackground:t.selection,ansi:t.ansi,signature:t.signature,signatureSlots:t.signatureSlots,ghostty:{iconGhost:t.cursor,iconScreen:[t.cursor,t.selection,t.background]},waive:t.waived??[]}}function na(t,e){let n=new Map(t.palettes.map((o)=>[o.name,o])),r=e.filter((o)=>!n.has(o));if(r.length>0)throw Error(`not in the catalog: ${r.join(", ")} — ${go(Ge(t.palettes),r)}`);let i=e.flatMap((o)=>{let s=jh(n.get(o));return s.length>0?[`${o}: ${s.join(", ")}`]:[]});if(i.length>0)throw Error(`these palettes fail the contrast gate:
133
133
  ${i.join(`
134
- `)}`);return t.palettes.filter((o)=>e.includes(o.name))}function Dh(t,e){let n=t==="wezterm"?"colors":"themes";return(hp[t].emit?.(e)??[]).flatMap((r)=>{let[,i,o]=r.path.split("/");return i===n&&o!==void 0?[{file:o,content:r.content}]:[]})}function ii(t){return process.platform==="darwin"?pt(t,".warp","themes"):pt(process.env.XDG_DATA_HOME??pt(t,".local","share"),"warp-terminal","themes")}function We(t,e,n){if(t==="warp")return ii(n);return pt(e,t,t==="wezterm"?"colors":"themes")}function oi(t,e){return process.platform==="darwin"?pt(t,".warp","settings.toml"):pt(e,"warp-terminal","settings.toml")}var $o='"dark"';function ko(t){return pt(t,"ttheme","warp.base")}var ap="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 fp(t,e,n,r){let i=oi(e,t);if(!te(i))return;let o=ko(t),s=on(i,"utf8"),c=xr(s),u=c?.includes(`path = "${ut("")}`)===!0,h;if(n){if(!u&&!te(o))ip(up(o),{recursive:!0}),cp(o,c??"");h=rh(n)}else{if(!u)return;h=te(o)&&on(o,"utf8")||$o,bo(o,{force:!0})}let a=Qr(s,h);if(a===s)return;if(r)Ii(i),rp(process.execPath,["-e",ap,op(i),a,s],{detached:!0,stdio:"ignore"}).unref();else Gn(i,a);return i}function ta(t){return pt(t,"ttheme","kitty.py")}function cn(t,e){let n=pt(e,".wezterm.lua");return te(n)?n:pt(t,"wezterm","wezterm.lua")}function si(t){return pt(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function Eo(t){return[pt(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),pt(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),pt(t,"Microsoft","Windows Terminal","settings.json")].filter((e)=>te(e))}function lp(t){for(let e of t){let n=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(on(e,"utf8"))?.[1];if(n)return n}return}function un(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function xe(t,e){return t==="ghostty"?pt(e,"ghostty","config"):pt(e,"kitty","kitty.conf")}function ea(t,e,n,r){return t==="ghostty"?Zu(pt(e,"ttheme"),n,r):Yu(n,ta(e),r)}function we(t){return te(t)?on(t,"utf8"):""}function Ze(t){return pt(t,"alacritty","alacritty.toml")}function gp(t,e){return e?pt(t,"alacritty","themes",`${ut(e)}.toml`):void 0}function na(t,e,n,r){let i=de(t),o=e.map(sr),s=new Map;for(let u of o){let h=iu(i,u.name,r);if(h)s.set(u.name,h)}let c=new Set(Ge(e).map((u)=>u.name));return Gs(o.filter((u)=>c.has(u.name)),s,o.find((u)=>u.name===ee(n)),n.itermBase)}function hn(t,e=sn()){let n=Wt(t);if(!n.terminals.includes("iterm2"))return;let r=Ut(t);Tt(ur(e),na(t,Bh(r,n.palettes),n,e))}function ar(t,e,n,r=sn()){en(de(t));let i=Bh(e,n.palettes),o=[],s=(a,f)=>{if(o.push(a),te(a)&&on(a,"utf8")===f)return!1;return Tt(a,f),!0},c=(a,f)=>{o.push(a),Gn(a,f)},u=ee(n);for(let a of n.terminals){if(a==="iterm2"){s(ur(r),na(t,i,n,r));continue}if(a==="windows-terminal"){if(n.wtHome){let g=Eo(n.wtHome),$=i.map(sr),y=ro($,n.wtProfile??lp(g),u);if(s(si(n.wtHome),y)){let F=new Date;for(let E of g)sp(E,F,F)}}continue}let f=u!==void 0&&a==="warp"&&!te(pt(ii(r),`ttheme-${u}.yaml`)),l=a==="warp"?fp(t,r,u,f):void 0;for(let g of i)for(let{file:$,content:y}of Dh(a,sr(g)))s(pt(We(a,t,r),$),y);if(a==="warp"){if(l)o.push(l);continue}if(a==="wezterm"){let g=pt(t,"ttheme","wezterm.lua");s(g,sh({path:g,colors:We("wezterm",t,r),backgrounds:de(t),...u?{startup:u}:{},palettes:i.map(sr)}));let $=cn(t,r),y=Bn(we($),Bu(g));if(y!==void 0)c($,y);continue}if(a==="alacritty"){let g=Ze(t),$=zn(we(g),gp(t,u));if($!==void 0)c(g,$);continue}if(a==="kitty")s(ta(t),Ls({themes:We("kitty",t,r),backgrounds:de(t)}));let p=xe(a,t),b=we(p);c(p,Xn(b,ea(a,t,u,b)))}let h=pt(t,"ttheme","palettes.zsh");return Tt(h,eo(i,u,n.terminals)),o.push(h),bo(`${h}.zwc`,{force:!0}),o}function ra(t,e){return t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}function dp(t){return[...new Set(t.split(`
135
- `).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function ia(t,e,n=sn()){let r=ee(e),i=(s)=>ra(s,n),o=[];for(let s of e.terminals){if(s==="iterm2"){o.push(`write ${i(ur(n))} — a "ttheme · <palette>" profile per palette`);continue}if(s==="windows-terminal"){if(e.wtHome)o.push(`write ${si(e.wtHome)} — its schemes, and touch settings.json so it reloads`);continue}if(o.push(`write ${i(We(s,t,n))}/${ut("*")} — a theme file per palette`),s==="warp"){let h=oi(n,t);if(r&&te(h))o.push(`edit ${i(h)} — [appearance.themes] theme; \`ttheme off\` puts yours back`);continue}if(s==="wezterm"){let h=cn(t,n);if(Bn(we(h),"")!==void 0)o.push(`edit ${i(h)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`);continue}if(s==="alacritty"){let h=Ze(t);if(zn(we(h),void 0)!==void 0)o.push(`edit ${i(h)} — a ttheme block: general.import`);continue}let c=xe(s,t),u=we(c);o.push(`edit ${i(c)} — a ttheme block: ${dp(ea(s,t,r,u))}`)}return o}function oa(t,e,n=sn()){let r=[],i=(o)=>ra(o,n);if(e.includes("ghostty")){let o=xe("ghostty",t);if(Ke(we(o),"command"))r.push(`${i(o)} sets its own command — ttheme leaves it, so a new tab takes its palette once zsh starts`)}if(e.includes("kitty")){let o=we(xe("kitty",t));if(Ke(o,"window_logo_scale")||Ke(o,"window_logo_alpha"))r.push("kitty.conf sets its own window_logo_scale or window_logo_alpha — pictures are drawn with them")}if(e.includes("alacritty")){let o=Ze(t);if(zu(we(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 yo(t,e,n,r,i=sn()){let o=[];for(let s of n)for(let c of e.palettes.filter((u)=>r.includes(u.name)))for(let{file:u}of Dh(s,sr(c))){let h=pt(We(s,t,i),u);if(te(h))bo(h,{force:!0}),o.push(h)}return o}import{mkdirSync as aa,readFileSync as fa,writeFileSync as la}from"node:fs";import{dirname as ga}from"node:path";import{isMainThread as bp,parentPort as da,Worker as $p}from"node:worker_threads";var mp=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,pp=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"]];function Mo(t){let e=/(\d+)_p(\d+)/.exec(t.source);return[...t.md5?[`md5:${t.md5}`]:[],...e&&t.source.includes("pximg")?[`pixiv:${e[1]}_p${e[2]}`]:[]]}function sa(t,e){let n=mp.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...pp.flatMap(([r,i])=>{let o=r.exec(e.source)?.[1];return o?[`post:${i}:${Number(o)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function ca(t,e){let n=t.owner||t.artist;return n!==""&&n===(e.owner||e.artist)&&t.width===e.width&&t.height===e.height}function ua(t){let r=[];for(let o=0;o<8;o++){let s=Math.floor(o*t.height/8),c=Math.max(s+1,Math.floor((o+1)*t.height/8));for(let u=0;u<9;u++){let h=Math.floor(u*t.width/9),a=Math.max(h+1,Math.floor((u+1)*t.width/9)),f=0;for(let l=s;l<c;l++)for(let p=h;p<a;p++){let b=(l*t.width+p)*4,g=t.data[b+3]/255,$=0.299*t.data[b]+0.587*t.data[b+1]+0.114*t.data[b+2];f+=$*g+255*(1-g)}r.push(f/((a-h)*(c-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 wp(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function ha(t,e){if(t.width<=0||t.height<=0||e.width<=0||e.height<=0)return!1;return Math.abs(Math.log(t.width/t.height/(e.width/e.height)))<0.01&&wp(t.hash,e.hash)<=2}var kp={thumb:"tile",match:"tile",show:"view",backdrop:"view"};function Ep(t){let e=xc(new Uint8Array(fa(t.from)),Ae);if(t.job==="backdrop")return cu(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(fa(t.source))},t),0;if(t.job==="match")return{match:Vh(e,t.colors),hash:ua(e)};if(t.job==="thumb")return aa(ga(t.to),{recursive:!0}),la(t.to,De(Zc(e,t.width,t.height))),0;let n=Un(e);return aa(ga(t.to),{recursive:!0}),la(t.to,De(nu(e,t.colors,t.tone,t.width,t.height))),n}function yp(t){t.on("message",(e)=>{try{t.postMessage({id:e.id,value:Ep(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class ma{worker;next=1;waiting=new Map;send(t){let e=this.next++;return new Promise((n,r)=>{let i=this.open();this.waiting.set(e,{ok:n,no:r}),i.ref(),i.postMessage({...t,id:e})})}close(){this.worker?.terminate(),this.worker=void 0,this.drop(Error("renderer closed"))}open(){if(this.worker)return this.worker;let t=new $p(import.meta.filename);t.unref(),t.on("message",({id:n,value:r,error:i})=>{let o=this.waiting.get(n);if(this.waiting.delete(n),this.waiting.size===0)t.unref();if(i!==void 0)o?.no(Error(i));else o?.ok(r)});let e=(n)=>{if(this.worker===t)this.worker=void 0;this.drop(n instanceof Error?n:Error("renderer stopped"))};return t.on("error",e),t.on("exit",()=>e(void 0)),this.worker=t,t}drop(t){for(let e of this.waiting.values())e.no(t);this.waiting.clear()}}class vo{lines=new Map;run(t){let e=kp[t.job],n=this.lines.get(e);if(!n)n=new ma,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}if(!bp&&da)yp(da);import{connect as Mp,createServer as vp}from"node:net";var Sp=20,pa=22;function So(t){let e=new Uint8Array(t.reduce((r,i)=>r+i.length,0)),n=0;for(let r of t)e.set(r,n),n+=r.length;return e}function Ip(t,e=Sp){let n=t.subarray(5);if(t[0]!==pa||n.length<2)return[t];let r=Math.max(1,Math.min(e,n.length-1)),i=(o)=>So([Uint8Array.from([t[0],t[1],t[2],o.length>>8,o.length&255]),o]);return[i(n.subarray(0,r)),i(n.subarray(r))]}function Fp(t,e,n,r){let i=Mp(n,e,()=>{i.setNoDelay(!0),t.write(`HTTP/1.1 200 Connection Established\r
134
+ `)}`);return t.palettes.filter((o)=>e.includes(o.name))}function ra(t,e){let n=t==="wezterm"?"colors":"themes";return(gp[t].emit?.(e)??[]).flatMap((r)=>{let[,i,o]=r.path.split("/");return i===n&&o!==void 0?[{file:o,content:r.content}]:[]})}function ii(t){return process.platform==="darwin"?pt(t,".warp","themes"):pt(process.env.XDG_DATA_HOME??pt(t,".local","share"),"warp-terminal","themes")}function xe(t,e,n){if(t==="warp")return ii(n);return pt(e,t,t==="wezterm"?"colors":"themes")}function oi(t,e){return process.platform==="darwin"?pt(t,".warp","settings.toml"):pt(e,"warp-terminal","settings.toml")}var Eo='"dark"';function yo(t){return pt(t,"ttheme","warp.base")}var dp="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 mp(t,e,n,r){let i=oi(e,t);if(!ne(i))return;let o=yo(t),s=cn(i,"utf8"),c=Wr(s),u=c?.includes(`path = "${ut("")}`)===!0,h;if(n){if(!u&&!ne(o))up(lp(o),{recursive:!0}),fp(o,c??"");h=ch(n)}else{if(!u)return;h=ne(o)&&cn(o,"utf8")||Eo,ko(o,{force:!0})}let a=Qr(s,h);if(a===s)return;if(r)Ni(i),cp(process.execPath,["-e",dp,hp(i),a,s],{detached:!0,stdio:"ignore"}).unref();else Ln(i,a);return i}function ia(t){return pt(t,"ttheme","kitty.py")}function hn(t,e){let n=pt(e,".wezterm.lua");return ne(n)?n:pt(t,"wezterm","wezterm.lua")}function si(t){return pt(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function vo(t){return[pt(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),pt(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),pt(t,"Microsoft","Windows Terminal","settings.json")].filter((e)=>ne(e))}function pp(t){for(let e of t){let n=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(cn(e,"utf8"))?.[1];if(n)return n}return}function Ze(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function We(t,e){return t==="ghostty"?pt(e,"ghostty","config"):pt(e,"kitty","kitty.conf")}function oa(t,e,n,r){return t==="ghostty"?Xu(pt(e,"ttheme"),n,r):th(n,ia(e),r)}function we(t){return ne(t)?cn(t,"utf8"):""}function qe(t){return pt(t,"alacritty","alacritty.toml")}function wp(t,e){return e?pt(t,"alacritty","themes",`${ut(e)}.toml`):void 0}function sa(t,e,n,r){let i=de(t),o=e.map(cr),s=new Map;for(let u of o){let h=uu(i,u.name,r);if(h)s.set(u.name,h)}let c=new Set(Ge(e).map((u)=>u.name));return Us(o.filter((u)=>c.has(u.name)),s,o.find((u)=>u.name===zt(n)),n.itermBase)}function an(t,e=un()){let n=Kt(t);if(!n.terminals.includes("iterm2"))return;let r=Ut(t);Tt(hr(e),sa(t,na(r,n.palettes),n,e))}function fr(t,e,n,r=un()){rn(de(t));let i=na(e,n.palettes),o=[],s=(a,f)=>{if(o.push(a),ne(a)&&cn(a,"utf8")===f)return!1;return Tt(a,f),!0},c=(a,f)=>{o.push(a),Ln(a,f)},u=zt(n);for(let a of n.terminals){if(a==="iterm2"){s(hr(r),sa(t,i,n,r));continue}if(a==="windows-terminal"){if(n.wtHome){let d=vo(n.wtHome),$=i.map(cr),M=oo($,n.wtProfile??pp(d),u);if(s(si(n.wtHome),M)){let N=new Date;for(let E of d)ap(E,N,N)}}continue}let f=u!==void 0&&a==="warp"&&!ne(pt(ii(r),`ttheme-${u}.yaml`)),l=a==="warp"?mp(t,r,u,f):void 0;for(let d of i)for(let{file:$,content:M}of ra(a,cr(d)))s(pt(xe(a,t,r),$),M);if(a==="warp"){if(l)o.push(l);continue}if(a==="wezterm"){let d=pt(t,"ttheme","wezterm.lua");s(d,ah({path:d,colors:xe("wezterm",t,r),backgrounds:de(t),...u?{startup:u}:{},palettes:i.map(cr)}));let $=hn(t,r),M=Dn(we($),nh(d));if(M!==void 0)c($,M);continue}if(a==="alacritty"){let d=qe(t),$=Bn(we(d),wp(t,u));if($!==void 0)c(d,$);continue}if(a==="kitty")s(ia(t),Ks({themes:xe("kitty",t,r),backgrounds:de(t)}));let m=We(a,t),b=we(m);c(m,Vn(b,oa(a,t,u,b)))}let h=pt(t,"ttheme","palettes.zsh");return Tt(h,ro(i,u,n.terminals)),o.push(h),ko(`${h}.zwc`,{force:!0}),o}function ca(t,e){return t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}function bp(t){return[...new Set(t.split(`
135
+ `).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function ua(t,e,n=un()){let r=zt(e),i=(s)=>ca(s,n),o=[];for(let s of e.terminals){if(s==="iterm2"){o.push(`write ${i(hr(n))} — a "ttheme · <palette>" profile per palette`);continue}if(s==="windows-terminal"){if(e.wtHome)o.push(`write ${si(e.wtHome)} — its schemes, and touch settings.json so it reloads`);continue}if(o.push(`write ${i(xe(s,t,n))}/${ut("*")} — a theme file per palette`),s==="warp"){let h=oi(n,t);if(r&&ne(h))o.push(`edit ${i(h)} — [appearance.themes] theme; \`ttheme off\` puts yours back`);continue}if(s==="wezterm"){let h=hn(t,n);if(Dn(we(h),"")!==void 0)o.push(`edit ${i(h)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`);continue}if(s==="alacritty"){let h=qe(t);if(Bn(we(h),void 0)!==void 0)o.push(`edit ${i(h)} — a ttheme block: general.import`);continue}let c=We(s,t),u=we(c);o.push(`edit ${i(c)} — a ttheme block: ${bp(oa(s,t,r,u))}`)}return o}function ha(t,e,n=un()){let r=[],i=(o)=>ca(o,n);if(e.includes("ghostty")){let o=We("ghostty",t);if(Ke(we(o),"command"))r.push(`${i(o)} sets its own command — ttheme leaves it, so a new tab takes its palette once zsh starts`)}if(e.includes("kitty")){let o=we(We("kitty",t));if(Ke(o,"window_logo_scale")||Ke(o,"window_logo_alpha"))r.push("kitty.conf sets its own window_logo_scale or window_logo_alpha — pictures are drawn with them")}if(e.includes("alacritty")){let o=qe(t);if(eh(we(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 Mo(t,e,n,r,i=un()){let o=[];for(let s of n)for(let c of e.palettes.filter((u)=>r.includes(u.name)))for(let{file:u}of ra(s,cr(c))){let h=pt(xe(s,t,i),u);if(ne(h))ko(h,{force:!0}),o.push(h)}return o}import{mkdirSync as da,readFileSync as ma,writeFileSync as pa}from"node:fs";import{dirname as wa}from"node:path";import{isMainThread as yp,parentPort as ba,Worker as vp}from"node:worker_threads";var $p=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,kp=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"]];function So(t){let e=/(\d+)_p(\d+)/.exec(t.source);return[...t.md5?[`md5:${t.md5}`]:[],...e&&t.source.includes("pximg")?[`pixiv:${e[1]}_p${e[2]}`]:[]]}function aa(t,e){let n=$p.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...kp.flatMap(([r,i])=>{let o=r.exec(e.source)?.[1];return o?[`post:${i}:${Number(o)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function fa(t,e){let n=t.owner||t.artist;return n!==""&&n===(e.owner||e.artist)&&t.width===e.width&&t.height===e.height}function la(t){let r=[];for(let o=0;o<8;o++){let s=Math.floor(o*t.height/8),c=Math.max(s+1,Math.floor((o+1)*t.height/8));for(let u=0;u<9;u++){let h=Math.floor(u*t.width/9),a=Math.max(h+1,Math.floor((u+1)*t.width/9)),f=0;for(let l=s;l<c;l++)for(let m=h;m<a;m++){let b=(l*t.width+m)*4,d=t.data[b+3]/255,$=0.299*t.data[b]+0.587*t.data[b+1]+0.114*t.data[b+2];f+=$*d+255*(1-d)}r.push(f/((a-h)*(c-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 Ep(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function ga(t,e){if(t.width<=0||t.height<=0||e.width<=0||e.height<=0)return!1;return Math.abs(Math.log(t.width/t.height/(e.width/e.height)))<0.01&&Ep(t.hash,e.hash)<=2}var Mp={thumb:"tile",match:"tile",show:"view",backdrop:"view"};function Sp(t){let e=_c(new Uint8Array(ma(t.from)),Ae);if(t.job==="backdrop")return fu(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(ma(t.source))},t),0;if(t.job==="match")return{match:Dh(e,t.colors),hash:la(e)};if(t.job==="thumb")return da(wa(t.to),{recursive:!0}),pa(t.to,en(Xc(e,t.width,t.height))),0;let n=Kn(e);return da(wa(t.to),{recursive:!0}),pa(t.to,en(su(e,t.colors,t.tone,t.width,t.height))),n}function Ip(t){t.on("message",(e)=>{try{t.postMessage({id:e.id,value:Sp(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class $a{worker;next=1;waiting=new Map;send(t){let e=this.next++;return new Promise((n,r)=>{let i=this.open();this.waiting.set(e,{ok:n,no:r}),i.ref(),i.postMessage({...t,id:e})})}close(){this.worker?.terminate(),this.worker=void 0,this.drop(Error("renderer closed"))}open(){if(this.worker)return this.worker;let t=new vp(import.meta.filename);t.unref(),t.on("message",({id:n,value:r,error:i})=>{let o=this.waiting.get(n);if(this.waiting.delete(n),this.waiting.size===0)t.unref();if(i!==void 0)o?.no(Error(i));else o?.ok(r)});let e=(n)=>{if(this.worker===t)this.worker=void 0;this.drop(n instanceof Error?n:Error("renderer stopped"))};return t.on("error",e),t.on("exit",()=>e(void 0)),this.worker=t,t}drop(t){for(let e of this.waiting.values())e.no(t);this.waiting.clear()}}class Io{lines=new Map;run(t){let e=Mp[t.job],n=this.lines.get(e);if(!n)n=new $a,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}if(!yp&&ba)Ip(ba);import{connect as Fp,createServer as Np}from"node:net";var Rp=20,ka=22;function Fo(t){let e=new Uint8Array(t.reduce((r,i)=>r+i.length,0)),n=0;for(let r of t)e.set(r,n),n+=r.length;return e}function Op(t,e=Rp){let n=t.subarray(5);if(t[0]!==ka||n.length<2)return[t];let r=Math.max(1,Math.min(e,n.length-1)),i=(o)=>Fo([Uint8Array.from([t[0],t[1],t[2],o.length>>8,o.length&255]),o]);return[i(n.subarray(0,r)),i(n.subarray(r))]}function Hp(t,e,n,r){let i=Fp(n,e,()=>{i.setNoDelay(!0),t.write(`HTTP/1.1 200 Connection Established\r
136
136
  \r
137
- `);let o=r,s=!1,c=(u)=>{if(s){i.write(u);return}if(o=So([o,u]),o.length<5)return;let h=o[3]*256+o[4];if(o[0]!==pa){s=!0,i.write(o);return}if(o.length<5+h)return;s=!0;let[a,f]=Ip(o.subarray(0,5+h));i.write(a),setTimeout(()=>{if(f)i.write(f);i.write(o.subarray(5+h))},10)};if(t.on("data",c),o.length>0){let u=o;o=new Uint8Array(0),c(u)}i.pipe(t)});i.on("error",()=>t.destroy()),i.on("close",()=>t.destroy()),t.on("error",()=>i.destroy()),t.on("close",()=>i.destroy())}function Np(t){t.setNoDelay(!0);let e=new Uint8Array(0),n=(r)=>{e=So([e,r]);let i=Buffer.from(e).toString("latin1"),o=i.indexOf(`\r
137
+ `);let o=r,s=!1,c=(u)=>{if(s){i.write(u);return}if(o=Fo([o,u]),o.length<5)return;let h=o[3]*256+o[4];if(o[0]!==ka){s=!0,i.write(o);return}if(o.length<5+h)return;s=!0;let[a,f]=Op(o.subarray(0,5+h));i.write(a),setTimeout(()=>{if(f)i.write(f);i.write(o.subarray(5+h))},10)};if(t.on("data",c),o.length>0){let u=o;o=new Uint8Array(0),c(u)}i.pipe(t)});i.on("error",()=>t.destroy()),i.on("close",()=>t.destroy()),t.on("error",()=>i.destroy()),t.on("close",()=>i.destroy())}function jp(t){t.setNoDelay(!0);let e=new Uint8Array(0),n=(r)=>{e=Fo([e,r]);let i=Buffer.from(e).toString("latin1"),o=i.indexOf(`\r
138
138
  \r
139
139
  `);if(o===-1)return;t.off("data",n);let s=/^CONNECT ([^ :]+):(\d+)/.exec(i);if(!s){t.end(`HTTP/1.1 405 Method Not Allowed\r
140
140
  \r
141
- `);return}Fp(t,s[1],Number(s[2]),e.subarray(o+4))};t.on("data",n),t.on("error",()=>t.destroy())}function wa(){let t=vp(Np);return new Promise((e,n)=>{t.once("error",n),t.listen(0,"127.0.0.1",()=>{e({port:t.address().port,close:()=>{t.close(),t.unref()}})})})}var fn=[{name:"TTHEME_FIND_RATING",label:"rating",choices:Wn,multi:{read:Lr}},{name:"TTHEME_FIND_BLOCK",label:"block",choices:Te,multi:{read:Tr,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"]},...lo()?[{name:"TTHEME_FIND_REMOVE_BG",label:"remove bg",choices:["on","off"]}]:[]];function Pp(t,e){if(t.multi)return t.multi.read(e).join(" ")||t.multi.none;return t.choices.find((n)=>n===e)??t.choices[0]}var Gp=["fit","newest","score"];function ba(t){return Gp.find((e)=>e===t)??"fit"}function Lp(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var $a=12,Tp=4,Ap=150,ka=12,Up=2,Kp=150,Jp=30,Wp=4000,xp=8000,Ea=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,Qp=process.platform==="win32"?"alt+v":"ctrl+v",ya=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",Zp=1280,Ma=2,qp=3,_p=8;function ui(t,e){return{key:t,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:e}}function ln(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return ln(t.errors[0]);if(t.cause)return ln(t.cause);let e=t.code;if(typeof e==="string")return e;let n=(t.message||t.name).split(".")[0]??"";return n.length>56?`${n.slice(0,55)}…`:n}function Fo(t,e){return`${t}: ${ln(e)}`}function va(t){return t.width*t.height}function Sa(t){return`${t.id}-${Na("sha1").update(t.preview).digest("hex").slice(0,8)}`}function Cp(t){let e=t.lastIndexOf("\x1B");return e!==-1&&/^\[?[0-9;]*$/.test(t.slice(e+1))}function No(t,e){try{return JSON.parse(Ra(ae(Ie(t),e),"utf8"))}catch{return{}}}function Ro(t,e,n){fr(Ie(t),{recursive:!0}),lr(ae(Ie(t),e),`${JSON.stringify(n)}
142
- `)}class Oa{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(fn.map((t)=>[t.name,Pp(t,process.env[t.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 vo;sent=new Map;placed=new Map;current;fetch;settle;partial;suggestTimer;suggesting;input="";typed="";grabber=new ao((t)=>this.write(t),(t)=>void this.got(t));featureWait;noticeTimer;peekTimer;peeked;attaching;probeWait;done;dirty=!1;unblock=!1;scratch=Rp(ae(Hp(),"ttheme-find-"));home;catalog;entry;constructor(t,e,n,r){this.home=t,this.catalog=e,this.entry=n,this.tone=jr(n,n.signatureSlots),this.view={palette:n.name,tag:r,site:this.tabName,siteAnsi:this.tabAnsi,nextSite:this.nextTabName,preset:this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:ba(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:Lr(this.setting("TTHEME_FIND_RATING")),block:Tr(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",unblocked:process.env.TTHEME_FIND_PROXY!==void 0,settings:fn.map((i)=>({label:i.label,choices:[...i.choices],value:this.setting(i.name),multi:i.multi&&{none:i.multi.none},cursor:0})),colors:{cursor:n.cursor,selection:n.selection,ansi:n.ansi},tiles:[],installed:[],checked:0,total:0,searching:r!=="",focus:0,top:0,mode:"grid",help:!1,editing:r===""?"":void 0},this.board=ui(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:gt[this.tab-1]}get sites(){return this.site?[this.site]:gt}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??Tp}get nextTabName(){let t=(this.tab+1)%(gt.length+1);return t===0?"all":gt[t-1].name}frame(){return{w:this.cols*(this.cell.w||10),h:this.rows*(this.cell.h||20)}}setting(t){return this.values.get(t)}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(t,e,n){return ae(Ie(t),"orig",`${e}.${n}`)}previewPath(t){return ae(Ie(t.site),"thumb",`${Sa(t.post)}.${xn(t.post.preview)}`)}tileOf(t,e){let{site:n,post:r}=t,i=se(n,r.id),o=Zn(r)??r;return{id:r.id,key:i,site:n.name,siteAnsi:n.ansi,width:o.width,height:o.height,reduced:o!==r,owner:r.owner,artist:n===zr?bh(r.source):r.artist,score:r.score,variants:e,origin:zi(r.source),mates:this.owners.get(n.key)?.get(r.owner)??[],thumb:this.thumbPath.get(i)}}show(){let t=this.view,e=this.board;t.tiles=e.groups.flatMap((n)=>n.open?n.posts.map((r)=>this.tileOf(r,0)):[this.tileOf(n.posts[0],n.posts.length)]),t.checked=e.checked,t.total=e.total,t.searching=e.searching,t.note=e.note,t.focus=Math.max(0,Math.min(e.focus,t.tiles.length-1)),t.top=e.top}syncSite(){let t=this.view;t.site=this.tabName,t.siteAnsi=this.tabAnsi,t.nextSite=this.nextTabName}async run(){let{stdin:t,stdout:e}=process;t.setRawMode(!0),t.resume(),t.on("data",this.onData),e.on("resize",this.onResize),this.write("\x1B[?25l\x1B[?7l\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H");let n=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 n;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),t.off("data",this.onData),e.off("resize",this.onResize),this.write("\x1B_Ga=d,d=A,q=2\x1B\\\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H"),t.setRawMode(!1),t.pause(),this.saveProbes(),this.renders.close(),Io(this.scratch,{recursive:!0,force:!0}),Su(),o}write(t){process.stdout.write(t)}get saved(){return this.view.saved}finish(t){this.done?.(t===2&&this.saved?0:t)}probe(){return new Promise((t)=>{let e=setTimeout(()=>{this.probeWait=void 0,t(null)},1000);this.probeWait=(n)=>{clearTimeout(e),this.probeWait=void 0,t(n)},this.write(Ah)})}onData=(t)=>{this.input+=t.toString("utf8");for(let n=po(this.input);n;n=po(this.input))this.input=n.rest,this.probeWait?.(n.cell);if(this.probeWait)return;let e=vh(this.input);if(this.input=e.pending,this.view.editing===void 0&&e.keys.length>8&&/^(?:\/|~\/|file:|https?:)/.test(e.keys))this.pasted(e.keys),e.keys="";this.typed+=e.keys;for(let n of e.events)this.inbound(n);if(clearTimeout(this.partial),Cp(this.typed)){this.partial=setTimeout(this.flushKeys,Jp);return}this.flushKeys()};flushKeys=()=>{let t=Th(this.typed);this.typed="";for(let e of t)this.key(e)};features(){if(process.env.TMUX)return Promise.resolve();return new Promise((t)=>{let e=setTimeout(()=>{this.featureWait=void 0,t()},500);this.featureWait=()=>{clearTimeout(e),this.featureWait=void 0,t()},this.write("\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c")})}inbound(t){if(t.kind==="mode"){if(t.mode===5522)this.grabber.clipboard=t.value!==0&&t.value!==4;return}if(t.kind==="attributes"){this.featureWait?.();return}if(t.kind==="osc"){if(t.code==="72"&&t.meta.t==="q"){this.grabber.drops=!0;return}this.grabber.take(t);return}this.pasted(t.text)}pasted(t){let e=this.view;if(e.editing!==void 0&&t.trim()!==""&&!this.picture(t)){e.editing+=t.replace(/[\r\n]+/g," "),this.suggest(),this.draw();return}if(e.installing!==void 0||e.asking!==void 0||e.panel!==void 0||e.help)return;if(t.trim()===""){this.fromClipboard();return}this.attach(t)}picture(t){let e=t.trim();if(/^https?:\/\/\S+$/i.test(e))return!Ar(e,this.site??gt[0]);return Yr(e).length>0}async got(t){if(t.kind==="error"){this.notice(t.message);return}if(t.kind==="text"){if(t.text.trim()===""){this.notice(`no picture on the clipboard — ${ya}`);return}this.pasted(t.text);return}await this.bring(()=>Xr(t.bytes,t.source))}notice(t,e=Wp){let n=this.view;n.error=t,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(n.error===t)n.error=void 0,this.draw()},e),this.draw()}async peek(){let t=this.view,e;try{e=await Mh()}catch{return}if(!e||e.stamp===this.peeked)return;if(this.peeked=e.stamp,!e.picture||t.installing!==void 0||t.asking!==void 0)return;t.hint=`picture on the clipboard · ${Qp} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.draw()},xp),this.draw()}async fromClipboard(){let t=this.view;if(ho()){if(this.grabber.clipboard){this.grabber.ask();return}this.notice("over ssh the clipboard is not here — drop the file");return}let e;try{e=await yh(ae(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`could not read the clipboard: ${ln(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await uo(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`no picture on the clipboard — ${ya}`);return}if(this.picture(n)){await this.attach(n);return}if(t.editing===void 0)t.editing="";this.pasted(n)}async attach(t){let e=t.trim();if(/^https?:\/\//i.test(e)){let i=Ar(e,this.site??gt[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=Yr(e).sort((i,o)=>Number(!Ea.test(i))-Number(!Ea.test(o)));if(!n){this.notice("nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>uo(n,i),r.length)}async bring(t,e=0){let n=this.view;this.attaching?.abort();let r=new AbortController;this.attaching=r,n.error=void 0,n.saved=void 0,n.note="reading the picture…",this.draw();let i;try{i=await t(AbortSignal.any([r.signal,this.signal]))}catch(l){if(!r.signal.aborted)n.note=void 0,this.notice(ln(l),8000);return}if(r.signal.aborted)return;n.note=e>0?`the first picture of ${e+1} — drop one at a time to try the others`:void 0,this.quietSuggest(),n.editing=void 0,n.suggest=void 0,n.pick=void 0;let o=kh(i.bytes);$h(o,i.source);let s=this.origPath(zr,o,i.ext);fr(ci(s),{recursive:!0}),lr(s,i.bytes);let c=jp(s).href,u={id:o,file:c,width:i.width,height:i.height,ext:i.ext,preview:c,owner:"",artist:"",score:0,rating:"s",md5:Na("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],solo:void 0,family:0,smaller:[]},h={site:zr,post:u},a=this.previewPath(h);fr(ci(a),{recursive:!0}),lr(a,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let f=ui(`local|post:${o}`,!1);this.board=f,this.boards.set(f.key,f),this.single(f,h)}single(t,e){t.searching=!1,this.posts.set(se(e.site,e.post.id),e),t.groups=[{posts:[e],open:!1}],t.checked=1,t.total=1,this.thumbQueue.push(e),this.thumbs(),this.view.mode="try",this.show(),this.select(),this.draw()}onClock=()=>{let t=this.sites.reduce((r,i)=>ve(i)>ve(r)?i:r),e=Math.ceil((ve(t)-Date.now())/1000),n=e>0?e:void 0;if(n!==this.view.waiting)this.view.waiting=n,this.view.slow=t.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(t){let e=this.view;if(t==="ctrl-c"){this.finish(2);return}if(e.installing!==void 0)return;if(e.asking!==void 0){this.askKey(t);return}if(t==="focus-in"){this.peek();return}if(t==="focus-out"||t==="nop")return;if((t==="ctrl-v"||t==="alt-v")&&e.panel===void 0){this.fromClipboard();return}if(e.editing!==void 0){this.editKey(t);return}if(e.panel!==void 0){this.panelKey(t);return}if(e.help){if(t==="?"||t==="esc")e.help=!1,this.draw();return}if(this.cols<Je.cols||this.rows<Je.rows){if(t==="esc")this.finish(2);return}if(t==="?"){e.help=!0,this.draw();return}if(e.mode==="try"){this.tryKey(t);return}this.gridKey(t)}gridKey(t){let e=this.view,{perRow:n,rowsVis:r}=rn(this.cols,this.rows),o={left:-1,right:1,up:-n,down:n,pgup:-n*r,pgdn:n*r,home:-e.focus,end:e.tiles.length}[t];if(o!==void 0){this.focus(e.focus+o);return}if(t==="enter"&&e.tiles[e.focus]){e.mode="try",e.error=void 0,this.select();return}if(t==="v"){this.fromClipboard();return}if(t==="c"){e.preset=e.preset==="cutouts"?"all":"cutouts",this.turn();return}if(t==="tab"){this.tab=(this.tab+1)%(gt.length+1),this.syncSite(),this.turn();return}if(t==="/"){e.editing="",this.draw();return}if(t===" "){this.unfold();return}if(t==="o"){this.openPage();return}if(t==="s"){e.panel=0,this.draw();return}if(t==="esc")this.finish(2)}panelKey(t){let e=this.view,n=e.panel??0,r=e.settings[n];if(t==="up"||t==="down"){e.panel=Math.max(0,Math.min(e.settings.length-1,n+(t==="up"?-1:1))),this.draw();return}if((t==="left"||t==="right")&&r){let i=t==="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(t===" "&&r?.multi){let i=r.value.split(" "),o=r.choices.filter((c,u)=>u===r.cursor?!i.includes(c):i.includes(c)),s=r.multi.none;if(o.length>0||s!==void 0)r.value=o.length>0?o.join(" "):s,this.draw();return}if(t==="esc"){e.settings.forEach((i,o)=>{i.value=this.setting(fn[o]?.name??"")}),e.panel=void 0,this.draw();return}if(t==="enter"||t==="alt-c")e.panel=void 0,this.adopt()}adopt(){let t=this.view,e=fn.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let o=fn[i];if(o)this.values.set(o.name,r.value)});let n=fn.filter((r,i)=>this.setting(r.name)!==e[i]);if(n.length===0){this.draw();return}this.save(n),t.rating=Lr(this.setting("TTHEME_FIND_RATING")),t.block=Tr(this.setting("TTHEME_FIND_BLOCK")),t.sets=this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",t.preset=this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",t.order=ba(this.setting("TTHEME_FIND_ORDER")),t.solo=this.setting("TTHEME_FIND_SOLO")==="on",this.boards.clear(),this.current=void 0,t.shown=void 0,t.mode="grid",this.search()}save(t){this.store(t.map((e)=>[e.name,this.setting(e.name)]))}store(t){let e=ae(this.home,"ttheme","config.zsh");try{let n=an(e)?Ra(e,"utf8"):"";return lr(e,t.reduce((r,[i,o])=>Xu(r,i,o),n)),!0}catch(n){return this.view.error=n instanceof Error?n.message:String(n),!1}}askKey(t){let e=this.view;if(t==="y"){if(e.asking=void 0,this.store([["TTHEME_FIND_UNBLOCK","1"]])){this.unblock=!0,this.finish(0);return}this.draw();return}if(t==="n"||t==="esc")e.asking=void 0,this.draw()}editKey(t){let e=this.view,n=e.editing??"",r=e.suggest??[];if((t==="up"||t==="down")&&r.length>0){let i=e.pick??-1,o=t==="down"?Math.min(r.length-1,i+1):i-1;e.pick=o<0?void 0:o,this.draw();return}if(t==="esc"||t==="enter")this.quietSuggest();if(t==="esc"){if(e.editing=void 0,e.tag===""){this.finish(2);return}this.draw();return}if(t==="enter"){let i=e.pick===void 0?void 0:r[e.pick],o=i?n.replace(/\S*$/,i.value):n;if(e.editing=void 0,e.suggest=void 0,e.pick=void 0,o.trim()){this.commit(o.trim());return}if(e.tag===""){this.finish(2);return}this.draw();return}if(t==="backspace"){e.editing=n.slice(0,-1),this.suggest(),this.draw();return}if(t.length===1&&t>=" ")e.editing=n+t,this.suggest(),this.draw()}quietSuggest(){clearTimeout(this.suggestTimer),this.suggesting?.abort(),this.suggesting=void 0}suggest(){this.quietSuggest();let t=this.view;t.pick=void 0;let e=/\S*$/.exec(t.editing??"")?.[0]??"";if(!Lp(e)){t.suggest=void 0;return}let n=[...new Map(Oh(this.catalog.palettes,this.entry,e).map((i)=>[i.booru,{value:i.booru,count:0,palette:i.name}])).values()].slice(0,qp);t.suggest=n.length>0?n:void 0;let r=new AbortController;this.suggesting=r,this.suggestTimer=setTimeout(async()=>{try{let i=await Ou(e,AbortSignal.any([this.signal,r.signal]));if(this.suggesting===r&&t.editing!==void 0){let o=new Map(i.map((c)=>[c.value,c.count])),s=new Set(n.map((c)=>c.value));t.suggest=[...n.map((c)=>({...c,count:o.get(c.value)??0})),...i.filter((c)=>!s.has(c.value))].slice(0,_p),t.pick=t.pick!==void 0&&t.pick<n.length?t.pick:void 0,this.draw()}}catch{}},Ap)}async commit(t){let e=Ar(t,this.site??gt[0]);if(e){await this.jump(e.site,e.id);return}if(this.picture(t)){await this.attach(t);return}this.view.tag=t,this.boards.clear(),await this.search()}async jump(t,e){let n=++this.gen;this.tab=gt.indexOf(t)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ui(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.draw();try{let i=await Bi(t,e,this.signal);if(n!==this.gen)return;if(!i){r.searching=!1,r.error=`${t.name} has no post ${e}`,this.view.error=r.error,this.show(),this.draw();return}this.single(r,{site:t,post:i})}catch(i){this.fail(n,i,t)}}async turn(){this.fetch?.abort(),this.current=void 0,this.view.shown=void 0;let t=this.boards.get(this.boardKey);if(!t){await this.search();return}this.gen++,this.board=t,this.view.error=t.error,this.show(),this.draw(),await this.pump()}unfold(){let t=this.view,e=0;for(let n of this.board.groups){let r=n.open?n.posts.length:1;if(t.focus<e+r){if(n.posts.length<2)return;n.open=!n.open,this.board.focus=e;for(let i of n.posts)if(!this.thumbPath.has(se(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.draw();return}e+=r}}openPage(){let t=this.view.tiles[this.view.focus],e=t&&this.posts.get(t.key);if(!e)return;let n=process.platform==="darwin"?"open":"xdg-open";try{Fa(n,[e.site.pageUrl(e.post.id)],{stdio:"ignore",detached:!0}).unref()}catch{}}tryKey(t){let e=this.view;if(t==="left"||t==="right"){this.direction=t==="left"?-1:1,this.focus(e.focus+this.direction);return}if(t==="o"){this.openPage();return}if(t==="x"){this.swap();return}if(t==="v"){this.fromClipboard();return}if(t==="enter"){this.install();return}if(t==="esc")this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,e.mode="grid",e.error=void 0,this.draw()}focus(t){let e=this.view;if(e.tiles.length===0)return;let n=Math.max(0,Math.min(e.tiles.length-1,t));if(n===e.focus)return;if(e.focus=n,this.board.focus=n,this.scroll(),this.pump(),e.mode==="try")this.select();this.draw()}scroll(){let t=this.view,{perRow:e,rowsVis:n}=rn(this.cols,this.rows),r=Math.floor(t.focus/e);if(r<t.top)t.top=r;if(r>t.top+n-1)t.top=r-n+1;this.board.top=t.top}query(t){let e=this.view,n=e.tag===this.entry.booru?Hh(this.entry,t.key):[e.tag];if(n.length===0)return;let r=n.length>1,i=e.preset==="cutouts"?t.cutouts:"",o=r&&i.includes("~"),s=[r?n.map((h)=>`~${h}`).join(" "):n[0],t.rate(this.view.rating),o?"":i,e.order==="score"?t.best:""].filter(Boolean),c=[],u=[];for(let h of s)if(Yi([...c,h].join(" "))<=t.tagBudget)c.push(h);else u.push(h);return{tags:c.join(" "),notes:[...u.length>0?[`${t.name} takes ${t.tagBudget} tags — ${u.join(" ")} left out`]:[],...o?[`${t.name} ORs the names, so cutouts are told by the file`]:[]]}}async search(){let t=++this.gen,e=ui(this.boardKey,!0);this.board=e,this.boards.set(e.key,e),this.view.error=void 0;let n=this.sites.flatMap((o)=>{let s=this.query(o);return s?[{site:o,...s}]:[]}),r=this.sites.filter((o)=>!n.some((s)=>s.site===o)),i=[...n.flatMap(({notes:o})=>o),...r.length>0?[`${this.entry.name} has no tag on ${r.map((o)=>o.name).join(", ")}`]:[]];if(e.note=i.length>0?i.join(" · "):void 0,n.length===0)e.searching=!1;this.show(),this.draw(),this.tally(t,e,n);try{let o=await Promise.all(n.map(async(s)=>({plan:s,owners:await this.mateOwners(s.site)})));if(t!==this.gen)return;e.sources=o.flatMap(({plan:{site:s,tags:c},owners:u})=>[...Yi(c)+1<=s.tagBudget?[...u.keys()].map((h)=>({site:s,tags:`${c} user:${h}`,page:0,done:!1})):[],{site:s,tags:c,page:0,done:!1}]),this.show(),this.draw(),await this.pump()}catch(o){this.fail(t,o)}}async tally(t,e,n){let r=await Promise.allSettled(n.map(({site:i,tags:o})=>Fu(i,o,this.signal)));if(t===this.gen)e.total=r.reduce((i,o)=>i+(o.status==="fulfilled"?o.value:0),0),this.show(),this.draw()}fail(t,e,n=this.site){if(t!==this.gen||this.signal.aborted)return;this.board.error=Fo(n?.name??this.tabName,e),this.board.searching=!1,this.view.error=this.board.error,this.offer(n,e),this.show(),this.draw()}offer(t,e){if(t&&!this.view.unblocked&&Ha()&&ln(e)==="ECONNRESET")this.view.asking=t.name}drop(t,e,n){for(let r of t.sources)if(r.site===e)r.done=!0;t.note=[t.note,Fo(e.name,n)].filter(Boolean).join(" · "),this.offer(e,n)}wants(){let{perRow:t,rowsVis:e}=rn(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+Ma)*t}need(){let{perRow:t,rowsVis:e}=rn(this.cols,this.rows);return(e+Ma)*t}live(t){return this.boards.get(t.key)===t}page(t,e,n){let r=`${t.key}|${e}|${n}`,i=this.pages.get(r);if(!i)i=Iu(t,e,n,this.signal).then((o)=>this.borrow(o)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(t){let e=t.filter((n)=>n.solo===void 0&&n.md5!=="");if(e.length>0)try{Nu(e,await Ru(e.map((n)=>n.md5),this.signal))}catch{}return t}async round(t){let e=gt.flatMap((c)=>{let u=t.sources.find((h)=>h.site===c&&!h.done);return u?[u]:[]}),n=await Promise.all(e.map(async(c)=>{try{return{source:c,posts:await this.page(c.site,c.tags,c.page)}}catch(u){if(t.sources.every((h)=>h.site===c.site)||this.signal.aborted)throw u;return this.drop(t,c.site,u),{source:c,posts:void 0}}}));if(!this.live(t))return;let r=[];for(let{source:c,posts:u}of n){if(!u)continue;c.page++,c.done=u.length<Le;let h=t.last.get(c);for(let a of u){let f=h&&ca(h.post,a)?h.set:`set:${c.site.key}:${a.id}`;h={post:a,set:f};let l=se(c.site,a.id);if(t.seen.has(l))continue;t.seen.add(l);let p={site:c.site,post:a};if(this.eligible(p))t.kin.set(p,[f,...sa(c.site,a)]),r.push(p);else t.checked++}if(h)t.last.set(c,h)}let i=this.dedupe(t,r),o=++t.rounds,s;if(this.view.order!=="fit")s=e.length>1?Xh(i):i;else{let c=ri(i,this.frame(),this.matched),u=c.slice(0,this.need());if(await this.looks(u),!this.live(t))return;s=[...ri(u,this.frame(),this.matched),...c.slice(u.length)]}for(let c of s)t.roundOf.set(c,o);t.queue.push(...s),this.ahead(t)}ahead(t){if(this.aheading||this.view.order!=="fit"||!this.live(t))return;let e=t.queue.slice(0,this.need()).filter((n)=>!this.looking.has(se(n.site,n.post.id)));if(e.length===0)return;this.aheading=!0,this.looks(e).then(()=>{this.aheading=!1;for(let n of new Set(e.map((r)=>t.roundOf.get(r)??0)))this.resort(t,n);this.ahead(t)})}resort(t,e){let n=t.queue.flatMap((i,o)=>t.roundOf.get(i)===e?[o]:[]),r=ri(n.map((i)=>t.queue[i]),this.frame(),this.matched);n.forEach((i,o)=>{t.queue[i]=r[o]})}dedupe(t,e){let n=[];for(let r of e){let i=Mo(r.post),o=i.map((c)=>t.same.get(c)).find(Boolean);if(!o){for(let c of i)t.same.set(c,r);n.push(r);continue}if(t.checked++,va(r.post)<=va(o.post))continue;for(let c of[...i,...Mo(o.post)])t.same.set(c,r);let s=n.indexOf(o);if(s>=0){n[s]=r;continue}this.replace(t,o,r)}return n}replace(t,e,n){t.roundOf.set(n,t.roundOf.get(e)??0);let r=t.queue.indexOf(e);if(r>=0){t.queue[r]=n;return}for(let i of t.groups){let o=i.posts.indexOf(e);if(o>=0){i.posts[o]=n,this.posts.set(se(n.site,n.post.id),n),this.thumbQueue.push(n),this.thumbs();return}}}async looks(t){let e=0;await Promise.all(Array.from({length:ka},async()=>{while(e<t.length)await this.look(t[e++])}))}look(t){let e=se(t.site,t.post.id),n=this.looking.get(e);if(!n)n=(async()=>{let r=this.previewPath(t);await this.cached(t.site,r,t.post.preview);let i=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(e,i),this.matched.set(t.post,i.match),i})().catch(()=>{return}),this.looking.set(e,n);return n}async pump(){let t=this.gen,e=this.board;if(this.pumping===t||e.sources.length===0)return;this.pumping=t;let n=[],r;try{e.searching=!0;while(t===this.gen){while(n.length<$a&&e.queue.length>0&&this.wants()){let s=e.queue.shift();n.push({pick:s,passed:this.vet(s)})}if(this.ahead(e),!r&&e.queue.length<$a&&e.sources.some((s)=>!s.done)&&this.wants()){let s=this.round(e).then(()=>{if(r===s)r=void 0});s.catch(()=>{}),r=s}let i=n.shift();if(!i){if(!r)break;await r,this.show(),this.draw();continue}let o=await i.passed;if(t!==this.gen)return;if(e.checked++,o)this.admit(i.pick);this.show(),this.draw()}if(t===this.gen)e.searching=!1,this.show(),this.draw()}catch(i){this.fail(t,i)}finally{if(this.saveProbes(),this.pumping===t)this.pumping=0}}eligible({site:t,post:e}){let n=Zn(e);if(!Mu(t,e,this.view.rating)||yu(e,this.view.block).length>0||!n)return!1;if(this.view.solo&&e.solo===!1)return!1;return this.view.preset==="all"?["png","jpg","jpeg"].includes(n.ext):e.ext==="png"}async vet(t){let[e]=await Promise.all([this.passes(t),this.look(t)]);return e}async passes({site:t,post:e}){return this.view.preset==="all"||t.vouched||this.transparent(t,e)}probes(t){let e=this.probed.get(t.key);if(!e)e=No(t,"probes.json"),this.probed.set(t.key,e);return e}async transparent(t,e){let n=this.probes(t),r=n[e.id];if(r!==void 0)return r;try{let i=(await Hu(t,e.file,this.signal))?.alpha===!0;return n[e.id]=i,this.unsaved.add(t.key),i}catch{return!1}}saveProbes(){for(let t of this.unsaved){let e=gt.find((n)=>n.key===t);if(e)Ro(e,"probes.json",this.probes(e))}this.unsaved.clear()}admit(t){let{site:e,post:n}=t,r=this.board,i=se(e,n.id);this.posts.set(i,t);let o=r.kin.get(t)??[],s=this.looked.get(i),c=s&&{hash:s.hash,width:n.width,height:n.height},u=this.view.sets==="fold"?this.kindred(r,o,c):void 0;if(u){if(u.posts.push(t),this.register(r,u,o,c),u.open)this.thumbQueue.push(t),this.thumbs();return}let h={posts:[t],open:!1};r.groups.push(h),this.register(r,h,o,c),this.thumbQueue.push(t),this.thumbs()}kindred(t,e,n){for(let r of e){let i=t.kindred.get(r);if(i)return i}return n&&t.shapes.find((r)=>ha(r.shape,n))?.group}register(t,e,n,r){for(let i of n)if(!t.kindred.has(i))t.kindred.set(i,e);if(r)t.shapes.push({shape:r,group:e})}async mateOwners(t){let e=this.owners.get(t.key);if(e)return e;let n=uu(this.home),r=No(t,"owners.json"),i=this.catalog.palettes.flatMap((u)=>{let h=n.get(u.name);return u.group===this.entry.group&&u.name!==this.entry.name&&h?.site===t.key?[{name:u.name,id:h.id}]:[]}),o=await Promise.all(i.map(async(u)=>{let h=r[u.id];if(h!==void 0)return{...u,owner:h};try{return{...u,owner:(await Bi(t,u.id,this.signal))?.owner??""}}catch{return}})),s=new Map;for(let u of o)if(u)r[u.id]=u.owner,s.set(u.name,u.owner);Ro(t,"owners.json",r);let c=vu(s);return this.owners.set(t.key,c),c}async cached(t,e,n,r){if(an(e))return Op(e).size;let i=this.inflight.get(e);if(i)return i;let o=(async()=>{let s=await ju(t,n,this.signal,r);return fr(ci(e),{recursive:!0}),lr(e,s),s.length})();this.inflight.set(e,o);try{return await o}finally{this.inflight.delete(e)}}thumbs(){while(this.thumbing<ka&&this.thumbQueue.length>0){let t=this.thumbQueue.shift();this.thumbing++,this.thumb(t).catch(()=>{}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(t){let{site:e,post:n}=t,r=Jt.cols*this.cell.w,i=Jt.rows*this.cell.h,o=ae(Ie(e),"tile",`${Sa(n)}-${r}x${i}.png`);if(!an(o)){let s=this.previewPath(t);await this.cached(e,s,n.preview),await this.renders.run({job:"thumb",from:s,to:o,width:r,height:i})}this.thumbPath.set(se(e,n.id),o),this.show(),this.draw()}select(){let t=this.view,e=t.tiles[t.focus];if(this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,!e)return;if(this.current?.key===e.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(e),Kp),this.draw()}async load(t){let e=this.view,n=this.posts.get(t.key),r=n&&Zn(n.post);if(!n||!r)return;let{site:i}=n,o=this.board,s=new AbortController;this.fetch=s;try{let c=this.origPath(i,t.id,r.ext);if(!an(c))e.fetching={id:t.key,got:0,size:0},this.draw();let u=await this.cached(i,c,r.file,(f,l)=>{if(e.fetching?.id===t.key)e.fetching={id:t.key,got:f,size:l},this.draw()});if(s.signal.aborted)return;if(e.fetching=void 0,o!==this.board)return;let h={site:i,id:t.id,key:t.key,path:c,ext:r.ext,size:u,using:"plain",failed:!1};e.preparing=t.key,this.flush();let a=await this.render(h,"plain");if(s.signal.aborted||o!==this.board)return;if(a.clear===0&&lo()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(e.preparing=void 0,e.cutting=t.key,this.flush(),h.cut=await this.cutOut(i,t.id,c,s.signal),s.signal.aborted||o!==this.board)return;if(e.cutting=void 0,h.cut){e.preparing=t.key,this.flush();let f=await this.render(h,"cut").catch(()=>{return});if(s.signal.aborted||o!==this.board)return;if(f&&jh(f.clear))h.using="cut";else Io(h.cut,{force:!0}),h.cut=void 0,h.failed=!0}else h.failed=!0}if(this.current=h,e.tiles[e.focus]?.key===t.key)await this.present();this.preload()}catch(c){if(!s.signal.aborted&&!this.signal.aborted)e.error=Fo(i.name,c)}finally{if(e.fetching?.id===t.key)e.fetching=void 0;if(e.preparing===t.key)e.preparing=void 0;if(e.cutting===t.key)e.cutting=void 0;this.draw()}}async cutOut(t,e,n,r){let i=ae(Ie(t),"cut",`${e}.png`);if(an(i))return i;try{return fr(ci(i),{recursive:!0}),await Ph(n,i,r),i}catch{Io(i,{force:!0});return}}swap(){let t=this.current;if(!t?.cut||this.view.shown?.id!==t.key)return;t.using=t.using==="cut"?"plain":"cut",this.reveal()}preload(){let t=this.view;if(t.mode!=="try")return;for(let e of[t.focus+this.direction,t.focus-this.direction]){if(this.prefetching>=Up)return;let n=t.tiles[e],r=n&&this.posts.get(n.key),i=r&&Zn(r.post);if(!r||!i)continue;let{site:o,post:s}=r,c=this.origPath(o,s.id,i.ext);this.prefetching++,this.cached(o,c,i.file).then(()=>this.render({site:o,id:s.id,key:n.key,path:c,ext:i.ext,size:0,using:"plain",failed:!1},"plain")).catch(()=>{}).finally(()=>{this.prefetching--})}}async render(t,e){let n=this.cols*this.cell.w,r=this.rows*this.cell.h,i=Math.min(n,Zp),o=Math.max(1,Math.round(r*i/n)),s=ae(this.scratch,`${t.site.key}-${t.id}${e==="cut"?"c":""}-${i}x${o}.png`),c=`${t.site.key}:${t.id}:${e}`,u=this.clarity.get(c);if(u!==void 0&&an(s))return{clear:u,path:s};let h=await this.renders.run({job:"show",from:e==="cut"?t.cut:t.path,to:s,width:i,height:o,colors:this.entry,tone:this.tone});return this.clarity.set(c,h),{clear:h,path:s}}async present(){let t=this.current;if(!t)return;let e=t.using,{clear:n,path:r}=await this.render(t,e);if(this.current!==t||t.using!==e)return;this.view.shown={id:t.key,clear:n,bytes:t.size,path:r,cut:t.cut?e==="cut"?"on":"off":t.failed?"failed":"none"}}reveal(){let t=this.view;t.preparing=this.current?.key,this.flush(),this.present().catch((e)=>{t.error=e instanceof Error?e.message:String(e)}).finally(()=>{if(t.preparing===this.current?.key)t.preparing=void 0;this.draw()})}async install(){let t=this.view,e=t.tiles[t.focus],n=this.current;if(!e||n?.key!==e.key||t.preparing!==void 0||t.shown?.id!==e.key)return;t.installing=e.key,t.error=void 0,this.flush();try{await this.renders.run({job:"backdrop",from:n.using==="cut"?n.cut:n.path,source:n.path,home:this.home,colors:this.entry,tone:this.tone,origin:{site:n.site.key,id:n.id,ext:n.ext,from:`${n.site.name} ${n.id} ${n.site.pageUrl(n.id)}`},width:this.cols*this.cell.w,height:this.rows*this.cell.h});let r=No(n.site,"owners.json");r[n.id]=this.posts.get(n.key)?.post.owner??"",Ro(n.site,"owners.json",r),hn(this.home),t.saved=`background · ${this.entry.name} ← ${n.site.name} ${n.id}`,t.installed.push(e.key),this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,t.mode="grid"}catch(r){t.error=r instanceof Error?r.message:String(r)}t.installing=void 0,this.draw()}draw(){if(this.dirty)return;this.dirty=!0,setImmediate(()=>{this.dirty=!1,this.flush()})}flush(){let t=_h(this.view,this.cols,this.rows),e="\x1B[?2026h";t.lines.forEach((r,i)=>{e+=`\x1B[${i+1};1H\x1B[K${r}`});let n=new Set;for(let r of t.images){if(n.add(r.id),this.sent.get(r.id)!==r.path)e+=Uh(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)e+=Kh(r),this.placed.set(r.id,i)}for(let r of this.sent.keys())if(!n.has(r))e+=Jh(r),this.sent.delete(r),this.placed.delete(r);this.write(`${e}\x1B[?2026l`)}}function Ha(){if(process.versions.bun)return!0;let[t=0,e=0]=process.versions.node.split(".").map(Number);return t>22||t===22&&e>=21}async function Ia(){if(!Ha())return process.stderr.write(`unblock needs node 22.21 or newer — this is ${process.versions.node}
143
- `),1;let t=await wa(),e=Fa(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:${t.port}`,NO_PROXY:[process.env.NO_PROXY,Eu()].filter(Boolean).join(","),TTHEME_FIND_PROXY:String(t.port)}}),n=await new Promise((r)=>e.on("exit",(i)=>r(i??1)));return t.close(),n}async function ja(t){if(process.env.TTHEME_FIND_UNBLOCK==="1"&&!process.env.TTHEME_FIND_PROXY)return Ia();let e=Pt(),n=Ut(e),r=ti(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Oa(e,n,r,r.booru??""),o=await i.run(),s=i.unblock?await Ia():o;if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
144
- `),0;return s}function Pa(t,e){let n=Pt();if(ti(Ut(n).palettes,t),e==="next"||e==="prev"){let{key:r,at:i,of:o}=ou(n,t,e==="next"?1:-1);return hn(n),process.stderr.write(`background · ${t} ${i}/${o} ${r}
145
- `),0}if(e==="drop"){let{key:r,left:i}=su(n,t);return hn(n),process.stderr.write(`background · ${t} removed ${r} · ${i} left
146
- `),0}if(e==="tuned")return hn(n),0;throw Error(`unknown image action ${e} — next, prev, drop or tuned`)}import{execFileSync as X0,spawnSync as V0}from"node:child_process";import{chmodSync as Y0,copyFileSync as z0,existsSync as qt,mkdirSync as Xo,readdirSync as B0,readFileSync as kn,rmSync as Gf,writeFileSync as D0}from"node:fs";import{homedir as tw}from"node:os";import{dirname as $n,join as kt}from"node:path";import{styleText as To}from"node:util";import{stdout as za,stdin as h0}from"node:process";import a0 from"node:readline";var Ga=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(e)=>{let n=0;t.lastIndex=0;while(t.test(e))n+=1;return e.length-n}})(),La=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Ta=(t)=>{return t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141};var Xp=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Vp=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Aa=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Yp=/\t{1,1000}/y,Ua=/[\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,zp=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Bp=/\p{M}+/gu,Dp={limit:1/0,ellipsis:""},Ka=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",o=e?.ellipsisWidth??(i?Ka(i,Dp,n).width:0),s=0,c=n.controlWidth??0,u=n.tabWidth??8,h=n.emojiWidth??2,a=2,f=n.regularWidth??1,l=n.wideWidth??2,p=[[zp,f],[Xp,0],[Vp,c],[Yp,u],[Ua,h],[Aa,l]],b=0,g=0,$=t.length,y=0,F=!1,E=$,v=Math.max(0,r-o),d=0,j=0,k=0,H=0;t:while(!0){if(j>d||g>=$&&g>b){let R=t.slice(d,j)||t.slice(b,g);y=0;for(let L of R.replaceAll(Bp,"")){let P=L.codePointAt(0)||0;if(La(P))H=2;else if(Ta(P))H=l;else H=f;if(k+H>v)E=Math.min(E,Math.max(d,b)+y);if(k+H>r){F=!0;break t}y+=L.length,k+=H}d=j=0}if(g>=$)break t;for(let R=0,L=p.length;R<L;R++){let[P,C]=p[R];if(P.lastIndex=g,P.test(t)){if(y=P===Aa?Ga(t.slice(g,P.lastIndex)):P===Ua?1:P.lastIndex-g,H=y*C,k+H>v)E=Math.min(E,g+Math.floor((v-k)/C));if(k+H>r){F=!0;break t}k+=H,d=b,j=g,g=b=P.lastIndex;continue t}}g+=1}return{width:F?v:k,index:F?E:$,truncated:F,ellipsed:F&&r>=o}},Ja=Ka;var t0={limit:1/0,ellipsis:"",ellipsisWidth:0},e0=(t,e={})=>{return Ja(t,t0,e).width},Kt=e0;var hi="\x1B",qa="›",n0=39,Ho="\x07",_a="[",r0="]",Ca="m",jo=`${r0}8;;`,Wa=new RegExp(`(?:\\${_a}(?<code>\\d+)m|\\${jo}(?<uri>.*)${Ho})`,"y"),xa=(t)=>{if(t>=30&&t<=37)return 39;if(t>=90&&t<=97)return 39;if(t>=40&&t<=47)return 49;if(t>=100&&t<=107)return 49;if(t===1||t===2)return 22;if(t===3)return 23;if(t===4)return 24;if(t===7)return 27;if(t===8)return 28;if(t===9)return 29;if(t===0)return 0;return},Qa=(t)=>`${hi}${_a}${t}${Ca}`,Za=(t)=>`${hi}${jo}${t}${Ho}`,Oo=(t,e,n)=>{let r=e[Symbol.iterator](),i=!1,o=!1,s=t.at(-1),c=s===void 0?0:Kt(s),u=r.next(),h=r.next(),a=0;while(!u.done){let f=u.value,l=Kt(f);if(c+l<=n)t[t.length-1]+=f;else t.push(f),c=0;if(f===hi||f===qa)i=!0,o=e.startsWith(jo,a+1);if(i){if(o){if(f===Ho)i=!1,o=!1}else if(f===Ca)i=!1}else if(c+=l,c===n&&!h.done)t.push(""),c=0;u=h,h=r.next(),a+=f.length}if(s=t.at(-1),!c&&s!==void 0&&s.length&&t.length>1)t[t.length-2]+=t.pop()},i0=(t)=>{let e=t.split(" "),n=e.length;while(n){if(Kt(e[n-1]))break;n--}if(n===e.length)return t;return e.slice(0,n).join(" ")+e.slice(n).join("")},o0=(t,e,n={})=>{if(n.trim!==!1&&t.trim()==="")return"";let r="",i,o,s=t.split(" "),c=[""],u=0;for(let f=0;f<s.length;f++){let l=s[f];if(n.trim!==!1){let b=c.at(-1)??"",g=b.trimStart();if(b.length!==g.length)c[c.length-1]=g,u=Kt(g)}if(f!==0){if(u>=e&&(n.wordWrap===!1||n.trim===!1))c.push(""),u=0;if(u||n.trim===!1)c[c.length-1]+=" ",u++}let p=Kt(l);if(n.hard&&p>e){let b=e-u,g=1+Math.floor((p-b-1)/e);if(Math.floor((p-1)/e)<g)c.push("");Oo(c,l,e),u=Kt(c.at(-1)??"");continue}if(u+p>e&&u&&p){if(n.wordWrap===!1&&u<e){Oo(c,l,e),u=Kt(c.at(-1)??"");continue}c.push(""),u=0}if(u+p>e&&n.wordWrap===!1){Oo(c,l,e),u=Kt(c.at(-1)??"");continue}c[c.length-1]+=l,u+=p}if(n.trim!==!1)c=c.map((f)=>i0(f));let h=c.join(`
147
- `),a=!1;for(let f=0;f<h.length;f++){let l=h[f];if(r+=l,!a){if(a=l>="\uD800"&&l<="\uDBFF",a)continue}else a=!1;if(l===hi||l===qa){Wa.lastIndex=f+1;let b=Wa.exec(h)?.groups;if(b?.code!==void 0){let g=Number.parseFloat(b.code);i=g===n0?void 0:g}else if(b?.uri!==void 0)o=b.uri.length===0?void 0:b.uri}if(h[f+1]===`
148
- `){if(o)r+=Za("");let p=i?xa(i):void 0;if(i&&p)r+=Qa(p)}else if(l===`
149
- `){if(i&&xa(i))r+=Qa(i);if(o)r+=Za(o)}}return r},s0=/\r?\n/;function Re(t,e,n){return String(t).normalize().split(s0).map((r)=>o0(r,e,n)).join(`
150
- `)}var Zt=yr(Go(),1);function gn(t,e,n){if(!n.some((s)=>!s.disabled))return t;let r=t+e,i=Math.max(n.length-1,0),o=r<0?i:r>i?0:r;return n[o]?.disabled?gn(o,e<0?-1:1,n):o}function ai(t,e,n,r){let i=r.split(`
151
- `),o=0,s=t;for(let u of i){if(s<=u.length)break;s-=u.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+n)),s=Math.min(s,i[o].length)+e;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 c=0;for(let u=0;u<o;u++)c+=i[u].length+1;return c+s}var f0=["up","down","left","right","space","enter","cancel"],l0=["January","February","March","April","May","June","July","August","September","October","November","December"],xt={actions:new Set(f0),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:[...l0],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:(t)=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:(t)=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};function Ba(t,e){if(typeof t=="string")return xt.aliases.get(t)===e;for(let n of t)if(n!==void 0&&Ba(n,e))return!0;return!1}function g0(t,e){if(t===e)return;let n=t.split(`
141
+ `);return}Hp(t,s[1],Number(s[2]),e.subarray(o+4))};t.on("data",n),t.on("error",()=>t.destroy())}function Ea(){let t=Np(jp);return new Promise((e,n)=>{t.once("error",n),t.listen(0,"127.0.0.1",()=>{e({port:t.address().port,close:()=>{t.close(),t.unref()}})})})}var ln=[{name:"TTHEME_FIND_RATING",label:"rating",choices:Wn,multi:{read:Lr}},{name:"TTHEME_FIND_BLOCK",label:"block",choices:Te,multi:{read:Tr,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"]},...mo()?[{name:"TTHEME_FIND_REMOVE_BG",label:"remove bg",choices:["on","off"]}]:[]];function Ap(t,e){if(t.multi)return t.multi.read(e).join(" ")||t.multi.none;return t.choices.find((n)=>n===e)??t.choices[0]}var Up=["fit","newest","score"];function ya(t){return Up.find((e)=>e===t)??"fit"}function Kp(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var va=12,Jp=4,xp=150,Ma=12,Wp=2,Qp=150,Zp=30,qp=4000,_p=8000,Sa=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,Cp=process.platform==="win32"?"alt+v":"ctrl+v",Ia=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",Xp=1280,Fa=2,Vp=3,Yp=8;function ui(t,e){return{key:t,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:e}}function gn(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return gn(t.errors[0]);if(t.cause)return gn(t.cause);let e=t.code;if(typeof e==="string")return e;let n=(t.message||t.name).split(".")[0]??"";return n.length>56?`${n.slice(0,55)}…`:n}function Ro(t,e){return`${t}: ${gn(e)}`}function Na(t){return t.width*t.height}function Ra(t){return`${t.id}-${ja("sha1").update(t.preview).digest("hex").slice(0,8)}`}function zp(t){let e=t.lastIndexOf("\x1B");return e!==-1&&/^\[?[0-9;]*$/.test(t.slice(e+1))}function Oo(t,e){try{return JSON.parse(Pa(ae(Fe(t),e),"utf8"))}catch{return{}}}function Ho(t,e,n){lr(Fe(t),{recursive:!0}),gr(ae(Fe(t),e),`${JSON.stringify(n)}
142
+ `)}class Ga{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(ln.map((t)=>[t.name,Ap(t,process.env[t.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 Io;sent=new Map;placed=new Map;current;fetch;settle;partial;suggestTimer;suggesting;input="";typed="";grabber=new lo((t)=>this.write(t),(t)=>void this.got(t));featureWait;noticeTimer;peekTimer;peeked;attaching;probeWait;done;dirty=!1;unblock=!1;scratch=Pp(ae(Lp(),"ttheme-find-"));home;catalog;entry;constructor(t,e,n,r){this.home=t,this.catalog=e,this.entry=n,this.tone=jr(n,n.signatureSlots),this.view={palette:n.name,tag:r,site:this.tabName,siteAnsi:this.tabAnsi,nextSite:this.nextTabName,preset:this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:ya(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:Lr(this.setting("TTHEME_FIND_RATING")),block:Tr(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",unblocked:process.env.TTHEME_FIND_PROXY!==void 0,settings:ln.map((i)=>({label:i.label,choices:[...i.choices],value:this.setting(i.name),multi:i.multi&&{none:i.multi.none},cursor:0})),colors:{cursor:n.cursor,selection:n.selection,ansi:n.ansi},tiles:[],installed:[],checked:0,total:0,searching:r!=="",focus:0,top:0,mode:"grid",help:!1,editing:r===""?"":void 0},this.board=ui(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:gt[this.tab-1]}get sites(){return this.site?[this.site]:gt}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??Jp}get nextTabName(){let t=(this.tab+1)%(gt.length+1);return t===0?"all":gt[t-1].name}frame(){return{w:this.cols*(this.cell.w||10),h:this.rows*(this.cell.h||20)}}setting(t){return this.values.get(t)}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(t,e,n){return ae(Fe(t),"orig",`${e}.${n}`)}previewPath(t){return ae(Fe(t.site),"thumb",`${Ra(t.post)}.${Qn(t.post.preview)}`)}tileOf(t,e){let{site:n,post:r}=t,i=se(n,r.id),o=qn(r)??r;return{id:r.id,key:i,site:n.name,siteAnsi:n.ansi,width:o.width,height:o.height,reduced:o!==r,owner:r.owner,artist:n===zr?yh(r.source):r.artist,score:r.score,variants:e,origin:Di(r.source),mates:this.owners.get(n.key)?.get(r.owner)??[],thumb:this.thumbPath.get(i)}}show(){let t=this.view,e=this.board;t.tiles=e.groups.flatMap((n)=>n.open?n.posts.map((r)=>this.tileOf(r,0)):[this.tileOf(n.posts[0],n.posts.length)]),t.checked=e.checked,t.total=e.total,t.searching=e.searching,t.note=e.note,t.focus=Math.max(0,Math.min(e.focus,t.tiles.length-1)),t.top=e.top}syncSite(){let t=this.view;t.site=this.tabName,t.siteAnsi=this.tabAnsi,t.nextSite=this.nextTabName}async run(){let{stdin:t,stdout:e}=process;t.setRawMode(!0),t.resume(),t.on("data",this.onData),e.on("resize",this.onResize),this.write("\x1B[?25l\x1B[?7l\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H");let n=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 n;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),t.off("data",this.onData),e.off("resize",this.onResize),this.write("\x1B_Ga=d,d=A,q=2\x1B\\\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H"),t.setRawMode(!1),t.pause(),this.saveProbes(),this.renders.close(),No(this.scratch,{recursive:!0,force:!0}),Ru(),o}write(t){process.stdout.write(t)}get saved(){return this.view.saved}finish(t){this.done?.(t===2&&this.saved?0:t)}probe(){return new Promise((t)=>{let e=setTimeout(()=>{this.probeWait=void 0,t(null)},1000);this.probeWait=(n)=>{clearTimeout(e),this.probeWait=void 0,t(n)},this.write(xh)})}onData=(t)=>{this.input+=t.toString("utf8");for(let n=bo(this.input);n;n=bo(this.input))this.input=n.rest,this.probeWait?.(n.cell);if(this.probeWait)return;let e=Nh(this.input);if(this.input=e.pending,this.view.editing===void 0&&e.keys.length>8&&/^(?:\/|~\/|file:|https?:)/.test(e.keys))this.pasted(e.keys),e.keys="";this.typed+=e.keys;for(let n of e.events)this.inbound(n);if(clearTimeout(this.partial),zp(this.typed)){this.partial=setTimeout(this.flushKeys,Zp);return}this.flushKeys()};flushKeys=()=>{let t=Jh(this.typed);this.typed="";for(let e of t)this.key(e)};features(){if(process.env.TMUX)return Promise.resolve();return new Promise((t)=>{let e=setTimeout(()=>{this.featureWait=void 0,t()},500);this.featureWait=()=>{clearTimeout(e),this.featureWait=void 0,t()},this.write("\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c")})}inbound(t){if(t.kind==="mode"){if(t.mode===5522)this.grabber.clipboard=t.value!==0&&t.value!==4;return}if(t.kind==="attributes"){this.featureWait?.();return}if(t.kind==="osc"){if(t.code==="72"&&t.meta.t==="q"){this.grabber.drops=!0;return}this.grabber.take(t);return}this.pasted(t.text)}pasted(t){let e=this.view;if(e.editing!==void 0&&t.trim()!==""&&!this.picture(t)){e.editing+=t.replace(/[\r\n]+/g," "),this.suggest(),this.draw();return}if(e.installing!==void 0||e.asking!==void 0||e.panel!==void 0||e.help)return;if(t.trim()===""){this.fromClipboard();return}this.attach(t)}picture(t){let e=t.trim();if(/^https?:\/\/\S+$/i.test(e))return!Ar(e,this.site??gt[0]);return Yr(e).length>0}async got(t){if(t.kind==="error"){this.notice(t.message);return}if(t.kind==="text"){if(t.text.trim()===""){this.notice(`no picture on the clipboard — ${Ia}`);return}this.pasted(t.text);return}await this.bring(()=>Xr(t.bytes,t.source))}notice(t,e=qp){let n=this.view;n.error=t,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(n.error===t)n.error=void 0,this.draw()},e),this.draw()}async peek(){let t=this.view,e;try{e=await Fh()}catch{return}if(!e||e.stamp===this.peeked)return;if(this.peeked=e.stamp,!e.picture||t.installing!==void 0||t.asking!==void 0)return;t.hint=`picture on the clipboard · ${Cp} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.draw()},_p),this.draw()}async fromClipboard(){let t=this.view;if(fo()){if(this.grabber.clipboard){this.grabber.ask();return}this.notice("over ssh the clipboard is not here — drop the file");return}let e;try{e=await Ih(ae(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`could not read the clipboard: ${gn(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await ao(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`no picture on the clipboard — ${Ia}`);return}if(this.picture(n)){await this.attach(n);return}if(t.editing===void 0)t.editing="";this.pasted(n)}async attach(t){let e=t.trim();if(/^https?:\/\//i.test(e)){let i=Ar(e,this.site??gt[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=Yr(e).sort((i,o)=>Number(!Sa.test(i))-Number(!Sa.test(o)));if(!n){this.notice("nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>ao(n,i),r.length)}async bring(t,e=0){let n=this.view;this.attaching?.abort();let r=new AbortController;this.attaching=r,n.error=void 0,n.saved=void 0,n.note="reading the picture…",this.draw();let i;try{i=await t(AbortSignal.any([r.signal,this.signal]))}catch(l){if(!r.signal.aborted)n.note=void 0,this.notice(gn(l),8000);return}if(r.signal.aborted)return;n.note=e>0?`the first picture of ${e+1} — drop one at a time to try the others`:void 0,this.quietSuggest(),n.editing=void 0,n.suggest=void 0,n.pick=void 0;let o=Mh(i.bytes);vh(o,i.source);let s=this.origPath(zr,o,i.ext);lr(ci(s),{recursive:!0}),gr(s,i.bytes);let c=Tp(s).href,u={id:o,file:c,width:i.width,height:i.height,ext:i.ext,preview:c,owner:"",artist:"",score:0,rating:"s",md5:ja("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],solo:void 0,family:0,smaller:[]},h={site:zr,post:u},a=this.previewPath(h);lr(ci(a),{recursive:!0}),gr(a,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let f=ui(`local|post:${o}`,!1);this.board=f,this.boards.set(f.key,f),this.single(f,h)}single(t,e){t.searching=!1,this.posts.set(se(e.site,e.post.id),e),t.groups=[{posts:[e],open:!1}],t.checked=1,t.total=1,this.thumbQueue.push(e),this.thumbs(),this.view.mode="try",this.show(),this.select(),this.draw()}onClock=()=>{let t=this.sites.reduce((r,i)=>Se(i)>Se(r)?i:r),e=Math.ceil((Se(t)-Date.now())/1000),n=e>0?e:void 0;if(n!==this.view.waiting)this.view.waiting=n,this.view.slow=t.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(t){let e=this.view;if(t==="ctrl-c"){this.finish(2);return}if(e.installing!==void 0)return;if(e.asking!==void 0){this.askKey(t);return}if(t==="focus-in"){this.peek();return}if(t==="focus-out"||t==="nop")return;if((t==="ctrl-v"||t==="alt-v")&&e.panel===void 0){this.fromClipboard();return}if(e.editing!==void 0){this.editKey(t);return}if(e.panel!==void 0){this.panelKey(t);return}if(e.help){if(t==="?"||t==="esc")e.help=!1,this.draw();return}if(this.cols<Je.cols||this.rows<Je.rows){if(t==="esc")this.finish(2);return}if(t==="?"){e.help=!0,this.draw();return}if(e.mode==="try"){this.tryKey(t);return}this.gridKey(t)}gridKey(t){let e=this.view,{perRow:n,rowsVis:r}=sn(this.cols,this.rows),o={left:-1,right:1,up:-n,down:n,pgup:-n*r,pgdn:n*r,home:-e.focus,end:e.tiles.length}[t];if(o!==void 0){this.focus(e.focus+o);return}if(t==="enter"&&e.tiles[e.focus]){e.mode="try",e.error=void 0,this.select();return}if(t==="v"){this.fromClipboard();return}if(t==="c"){e.preset=e.preset==="cutouts"?"all":"cutouts",this.turn();return}if(t==="tab"){this.tab=(this.tab+1)%(gt.length+1),this.syncSite(),this.turn();return}if(t==="/"){e.editing="",this.draw();return}if(t===" "){this.unfold();return}if(t==="o"){this.openPage();return}if(t==="s"){e.panel=0,this.draw();return}if(t==="esc")this.finish(2)}panelKey(t){let e=this.view,n=e.panel??0,r=e.settings[n];if(t==="up"||t==="down"){e.panel=Math.max(0,Math.min(e.settings.length-1,n+(t==="up"?-1:1))),this.draw();return}if((t==="left"||t==="right")&&r){let i=t==="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(t===" "&&r?.multi){let i=r.value.split(" "),o=r.choices.filter((c,u)=>u===r.cursor?!i.includes(c):i.includes(c)),s=r.multi.none;if(o.length>0||s!==void 0)r.value=o.length>0?o.join(" "):s,this.draw();return}if(t==="esc"){e.settings.forEach((i,o)=>{i.value=this.setting(ln[o]?.name??"")}),e.panel=void 0,this.draw();return}if(t==="enter"||t==="alt-c")e.panel=void 0,this.adopt()}adopt(){let t=this.view,e=ln.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let o=ln[i];if(o)this.values.set(o.name,r.value)});let n=ln.filter((r,i)=>this.setting(r.name)!==e[i]);if(n.length===0){this.draw();return}this.save(n),t.rating=Lr(this.setting("TTHEME_FIND_RATING")),t.block=Tr(this.setting("TTHEME_FIND_BLOCK")),t.sets=this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",t.preset=this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",t.order=ya(this.setting("TTHEME_FIND_ORDER")),t.solo=this.setting("TTHEME_FIND_SOLO")==="on",this.boards.clear(),this.current=void 0,t.shown=void 0,t.mode="grid",this.search()}save(t){this.store(t.map((e)=>[e.name,this.setting(e.name)]))}store(t){let e=ae(this.home,"ttheme","config.zsh");try{let n=fn(e)?Pa(e,"utf8"):"";return gr(e,t.reduce((r,[i,o])=>Bu(r,i,o),n)),!0}catch(n){return this.view.error=n instanceof Error?n.message:String(n),!1}}askKey(t){let e=this.view;if(t==="y"){if(e.asking=void 0,this.store([["TTHEME_FIND_UNBLOCK","1"]])){this.unblock=!0,this.finish(0);return}this.draw();return}if(t==="n"||t==="esc")e.asking=void 0,this.draw()}editKey(t){let e=this.view,n=e.editing??"",r=e.suggest??[];if((t==="up"||t==="down")&&r.length>0){let i=e.pick??-1,o=t==="down"?Math.min(r.length-1,i+1):i-1;e.pick=o<0?void 0:o,this.draw();return}if(t==="esc"||t==="enter")this.quietSuggest();if(t==="esc"){if(e.editing=void 0,e.tag===""){this.finish(2);return}this.draw();return}if(t==="enter"){let i=e.pick===void 0?void 0:r[e.pick],o=i?n.replace(/\S*$/,i.value):n;if(e.editing=void 0,e.suggest=void 0,e.pick=void 0,o.trim()){this.commit(o.trim());return}if(e.tag===""){this.finish(2);return}this.draw();return}if(t==="backspace"){e.editing=n.slice(0,-1),this.suggest(),this.draw();return}if(t.length===1&&t>=" ")e.editing=n+t,this.suggest(),this.draw()}quietSuggest(){clearTimeout(this.suggestTimer),this.suggesting?.abort(),this.suggesting=void 0}suggest(){this.quietSuggest();let t=this.view;t.pick=void 0;let e=/\S*$/.exec(t.editing??"")?.[0]??"";if(!Kp(e)){t.suggest=void 0;return}let n=[...new Map(Gh(this.catalog.palettes,this.entry,e).map((i)=>[i.booru,{value:i.booru,count:0,palette:i.name}])).values()].slice(0,Vp);t.suggest=n.length>0?n:void 0;let r=new AbortController;this.suggesting=r,this.suggestTimer=setTimeout(async()=>{try{let i=await Gu(e,AbortSignal.any([this.signal,r.signal]));if(this.suggesting===r&&t.editing!==void 0){let o=new Map(i.map((c)=>[c.value,c.count])),s=new Set(n.map((c)=>c.value));t.suggest=[...n.map((c)=>({...c,count:o.get(c.value)??0})),...i.filter((c)=>!s.has(c.value))].slice(0,Yp),t.pick=t.pick!==void 0&&t.pick<n.length?t.pick:void 0,this.draw()}}catch{}},xp)}async commit(t){let e=Ar(t,this.site??gt[0]);if(e){await this.jump(e.site,e.id);return}if(this.picture(t)){await this.attach(t);return}this.view.tag=t,this.boards.clear(),await this.search()}async jump(t,e){let n=++this.gen;this.tab=gt.indexOf(t)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ui(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.draw();try{let i=await to(t,e,this.signal);if(n!==this.gen)return;if(!i){r.searching=!1,r.error=`${t.name} has no post ${e}`,this.view.error=r.error,this.show(),this.draw();return}this.single(r,{site:t,post:i})}catch(i){this.fail(n,i,t)}}async turn(){this.fetch?.abort(),this.current=void 0,this.view.shown=void 0;let t=this.boards.get(this.boardKey);if(!t){await this.search();return}this.gen++,this.board=t,this.view.error=t.error,this.show(),this.draw(),await this.pump()}unfold(){let t=this.view,e=0;for(let n of this.board.groups){let r=n.open?n.posts.length:1;if(t.focus<e+r){if(n.posts.length<2)return;n.open=!n.open,this.board.focus=e;for(let i of n.posts)if(!this.thumbPath.has(se(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.draw();return}e+=r}}openPage(){let t=this.view.tiles[this.view.focus],e=t&&this.posts.get(t.key);if(!e)return;let n=process.platform==="darwin"?"open":"xdg-open";try{Ha(n,[e.site.pageUrl(e.post.id)],{stdio:"ignore",detached:!0}).unref()}catch{}}tryKey(t){let e=this.view;if(t==="left"||t==="right"){this.direction=t==="left"?-1:1,this.focus(e.focus+this.direction);return}if(t==="o"){this.openPage();return}if(t==="x"){this.swap();return}if(t==="v"){this.fromClipboard();return}if(t==="enter"){this.install();return}if(t==="esc")this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,e.mode="grid",e.error=void 0,this.draw()}focus(t){let e=this.view;if(e.tiles.length===0)return;let n=Math.max(0,Math.min(e.tiles.length-1,t));if(n===e.focus)return;if(e.focus=n,this.board.focus=n,this.scroll(),this.pump(),e.mode==="try")this.select();this.draw()}scroll(){let t=this.view,{perRow:e,rowsVis:n}=sn(this.cols,this.rows),r=Math.floor(t.focus/e);if(r<t.top)t.top=r;if(r>t.top+n-1)t.top=r-n+1;this.board.top=t.top}query(t){let e=this.view,n=e.tag===this.entry.booru?Lh(this.entry,t.key):[e.tag];if(n.length===0)return;let r=n.length>1,i=e.preset==="cutouts"?t.cutouts:"",o=r&&i.includes("~"),s=[r?n.map((h)=>`~${h}`).join(" "):n[0],t.rate(this.view.rating),o?"":i,e.order==="score"?t.best:""].filter(Boolean),c=[],u=[];for(let h of s)if(Bi([...c,h].join(" "))<=t.tagBudget)c.push(h);else u.push(h);return{tags:c.join(" "),notes:[...u.length>0?[`${t.name} takes ${t.tagBudget} tags — ${u.join(" ")} left out`]:[],...o?[`${t.name} ORs the names, so cutouts are told by the file`]:[]]}}async search(){let t=++this.gen,e=ui(this.boardKey,!0);this.board=e,this.boards.set(e.key,e),this.view.error=void 0;let n=this.sites.flatMap((o)=>{let s=this.query(o);return s?[{site:o,...s}]:[]}),r=this.sites.filter((o)=>!n.some((s)=>s.site===o)),i=[...n.flatMap(({notes:o})=>o),...r.length>0?[`${this.entry.name} has no tag on ${r.map((o)=>o.name).join(", ")}`]:[]];if(e.note=i.length>0?i.join(" · "):void 0,n.length===0)e.searching=!1;this.show(),this.draw(),this.tally(t,e,n);try{let o=await Promise.all(n.map(async(s)=>({plan:s,owners:await this.mateOwners(s.site)})));if(t!==this.gen)return;e.sources=o.flatMap(({plan:{site:s,tags:c},owners:u})=>[...Bi(c)+1<=s.tagBudget?[...u.keys()].map((h)=>({site:s,tags:`${c} user:${h}`,page:0,done:!1})):[],{site:s,tags:c,page:0,done:!1}]),this.show(),this.draw(),await this.pump()}catch(o){this.fail(t,o)}}async tally(t,e,n){let r=await Promise.allSettled(n.map(({site:i,tags:o})=>Hu(i,o,this.signal)));if(t===this.gen)e.total=r.reduce((i,o)=>i+(o.status==="fulfilled"?o.value:0),0),this.show(),this.draw()}fail(t,e,n=this.site){if(t!==this.gen||this.signal.aborted)return;this.board.error=Ro(n?.name??this.tabName,e),this.board.searching=!1,this.view.error=this.board.error,this.offer(n,e),this.show(),this.draw()}offer(t,e){if(t&&!this.view.unblocked&&La()&&gn(e)==="ECONNRESET")this.view.asking=t.name}drop(t,e,n){for(let r of t.sources)if(r.site===e)r.done=!0;t.note=[t.note,Ro(e.name,n)].filter(Boolean).join(" · "),this.offer(e,n)}wants(){let{perRow:t,rowsVis:e}=sn(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+Fa)*t}need(){let{perRow:t,rowsVis:e}=sn(this.cols,this.rows);return(e+Fa)*t}live(t){return this.boards.get(t.key)===t}page(t,e,n){let r=`${t.key}|${e}|${n}`,i=this.pages.get(r);if(!i)i=Ou(t,e,n,this.signal).then((o)=>this.borrow(o)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(t){let e=t.filter((n)=>n.solo===void 0&&n.md5!=="");if(e.length>0)try{ju(e,await Pu(e.map((n)=>n.md5),this.signal))}catch{}return t}async round(t){let e=gt.flatMap((c)=>{let u=t.sources.find((h)=>h.site===c&&!h.done);return u?[u]:[]}),n=await Promise.all(e.map(async(c)=>{try{return{source:c,posts:await this.page(c.site,c.tags,c.page)}}catch(u){if(t.sources.every((h)=>h.site===c.site)||this.signal.aborted)throw u;return this.drop(t,c.site,u),{source:c,posts:void 0}}}));if(!this.live(t))return;let r=[];for(let{source:c,posts:u}of n){if(!u)continue;c.page++,c.done=u.length<Le;let h=t.last.get(c);for(let a of u){let f=h&&fa(h.post,a)?h.set:`set:${c.site.key}:${a.id}`;h={post:a,set:f};let l=se(c.site,a.id);if(t.seen.has(l))continue;t.seen.add(l);let m={site:c.site,post:a};if(this.eligible(m))t.kin.set(m,[f,...aa(c.site,a)]),r.push(m);else t.checked++}if(h)t.last.set(c,h)}let i=this.dedupe(t,r),o=++t.rounds,s;if(this.view.order!=="fit")s=e.length>1?Bh(i):i;else{let c=ri(i,this.frame(),this.matched),u=c.slice(0,this.need());if(await this.looks(u),!this.live(t))return;s=[...ri(u,this.frame(),this.matched),...c.slice(u.length)]}for(let c of s)t.roundOf.set(c,o);t.queue.push(...s),this.ahead(t)}ahead(t){if(this.aheading||this.view.order!=="fit"||!this.live(t))return;let e=t.queue.slice(0,this.need()).filter((n)=>!this.looking.has(se(n.site,n.post.id)));if(e.length===0)return;this.aheading=!0,this.looks(e).then(()=>{this.aheading=!1;for(let n of new Set(e.map((r)=>t.roundOf.get(r)??0)))this.resort(t,n);this.ahead(t)})}resort(t,e){let n=t.queue.flatMap((i,o)=>t.roundOf.get(i)===e?[o]:[]),r=ri(n.map((i)=>t.queue[i]),this.frame(),this.matched);n.forEach((i,o)=>{t.queue[i]=r[o]})}dedupe(t,e){let n=[];for(let r of e){let i=So(r.post),o=i.map((c)=>t.same.get(c)).find(Boolean);if(!o){for(let c of i)t.same.set(c,r);n.push(r);continue}if(t.checked++,Na(r.post)<=Na(o.post))continue;for(let c of[...i,...So(o.post)])t.same.set(c,r);let s=n.indexOf(o);if(s>=0){n[s]=r;continue}this.replace(t,o,r)}return n}replace(t,e,n){t.roundOf.set(n,t.roundOf.get(e)??0);let r=t.queue.indexOf(e);if(r>=0){t.queue[r]=n;return}for(let i of t.groups){let o=i.posts.indexOf(e);if(o>=0){i.posts[o]=n,this.posts.set(se(n.site,n.post.id),n),this.thumbQueue.push(n),this.thumbs();return}}}async looks(t){let e=0;await Promise.all(Array.from({length:Ma},async()=>{while(e<t.length)await this.look(t[e++])}))}look(t){let e=se(t.site,t.post.id),n=this.looking.get(e);if(!n)n=(async()=>{let r=this.previewPath(t);await this.cached(t.site,r,t.post.preview);let i=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(e,i),this.matched.set(t.post,i.match),i})().catch(()=>{return}),this.looking.set(e,n);return n}async pump(){let t=this.gen,e=this.board;if(this.pumping===t||e.sources.length===0)return;this.pumping=t;let n=[],r;try{e.searching=!0;while(t===this.gen){while(n.length<va&&e.queue.length>0&&this.wants()){let s=e.queue.shift();n.push({pick:s,passed:this.vet(s)})}if(this.ahead(e),!r&&e.queue.length<va&&e.sources.some((s)=>!s.done)&&this.wants()){let s=this.round(e).then(()=>{if(r===s)r=void 0});s.catch(()=>{}),r=s}let i=n.shift();if(!i){if(!r)break;await r,this.show(),this.draw();continue}let o=await i.passed;if(t!==this.gen)return;if(e.checked++,o)this.admit(i.pick);this.show(),this.draw()}if(t===this.gen)e.searching=!1,this.show(),this.draw()}catch(i){this.fail(t,i)}finally{if(this.saveProbes(),this.pumping===t)this.pumping=0}}eligible({site:t,post:e}){let n=qn(e);if(!Fu(t,e,this.view.rating)||Iu(e,this.view.block).length>0||!n)return!1;if(this.view.solo&&e.solo===!1)return!1;return this.view.preset==="all"?["png","jpg","jpeg"].includes(n.ext):e.ext==="png"}async vet(t){let[e]=await Promise.all([this.passes(t),this.look(t)]);return e}async passes({site:t,post:e}){return this.view.preset==="all"||t.vouched||this.transparent(t,e)}probes(t){let e=this.probed.get(t.key);if(!e)e=Oo(t,"probes.json"),this.probed.set(t.key,e);return e}async transparent(t,e){let n=this.probes(t),r=n[e.id];if(r!==void 0)return r;try{let i=(await Lu(t,e.file,this.signal))?.alpha===!0;return n[e.id]=i,this.unsaved.add(t.key),i}catch{return!1}}saveProbes(){for(let t of this.unsaved){let e=gt.find((n)=>n.key===t);if(e)Ho(e,"probes.json",this.probes(e))}this.unsaved.clear()}admit(t){let{site:e,post:n}=t,r=this.board,i=se(e,n.id);this.posts.set(i,t);let o=r.kin.get(t)??[],s=this.looked.get(i),c=s&&{hash:s.hash,width:n.width,height:n.height},u=this.view.sets==="fold"?this.kindred(r,o,c):void 0;if(u){if(u.posts.push(t),this.register(r,u,o,c),u.open)this.thumbQueue.push(t),this.thumbs();return}let h={posts:[t],open:!1};r.groups.push(h),this.register(r,h,o,c),this.thumbQueue.push(t),this.thumbs()}kindred(t,e,n){for(let r of e){let i=t.kindred.get(r);if(i)return i}return n&&t.shapes.find((r)=>ga(r.shape,n))?.group}register(t,e,n,r){for(let i of n)if(!t.kindred.has(i))t.kindred.set(i,e);if(r)t.shapes.push({shape:r,group:e})}async mateOwners(t){let e=this.owners.get(t.key);if(e)return e;let n=lu(this.home),r=Oo(t,"owners.json"),i=this.catalog.palettes.flatMap((u)=>{let h=n.get(u.name);return u.group===this.entry.group&&u.name!==this.entry.name&&h?.site===t.key?[{name:u.name,id:h.id}]:[]}),o=await Promise.all(i.map(async(u)=>{let h=r[u.id];if(h!==void 0)return{...u,owner:h};try{return{...u,owner:(await to(t,u.id,this.signal))?.owner??""}}catch{return}})),s=new Map;for(let u of o)if(u)r[u.id]=u.owner,s.set(u.name,u.owner);Ho(t,"owners.json",r);let c=Nu(s);return this.owners.set(t.key,c),c}async cached(t,e,n,r){if(fn(e))return Gp(e).size;let i=this.inflight.get(e);if(i)return i;let o=(async()=>{let s=await Tu(t,n,this.signal,r);return lr(ci(e),{recursive:!0}),gr(e,s),s.length})();this.inflight.set(e,o);try{return await o}finally{this.inflight.delete(e)}}thumbs(){while(this.thumbing<Ma&&this.thumbQueue.length>0){let t=this.thumbQueue.shift();this.thumbing++,this.thumb(t).catch(()=>{}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(t){let{site:e,post:n}=t,r=Wt.cols*this.cell.w,i=Wt.rows*this.cell.h,o=ae(Fe(e),"tile",`${Ra(n)}-${r}x${i}.png`);if(!fn(o)){let s=this.previewPath(t);await this.cached(e,s,n.preview),await this.renders.run({job:"thumb",from:s,to:o,width:r,height:i})}this.thumbPath.set(se(e,n.id),o),this.show(),this.draw()}select(){let t=this.view,e=t.tiles[t.focus];if(this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,!e)return;if(this.current?.key===e.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(e),Qp),this.draw()}async load(t){let e=this.view,n=this.posts.get(t.key),r=n&&qn(n.post);if(!n||!r)return;let{site:i}=n,o=this.board,s=new AbortController;this.fetch=s;try{let c=this.origPath(i,t.id,r.ext);if(!fn(c))e.fetching={id:t.key,got:0,size:0},this.draw();let u=await this.cached(i,c,r.file,(f,l)=>{if(e.fetching?.id===t.key)e.fetching={id:t.key,got:f,size:l},this.draw()});if(s.signal.aborted)return;if(e.fetching=void 0,o!==this.board)return;let h={site:i,id:t.id,key:t.key,path:c,ext:r.ext,size:u,using:"plain",failed:!1};e.preparing=t.key,this.flush();let a=await this.render(h,"plain");if(s.signal.aborted||o!==this.board)return;if(a.clear===0&&mo()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(e.preparing=void 0,e.cutting=t.key,this.flush(),h.cut=await this.cutOut(i,t.id,c,s.signal),s.signal.aborted||o!==this.board)return;if(e.cutting=void 0,h.cut){e.preparing=t.key,this.flush();let f=await this.render(h,"cut").catch(()=>{return});if(s.signal.aborted||o!==this.board)return;if(f&&Th(f.clear))h.using="cut";else No(h.cut,{force:!0}),h.cut=void 0,h.failed=!0}else h.failed=!0}if(this.current=h,e.tiles[e.focus]?.key===t.key)await this.present();this.preload()}catch(c){if(!s.signal.aborted&&!this.signal.aborted)e.error=Ro(i.name,c)}finally{if(e.fetching?.id===t.key)e.fetching=void 0;if(e.preparing===t.key)e.preparing=void 0;if(e.cutting===t.key)e.cutting=void 0;this.draw()}}async cutOut(t,e,n,r){let i=ae(Fe(t),"cut",`${e}.png`);if(fn(i))return i;try{return lr(ci(i),{recursive:!0}),await Ah(n,i,r),i}catch{No(i,{force:!0});return}}swap(){let t=this.current;if(!t?.cut||this.view.shown?.id!==t.key)return;t.using=t.using==="cut"?"plain":"cut",this.reveal()}preload(){let t=this.view;if(t.mode!=="try")return;for(let e of[t.focus+this.direction,t.focus-this.direction]){if(this.prefetching>=Wp)return;let n=t.tiles[e],r=n&&this.posts.get(n.key),i=r&&qn(r.post);if(!r||!i)continue;let{site:o,post:s}=r,c=this.origPath(o,s.id,i.ext);this.prefetching++,this.cached(o,c,i.file).then(()=>this.render({site:o,id:s.id,key:n.key,path:c,ext:i.ext,size:0,using:"plain",failed:!1},"plain")).catch(()=>{}).finally(()=>{this.prefetching--})}}async render(t,e){let n=this.cols*this.cell.w,r=this.rows*this.cell.h,i=Math.min(n,Xp),o=Math.max(1,Math.round(r*i/n)),s=ae(this.scratch,`${t.site.key}-${t.id}${e==="cut"?"c":""}-${i}x${o}.png`),c=`${t.site.key}:${t.id}:${e}`,u=this.clarity.get(c);if(u!==void 0&&fn(s))return{clear:u,path:s};let h=await this.renders.run({job:"show",from:e==="cut"?t.cut:t.path,to:s,width:i,height:o,colors:this.entry,tone:this.tone});return this.clarity.set(c,h),{clear:h,path:s}}async present(){let t=this.current;if(!t)return;let e=t.using,{clear:n,path:r}=await this.render(t,e);if(this.current!==t||t.using!==e)return;this.view.shown={id:t.key,clear:n,bytes:t.size,path:r,cut:t.cut?e==="cut"?"on":"off":t.failed?"failed":"none"}}reveal(){let t=this.view;t.preparing=this.current?.key,this.flush(),this.present().catch((e)=>{t.error=e instanceof Error?e.message:String(e)}).finally(()=>{if(t.preparing===this.current?.key)t.preparing=void 0;this.draw()})}async install(){let t=this.view,e=t.tiles[t.focus],n=this.current;if(!e||n?.key!==e.key||t.preparing!==void 0||t.shown?.id!==e.key)return;t.installing=e.key,t.error=void 0,this.flush();try{await this.renders.run({job:"backdrop",from:n.using==="cut"?n.cut:n.path,source:n.path,home:this.home,colors:this.entry,tone:this.tone,origin:{site:n.site.key,id:n.id,ext:n.ext,from:`${n.site.name} ${n.id} ${n.site.pageUrl(n.id)}`},width:this.cols*this.cell.w,height:this.rows*this.cell.h});let r=Oo(n.site,"owners.json");r[n.id]=this.posts.get(n.key)?.post.owner??"",Ho(n.site,"owners.json",r),an(this.home),t.saved=`background · ${this.entry.name} ← ${n.site.name} ${n.id}`,t.installed.push(e.key),this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,t.mode="grid"}catch(r){t.error=r instanceof Error?r.message:String(r)}t.installing=void 0,this.draw()}draw(){if(this.dirty)return;this.dirty=!0,setImmediate(()=>{this.dirty=!1,this.flush()})}flush(){let t=Yh(this.view,this.cols,this.rows),e="\x1B[?2026h";t.lines.forEach((r,i)=>{e+=`\x1B[${i+1};1H\x1B[K${r}`});let n=new Set;for(let r of t.images){if(n.add(r.id),this.sent.get(r.id)!==r.path)e+=Wh(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)e+=Qh(r),this.placed.set(r.id,i)}for(let r of this.sent.keys())if(!n.has(r))e+=Zh(r),this.sent.delete(r),this.placed.delete(r);this.write(`${e}\x1B[?2026l`)}}function La(){if(process.versions.bun)return!0;let[t=0,e=0]=process.versions.node.split(".").map(Number);return t>22||t===22&&e>=21}async function Oa(){if(!La())return process.stderr.write(`unblock needs node 22.21 or newer — this is ${process.versions.node}
143
+ `),1;let t=await Ea(),e=Ha(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:${t.port}`,NO_PROXY:[process.env.NO_PROXY,Su()].filter(Boolean).join(","),TTHEME_FIND_PROXY:String(t.port)}}),n=await new Promise((r)=>e.on("exit",(i)=>r(i??1)));return t.close(),n}async function Ta(t){if(process.env.TTHEME_FIND_UNBLOCK==="1"&&!process.env.TTHEME_FIND_PROXY)return Oa();let e=Pt(),n=Ut(e),r=ti(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Ga(e,n,r,r.booru??""),o=await i.run(),s=i.unblock?await Oa():o;if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
144
+ `),0;return s}function Aa(t,e){let n=Pt();if(ti(Ut(n).palettes,t),e==="next"||e==="prev"){let{key:r,at:i,of:o}=hu(n,t,e==="next"?1:-1);return an(n),process.stderr.write(`background · ${t} ${i}/${o} ${r}
145
+ `),0}if(e==="drop"){let{key:r,left:i}=au(n,t);return an(n),process.stderr.write(`background · ${t} removed ${r} · ${i} left
146
+ `),0}if(e==="tuned")return an(n),0;throw Error(`unknown image action ${e} — next, prev, drop or tuned`)}import{execFileSync as Kf,spawnSync as B0}from"node:child_process";import{chmodSync as D0,copyFileSync as tw,existsSync as _t,mkdirSync as Yo,readdirSync as ew,readFileSync as En,rmSync as Af,writeFileSync as nw}from"node:fs";import{homedir as rw}from"node:os";import{dirname as kn,join as wt}from"node:path";import{styleText as Uo}from"node:util";import{stdout as ef,stdin as g0}from"node:process";import d0 from"node:readline";var Ua=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(e)=>{let n=0;t.lastIndex=0;while(t.test(e))n+=1;return e.length-n}})(),Ka=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Ja=(t)=>{return t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141};var Bp=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Dp=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,xa=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,t0=/\t{1,1000}/y,Wa=/[\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,e0=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,n0=/\p{M}+/gu,r0={limit:1/0,ellipsis:""},Qa=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",o=e?.ellipsisWidth??(i?Qa(i,r0,n).width:0),s=0,c=n.controlWidth??0,u=n.tabWidth??8,h=n.emojiWidth??2,a=2,f=n.regularWidth??1,l=n.wideWidth??2,m=[[e0,f],[Bp,0],[Dp,c],[t0,u],[Wa,h],[xa,l]],b=0,d=0,$=t.length,M=0,N=!1,E=$,v=Math.max(0,r-o),g=0,P=0,k=0,O=0;t:while(!0){if(P>g||d>=$&&d>b){let I=t.slice(g,P)||t.slice(b,d);M=0;for(let j of I.replaceAll(n0,"")){let G=j.codePointAt(0)||0;if(Ka(G))O=2;else if(Ja(G))O=l;else O=f;if(k+O>v)E=Math.min(E,Math.max(g,b)+M);if(k+O>r){N=!0;break t}M+=j.length,k+=O}g=P=0}if(d>=$)break t;for(let I=0,j=m.length;I<j;I++){let[G,C]=m[I];if(G.lastIndex=d,G.test(t)){if(M=G===xa?Ua(t.slice(d,G.lastIndex)):G===Wa?1:G.lastIndex-d,O=M*C,k+O>v)E=Math.min(E,d+Math.floor((v-k)/C));if(k+O>r){N=!0;break t}k+=O,g=b,P=d,d=b=G.lastIndex;continue t}}d+=1}return{width:N?v:k,index:N?E:$,truncated:N,ellipsed:N&&r>=o}},Za=Qa;var i0={limit:1/0,ellipsis:"",ellipsisWidth:0},o0=(t,e={})=>{return Za(t,i0,e).width},Jt=o0;var hi="\x1B",Va="›",s0=39,Po="\x07",Ya="[",c0="]",za="m",Go=`${c0}8;;`,qa=new RegExp(`(?:\\${Ya}(?<code>\\d+)m|\\${Go}(?<uri>.*)${Po})`,"y"),_a=(t)=>{if(t>=30&&t<=37)return 39;if(t>=90&&t<=97)return 39;if(t>=40&&t<=47)return 49;if(t>=100&&t<=107)return 49;if(t===1||t===2)return 22;if(t===3)return 23;if(t===4)return 24;if(t===7)return 27;if(t===8)return 28;if(t===9)return 29;if(t===0)return 0;return},Ca=(t)=>`${hi}${Ya}${t}${za}`,Xa=(t)=>`${hi}${Go}${t}${Po}`,jo=(t,e,n)=>{let r=e[Symbol.iterator](),i=!1,o=!1,s=t.at(-1),c=s===void 0?0:Jt(s),u=r.next(),h=r.next(),a=0;while(!u.done){let f=u.value,l=Jt(f);if(c+l<=n)t[t.length-1]+=f;else t.push(f),c=0;if(f===hi||f===Va)i=!0,o=e.startsWith(Go,a+1);if(i){if(o){if(f===Po)i=!1,o=!1}else if(f===za)i=!1}else if(c+=l,c===n&&!h.done)t.push(""),c=0;u=h,h=r.next(),a+=f.length}if(s=t.at(-1),!c&&s!==void 0&&s.length&&t.length>1)t[t.length-2]+=t.pop()},u0=(t)=>{let e=t.split(" "),n=e.length;while(n){if(Jt(e[n-1]))break;n--}if(n===e.length)return t;return e.slice(0,n).join(" ")+e.slice(n).join("")},h0=(t,e,n={})=>{if(n.trim!==!1&&t.trim()==="")return"";let r="",i,o,s=t.split(" "),c=[""],u=0;for(let f=0;f<s.length;f++){let l=s[f];if(n.trim!==!1){let b=c.at(-1)??"",d=b.trimStart();if(b.length!==d.length)c[c.length-1]=d,u=Jt(d)}if(f!==0){if(u>=e&&(n.wordWrap===!1||n.trim===!1))c.push(""),u=0;if(u||n.trim===!1)c[c.length-1]+=" ",u++}let m=Jt(l);if(n.hard&&m>e){let b=e-u,d=1+Math.floor((m-b-1)/e);if(Math.floor((m-1)/e)<d)c.push("");jo(c,l,e),u=Jt(c.at(-1)??"");continue}if(u+m>e&&u&&m){if(n.wordWrap===!1&&u<e){jo(c,l,e),u=Jt(c.at(-1)??"");continue}c.push(""),u=0}if(u+m>e&&n.wordWrap===!1){jo(c,l,e),u=Jt(c.at(-1)??"");continue}c[c.length-1]+=l,u+=m}if(n.trim!==!1)c=c.map((f)=>u0(f));let h=c.join(`
147
+ `),a=!1;for(let f=0;f<h.length;f++){let l=h[f];if(r+=l,!a){if(a=l>="\uD800"&&l<="\uDBFF",a)continue}else a=!1;if(l===hi||l===Va){qa.lastIndex=f+1;let b=qa.exec(h)?.groups;if(b?.code!==void 0){let d=Number.parseFloat(b.code);i=d===s0?void 0:d}else if(b?.uri!==void 0)o=b.uri.length===0?void 0:b.uri}if(h[f+1]===`
148
+ `){if(o)r+=Xa("");let m=i?_a(i):void 0;if(i&&m)r+=Ca(m)}else if(l===`
149
+ `){if(i&&_a(i))r+=Ca(i);if(o)r+=Xa(o)}}return r},a0=/\r?\n/;function Re(t,e,n){return String(t).normalize().split(a0).map((r)=>h0(r,e,n)).join(`
150
+ `)}var qt=yr(To(),1);function dn(t,e,n){if(!n.some((s)=>!s.disabled))return t;let r=t+e,i=Math.max(n.length-1,0),o=r<0?i:r>i?0:r;return n[o]?.disabled?dn(o,e<0?-1:1,n):o}function ai(t,e,n,r){let i=r.split(`
151
+ `),o=0,s=t;for(let u of i){if(s<=u.length)break;s-=u.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+n)),s=Math.min(s,i[o].length)+e;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 c=0;for(let u=0;u<o;u++)c+=i[u].length+1;return c+s}var m0=["up","down","left","right","space","enter","cancel"],p0=["January","February","March","April","May","June","July","August","September","October","November","December"],Qt={actions:new Set(m0),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:[...p0],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:(t)=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:(t)=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};function nf(t,e){if(typeof t=="string")return Qt.aliases.get(t)===e;for(let n of t)if(n!==void 0&&nf(n,e))return!0;return!1}function w0(t,e){if(t===e)return;let n=t.split(`
152
152
  `),r=e.split(`
153
- `),i=Math.max(n.length,r.length),o=[];for(let s=0;s<i;s++)n[s]!==r[s]&&o.push(s);return{lines:o,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}var n1=globalThis.process.platform.startsWith("win"),Ao=Symbol("clack:cancel");function Oe(t){return t===Ao}function fi(t,e){let n=t;n.isTTY&&n.setRawMode(e)}var gi=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,Ko=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function gr(t,e,n,r=n,i=n,o){let s=gi(t??za);return Re(e,s-n.length,{hard:!0,trim:!1}).split(`
153
+ `),i=Math.max(n.length,r.length),o=[];for(let s=0;s<i;s++)n[s]!==r[s]&&o.push(s);return{lines:o,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}var u1=globalThis.process.platform.startsWith("win"),Ko=Symbol("clack:cancel");function Oe(t){return t===Ko}function fi(t,e){let n=t;n.isTTY&&n.setRawMode(e)}var gi=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,xo=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function dr(t,e,n,r=n,i=n,o){let s=gi(t??ef);return Re(e,s-n.length,{hard:!0,trim:!1}).split(`
154
154
  `).map((c,u,h)=>{let a=o?o(c,u):c;return u===0?`${r}${a}`:u===h.length-1?`${i}${a}`:`${n}${a}`}).join(`
155
- `)}function Da(t,e){if("~standard"in t){let n=t["~standard"].validate(e);if(n instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return n.issues?.at(0)?.message}return t(e)}class be{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(t,e=!0){let{input:n=h0,output:r=za,render:i,signal:o,...s}=t;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=e,this._abortSignal=o,this.input=n,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(t,e){let n=this._subscribers.get(t)??[];n.push(e),this._subscribers.set(t,n)}on(t,e){this.setSubscriber(t,{cb:e})}once(t,e){this.setSubscriber(t,{cb:e,once:!0})}emit(t,...e){let n=this._subscribers.get(t)??[],r=[];for(let i of n)i.cb(...e),i.once&&r.push(()=>n.splice(n.indexOf(i),1));for(let i of r)i()}prompt(){return new Promise((t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(Ao);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=a0.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),fi(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Zt.cursor.show),this.output.off("resize",this.render),fi(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Zt.cursor.show),this.output.off("resize",this.render),fi(this.input,!1),t(Ao)})})}_isActionKey(t,e){return t==="\t"}_shouldSubmit(t,e){return!0}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,e){this.userInput=t??"",this.emit("userInput",this.userInput),e&&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(t,e){if(this._track&&e.name!=="return"&&(e.name&&this._isActionKey(t,e)&&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"),e?.name&&(!this._track&&xt.aliases.has(e.name)&&this.emit("cursor",xt.aliases.get(e.name)),xt.actions.has(e.name)&&this.emit("cursor",e.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t,e),e?.name==="return"&&this._shouldSubmit(t,e)){if(this.opts.validate){let n=Da(this.opts.validate,this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Ba([t,e?.name,e?.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(`
155
+ `)}function rf(t,e){if("~standard"in t){let n=t["~standard"].validate(e);if(n instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return n.issues?.at(0)?.message}return t(e)}class $e{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(t,e=!0){let{input:n=g0,output:r=ef,render:i,signal:o,...s}=t;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=e,this._abortSignal=o,this.input=n,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(t,e){let n=this._subscribers.get(t)??[];n.push(e),this._subscribers.set(t,n)}on(t,e){this.setSubscriber(t,{cb:e})}once(t,e){this.setSubscriber(t,{cb:e,once:!0})}emit(t,...e){let n=this._subscribers.get(t)??[],r=[];for(let i of n)i.cb(...e),i.once&&r.push(()=>n.splice(n.indexOf(i),1));for(let i of r)i()}prompt(){return new Promise((t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(Ko);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=d0.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),fi(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(qt.cursor.show),this.output.off("resize",this.render),fi(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(qt.cursor.show),this.output.off("resize",this.render),fi(this.input,!1),t(Ko)})})}_isActionKey(t,e){return t==="\t"}_shouldSubmit(t,e){return!0}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,e){this.userInput=t??"",this.emit("userInput",this.userInput),e&&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(t,e){if(this._track&&e.name!=="return"&&(e.name&&this._isActionKey(t,e)&&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"),e?.name&&(!this._track&&Qt.aliases.has(e.name)&&this.emit("cursor",Qt.aliases.get(e.name)),Qt.actions.has(e.name)&&this.emit("cursor",e.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t,e),e?.name==="return"&&this._shouldSubmit(t,e)){if(this.opts.validate){let n=rf(this.opts.validate,this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}nf([t,e?.name,e?.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(`
156
156
  `),fi(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=Re(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
157
- `).length-1;this.output.write(Zt.cursor.move(-999,t*-1))}render(){let t=Re(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Zt.cursor.hide);else{let e=g0(this._prevFrame,t),n=Ko(this.output);if(this.restoreCursor(),e){let r=Math.max(0,e.numLinesAfter-n),i=Math.max(0,e.numLinesBefore-n),o=e.lines.find((s)=>s>=r);if(o===void 0){this._prevFrame=t;return}if(e.lines.length===1){this.output.write(Zt.cursor.move(0,o-i)),this.output.write(Zt.erase.lines(1));let s=t.split(`
158
- `);this.output.write(s[o]),this._prevFrame=t,this.output.write(Zt.cursor.move(0,s.length-o-1));return}else if(e.lines.length>1){if(r<i)o=r;else{let c=o-i;c>0&&this.output.write(Zt.cursor.move(0,c))}this.output.write(Zt.erase.down());let s=t.split(`
157
+ `).length-1;this.output.write(qt.cursor.move(-999,t*-1))}render(){let t=Re(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(qt.cursor.hide);else{let e=w0(this._prevFrame,t),n=xo(this.output);if(this.restoreCursor(),e){let r=Math.max(0,e.numLinesAfter-n),i=Math.max(0,e.numLinesBefore-n),o=e.lines.find((s)=>s>=r);if(o===void 0){this._prevFrame=t;return}if(e.lines.length===1){this.output.write(qt.cursor.move(0,o-i)),this.output.write(qt.erase.lines(1));let s=t.split(`
158
+ `);this.output.write(s[o]),this._prevFrame=t,this.output.write(qt.cursor.move(0,s.length-o-1));return}else if(e.lines.length>1){if(r<i)o=r;else{let c=o-i;c>0&&this.output.write(qt.cursor.move(0,c))}this.output.write(qt.erase.down());let s=t.split(`
159
159
  `).slice(o);this.output.write(s.join(`
160
- `)),this._prevFrame=t;return}}this.output.write(Zt.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function d0(t,e){if(t===void 0||e.length===0)return 0;let n=e.findIndex((r)=>r.value===t);return n!==-1?n:0}function m0(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function p0(t,e){if(e)return t?e:e[0]}var w0=class extends be{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#t;#o;#c;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return To(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let e=this.userInput.slice(0,this.cursor),n=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${e}${To("inverse",n)}${r}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(e){super(e),this.#o=e.options,this.#c=e.placeholder;let n=this.options;this.filteredOptions=[...n],this.multiple=e.multiple===!0,this.#t=typeof e.options=="function"?e.filter:e.filter??m0;let r;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?r=e.initialValue:r=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let o=n.findIndex((s)=>s.value===i);o!==-1&&(this.toggleSelected(i),this.#e=o)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,o)=>this.#n(i,o)),this.on("userInput",(i)=>this.#r(i))}_isActionKey(e,n){return e==="\t"||this.multiple&&this.isNavigating&&n.name==="space"&&e!==void 0&&e!==""}#n(e,n){let r=n.name==="up",i=n.name==="down",o=n.name==="return",s=this.userInput===""||this.userInput==="\t",c=this.#c,u=this.options,h=c!==void 0&&c!==""&&u.some((a)=>!a.disabled&&(this.#t?this.#t(c,a):!0));if(n.name==="tab"&&s&&h){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(c,!0),this.isNavigating=!1;return}r||i?(this.#e=gn(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=p0(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(n.name==="tab"||this.isNavigating&&n.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter((n)=>n!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#r(e){if(e!==this.#i){this.#i=e;let n=this.options;e&&this.#t?this.filteredOptions=n.filter((o)=>this.#t?.(e,o)):this.filteredOptions=[...n];let r=d0(this.focusedValue,this.filteredOptions);this.#e=gn(r,0,this.filteredOptions);let i=this.filteredOptions[this.#e];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class Jo extends be{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(e)=>{this.output.write(Zt.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var b0={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function Va(t){return[...t].map((e)=>b0[e])}function $0(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),n=[],r="/";for(let i of e)i.type==="literal"?r=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&n.push({type:i.type,len:i.type==="year"?4:2});return{segments:n,separator:r}}function Lo(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function li(t){return{year:Lo(t.year),month:Lo(t.month),day:Lo(t.day)}}function Uo(t,e){return new Date(t||2001,e||1,0).getDate()}function tf(t){let{year:e,month:n,day:r}=li(t);if(!e||e<0||e>9999||!n||n<1||n>12||!r||r<1)return;let i=new Date(Date.UTC(e,n-1,r));if(!(i.getUTCFullYear()!==e||i.getUTCMonth()!==n-1||i.getUTCDate()!==r))return{year:e,month:n,day:r}}function Ya(t){let e=tf(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function k0(t,e,n,r){let i=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,o=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return t==="year"?{min:i?.year??1,max:o?.year??9999}:t==="month"?{min:i&&e.year===i.year?i.month:1,max:o&&e.year===o.year?o.month:12}:{min:i&&e.year===i.year&&e.month===i.month?i.day:1,max:o&&e.year===o.year&&e.month===o.month?o.day:Uo(e.year,e.month)}}class ef extends be{#e;#i;#t;#o;#c;#n={segmentIndex:0,positionInSegment:0};#r=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#n}}get segmentValues(){return{...this.#t}}get segments(){return this.#e}get separator(){return this.#i}get formattedValue(){return this.#f(this.#t)}#f(t){return this.#e.map((e)=>t[e.type]).join(this.#i)}#u(){this._setUserInput(this.#f(this.#t)),this._setValue(Ya(this.#t)??void 0)}constructor(t){let e=t.format?{segments:Va(t.format),separator:t.separator??"/"}:$0(t.locale),n=t.separator??e.separator,r=t.format?Va(t.format):e.segments,i=t.initialValue??t.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((c)=>o[c.type]).join(n);super({...t,initialUserInput:s},!1),this.#e=r,this.#i=n,this.#t=o,this.#o=t.minDate,this.#c=t.maxDate,this.#u(),this.on("cursor",(c)=>this.#d(c)),this.on("key",(c,u)=>this.#m(c,u)),this.on("finalize",()=>this.#p(t))}#h(){let t=Math.max(0,Math.min(this.#n.segmentIndex,this.#e.length-1)),e=this.#e[t];if(e)return this.#n.positionInSegment=Math.max(0,Math.min(this.#n.positionInSegment,e.len-1)),{segment:e,index:t}}#a(t){this.inlineError="",this.#s=null;let e=this.#h();e&&(this.#n.segmentIndex=Math.max(0,Math.min(this.#e.length-1,e.index+t)),this.#n.positionInSegment=0,this.#r=!0)}#l(t){let e=this.#h();if(!e)return;let{segment:n}=e,r=this.#t[n.type],i=!r||r.replace(/_/g,"")==="",o=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,s=k0(n.type,li(this.#t),this.#o,this.#c),c;i?c=t===1?s.min:s.max:c=Math.max(Math.min(s.max,o+t),s.min),this.#t={...this.#t,[n.type]:c.toString().padStart(n.len,"0")},this.#r=!0,this.#s=null,this.#u()}#d(t){if(t)switch(t){case"right":return this.#a(1);case"left":return this.#a(-1);case"up":return this.#l(1);case"down":return this.#l(-1)}}#m(t,e){if(e?.name==="backspace"||e?.sequence===""||e?.sequence==="\b"||t===""||t==="\b"){this.inlineError="";let n=this.#h();if(!n)return;if(!this.#t[n.segment.type].replace(/_/g,"")){this.#a(-1);return}this.#t[n.segment.type]="_".repeat(n.segment.len),this.#r=!0,this.#n.positionInSegment=0,this.#u();return}if(e?.name==="tab"){this.inlineError="";let n=this.#h();if(!n)return;let r=e.shift?-1:1,i=n.index+r;i>=0&&i<this.#e.length&&(this.#n.segmentIndex=i,this.#n.positionInSegment=0,this.#r=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#h();if(!n)return;let{segment:r}=n,i=!this.#t[r.type].replace(/_/g,"");if(this.#r&&this.#s!==null&&!i){let l=this.#s+t,p={...this.#t,[r.type]:l},b=this.#g(p,r);if(b){this.inlineError=b,this.#s=null,this.#r=!1;return}this.inlineError="",this.#t[r.type]=l,this.#s=null,this.#r=!1,this.#u(),n.index<this.#e.length-1&&(this.#n.segmentIndex=n.index+1,this.#n.positionInSegment=0,this.#r=!0);return}this.#r&&!i&&(this.#t[r.type]="_".repeat(r.len),this.#n.positionInSegment=0),this.#r=!1,this.#s=null;let o=this.#t[r.type],s=o.indexOf("_"),c=s>=0?s:Math.min(this.#n.positionInSegment,r.len-1);if(c<0||c>=r.len)return;let u=o.slice(0,c)+t+o.slice(c+1),h=!1;if(c===0&&o==="__"&&(r.type==="month"||r.type==="day")){let l=Number.parseInt(t,10);u=`0${t}`,h=l<=(r.type==="month"?1:2)}if(r.type==="year"&&(u=(o.replace(/_/g,"")+t).padStart(r.len,"_")),!u.includes("_")){let l={...this.#t,[r.type]:u},p=this.#g(l,r);if(p){this.inlineError=p;return}}this.inlineError="",this.#t[r.type]=u;let a=u.includes("_")?void 0:tf(this.#t);if(a){let{year:l,month:p}=a,b=Uo(l,p);this.#t={year:String(Math.max(0,Math.min(9999,l))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,p))).padStart(2,"0"),day:String(Math.max(1,Math.min(b,a.day))).padStart(2,"0")}}this.#u();let f=u.indexOf("_");h?(this.#r=!0,this.#s=t):f>=0?this.#n.positionInSegment=f:s>=0&&n.index<this.#e.length-1?(this.#n.segmentIndex=n.index+1,this.#n.positionInSegment=0,this.#r=!0):this.#n.positionInSegment=Math.min(c+1,r.len-1)}}#g(t,e){let{month:n,day:r}=li(t);if(e.type==="month"&&(n<0||n>12))return xt.date.messages.invalidMonth;if(e.type==="day"&&(r<0||r>31))return xt.date.messages.invalidDay(31,"any month")}#p(t){let{year:e,month:n,day:r}=li(this.#t);if(e&&n&&r){let i=Uo(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=Ya(this.#t)??t.defaultValue??void 0}}var E0=class extends be{options;cursor=0;#e;getGroupItems(e){return this.options.filter((n)=>n.group===e)}isGroupSelected(e){let n=this.getGroupItems(e),r=this.value;return r===void 0?!1:n.every((i)=>r.includes(i.value))}toggleValue(){let e=this.options[this.cursor];if(e!==void 0)if(this.value===void 0&&(this.value=[]),e.group===!0){let n=e.value,r=this.getGroupItems(n);this.isGroupSelected(n)?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 n=this.value.includes(e.value);this.value=n?this.value.filter((r)=>r!==e.value):[...this.value,e.value]}}constructor(e){super(e,!1);let{options:n}=e;this.#e=e.selectableGroups!==!1,this.options=Object.entries(n).flatMap(([r,i])=>[{value:r,group:!0,label:r},...i.map((o)=>({...o,group:r}))]),this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),this.#e?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.#e&&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.#e&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},y0=new Set(["up","down","left","right"]);class nf extends be{#e=!1;#i;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}█`;let e=t.slice(0,this.cursor),n=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return n===`
160
+ `)),this._prevFrame=t;return}}this.output.write(qt.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function b0(t,e){if(t===void 0||e.length===0)return 0;let n=e.findIndex((r)=>r.value===t);return n!==-1?n:0}function $0(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function k0(t,e){if(e)return t?e:e[0]}var E0=class extends $e{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#t;#o;#c;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return Uo(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let e=this.userInput.slice(0,this.cursor),n=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${e}${Uo("inverse",n)}${r}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(e){super(e),this.#o=e.options,this.#c=e.placeholder;let n=this.options;this.filteredOptions=[...n],this.multiple=e.multiple===!0,this.#t=typeof e.options=="function"?e.filter:e.filter??$0;let r;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?r=e.initialValue:r=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let o=n.findIndex((s)=>s.value===i);o!==-1&&(this.toggleSelected(i),this.#e=o)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,o)=>this.#n(i,o)),this.on("userInput",(i)=>this.#r(i))}_isActionKey(e,n){return e==="\t"||this.multiple&&this.isNavigating&&n.name==="space"&&e!==void 0&&e!==""}#n(e,n){let r=n.name==="up",i=n.name==="down",o=n.name==="return",s=this.userInput===""||this.userInput==="\t",c=this.#c,u=this.options,h=c!==void 0&&c!==""&&u.some((a)=>!a.disabled&&(this.#t?this.#t(c,a):!0));if(n.name==="tab"&&s&&h){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(c,!0),this.isNavigating=!1;return}r||i?(this.#e=dn(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=k0(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(n.name==="tab"||this.isNavigating&&n.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter((n)=>n!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#r(e){if(e!==this.#i){this.#i=e;let n=this.options;e&&this.#t?this.filteredOptions=n.filter((o)=>this.#t?.(e,o)):this.filteredOptions=[...n];let r=b0(this.focusedValue,this.filteredOptions);this.#e=dn(r,0,this.filteredOptions);let i=this.filteredOptions[this.#e];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class Wo extends $e{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(e)=>{this.output.write(qt.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var y0={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function Da(t){return[...t].map((e)=>y0[e])}function v0(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),n=[],r="/";for(let i of e)i.type==="literal"?r=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&n.push({type:i.type,len:i.type==="year"?4:2});return{segments:n,separator:r}}function Ao(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function li(t){return{year:Ao(t.year),month:Ao(t.month),day:Ao(t.day)}}function Jo(t,e){return new Date(t||2001,e||1,0).getDate()}function of(t){let{year:e,month:n,day:r}=li(t);if(!e||e<0||e>9999||!n||n<1||n>12||!r||r<1)return;let i=new Date(Date.UTC(e,n-1,r));if(!(i.getUTCFullYear()!==e||i.getUTCMonth()!==n-1||i.getUTCDate()!==r))return{year:e,month:n,day:r}}function tf(t){let e=of(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function M0(t,e,n,r){let i=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,o=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return t==="year"?{min:i?.year??1,max:o?.year??9999}:t==="month"?{min:i&&e.year===i.year?i.month:1,max:o&&e.year===o.year?o.month:12}:{min:i&&e.year===i.year&&e.month===i.month?i.day:1,max:o&&e.year===o.year&&e.month===o.month?o.day:Jo(e.year,e.month)}}class sf extends $e{#e;#i;#t;#o;#c;#n={segmentIndex:0,positionInSegment:0};#r=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#n}}get segmentValues(){return{...this.#t}}get segments(){return this.#e}get separator(){return this.#i}get formattedValue(){return this.#f(this.#t)}#f(t){return this.#e.map((e)=>t[e.type]).join(this.#i)}#u(){this._setUserInput(this.#f(this.#t)),this._setValue(tf(this.#t)??void 0)}constructor(t){let e=t.format?{segments:Da(t.format),separator:t.separator??"/"}:v0(t.locale),n=t.separator??e.separator,r=t.format?Da(t.format):e.segments,i=t.initialValue??t.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((c)=>o[c.type]).join(n);super({...t,initialUserInput:s},!1),this.#e=r,this.#i=n,this.#t=o,this.#o=t.minDate,this.#c=t.maxDate,this.#u(),this.on("cursor",(c)=>this.#d(c)),this.on("key",(c,u)=>this.#m(c,u)),this.on("finalize",()=>this.#p(t))}#h(){let t=Math.max(0,Math.min(this.#n.segmentIndex,this.#e.length-1)),e=this.#e[t];if(e)return this.#n.positionInSegment=Math.max(0,Math.min(this.#n.positionInSegment,e.len-1)),{segment:e,index:t}}#a(t){this.inlineError="",this.#s=null;let e=this.#h();e&&(this.#n.segmentIndex=Math.max(0,Math.min(this.#e.length-1,e.index+t)),this.#n.positionInSegment=0,this.#r=!0)}#l(t){let e=this.#h();if(!e)return;let{segment:n}=e,r=this.#t[n.type],i=!r||r.replace(/_/g,"")==="",o=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,s=M0(n.type,li(this.#t),this.#o,this.#c),c;i?c=t===1?s.min:s.max:c=Math.max(Math.min(s.max,o+t),s.min),this.#t={...this.#t,[n.type]:c.toString().padStart(n.len,"0")},this.#r=!0,this.#s=null,this.#u()}#d(t){if(t)switch(t){case"right":return this.#a(1);case"left":return this.#a(-1);case"up":return this.#l(1);case"down":return this.#l(-1)}}#m(t,e){if(e?.name==="backspace"||e?.sequence===""||e?.sequence==="\b"||t===""||t==="\b"){this.inlineError="";let n=this.#h();if(!n)return;if(!this.#t[n.segment.type].replace(/_/g,"")){this.#a(-1);return}this.#t[n.segment.type]="_".repeat(n.segment.len),this.#r=!0,this.#n.positionInSegment=0,this.#u();return}if(e?.name==="tab"){this.inlineError="";let n=this.#h();if(!n)return;let r=e.shift?-1:1,i=n.index+r;i>=0&&i<this.#e.length&&(this.#n.segmentIndex=i,this.#n.positionInSegment=0,this.#r=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#h();if(!n)return;let{segment:r}=n,i=!this.#t[r.type].replace(/_/g,"");if(this.#r&&this.#s!==null&&!i){let l=this.#s+t,m={...this.#t,[r.type]:l},b=this.#g(m,r);if(b){this.inlineError=b,this.#s=null,this.#r=!1;return}this.inlineError="",this.#t[r.type]=l,this.#s=null,this.#r=!1,this.#u(),n.index<this.#e.length-1&&(this.#n.segmentIndex=n.index+1,this.#n.positionInSegment=0,this.#r=!0);return}this.#r&&!i&&(this.#t[r.type]="_".repeat(r.len),this.#n.positionInSegment=0),this.#r=!1,this.#s=null;let o=this.#t[r.type],s=o.indexOf("_"),c=s>=0?s:Math.min(this.#n.positionInSegment,r.len-1);if(c<0||c>=r.len)return;let u=o.slice(0,c)+t+o.slice(c+1),h=!1;if(c===0&&o==="__"&&(r.type==="month"||r.type==="day")){let l=Number.parseInt(t,10);u=`0${t}`,h=l<=(r.type==="month"?1:2)}if(r.type==="year"&&(u=(o.replace(/_/g,"")+t).padStart(r.len,"_")),!u.includes("_")){let l={...this.#t,[r.type]:u},m=this.#g(l,r);if(m){this.inlineError=m;return}}this.inlineError="",this.#t[r.type]=u;let a=u.includes("_")?void 0:of(this.#t);if(a){let{year:l,month:m}=a,b=Jo(l,m);this.#t={year:String(Math.max(0,Math.min(9999,l))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,m))).padStart(2,"0"),day:String(Math.max(1,Math.min(b,a.day))).padStart(2,"0")}}this.#u();let f=u.indexOf("_");h?(this.#r=!0,this.#s=t):f>=0?this.#n.positionInSegment=f:s>=0&&n.index<this.#e.length-1?(this.#n.segmentIndex=n.index+1,this.#n.positionInSegment=0,this.#r=!0):this.#n.positionInSegment=Math.min(c+1,r.len-1)}}#g(t,e){let{month:n,day:r}=li(t);if(e.type==="month"&&(n<0||n>12))return Qt.date.messages.invalidMonth;if(e.type==="day"&&(r<0||r>31))return Qt.date.messages.invalidDay(31,"any month")}#p(t){let{year:e,month:n,day:r}=li(this.#t);if(e&&n&&r){let i=Jo(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=tf(this.#t)??t.defaultValue??void 0}}var S0=class extends $e{options;cursor=0;#e;getGroupItems(e){return this.options.filter((n)=>n.group===e)}isGroupSelected(e){let n=this.getGroupItems(e),r=this.value;return r===void 0?!1:n.every((i)=>r.includes(i.value))}toggleValue(){let e=this.options[this.cursor];if(e!==void 0)if(this.value===void 0&&(this.value=[]),e.group===!0){let n=e.value,r=this.getGroupItems(n);this.isGroupSelected(n)?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 n=this.value.includes(e.value);this.value=n?this.value.filter((r)=>r!==e.value):[...this.value,e.value]}}constructor(e){super(e,!1);let{options:n}=e;this.#e=e.selectableGroups!==!1,this.options=Object.entries(n).flatMap(([r,i])=>[{value:r,group:!0,label:r},...i.map((o)=>({...o,group:r}))]),this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),this.#e?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.#e&&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.#e&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},I0=new Set(["up","down","left","right"]);class cf extends $e{#e=!1;#i;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}█`;let e=t.slice(0,this.cursor),n=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return n===`
161
161
  `?`${e}█
162
- ${r}`:`${e}${To("inverse",n)}${r}`}get cursor(){return this._cursor}#t(t){if(this.userInput.length===0){this._setUserInput(t);return}this._setUserInput(this.userInput.slice(0,this.cursor)+t+this.userInput.slice(this.cursor))}#o(t){let e=this.value??"";switch(t){case"up":this._cursor=ai(this._cursor,0,-1,e);return;case"down":this._cursor=ai(this._cursor,0,1,e);return;case"left":this._cursor=ai(this._cursor,-1,0,e);return;case"right":this._cursor=ai(this._cursor,1,0,e);return}}_shouldSubmit(t,e){if(this.#i)return this.focused==="submit"?!0:(this.#t(`
162
+ ${r}`:`${e}${Uo("inverse",n)}${r}`}get cursor(){return this._cursor}#t(t){if(this.userInput.length===0){this._setUserInput(t);return}this._setUserInput(this.userInput.slice(0,this.cursor)+t+this.userInput.slice(this.cursor))}#o(t){let e=this.value??"";switch(t){case"up":this._cursor=ai(this._cursor,0,-1,e);return;case"down":this._cursor=ai(this._cursor,0,1,e);return;case"left":this._cursor=ai(this._cursor,-1,0,e);return;case"right":this._cursor=ai(this._cursor,1,0,e);return}}_shouldSubmit(t,e){if(this.#i)return this.focused==="submit"?!0:(this.#t(`
163
163
  `),this._cursor++,!1);let n=this.#e;return this.#e=!0,n&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
164
164
  `&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#t(`
165
- `),this._cursor++,!1)}constructor(t){let e=t.initialUserInput??t.initialValue;super({...t,initialUserInput:e},!1),e!==void 0&&(this._cursor=e.length),this.#i=t.showSubmit??!1,this.on("key",(n,r)=>{if(r?.name&&y0.has(r.name)){this.#e=!1,this.#o(r.name);return}if(n==="\t"&&this.#i){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#e=!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}n&&(this.#i&&this.focused==="submit"&&(this.focused="editor"),this.#t(n??""),this._cursor++)}}),this.on("userInput",(n)=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}class Wo extends be{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter((t)=>t.disabled!==!0)}toggleAll(){let t=this._enabledOptions,e=this.value!==void 0&&this.value.length===t.length;this.value=e?[]:t.map((n)=>n.value)}toggleInvert(){let t=this.value;if(!t)return;let e=this._enabledOptions.filter((n)=>!t.includes(n.value));this.value=e.map((n)=>n.value)}toggleValue(){this.value===void 0&&(this.value=[]);let t=this.value.includes(this._value);this.value=t?this.value.filter((e)=>e!==this._value):[...this.value,this._value]}constructor(t){super(t,!1),this.options=t.options,this.value=[...t.initialValues??[]];let e=Math.max(this.options.findIndex(({value:n})=>n===t.cursorAt),0);this.cursor=this.options[e]?.disabled?gn(e,1,this.options):e,this.on("key",(n,r)=>{r.name==="a"&&this.toggleAll(),r.name==="i"&&this.toggleInvert()}),this.on("cursor",(n)=>{switch(n){case"left":case"up":this.cursor=gn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=gn(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}import{styleText as S,stripVTControlCharacters as l1}from"node:util";import Yt from"node:process";var ff=yr(Go(),1);function M0(){if(Yt.platform!=="win32")return Yt.env.TERM!=="linux";return Boolean(Yt.env.CI)||Boolean(Yt.env.WT_SESSION)||Boolean(Yt.env.TERMINUS_SUBLIME)||Yt.env.ConEmuTask==="{cmd::Cmder}"||Yt.env.TERM_PROGRAM==="Terminus-Sublime"||Yt.env.TERM_PROGRAM==="vscode"||Yt.env.TERM==="xterm-256color"||Yt.env.TERM==="alacritty"||Yt.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var v0=M0();var dt=(t,e)=>v0?t:e,S0=dt("◆","*"),I0=dt("■","x"),F0=dt("▲","x"),lf=dt("◇","o"),N0=dt("┌","T"),vt=dt("│","|"),dn=dt("└","—"),p1=dt("┐","T"),w1=dt("┘","—"),rf=dt("●",">"),of=dt("○"," "),R0=dt("◻","[•]"),sf=dt("◼","[+]"),cf=dt("◻","[ ]"),b1=dt("▪","•"),uf=dt("─","-"),O0=dt("╮","+"),H0=dt("├","+"),j0=dt("╯","+"),P0=dt("╰","+"),$1=dt("╭","+"),k1=dt("●","•"),E1=dt("◆","*"),y1=dt("▲","!"),M1=dt("■","x"),gf=(t)=>{switch(t){case"initial":case"active":return S("cyan",S0);case"cancel":return S("red",I0);case"error":return S("yellow",F0);case"submit":return S("green",lf)}},G0=(t)=>{switch(t){case"initial":case"active":return S("cyan",vt);case"cancel":return S("red",vt);case"error":return S("yellow",vt);case"submit":return S("green",vt)}};function L0(t,e){let n=[`${e?`${S("cyan",vt)} `:""}${t.join(" • ")}`];return e&&n.push(S("cyan",dn)),n}var hf=(t,e,n,r,i,o=!1)=>{let s=e,c=0;if(o)for(let u=r-1;u>=n;u--){let h=t[u];if(h&&(s-=h.length),c++,s<=i)break}else for(let u=n;u<r;u++){let h=t[u];if(h&&(s-=h.length),c++,s<=i)break}return{lineCount:s,removals:c}},af=({cursor:t,options:e,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let c=gi(r)-o,u=Ko(r),h=S("dim","..."),a=Math.max(u-s,0),f=Math.max(Math.min(i,a),5),l=0;t>=f-3&&(l=Math.max(Math.min(t-f+3,e.length-f),0));let p=f<e.length&&l>0,b=f<e.length&&l+f<e.length,g=Math.min(l+f,e.length),$=[],y=0;p&&y++,b&&y++;let F=l+(p?1:0),E=g-(b?1:0);for(let d=F;d<E;d++){let j=e[d],k=j?n(j,d===t):"",H=Re(k,c,{hard:!0,trim:!1}).split(`
166
- `);$.push(H),y+=H.length}if(y>a){let d=0,j=0,k=y,H=t-F,R=a,L=()=>hf($,k,0,H,R),P=()=>hf($,k,H+1,$.length,R,!0);p?({lineCount:k,removals:d}=L(),k>R&&(b||(R-=1),{lineCount:k,removals:j}=P())):(b||(R-=1),{lineCount:k,removals:j}=P(),k>R&&(R-=1,{lineCount:k,removals:d}=L())),d>0&&(p=!0,$.splice(0,d)),j>0&&(b=!0,$.splice($.length-j,j))}let v=[];p&&v.push(h);for(let d of $)for(let j of d)v.push(j);return b&&v.push(h),v};var mr=(t)=>{let e=t.active??"Yes",n=t.inactive??"No";return new Jo({active:e,inactive:n,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let r=t.withGuide??xt.withGuide,i=`${gf(this.state)} `,o=r?`${S("gray",vt)} `:"",s=gr(t.output,t.message,o,i),c=`${r?`${S("gray",vt)}
165
+ `),this._cursor++,!1)}constructor(t){let e=t.initialUserInput??t.initialValue;super({...t,initialUserInput:e},!1),e!==void 0&&(this._cursor=e.length),this.#i=t.showSubmit??!1,this.on("key",(n,r)=>{if(r?.name&&I0.has(r.name)){this.#e=!1,this.#o(r.name);return}if(n==="\t"&&this.#i){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#e=!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}n&&(this.#i&&this.focused==="submit"&&(this.focused="editor"),this.#t(n??""),this._cursor++)}}),this.on("userInput",(n)=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}class Qo extends $e{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter((t)=>t.disabled!==!0)}toggleAll(){let t=this._enabledOptions,e=this.value!==void 0&&this.value.length===t.length;this.value=e?[]:t.map((n)=>n.value)}toggleInvert(){let t=this.value;if(!t)return;let e=this._enabledOptions.filter((n)=>!t.includes(n.value));this.value=e.map((n)=>n.value)}toggleValue(){this.value===void 0&&(this.value=[]);let t=this.value.includes(this._value);this.value=t?this.value.filter((e)=>e!==this._value):[...this.value,this._value]}constructor(t){super(t,!1),this.options=t.options,this.value=[...t.initialValues??[]];let e=Math.max(this.options.findIndex(({value:n})=>n===t.cursorAt),0);this.cursor=this.options[e]?.disabled?dn(e,1,this.options):e,this.on("key",(n,r)=>{r.name==="a"&&this.toggleAll(),r.name==="i"&&this.toggleInvert()}),this.on("cursor",(n)=>{switch(n){case"left":case"up":this.cursor=dn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=dn(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}import{styleText as S,stripVTControlCharacters as b1}from"node:util";import Bt from"node:process";var mf=yr(To(),1);function F0(){if(Bt.platform!=="win32")return Bt.env.TERM!=="linux";return Boolean(Bt.env.CI)||Boolean(Bt.env.WT_SESSION)||Boolean(Bt.env.TERMINUS_SUBLIME)||Bt.env.ConEmuTask==="{cmd::Cmder}"||Bt.env.TERM_PROGRAM==="Terminus-Sublime"||Bt.env.TERM_PROGRAM==="vscode"||Bt.env.TERM==="xterm-256color"||Bt.env.TERM==="alacritty"||Bt.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var N0=F0();var dt=(t,e)=>N0?t:e,R0=dt("◆","*"),O0=dt("■","x"),H0=dt("▲","x"),pf=dt("◇","o"),j0=dt("┌","T"),Mt=dt("│","|"),mn=dt("└","—"),y1=dt("┐","T"),v1=dt("┘","—"),uf=dt("●",">"),hf=dt("○"," "),P0=dt("◻","[•]"),af=dt("◼","[+]"),ff=dt("◻","[ ]"),M1=dt("▪","•"),lf=dt("─","-"),G0=dt("╮","+"),L0=dt("├","+"),T0=dt("╯","+"),A0=dt("╰","+"),S1=dt("╭","+"),I1=dt("●","•"),F1=dt("◆","*"),N1=dt("▲","!"),R1=dt("■","x"),wf=(t)=>{switch(t){case"initial":case"active":return S("cyan",R0);case"cancel":return S("red",O0);case"error":return S("yellow",H0);case"submit":return S("green",pf)}},U0=(t)=>{switch(t){case"initial":case"active":return S("cyan",Mt);case"cancel":return S("red",Mt);case"error":return S("yellow",Mt);case"submit":return S("green",Mt)}};function K0(t,e){let n=[`${e?`${S("cyan",Mt)} `:""}${t.join(" • ")}`];return e&&n.push(S("cyan",mn)),n}var gf=(t,e,n,r,i,o=!1)=>{let s=e,c=0;if(o)for(let u=r-1;u>=n;u--){let h=t[u];if(h&&(s-=h.length),c++,s<=i)break}else for(let u=n;u<r;u++){let h=t[u];if(h&&(s-=h.length),c++,s<=i)break}return{lineCount:s,removals:c}},df=({cursor:t,options:e,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let c=gi(r)-o,u=xo(r),h=S("dim","..."),a=Math.max(u-s,0),f=Math.max(Math.min(i,a),5),l=0;t>=f-3&&(l=Math.max(Math.min(t-f+3,e.length-f),0));let m=f<e.length&&l>0,b=f<e.length&&l+f<e.length,d=Math.min(l+f,e.length),$=[],M=0;m&&M++,b&&M++;let N=l+(m?1:0),E=d-(b?1:0);for(let g=N;g<E;g++){let P=e[g],k=P?n(P,g===t):"",O=Re(k,c,{hard:!0,trim:!1}).split(`
166
+ `);$.push(O),M+=O.length}if(M>a){let g=0,P=0,k=M,O=t-N,I=a,j=()=>gf($,k,0,O,I),G=()=>gf($,k,O+1,$.length,I,!0);m?({lineCount:k,removals:g}=j(),k>I&&(b||(I-=1),{lineCount:k,removals:P}=G())):(b||(I-=1),{lineCount:k,removals:P}=G(),k>I&&(I-=1,{lineCount:k,removals:g}=j())),g>0&&(m=!0,$.splice(0,g)),P>0&&(b=!0,$.splice($.length-P,P))}let v=[];m&&v.push(h);for(let g of $)for(let P of g)v.push(P);return b&&v.push(h),v};var pn=(t)=>{let e=t.active??"Yes",n=t.inactive??"No";return new Wo({active:e,inactive:n,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let r=t.withGuide??Qt.withGuide,i=`${wf(this.state)} `,o=r?`${S("gray",Mt)} `:"",s=dr(t.output,t.message,o,i),c=`${r?`${S("gray",Mt)}
167
167
  `:""}${s}
168
- `,u=this.value?e:n;switch(this.state){case"submit":{let h=r?`${S("gray",vt)} `:"";return`${c}${h}${S("dim",u)}`}case"cancel":{let h=r?`${S("gray",vt)} `:"";return`${c}${h}${S(["strikethrough","dim"],u)}${r?`
169
- ${S("gray",vt)}`:""}`}default:{let h=r?`${S("cyan",vt)} `:"",a=r?S("cyan",dn):"";return`${c}${h}${this.value?`${S("green",rf)} ${e}`:`${S("dim",of)} ${S("dim",e)}`}${t.vertical?r?`
170
- ${S("cyan",vt)} `:`
171
- `:` ${S("dim","/")} `}${this.value?`${S("dim",of)} ${S("dim",n)}`:`${S("green",rf)} ${n}`}
168
+ `,u=this.value?e:n;switch(this.state){case"submit":{let h=r?`${S("gray",Mt)} `:"";return`${c}${h}${S("dim",u)}`}case"cancel":{let h=r?`${S("gray",Mt)} `:"";return`${c}${h}${S(["strikethrough","dim"],u)}${r?`
169
+ ${S("gray",Mt)}`:""}`}default:{let h=r?`${S("cyan",Mt)} `:"",a=r?S("cyan",mn):"";return`${c}${h}${this.value?`${S("green",uf)} ${e}`:`${S("dim",hf)} ${S("dim",e)}`}${t.vertical?r?`
170
+ ${S("cyan",Mt)} `:`
171
+ `:` ${S("dim","/")} `}${this.value?`${S("dim",hf)} ${S("dim",n)}`:`${S("green",uf)} ${n}`}
172
172
  ${a}
173
- `}}}}).prompt()};var T0=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Space:")} select`,`${S("dim","Enter:")} confirm`],dr=(t,e)=>t.split(`
173
+ `}}}}).prompt()};var J0=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Space:")} select`,`${S("dim","Enter:")} confirm`],mr=(t,e)=>t.split(`
174
174
  `).map((n)=>e(n)).join(`
175
- `),df=(t)=>{let e=(i,o)=>{let s=i.label??String(i.value);return o==="disabled"?`${S("gray",cf)} ${dr(s,(c)=>S(["strikethrough","gray"],c))}${i.hint?` ${S("dim",`(${i.hint??"disabled"})`)}`:""}`:o==="active"?`${S("cyan",R0)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="selected"?`${S("green",sf)} ${dr(s,(c)=>S("dim",c))}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="cancelled"?`${dr(s,(c)=>S(["strikethrough","dim"],c))}`:o==="active-selected"?`${S("green",sf)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="submitted"?`${dr(s,(c)=>S("dim",c))}`:`${S("dim",cf)} ${dr(s,(c)=>S("dim",c))}`},n=t.required??!0,r=t.showInstructions??!0;return new Wo({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:n,cursorAt:t.cursorAt,validate(i){if(n&&(i===void 0||i.length===0))return`Please select at least one option.
176
- ${S("reset",S("dim",`Press ${S(["gray","bgWhite","inverse"]," space ")} to select, ${S("gray",S("bgWhite",S("inverse"," enter ")))} to submit`))}`},render(){let i=t.withGuide??xt.withGuide,o=gr(t.output,t.message,i?`${G0(this.state)} `:"",`${gf(this.state)} `),s=`${i?`${S("gray",vt)}
175
+ `),bf=(t)=>{let e=(i,o)=>{let s=i.label??String(i.value);return o==="disabled"?`${S("gray",ff)} ${mr(s,(c)=>S(["strikethrough","gray"],c))}${i.hint?` ${S("dim",`(${i.hint??"disabled"})`)}`:""}`:o==="active"?`${S("cyan",P0)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="selected"?`${S("green",af)} ${mr(s,(c)=>S("dim",c))}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="cancelled"?`${mr(s,(c)=>S(["strikethrough","dim"],c))}`:o==="active-selected"?`${S("green",af)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="submitted"?`${mr(s,(c)=>S("dim",c))}`:`${S("dim",ff)} ${mr(s,(c)=>S("dim",c))}`},n=t.required??!0,r=t.showInstructions??!0;return new Qo({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:n,cursorAt:t.cursorAt,validate(i){if(n&&(i===void 0||i.length===0))return`Please select at least one option.
176
+ ${S("reset",S("dim",`Press ${S(["gray","bgWhite","inverse"]," space ")} to select, ${S("gray",S("bgWhite",S("inverse"," enter ")))} to submit`))}`},render(){let i=t.withGuide??Qt.withGuide,o=dr(t.output,t.message,i?`${U0(this.state)} `:"",`${wf(this.state)} `),s=`${i?`${S("gray",Mt)}
177
177
  `:""}${o}
178
- `,c=this.value??[],u=(h,a)=>{if(h.disabled)return e(h,"disabled");let f=c.includes(h.value);return a&&f?e(h,"active-selected"):f?e(h,"selected"):e(h,a?"active":"inactive")};switch(this.state){case"submit":{let h=this.options.filter(({value:f})=>c.includes(f)).map((f)=>e(f,"submitted")).join(S("dim",", "))||S("dim","none"),a=gr(t.output,h,i?`${S("gray",vt)} `:"");return`${s}${a}`}case"cancel":{let h=this.options.filter(({value:f})=>c.includes(f)).map((f)=>e(f,"cancelled")).join(S("dim",", "));if(h.trim()==="")return`${s}${S("gray",vt)}`;let a=gr(t.output,h,i?`${S("gray",vt)} `:"");return`${s}${a}${i?`
179
- ${S("gray",vt)}`:""}`}case"error":{let h=i?`${S("yellow",vt)} `:"",a=this.error.split(`
180
- `).map((p,b)=>b===0?`${i?`${S("yellow",dn)} `:""}${S("yellow",p)}`:` ${p}`).join(`
178
+ `,c=this.value??[],u=(h,a)=>{if(h.disabled)return e(h,"disabled");let f=c.includes(h.value);return a&&f?e(h,"active-selected"):f?e(h,"selected"):e(h,a?"active":"inactive")};switch(this.state){case"submit":{let h=this.options.filter(({value:f})=>c.includes(f)).map((f)=>e(f,"submitted")).join(S("dim",", "))||S("dim","none"),a=dr(t.output,h,i?`${S("gray",Mt)} `:"");return`${s}${a}`}case"cancel":{let h=this.options.filter(({value:f})=>c.includes(f)).map((f)=>e(f,"cancelled")).join(S("dim",", "));if(h.trim()==="")return`${s}${S("gray",Mt)}`;let a=dr(t.output,h,i?`${S("gray",Mt)} `:"");return`${s}${a}${i?`
179
+ ${S("gray",Mt)}`:""}`}case"error":{let h=i?`${S("yellow",Mt)} `:"",a=this.error.split(`
180
+ `).map((m,b)=>b===0?`${i?`${S("yellow",mn)} `:""}${S("yellow",m)}`:` ${m}`).join(`
181
181
  `),f=s.split(`
182
182
  `).length,l=a.split(`
183
- `).length+1;return`${s}${h}${af({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:f+l,style:u}).join(`
183
+ `).length+1;return`${s}${h}${df({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:f+l,style:u}).join(`
184
184
  ${h}`)}
185
185
  ${a}
186
- `}default:{let h=i?`${S("cyan",vt)} `:"",a=s.split(`
187
- `).length,f=r?L0(T0,i):i?[S("cyan",dn)]:[],l=f.join(`
188
- `),p=f.length+1;return`${s}${h}${af({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:a+p,style:u}).join(`
186
+ `}default:{let h=i?`${S("cyan",Mt)} `:"",a=s.split(`
187
+ `).length,f=r?K0(J0,i):i?[S("cyan",mn)]:[],l=f.join(`
188
+ `),m=f.length+1;return`${s}${h}${df({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:a+m,style:u}).join(`
189
189
  ${h}`)}
190
190
  ${l}
191
- `}}}}).prompt()};var mn=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??xt.withGuide?`${S("gray",dn)} `:"";n.write(`${r}${S("red",t)}
191
+ `}}}}).prompt()};var wn=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Qt.withGuide?`${S("gray",mn)} `:"";n.write(`${r}${S("red",t)}
192
192
 
193
- `)},di=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??xt.withGuide?`${S("gray",N0)} `:"";n.write(`${r}${t}
194
- `)},mf=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??xt.withGuide?`${S("gray",vt)}
195
- ${S("gray",dn)} `:"";n.write(`${r}${t}
193
+ `)},di=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Qt.withGuide?`${S("gray",j0)} `:"";n.write(`${r}${t}
194
+ `)},Zo=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Qt.withGuide?`${S("gray",Mt)}
195
+ ${S("gray",mn)} `:"";n.write(`${r}${t}
196
196
 
197
- `)};var A0=(t)=>t,U0=(t,e,n)=>{let r={hard:!0,trim:!1},i=Re(t,e,r).split(`
198
- `),o=i.reduce((u,h)=>Math.max(Kt(h),u),0),s=i.map(n).reduce((u,h)=>Math.max(Kt(h),u),0),c=e-(s-o);return Re(t,c,r)},pn=(t="",e="",n)=>{let r=n?.output??Yt.stdout,i=n?.withGuide??xt.withGuide,o=n?.format??A0,s=["",...U0(t,gi(r)-6,o).split(`
199
- `).map(o),""],c=Kt(e),u=Math.max(s.reduce((l,p)=>{let b=Kt(p);return b>l?b:l},0),c)+2,h=s.map((l)=>`${S("gray",vt)} ${l}${" ".repeat(u-Kt(l))}${S("gray",vt)}`).join(`
200
- `),a=i?`${S("gray",vt)}
201
- `:"",f=i?H0:P0;r.write(`${a}${S("green",lf)} ${S("reset",e)} ${S("gray",uf.repeat(Math.max(u-c-1,1))+O0)}
197
+ `)};var x0=(t)=>t,W0=(t,e,n)=>{let r={hard:!0,trim:!1},i=Re(t,e,r).split(`
198
+ `),o=i.reduce((u,h)=>Math.max(Jt(h),u),0),s=i.map(n).reduce((u,h)=>Math.max(Jt(h),u),0),c=e-(s-o);return Re(t,c,r)},_e=(t="",e="",n)=>{let r=n?.output??Bt.stdout,i=n?.withGuide??Qt.withGuide,o=n?.format??x0,s=["",...W0(t,gi(r)-6,o).split(`
199
+ `).map(o),""],c=Jt(e),u=Math.max(s.reduce((l,m)=>{let b=Jt(m);return b>l?b:l},0),c)+2,h=s.map((l)=>`${S("gray",Mt)} ${l}${" ".repeat(u-Jt(l))}${S("gray",Mt)}`).join(`
200
+ `),a=i?`${S("gray",Mt)}
201
+ `:"",f=i?L0:A0;r.write(`${a}${S("green",pf)} ${S("reset",e)} ${S("gray",lf.repeat(Math.max(u-c-1,1))+G0)}
202
202
  ${h}
203
- ${S("gray",f+uf.repeat(u+2)+j0)}
204
- `)};var v1={light:dt("─","-"),heavy:dt("━","="),block:dt("█","#")};var S1=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Enter:")} confirm`];var I1=`${S("gray",vt)} `;import{existsSync as C0}from"node:fs";import{openSync as K0,writeSync as J0}from"node:fs";import{ReadStream as W0}from"node:tty";var pf=["10","11","12","17",...Array.from({length:16},(t,e)=>`4;${e}`)];function pr(t=process.env){return Boolean(t.NO_COLOR)||t.TERM==="dumb"}function mi(t){return[`\x1B]11;${t.background}\x1B\\`,`\x1B]10;${t.foreground}\x1B\\`,`\x1B]12;${t.cursor}\x1B\\`,`\x1B]17;${t.selection}\x1B\\`,...t.ansi.map((e,n)=>`\x1B]4;${n};${e}\x1B\\`)].join("")}function wf(t){let e=new Map;for(let n of t.split("\x1B")){let r=n.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,o]=r??[];if(i&&o)e.set(i,o)}return e}function bf(t){return[...t].map(([e,n])=>`\x1B]${e};${n}\x1B\\`).join("")}async function $f(){let t,e;try{t=K0("/dev/tty","r+"),e=new W0(t),e.setRawMode(!0)}catch{return new Map}try{J0(t,pf.map((r)=>`\x1B]${r};?\x1B\\`).join(""));let n="";return await new Promise((r)=>{let i=setTimeout(r,120);e.on("data",(o)=>{if(n+=o.toString(),wf(n).size>=pf.length)clearTimeout(i),r()})}),wf(n)}finally{e.setRawMode(!1),e.destroy()}}function wn(t){let e=t.replace("#","");return[e.slice(0,2),e.slice(2,4),e.slice(4,6)].map((n)=>Number.parseInt(n,16)).join(";")}function kf(t,e){return`\x1B[48;2;${wn(e)}m ${t} \x1B[0m`}function Qo(t,e){return`\x1B[48;2;${wn(t)};38;2;${wn(e)}m ● \x1B[0m`}function Ef(t){return`\x1B[38;2;${wn(t)}m`}function Zo(t,e){return`\x1B[48;2;${wn(e)}m${t.map((n)=>`\x1B[38;2;${wn(n)}m▄`).join("")} \x1B[0m`}function pi(t,e){let n=e.toLowerCase();return[t.name,t.group,t.native??""].some((r)=>r.toLowerCase().includes(n))}function Mf(t,e,n){let r=n.trim(),i=[],o=new Set;for(let s of t){if(s.default||o.has(s.group))continue;o.add(s.group);let c=t.filter((a)=>!a.default&&a.group===s.group),u=r?c.filter((a)=>pi(a,r)):c;if(r&&u.length===0)continue;let h=r.length>0||e.has(s.group);if(i.push({kind:"group",name:s.group,native:s.native,lead:c.find((a)=>a.lead)??s,expanded:h,count:u.length}),h)i.push(...u.map((a)=>({kind:"palette",entry:a})))}return i}function x0(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||pi(i,n))).map((i)=>i.group));return Mf(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function Q0(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}var ne="\x1B[0m",bn="\x1B[2m",Z0="\x1B[1m",yf="\x1B[1;7m",q0="\x1B[36m",_0="\x1B[33m";function vf(t){return t==="decode"||t==="glitch"?t:"typewriter"}class qo extends be{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(t){super({render:()=>this.draw(),input:t.input,output:t.output,validate:t.required?()=>this.picked.size===0?`pick at least one ${this.scope}`:void 0:void 0},!0);this.entries=t.entries,this.scope=t.scope??"palette",this.picked=new Set(t.installed??[]),this.named=t.entries.filter((n)=>!n.default),this.series=[...new Set(this.named.map((n)=>n.group))],this.seriesPad=Math.max(0,...this.series.map((n)=>n.length)),this.maxItems=t.maxItems??12,this.color=t.color??!0,this.fx=t.fx??"typewriter",this.onFocus=t.onFocus,this.rollExample();let e=setInterval(()=>{this.rollExample(),this.fxStep=8,this.output.emit("resize")},3000);e.unref?.(),this.once("finalize",()=>{clearInterval(e),clearTimeout(this.fxTimer)}),this.rebuild("first"),this.on("cursor",(n)=>{if(n==="up")this.move(-1);else if(n==="down")this.move(1);else if(n==="left")this.fold(!1);else if(n==="right")this.fold(!0)}),this.on("userInput",(n)=>{if(n!==this.lastInput)this.lastInput=n,this.rebuild("keep")}),this.on("key",(n,r)=>{if(r?.name==="space")this.pick(this.rows[this.cursor])})}_isActionKey(t){return t==="\t"||t===" "}members(t){let e=this.scope==="palette"?this.userInput.trim():"";return this.named.filter((n)=>n.group===t&&(e===""||pi(n,e)))}everyone(t){return t.flatMap((e)=>e.kind==="group"?this.members(e.name):[])}pick(t){let e=t?.kind==="palette"?[t.entry.name]:t?.kind==="group"?this.members(t.name).map((r)=>r.name):t?.kind==="all"?this.everyone(this.rows).map((r)=>r.name):[];if(e.length===0)return;let n=e.some((r)=>!this.picked.has(r));for(let r of e)if(n)this.picked.add(r);else this.picked.delete(r)}pickedIn(t){return this.members(t).filter((e)=>this.picked.has(e.name)).length}pickedCount(){if(this.scope==="palette")return this.picked.size;return this.series.filter((t)=>this.members(t).every((e)=>this.picked.has(e.name))).length}rollExample(){let t=this.named[Math.floor(Math.random()*this.named.length)],e=this.series[Math.floor(Math.random()*this.series.length)];if(!t||!e){this.example="";return}let n=`${t.name} | ${e}`;this.example=n.length>30?`${n.slice(0,29)}…`:n,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 t=Math.floor(this.example.length*(8-this.fxStep)/8);if(this.fx==="typewriter")return`${this.example.slice(0,t)}▏`;let e=this.fx==="decode"?"abcdefghijklmnopqrstuvwxyz":"▓▒░#*+=<>?/-_",n=this.fx==="decode"?(r)=>!/[a-z0-9]/i.test(r):(r)=>r===" ";return[...this.example].map((r,i)=>i+(i*7+this.fxSeed)%3<t||n(r)?r:e[Math.floor(Math.random()*e.length)]??r).join("")}sync(){let t=this.rows[this.cursor],e=t?.kind==="palette"?t.entry:t?.kind==="group"&&this.scope==="series"?t.lead:void 0;if(e&&e.name!==this.lastFocused)this.lastFocused=e.name,this.onFocus?.(e)}rebuild(t){let e=this.rows[this.cursor],n=this.scope==="series"?x0(this.entries,this.userInput):Mf(this.entries,this.expanded,this.userInput),r=n.length>0?Q0(n)+1:0;if(this.rows=n.length>0?[{kind:"all",count:this.allCount(n)},...n]:[],t==="first")this.cursor=r;else if(t==="keep"){let i=e?.kind==="palette"?e.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(t){return this.scope==="series"?t.length:this.everyone(t).length}move(t){let e=this.cursor+t;if(e>=0&&e<this.rows.length)this.cursor=e;this.sync()}toggle(t){if(this.expanded.has(t))this.expanded.delete(t);else this.expanded.add(t);this.rebuild("clamp")}fold(t){if(this.userInput||this.scope==="series")return;let e=this.rows[this.cursor];if(e?.kind==="group"){if(t!==e.expanded)this.toggle(e.name)}else if(e?.kind==="palette"&&!t&&!e.entry.default){let n=e.entry.group;if(this.expanded.delete(n),this.rebuild("clamp"),this.cursor=this.rows.findIndex((r)=>r.kind==="group"&&r.name===n),this.cursor===-1)this.cursor=0;this.sync()}}renderRow(t,e){let n=e?"▶ ":" ";if(t.kind==="all"){let o=this.everyone(this.rows).every((c)=>this.picked.has(c.name))?"● ":"○ ",s=`(${t.count})`;return`${n}${o}select all ${this.color?`${bn}${s}${ne}`:s}`}if(t.kind==="group"&&this.scope==="series"){let o=this.pickedIn(t.name)===t.count?"● ":"○ ",s=t.name.padEnd(this.seriesPad),c=`(${t.count})${t.native?` ${t.native}`:""}`;if(!this.color)return`${n}${o}${s} ${c}`;let u=t.lead;return`${n}${o}${s} ${Qo(u.background,u.cursor)}${Zo(u.ansi.slice(1,7),u.background)} ${bn}${c}${ne}`}if(t.kind==="group"){let o=t.expanded?"▾":"▸",s=this.rows[this.cursor],c=s?.kind==="palette"&&s.entry.group===t.name?s.entry:void 0,u=this.color?e?`${yf} ${t.name} ${ne}`:c?`${yf}${Ef(c.cursor)} ${t.name} ${ne}`:` ${Z0}${t.name}${ne} `:e?`[${t.name}]`:` ${t.name}`,h=this.color?kf("●",t.lead.selection):"",a=`${this.pickedIn(t.name)}/${t.count}`,f=this.color?` ${bn}(${a})${ne}`:` (${a})`,l=t.native?this.color?` ${bn}${t.native}${ne}`:` ${t.native}`:"";return`${o}${u}${h}${f}${l}`}let r=t.entry,i=this.picked.has(r.name)?"● ":"○ ";if(!this.color)return` ${n}${i}${r.name.padEnd(13)} ● · ${r.ansiSource}`;return` ${n}${i}${r.name.padEnd(13)} ${Qo(r.background,r.cursor)}${Zo(r.ansi.slice(1,7),r.background)} ${bn}${r.ansiSource}${ne}`}draw(){let t=(g)=>this.color?`${bn}${g}${ne}`:g,e=(g)=>this.color?`${q0}${g}${ne}`:g,n=this.scope==="series"?"series":"catalog";if(this.state==="submit")return`${t("◇")} ${n} ${t(`· ${this.pickedCount()} picked`)}`;if(this.state==="cancel")return`${t(`◇ ${n} · cancelled`)}`;let r=this.userInput.trim(),i=this.scope==="series"?this.series.length:this.named.length,o=this.scope==="series"?this.rows.filter((g)=>g.kind==="group").length:r?this.named.filter((g)=>pi(g,r)).length:i,s=`${e("◆")} ${n} ${t(`(${o}/${i} · ${this.pickedCount()} picked)`)}`,c=`${e("│")} ${this.userInput?`⌕ ${this.userInput}_`:t(`⌕ 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 u=this.rows.slice(this.top,this.top+this.maxItems),h=u.length>0?u.map((g,$)=>`${e("│")} ${this.renderRow(g,this.top+$===this.cursor)}`):[`${e("│")} ${t(`no ${this.scope==="series"?"series":"palettes"} match '${this.userInput}'`)}`];while(h.length<this.maxItems)h.push(e("│"));let a=this.rows.length-this.top-u.length,f=a>0?`${e("│")} ${t(`↓ ${a} more`)}`:e("│"),l=this.scope==="series"?"":" · ←→ fold",p=this.scope==="series"?"continue":"install",b=this.state==="error"?`${e("└")} ${this.color?`${_0}${this.error}${ne}`:this.error}`:`${e("└")} ${t(`↑↓ move${l} · space pick · type to filter · enter ${p} · esc cancel`)}`;return[s,c,...h,f,b].join(`
205
- `)}}function wr(t,e,n,r){let i=Ne(),o=Boolean(ee(n))!==Boolean(ee(r)),s=o?cr(r,i):r;return ar(t,e,s),hr(t,s),o&&Qe(s,i)&&i.running()}function _o(t){console.log(`
206
- ${t} palettes installed — open a new tab, or reload your terminal config`)}function Sf(t){let e=Pt(),n=Ut(e),r=Wt(e),i=t.filter((c)=>r.palettes.includes(c)),o=t.filter((c)=>!r.palettes.includes(c));if(o.length===0){console.log(`already installed: ${i.join(", ")}`);return}let s={...r,palettes:[...r.palettes,...o]};wr(e,n,r,s);for(let c of o)console.log(` + ${c}`);_o(s.palettes.length)}function If(t){let e=Pt(),n=Ut(e),r=Wt(e),i=t.filter((s)=>r.palettes.includes(s));if(i.length===0){console.log(`not installed: ${t.join(", ")}`);return}let o={...r,palettes:r.palettes.filter((s)=>!i.includes(s))};wr(e,n,r,o),yo(e,n,r.terminals,i);for(let s of i)console.log(` - ${s}`);_o(o.palettes.length)}function Ff(t){let e=Pt(),n=Ut(e),r=Wt(e);if(!r.palettes.includes(t))throw Error(`${t} is not installed — \`ttheme add ${t}\` first`);let{off:i,...o}=r,s=Ne(),c=cr({...o,startup:t},s);ar(e,n,c),hr(e,c);let u=Qe(c,s);console.log(Of(t,c.terminals,u&&s.running()).join(`
207
- `))}function Nf(){let t=Pt(),e=Wt(t),n=un(e);if(!n)throw Error("no palettes installed — `ttheme browse` picks some");if(!e.off){console.log(`already on · ${n}`);return}let{off:r,...i}=e,o=wr(t,Ut(t),e,i);console.log(Of(n,i.terminals,o).join(`
208
- `))}function Rf(){let t=Pt(),e=Wt(t);if(e.off){console.log("already off");return}let n=wr(t,Ut(t),e,{...e,off:!0}),r=un(e);if(console.log(`off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`),n)console.log("iterm2 new tabs open on your own profile once iTerm2 restarts")}function Of(t,e,n){let r=e.filter((o)=>o!=="iterm2"),i=r.length>0?[`default ${t} · ${r.join(", ")} open new tabs with it once their config reloads`]:[];if(e.includes("iterm2"))i.push(n?'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 ${t} · no terminal is wired to open with it — \`ttheme init\` wires one`]}function Hf(t,e=!1){let n=Pt(),r=Ut(n),i=new Set(Wt(n).palettes),o=Ge(r.palettes),s=_n(t?Rh(o,t):o);if(e){let u=s.map((h)=>({name:h.name,group:h.group,installed:i.has(h.name)}));console.log(JSON.stringify(u,null,2));return}let c=Math.max(...s.map((u)=>u.name.length),0);for(let u of s)console.log(` ${i.has(u.name)?"●":"○"} ${u.name.padEnd(c)} ${u.group}`);if(process.stdout.isTTY){let u=t?`${s.length} of ${o.length}`:`${o.length}`;console.log(`
209
- ${u} palettes — ${s.filter((h)=>i.has(h.name)).length} installed`)}}async function jf(){let t=Pt(),e=C0(Br(t))?Ut(t).palettes.length:0,n=await Fh(Sh);Dr(t,n);let r=n.palettes.length-e;console.log(`catalog ${n.version} — ${n.palettes.length} palettes${r>0?` (+${r})`:""}`)}async function Co(t,e,n,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:_n(t.palettes),o=process.stdout.isTTY===!0&&!pr(),s=o?await $f():new Map,c=new qo({entries:i,scope:n,installed:e,required:r,color:!pr(),fx:vf(process.env.TTHEME_FX),onFocus:o?(h)=>process.stdout.write(mi(h)):void 0}),u=await c.prompt();if(process.stdout.write(bf(s)),Oe(u))return;return t.palettes.filter((h)=>c.picked.has(h.name)).map((h)=>h.name)}async function Pf(){let t=Pt(),e=Ut(t),n=Wt(t),r=await Co(e,n.palettes,"palette");if(!r){console.log("nothing changed");return}let i=n.palettes.filter((c)=>!r.includes(c)),o=r.filter((c)=>!n.palettes.includes(c));if(o.length===0&&i.length===0){console.log("nothing changed");return}let s={...n,palettes:r};wr(t,e,n,s),yo(t,e,n.terminals,i);for(let c of o)console.log(` + ${c}`);for(let c of i)console.log(` - ${c}`);_o(s.palettes.length)}function ew(t,e,n){for(let r of B0(e))t.push({from:kt(e,r),to:kt(n,r)})}function Uf(t){return JSON.parse(kn(kt(t,"dist","manifest.json"),"utf8"))}function Lf(t,e){let n=kt(e.configHome,"ttheme"),r=[{from:kt(e.root,"bin","ttheme.js"),to:kt(n,"ttheme.js")},{from:kt(e.root,"bin","ttheme.js.map"),to:kt(n,"ttheme.js.map")},{from:kt(e.root,"shell","ttheme.zsh"),to:kt(n,"ttheme.zsh")},{from:kt(e.root,"shell","launch-tab.zsh"),to:kt(n,"launch-tab.zsh"),executable:!0}];ew(r,kt(e.root,"shell","adapters"),kt(n,"adapters"));let i=[{file:kt(e.zdotdir,".zshrc"),block:qu(n)}],o=kt(n,"config.zsh"),s=Vu(qt(o)?kn(o,"utf8"):""),c={file:o,content:s},u=[];if(t.terminals.includes("alacritty")){let f=Ze(e.configHome);if(qt(f)&&zn(kn(f,"utf8"),void 0)===void 0)u.push(`${f} already imports files under [general] — ttheme left it alone; add ${kt(e.configHome,"alacritty","themes")}/<palette>.toml to that import list yourself`)}if(t.terminals.includes("wezterm")){let f=cn(e.configHome,e.home);if(qt(f)&&Bn(kn(f,"utf8"),"")===void 0)u.push(`${f} has no \`return config\` line — ttheme left it alone; call \`dofile("${kt(n,"wezterm.lua")}")(config)\` from it yourself`)}let h=t.terminals.includes("windows-terminal");if(h&&!e.wtHome)u.push("windows terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself");if(t.terminals.includes("warp"))u.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 a={terminals:t.terminals,palettes:t.palettes,...h&&e.wtHome?{wtHome:e.wtHome}:{},...h&&e.wtProfile?{wtProfile:e.wtProfile}:{},...t.off?{off:!0}:{}};return u.push(...oa(e.configHome,t.terminals,e.home)),{home:e.home,copies:r,edits:i,settings:c,catalog:Uf(e.root),installed:a,notes:u}}function nw(t){try{return Wt(t).itermBase}catch{return}}function Tf(t,e=Ne()){for(let o of t.copies)if(Xo($n(o.to),{recursive:!0}),Gf(o.to,{force:!0}),Gf(`${o.to}.zwc`,{force:!0}),z0(o.from,o.to),o.executable)Y0(o.to,493);Xo($n(t.settings.file),{recursive:!0}),D0(t.settings.file,t.settings.content);let n=$n($n(t.settings.file)),r=nw(n),i=cr(r?{...t.installed,itermBase:r}:t.installed,e);Dr(n,t.catalog),hr(n,i),ar(n,t.catalog,i,t.home);for(let o of t.edits){Xo($n(o.file),{recursive:!0});let s=qt(o.file)?kn(o.file,"utf8"):"";Gn(o.file,Xn(s,o.block))}return Qe(i,e)}class He extends Error{}function Vo(t){if(Oe(t))throw mn("nothing changed"),new He;return t}function Kf(t){return Jr.filter((e)=>{if(e==="iterm2")return process.platform==="darwin";if(e==="windows-terminal")return t.wtHome!==void 0;return e!=="warp"||process.platform!=="win32"})}function rw(t,e){if(t==="iterm2")return qt(kt(e.home,"Library","Application Support","iTerm2"));if(t==="windows-terminal")return e.wtHome!==void 0;if(t==="warp")return qt($n(ii(e.home)));if(t==="wezterm")return qt(kt(e.configHome,"wezterm"))||qt(kt(e.home,".wezterm.lua"));return qt(kt(e.configHome,t))}function iw(){if(process.platform==="win32")return process.env.LOCALAPPDATA;if(!process.env.WSL_DISTRO_NAME)return;let t=(e,n)=>X0(e,n,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();try{return t("wslpath",["-u",t("cmd.exe",["/d","/c","echo %LOCALAPPDATA%"])])||void 0}catch{return}}async function ow(t,e,n){return Vo(await df({message:"wire which terminals?",options:Kf(n).map((r)=>({value:r,hint:r===t?"detected":void 0})),initialValues:e,required:!0}))}function Af(t){let e=[...t.copies.filter((n)=>!qt(n.to)).map((n)=>n.to),...qt(t.settings.file)?[]:[t.settings.file],...t.edits.filter((n)=>!kn(n.file,"utf8").includes("# ttheme begin")).map((n)=>n.file)];if(e.length>0)throw Error(`init left gaps:
203
+ ${S("gray",f+lf.repeat(u+2)+T0)}
204
+ `)};var O1={light:dt("─","-"),heavy:dt("━","="),block:dt("█","#")};var H1=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Enter:")} confirm`];var j1=`${S("gray",Mt)} `;import{existsSync as z0}from"node:fs";import{openSync as Q0,writeSync as Z0}from"node:fs";import{ReadStream as q0}from"node:tty";var $f=["10","11","12","17",...Array.from({length:16},(t,e)=>`4;${e}`)];function pr(t=process.env){return Boolean(t.NO_COLOR)||t.TERM==="dumb"}function mi(t){return[`\x1B]11;${t.background}\x1B\\`,`\x1B]10;${t.foreground}\x1B\\`,`\x1B]12;${t.cursor}\x1B\\`,`\x1B]17;${t.selection}\x1B\\`,...t.ansi.map((e,n)=>`\x1B]4;${n};${e}\x1B\\`)].join("")}function kf(t){let e=new Map;for(let n of t.split("\x1B")){let r=n.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,o]=r??[];if(i&&o)e.set(i,o)}return e}function Ef(t){return[...t].map(([e,n])=>`\x1B]${e};${n}\x1B\\`).join("")}async function yf(){let t,e;try{t=Q0("/dev/tty","r+"),e=new q0(t),e.setRawMode(!0)}catch{return new Map}try{Z0(t,$f.map((r)=>`\x1B]${r};?\x1B\\`).join(""));let n="";return await new Promise((r)=>{let i=setTimeout(r,120);e.on("data",(o)=>{if(n+=o.toString(),kf(n).size>=$f.length)clearTimeout(i),r()})}),kf(n)}finally{e.setRawMode(!1),e.destroy()}}function bn(t){let e=t.replace("#","");return[e.slice(0,2),e.slice(2,4),e.slice(4,6)].map((n)=>Number.parseInt(n,16)).join(";")}function vf(t,e){return`\x1B[48;2;${bn(e)}m ${t} \x1B[0m`}function _o(t,e){return`\x1B[48;2;${bn(t)};38;2;${bn(e)}m ● \x1B[0m`}function Mf(t){return`\x1B[38;2;${bn(t)}m`}function Co(t,e){return`\x1B[48;2;${bn(e)}m${t.map((n)=>`\x1B[38;2;${bn(n)}m▄`).join("")} \x1B[0m`}function pi(t,e){let n=e.toLowerCase();return[t.name,t.group,t.native??""].some((r)=>r.toLowerCase().includes(n))}function If(t,e,n){let r=n.trim(),i=[],o=new Set;for(let s of t){if(s.default||o.has(s.group))continue;o.add(s.group);let c=t.filter((a)=>!a.default&&a.group===s.group),u=r?c.filter((a)=>pi(a,r)):c;if(r&&u.length===0)continue;let h=r.length>0||e.has(s.group);if(i.push({kind:"group",name:s.group,native:s.native,lead:c.find((a)=>a.lead)??s,expanded:h,count:u.length}),h)i.push(...u.map((a)=>({kind:"palette",entry:a})))}return i}function _0(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||pi(i,n))).map((i)=>i.group));return If(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function C0(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}var re="\x1B[0m",$n="\x1B[2m",X0="\x1B[1m",Sf="\x1B[1;7m",V0="\x1B[36m",Y0="\x1B[33m";function Ff(t){return t==="decode"||t==="glitch"?t:"typewriter"}class Xo extends $e{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(t){super({render:()=>this.draw(),input:t.input,output:t.output,validate:t.required?()=>this.picked.size===0?`pick at least one ${this.scope}`:void 0:void 0},!0);this.entries=t.entries,this.scope=t.scope??"palette",this.picked=new Set(t.installed??[]),this.named=t.entries.filter((n)=>!n.default),this.series=[...new Set(this.named.map((n)=>n.group))],this.seriesPad=Math.max(0,...this.series.map((n)=>n.length)),this.maxItems=t.maxItems??12,this.color=t.color??!0,this.fx=t.fx??"typewriter",this.onFocus=t.onFocus,this.rollExample();let e=setInterval(()=>{this.rollExample(),this.fxStep=8,this.output.emit("resize")},3000);e.unref?.(),this.once("finalize",()=>{clearInterval(e),clearTimeout(this.fxTimer)}),this.rebuild("first"),this.on("cursor",(n)=>{if(n==="up")this.move(-1);else if(n==="down")this.move(1);else if(n==="left")this.fold(!1);else if(n==="right")this.fold(!0)}),this.on("userInput",(n)=>{if(n!==this.lastInput)this.lastInput=n,this.rebuild("keep")}),this.on("key",(n,r)=>{if(r?.name==="space")this.pick(this.rows[this.cursor])})}_isActionKey(t){return t==="\t"||t===" "}members(t){let e=this.scope==="palette"?this.userInput.trim():"";return this.named.filter((n)=>n.group===t&&(e===""||pi(n,e)))}everyone(t){return t.flatMap((e)=>e.kind==="group"?this.members(e.name):[])}pick(t){let e=t?.kind==="palette"?[t.entry.name]:t?.kind==="group"?this.members(t.name).map((r)=>r.name):t?.kind==="all"?this.everyone(this.rows).map((r)=>r.name):[];if(e.length===0)return;let n=e.some((r)=>!this.picked.has(r));for(let r of e)if(n)this.picked.add(r);else this.picked.delete(r)}pickedIn(t){return this.members(t).filter((e)=>this.picked.has(e.name)).length}pickedCount(){if(this.scope==="palette")return this.picked.size;return this.series.filter((t)=>this.members(t).every((e)=>this.picked.has(e.name))).length}rollExample(){let t=this.named[Math.floor(Math.random()*this.named.length)],e=this.series[Math.floor(Math.random()*this.series.length)];if(!t||!e){this.example="";return}let n=`${t.name} | ${e}`;this.example=n.length>30?`${n.slice(0,29)}…`:n,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 t=Math.floor(this.example.length*(8-this.fxStep)/8);if(this.fx==="typewriter")return`${this.example.slice(0,t)}▏`;let e=this.fx==="decode"?"abcdefghijklmnopqrstuvwxyz":"▓▒░#*+=<>?/-_",n=this.fx==="decode"?(r)=>!/[a-z0-9]/i.test(r):(r)=>r===" ";return[...this.example].map((r,i)=>i+(i*7+this.fxSeed)%3<t||n(r)?r:e[Math.floor(Math.random()*e.length)]??r).join("")}sync(){let t=this.rows[this.cursor],e=t?.kind==="palette"?t.entry:t?.kind==="group"&&this.scope==="series"?t.lead:void 0;if(e&&e.name!==this.lastFocused)this.lastFocused=e.name,this.onFocus?.(e)}rebuild(t){let e=this.rows[this.cursor],n=this.scope==="series"?_0(this.entries,this.userInput):If(this.entries,this.expanded,this.userInput),r=n.length>0?C0(n)+1:0;if(this.rows=n.length>0?[{kind:"all",count:this.allCount(n)},...n]:[],t==="first")this.cursor=r;else if(t==="keep"){let i=e?.kind==="palette"?e.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(t){return this.scope==="series"?t.length:this.everyone(t).length}move(t){let e=this.cursor+t;if(e>=0&&e<this.rows.length)this.cursor=e;this.sync()}toggle(t){if(this.expanded.has(t))this.expanded.delete(t);else this.expanded.add(t);this.rebuild("clamp")}fold(t){if(this.userInput||this.scope==="series")return;let e=this.rows[this.cursor];if(e?.kind==="group"){if(t!==e.expanded)this.toggle(e.name)}else if(e?.kind==="palette"&&!t&&!e.entry.default){let n=e.entry.group;if(this.expanded.delete(n),this.rebuild("clamp"),this.cursor=this.rows.findIndex((r)=>r.kind==="group"&&r.name===n),this.cursor===-1)this.cursor=0;this.sync()}}renderRow(t,e){let n=e?"▶ ":" ";if(t.kind==="all"){let o=this.everyone(this.rows).every((c)=>this.picked.has(c.name))?"● ":"○ ",s=`(${t.count})`;return`${n}${o}select all ${this.color?`${$n}${s}${re}`:s}`}if(t.kind==="group"&&this.scope==="series"){let o=this.pickedIn(t.name)===t.count?"● ":"○ ",s=t.name.padEnd(this.seriesPad),c=`(${t.count})${t.native?` ${t.native}`:""}`;if(!this.color)return`${n}${o}${s} ${c}`;let u=t.lead;return`${n}${o}${s} ${_o(u.background,u.cursor)}${Co(u.ansi.slice(1,7),u.background)} ${$n}${c}${re}`}if(t.kind==="group"){let o=t.expanded?"▾":"▸",s=this.rows[this.cursor],c=s?.kind==="palette"&&s.entry.group===t.name?s.entry:void 0,u=this.color?e?`${Sf} ${t.name} ${re}`:c?`${Sf}${Mf(c.cursor)} ${t.name} ${re}`:` ${X0}${t.name}${re} `:e?`[${t.name}]`:` ${t.name}`,h=this.color?vf("●",t.lead.selection):"",a=`${this.pickedIn(t.name)}/${t.count}`,f=this.color?` ${$n}(${a})${re}`:` (${a})`,l=t.native?this.color?` ${$n}${t.native}${re}`:` ${t.native}`:"";return`${o}${u}${h}${f}${l}`}let r=t.entry,i=this.picked.has(r.name)?"● ":"○ ";if(!this.color)return` ${n}${i}${r.name.padEnd(13)} ● · ${r.ansiSource}`;return` ${n}${i}${r.name.padEnd(13)} ${_o(r.background,r.cursor)}${Co(r.ansi.slice(1,7),r.background)} ${$n}${r.ansiSource}${re}`}draw(){let t=(d)=>this.color?`${$n}${d}${re}`:d,e=(d)=>this.color?`${V0}${d}${re}`:d,n=this.scope==="series"?"series":"catalog";if(this.state==="submit")return`${t("◇")} ${n} ${t(`· ${this.pickedCount()} picked`)}`;if(this.state==="cancel")return`${t(`◇ ${n} · 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)=>pi(d,r)).length:i,s=`${e("◆")} ${n} ${t(`(${o}/${i} · ${this.pickedCount()} picked)`)}`,c=`${e("│")} ${this.userInput?`⌕ ${this.userInput}_`:t(`⌕ 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 u=this.rows.slice(this.top,this.top+this.maxItems),h=u.length>0?u.map((d,$)=>`${e("│")} ${this.renderRow(d,this.top+$===this.cursor)}`):[`${e("│")} ${t(`no ${this.scope==="series"?"series":"palettes"} match '${this.userInput}'`)}`];while(h.length<this.maxItems)h.push(e("│"));let a=this.rows.length-this.top-u.length,f=a>0?`${e("│")} ${t(`↓ ${a} more`)}`:e("│"),l=this.scope==="series"?"":" · ←→ fold",m=this.scope==="series"?"continue":"install",b=this.state==="error"?`${e("└")} ${this.color?`${Y0}${this.error}${re}`:this.error}`:`${e("└")} ${t(`↑↓ move${l} · space pick · type to filter · enter ${m} · esc cancel`)}`;return[s,c,...h,f,b].join(`
205
+ `)}}function wr(t,e,n,r){let i=be(),o=Boolean(zt(n))!==Boolean(zt(r)),s=o?ur(r,i):r;return fr(t,e,s),ar(t,s),o&&Qe(s,i)&&i.running()}function Vo(t){console.log(`
206
+ ${t} palettes installed — open a new tab, or reload your terminal config`)}function Nf(t){let e=Pt(),n=Ut(e),r=Kt(e),i=t.filter((c)=>r.palettes.includes(c)),o=t.filter((c)=>!r.palettes.includes(c));if(o.length===0){console.log(`already installed: ${i.join(", ")}`);return}let s={...r,palettes:[...r.palettes,...o]};wr(e,n,r,s);for(let c of o)console.log(` + ${c}`);Vo(s.palettes.length)}function Rf(t){let e=Pt(),n=Ut(e),r=Kt(e),i=t.filter((s)=>r.palettes.includes(s));if(i.length===0){console.log(`not installed: ${t.join(", ")}`);return}let o={...r,palettes:r.palettes.filter((s)=>!i.includes(s))};wr(e,n,r,o),Mo(e,n,r.terminals,i);for(let s of i)console.log(` - ${s}`);Vo(o.palettes.length)}function Of(t){let e=Pt(),n=Ut(e),r=Kt(e);if(!r.palettes.includes(t))throw Error(`${t} is not installed — \`ttheme add ${t}\` first`);let{off:i,...o}=r,s=be(),c=ur({...o,startup:t},s);fr(e,n,c),ar(e,c);let u=Qe(c,s);console.log(Pf(t,c.terminals,u&&s.running()).join(`
207
+ `))}function Hf(){let t=Pt(),e=Kt(t),n=Ze(e);if(!n)throw Error("no palettes installed — `ttheme browse` picks some");if(!e.off){console.log(`already on · ${n}`);return}let{off:r,...i}=e,o=wr(t,Ut(t),e,i);console.log(Pf(n,i.terminals,o).join(`
208
+ `))}function jf(){let t=Pt(),e=Kt(t);if(e.off){console.log("already off");return}let n=wr(t,Ut(t),e,{...e,off:!0}),r=Ze(e);if(console.log(`off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`),n)console.log("iterm2 new tabs open on your own profile once iTerm2 restarts")}function Pf(t,e,n){let r=e.filter((o)=>o!=="iterm2"),i=r.length>0?[`default ${t} · ${r.join(", ")} open new tabs with it once their config reloads`]:[];if(e.includes("iterm2"))i.push(n?'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 ${t} · no terminal is wired to open with it — \`ttheme init\` wires one`]}function Gf(t,e=!1){let n=Pt(),r=Ut(n),i=new Set(Kt(n).palettes),o=Ge(r.palettes),s=Cn(t?Ph(o,t):o);if(e){let u=s.map((h)=>({name:h.name,group:h.group,installed:i.has(h.name)}));console.log(JSON.stringify(u,null,2));return}let c=Math.max(...s.map((u)=>u.name.length),0);for(let u of s)console.log(` ${i.has(u.name)?"●":"○"} ${u.name.padEnd(c)} ${u.group}`);if(process.stdout.isTTY){let u=t?`${s.length} of ${o.length}`:`${o.length}`;console.log(`
209
+ ${u} palettes — ${s.filter((h)=>i.has(h.name)).length} installed`)}}async function Lf(){let t=Pt(),e=z0(Br(t))?Ut(t).palettes.length:0,n=await Hh(Rh);Dr(t,n);let r=n.palettes.length-e;console.log(`catalog ${n.version} — ${n.palettes.length} palettes${r>0?` (+${r})`:""}`)}async function wi(t,e,n,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:Cn(t.palettes),o=process.stdout.isTTY===!0&&!pr(),s=o?await yf():new Map,c=new Xo({entries:i,scope:n,installed:e,required:r,color:!pr(),fx:Ff(process.env.TTHEME_FX),onFocus:o?(h)=>process.stdout.write(mi(h)):void 0}),u=await c.prompt();if(process.stdout.write(Ef(s)),Oe(u))return;return t.palettes.filter((h)=>c.picked.has(h.name)).map((h)=>h.name)}async function Tf(){let t=Pt(),e=Ut(t),n=Kt(t),r=await wi(e,n.palettes,"palette");if(!r){console.log("nothing changed");return}let i=n.palettes.filter((c)=>!r.includes(c)),o=r.filter((c)=>!n.palettes.includes(c));if(o.length===0&&i.length===0){console.log("nothing changed");return}let s={...n,palettes:r};wr(t,e,n,s),Mo(t,e,n.terminals,i);for(let c of o)console.log(` + ${c}`);for(let c of i)console.log(` - ${c}`);Vo(s.palettes.length)}function iw(t,e,n){for(let r of ew(e))t.push({from:wt(e,r),to:wt(n,r)})}function Jf(t){return JSON.parse(En(wt(t,"dist","manifest.json"),"utf8"))}function zo(t,e){let n=wt(e.configHome,"ttheme"),r=[{from:wt(e.root,"bin","ttheme.js"),to:wt(n,"ttheme.js")},{from:wt(e.root,"bin","ttheme.js.map"),to:wt(n,"ttheme.js.map")},{from:wt(e.root,"shell","ttheme.zsh"),to:wt(n,"ttheme.zsh")},{from:wt(e.root,"shell","launch-tab.zsh"),to:wt(n,"launch-tab.zsh"),executable:!0}];iw(r,wt(e.root,"shell","adapters"),wt(n,"adapters"));let i=[{file:wt(e.zdotdir,".zshrc"),block:Vu(n)}],o=wt(n,"config.zsh"),s=Du(_t(o)?En(o,"utf8"):""),c={file:o,content:s},u=[];if(t.terminals.includes("alacritty")){let f=qe(e.configHome);if(_t(f)&&Bn(En(f,"utf8"),void 0)===void 0)u.push(`${f} already imports files under [general] — ttheme left it alone; add ${wt(e.configHome,"alacritty","themes")}/<palette>.toml to that import list yourself`)}if(t.terminals.includes("wezterm")){let f=hn(e.configHome,e.home);if(_t(f)&&Dn(En(f,"utf8"),"")===void 0)u.push(`${f} has no \`return config\` line — ttheme left it alone; call \`dofile("${wt(n,"wezterm.lua")}")(config)\` from it yourself`)}let h=t.terminals.includes("windows-terminal");if(h&&!e.wtHome)u.push("windows terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself");if(t.terminals.includes("warp"))u.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 a={terminals:t.terminals,palettes:t.palettes,...h&&e.wtHome?{wtHome:e.wtHome}:{},...h&&e.wtProfile?{wtProfile:e.wtProfile}:{},...t.off?{off:!0}:{}};return u.push(...ha(e.configHome,t.terminals,e.home)),{home:e.home,copies:r,edits:i,settings:c,catalog:Jf(e.root),installed:a,notes:u}}function ow(t){try{return Kt(t)}catch{return}}function sw(t,e){let n=zo({terminals:t.terminals,palettes:t.palettes,off:t.off},e),r=new Set(n.catalog.palettes.map((a)=>a.name)),i=t.palettes.filter((a)=>r.has(a)),o=t.palettes.filter((a)=>!r.has(a)),{startup:s,...c}=t,u={...c,palettes:i,...s&&i.includes(s)?{startup:s}:{}},h=o.length>0?[`dropped ${o.join(", ")} — no longer in the catalog`,...n.notes]:n.notes;return{...n,installed:u,notes:h}}function cw(t){try{return Kf(process.execPath,[wt(t,"ttheme","ttheme.js"),"--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function xf(t){let e=zt(t);return[t.terminals.join(", "),`${t.palettes.length} palettes`,e?`default ${e}`:"no default — ttheme is off"].join(" · ")}function uw(t){try{return Kt(t).itermBase}catch{return}}function Bo(t,e=be()){for(let o of t.copies)if(Yo(kn(o.to),{recursive:!0}),Af(o.to,{force:!0}),Af(`${o.to}.zwc`,{force:!0}),tw(o.from,o.to),o.executable)D0(o.to,493);Yo(kn(t.settings.file),{recursive:!0}),nw(t.settings.file,t.settings.content);let n=kn(kn(t.settings.file)),r=uw(n),i=ur(r?{...t.installed,itermBase:r}:t.installed,e);Dr(n,t.catalog),ar(n,i),fr(n,t.catalog,i,t.home);for(let o of t.edits){Yo(kn(o.file),{recursive:!0});let s=_t(o.file)?En(o.file,"utf8"):"";Ln(o.file,Vn(s,o.block))}return Qe(i,e)}class He extends Error{}function bi(t){if(Oe(t))throw wn("nothing changed"),new He;return t}function Wf(t){return Jr.filter((e)=>{if(e==="iterm2")return process.platform==="darwin";if(e==="windows-terminal")return t.wtHome!==void 0;return e!=="warp"||process.platform!=="win32"})}function hw(t,e){if(t==="iterm2")return _t(wt(e.home,"Library","Application Support","iTerm2"));if(t==="windows-terminal")return e.wtHome!==void 0;if(t==="warp")return _t(kn(ii(e.home)));if(t==="wezterm")return _t(wt(e.configHome,"wezterm"))||_t(wt(e.home,".wezterm.lua"));return _t(wt(e.configHome,t))}function aw(){if(process.platform==="win32")return process.env.LOCALAPPDATA;if(!process.env.WSL_DISTRO_NAME)return;let t=(e,n)=>Kf(e,n,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();try{return t("wslpath",["-u",t("cmd.exe",["/d","/c","echo %LOCALAPPDATA%"])])||void 0}catch{return}}async function fw(t,e,n){return bi(await bf({message:"wire which terminals?",options:Wf(n).map((r)=>({value:r,hint:r===t?"detected":void 0})),initialValues:e,required:!0}))}function Do(t){let e=[...t.copies.filter((n)=>!_t(n.to)).map((n)=>n.to),..._t(t.settings.file)?[]:[t.settings.file],...t.edits.filter((n)=>!En(n.file,"utf8").includes("# ttheme begin")).map((n)=>n.file)];if(e.length>0)throw Error(`init left gaps:
210
210
  ${e.join(`
211
- `)}`)}function Jf(t,e){return[...new Set(t.palettes.filter((n)=>e.includes(n.name)).map((n)=>n.group))]}function sw(t,e){let n=t.palettes.find((i)=>i.name===ee(e)),r=process.stdout.isTTY===!0&&!pr()&&!process.env.TMUX&&Wr(process.env)!=="warp";if(!n||!r)return!1;return process.stdout.write(mi(n)),!0}function cw(t,e){let n=ee(t);if(!n)return["default none — new tabs keep the terminal colors",`turn on \`ttheme on\` wears ${un(t)}`];return[`default ${n}${e?" — this tab wears it already":""}`,"change it `ttheme preview`, enter on a palette, then default"]}function uw(t){V0("zsh",["-c",'source "$1" && __tt_preview init',"zsh",kt(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function hw(t,e,n,r){let i=Jf(t.catalog,e.palettes);pn([`${i.join(", ")} (${e.palettes.length})`,...cw(t.installed,n)].join(`
212
- `),`installed ${e.palettes.length} palettes`);let o=["exec zsh the ttheme command in this tab"];if(e.terminals.includes("ghostty"))o.push("restart ghostty new tabs pick up its config");if(e.terminals.includes("kitty"))o.push("new kitty window pictures follow it — kitty reloads its colors by itself");if(e.terminals.includes("alacritty"))o.push("alacritty reloads its config by itself");if(e.terminals.includes("wezterm"))o.push("wezterm reloads its config by itself");if(e.terminals.includes("windows-terminal"))o.push("windows terminal reloads its settings by itself");if(e.terminals.includes("iterm2"))o.push(...aw(ee(t.installed),r));pn([...o,...t.notes].join(`
213
- `),"next"),mf("done")}function aw(t,e){let n=['iterm2 profiles a "ttheme · <palette>" per palette in Settings › Profiles'];if(t)n.push(e?`restart iterm2 new tabs open on "ttheme · default", which wears ${t}`:`iterm2 default "ttheme · default" wears ${t} and follows \`ttheme default\``);return n}function fw(t,e){let n=[`placed ${t.copies.length} files`,`settings in ${t.settings.file} — edit later with \`ttheme config\``,...t.edits.map((r)=>`wired ${r.file}`)];if(e.terminals.includes("ghostty"))n.push("restart ghostty to pick up its config");if(e.terminals.includes("kitty"))n.push("kitty reloads its colors by itself; pictures show in kitty windows opened from now on");if(e.terminals.includes("alacritty"))n.push("alacritty reloads its config by itself");if(e.terminals.includes("wezterm")||e.terminals.includes("windows-terminal"))n.push("wezterm and windows terminal reload their config by themselves");if(e.terminals.includes("iterm2"))n.push('iterm2 gets a "ttheme · <palette>" profile per palette under Settings › Profiles');n.push(...t.notes),n.push("no palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"),console.log(n.join(`
214
- `))}async function Wf(t={}){let e=kt(import.meta.dirname,"..");if(!qt(kt(e,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!qt(kt(e,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await qr()}let n=tw(),r=Pt(),i=process.env.ZDOTDIR??n,o=iw(),s=process.env.WT_PROFILE_ID,c={root:e,home:n,configHome:r,zdotdir:i,...o?{wtHome:o}:{},...s?{wtProfile:s}:{}},u=Wr(process.env),h=Kf(c).filter((d)=>d===u||rw(d,c));if(!t.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");if(t.yes){if(h.length===0)throw Error("no supported terminal detected — run this inside ghostty, kitty, alacritty, wezterm, iterm2, windows terminal or warp");let d={terminals:h,palettes:[]},j=Lf(d,c);Tf(j),Af(j),fw(j,d);return}di("ttheme init");let a=await ow(u,h,c),f=Uf(e),l=await Co(f,[],"series",!0);if(!l)throw mn("nothing changed"),new He;let p=l[0],b=l.length>1&&Wr(process.env)!=="warp",g=Vo(await mr({message:b?"pick a default palette in ttheme preview once installed?":`wear ${p} in every tab?`})),$={terminals:a,palettes:l,off:!g},y=Lf($,c);if(pn([`install ${l.length} palettes — ${Jf(y.catalog,l).join(", ")}`,`copy ${y.copies.length} files under ${r}`,`write ${y.settings.file}`,...y.edits.map((d)=>`edit ${d.file} — a ttheme block: source ttheme.zsh`),...ia(r,y.installed,n),"each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out",g?b?`open ttheme preview — every tab wears the palette picked there, ${p} until then`:`paint every tab with ${p}, this one now`:"leave the terminal colors as they are — `ttheme on` wears a palette later",...a.includes("iterm2")&&g?['make "ttheme · default" the iTerm2 default profile']:[]].join(`
215
- `),`wiring ${a.join(", ")}`),!Vo(await mr({message:"apply these changes?"})))throw mn("nothing changed"),new He;let F=Ne(),E=Tf(y,F);if(Af(y),g&&b)uw(r);let v=Wt(r);hw({...y,installed:v},$,sw(y.catalog,v),E&&F.running())}import{existsSync as Yo,readdirSync as lw,readFileSync as gw,rmSync as dw,utimesSync as mw}from"node:fs";import{homedir as pw}from"node:os";import{dirname as ww,join as En}from"node:path";function zo(t){return Yo(t)?gw(t,"utf8"):""}function bw(t){try{return Wt(t)}catch{return}}function $w(t,e){let n=oi(e,t),r=zo(n);if(!xr(r)?.includes(`path = "${ut("")}`))return;return{file:n,content:Qr(r,zo(ko(t))||$o)}}function kw(t){let{home:e,configHome:n}=t,r=bw(n),i=[],o=(h,a)=>{let f=zo(h),l=a(f);if(l!==f)i.push({file:h,content:l})};o(En(t.zdotdir,".zshrc"),Vn),o(xe("ghostty",n),Vn),o(xe("kitty",n),Vn),o(Ze(n),Vn),o(cn(n,e),th);let s=$w(n,e);if(s)i.push(s);let c=[];for(let h of["ghostty","kitty","alacritty","wezterm","warp"]){let a=We(h,n,e);if(Yo(a))c.push(...lw(a).flatMap((f)=>f.startsWith(ut(""))?[En(a,f)]:[]))}let u=[ur(e),...r?.wtHome?[ww(si(r.wtHome))]:[],En(n,"ttheme"),t.cacheDir,t.stateDir];return c.push(...u.filter((h)=>Yo(h))),{edits:i,removals:c,touches:r?.wtHome?Eo(r.wtHome):[],...r?{state:r}:{}}}function Ew(t,e=Ne()){let n=[];for(let{file:i,content:o}of t.edits){let s=Us(i,o);n.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(t.state&&Qe({...t.state,off:!0},e))n.push("gave iTerm2 its own default profile back — it takes it at its next start");for(let i of t.removals)dw(i,{recursive:!0,force:!0});if(t.removals.length>0)n.push(`deleted ${t.removals.length} files and folders ttheme wrote`);let r=new Date;for(let i of t.touches)mw(i,r,r);return n}function yw(){let t=pw();return{home:t,configHome:Pt(),zdotdir:process.env.ZDOTDIR??t,cacheDir:Ur(),stateDir:En(process.env.XDG_STATE_HOME??En(t,".local","state"),"ttheme")}}async function xf(t=!1){let e=yw(),n=kw(e);if(n.edits.length===0&&n.removals.length===0){console.log("nothing of ttheme is installed");return}if(!t){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=En(e.configHome,"ttheme");di("ttheme uninstall"),pn([...n.edits.map((o)=>`take ttheme out of ${o.file}`),...n.removals.map((o)=>o===r?`delete ${o} — settings, pins and every installed picture`:`delete ${o}`)].join(`
216
- `),"uninstall");let i=await mr({message:"remove ttheme?"});if(Oe(i)||!i)throw mn("nothing changed"),new He}for(let r of Ew(n))console.log(r);console.log("open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}var vw={default:([t])=>Ff(t),on:()=>Nf(),off:()=>Rf(),browse:()=>Pf(),list:([t],{json:e})=>Hf(t,e),add:(t)=>Sf(t),remove:(t)=>If(t),update:()=>jf(),init:(t,{yes:e})=>Wf({yes:e}),uninstall:(t,{yes:e})=>xf(e),build:(t,{only:e})=>qr({only:e}),find:([t])=>ja(t),image:([t,e])=>Pa(t,e)},qf=Kr.map((t)=>({...t,run:vw[t.name]}));class qe extends Error{verb;constructor(t,e){super(t);this.verb=e}}function Qf(t){let e=qf.find((n)=>n.name===t);if(!e)throw new qe(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function Sw(t,e){let n={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:o,multiple:s}]of Object.entries(t.flags??{}))n[r]={type:i,multiple:s===!0,...o?{short:o}:{}};try{return Mw({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new qe(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function Iw(t){let[e,...n]=t;if(e===void 0)return{kind:"help",code:1};if(e==="-h"||e==="--help")return{kind:"help",code:0};if(e==="-V"||e==="--version")return{kind:"version"};if(e==="help")return n[0]===void 0?{kind:"help",code:0}:{kind:"help",verb:Qf(n[0]),code:0};let r=Qf(e),i=Sw(r,n);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[a,{choices:f}]of Object.entries(r.flags??{}))for(let l of[i.values[a]??[]].flat())if(f&&!f.includes(String(l)))throw new qe(`--${a} takes ${f.join(", ")} — not ${l}`,r);let o=i.positionals,s=r.args.filter((a)=>a.startsWith("<")).length,c=r.args.some((a)=>a.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(o.length<s)throw new qe(`missing ${r.args[o.length]}`,r);if(o.length>c)throw new qe(`too many arguments: ${o.slice(c).join(" ")}`,r);let{help:u,...h}=i.values;return{kind:"run",verb:r,args:o,flags:h}}function Bo(t){let e=Object.entries(t.flags??{}).map(([n,{value:r}])=>`[--${n}${r?` ${r}`:""}]`);return[t.name,...e,...t.args].join(" ")}function Zf(t,e=Math.max(...t.map(([n])=>n.length))){return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}var Fw=["tab","catalog","setup"];function Do(t){if(t){let i=Object.entries(t.flags??{}).map(([o,{short:s,value:c,about:u}])=>[`${s?`-${s}, `:""}--${o}${c?` ${c}`:""}`,u]);return[`Usage: ttheme ${Bo(t)}`,"",t.about,...i.length>0?["","Options:",...Zf(i)]:[]].join(`
217
- `)}let e=qf.filter((i)=>!i.hidden),n=(i)=>e.filter((o)=>o.section===i).map((o)=>[Bo(o),o.about]),r=Math.max(...e.map((i)=>Bo(i).length));return["Usage: ttheme <command>","",ie.description,"","Commands:",...Fw.flatMap((i,o)=>[...o>0?[""]:[],...Zf(n(i),r)]),"","Examples:"," 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 <command> --help describes one command · ttheme --version prints the version","https://kecan0406.github.io/ttheme"].join(`
218
- `)}async function _f(t){let e;try{let n=Iw(t);if(n.kind==="version")return console.log(ie.version),0;if(n.kind==="help"){if(n.code===0)console.log(Do(n.verb));else console.error(Do(n.verb));return n.code}if(e=n.verb,!n.verb.run)throw Error("runs in the shell layer — open a new tab once `ttheme init` has wired it");let r=await n.verb.run(n.args,n.flags);return typeof r==="number"?r:0}catch(n){if(n instanceof qe)return console.error(`ttheme${n.verb?` ${n.verb.name}`:""}: ${n.message}
211
+ `)}`)}function Qf(t,e){return[...new Set(t.palettes.filter((n)=>e.includes(n.name)).map((n)=>n.group))]}function lw(t,e){let n=t.palettes.find((i)=>i.name===zt(e)),r=process.stdout.isTTY===!0&&!pr()&&!process.env.TMUX&&xr(process.env)!=="warp";if(!n||!r)return!1;return process.stdout.write(mi(n)),!0}function gw(t,e){let n=zt(t);if(!n)return["default none — new tabs keep the terminal colors",`turn on \`ttheme on\` wears ${Ze(t)}`];return[`default ${n}${e?" — this tab wears it already":""}`,"change it `ttheme preview`, enter on a palette, then default"]}function dw(t){B0("zsh",["-c",'source "$1" && __tt_preview init',"zsh",wt(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function mw(t,e,n,r){let i=Qf(t.catalog,e.palettes);_e([`${i.join(", ")} (${e.palettes.length})`,...gw(t.installed,n)].join(`
212
+ `),`installed ${e.palettes.length} palettes`),_e(["exec zsh the ttheme command in this tab",...Zf(e.terminals,t,r)].join(`
213
+ `),"next"),Zo("done")}function Zf(t,e,n){let r=[];if(t.includes("ghostty"))r.push("restart ghostty new tabs pick up its config");if(t.includes("kitty"))r.push("new kitty window pictures follow it — kitty reloads its colors by itself");if(t.includes("alacritty"))r.push("alacritty reloads its config by itself");if(t.includes("wezterm"))r.push("wezterm reloads its config by itself");if(t.includes("windows-terminal"))r.push("windows terminal reloads its settings by itself");if(t.includes("iterm2"))r.push(...pw(zt(e.installed),n));return[...r,...e.notes]}function Uf(t,e,n){let r=sw(t,e),i=be(),o=Bo(r,i);Do(r);let s=["exec zsh open tabs run the new layer — new tabs already do",...Zf(r.installed.terminals,r,o&&i.running())],c=`updated to ${xt.version} — kept ${xf(r.installed)}`;if(!n){console.log([c,...s].join(`
214
+ `));return}_e(s.join(`
215
+ `),c),Zo("done")}function pw(t,e){let n=['iterm2 profiles a "ttheme · <palette>" per palette in Settings › Profiles'];if(t)n.push(e?`restart iterm2 new tabs open on "ttheme · default", which wears ${t}`:`iterm2 default "ttheme · default" wears ${t} and follows \`ttheme default\``);return n}function ww(t,e){let n=[`placed ${t.copies.length} files`,`settings in ${t.settings.file} — edit later with \`ttheme config\``,...t.edits.map((r)=>`wired ${r.file}`)];if(e.terminals.includes("ghostty"))n.push("restart ghostty to pick up its config");if(e.terminals.includes("kitty"))n.push("kitty reloads its colors by itself; pictures show in kitty windows opened from now on");if(e.terminals.includes("alacritty"))n.push("alacritty reloads its config by itself");if(e.terminals.includes("wezterm")||e.terminals.includes("windows-terminal"))n.push("wezterm and windows terminal reload their config by themselves");if(e.terminals.includes("iterm2"))n.push('iterm2 gets a "ttheme · <palette>" profile per palette under Settings › Profiles');n.push(...t.notes),n.push("no palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"),console.log(n.join(`
216
+ `))}async function qf(t={}){let e=wt(import.meta.dirname,"..");if(!_t(wt(e,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!_t(wt(e,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await qr()}let n=rw(),r=Pt(),i=process.env.ZDOTDIR??n,o=aw(),s=process.env.WT_PROFILE_ID,c={root:e,home:n,configHome:r,zdotdir:i,...o?{wtHome:o}:{},...s?{wtProfile:s}:{}},u=xr(process.env),h=Wf(c).filter((I)=>I===u||hw(I,c));if(!t.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 a=ow(r);if(t.yes&&a){Uf(a,c,!1);return}if(t.yes){if(h.length===0)throw Error("no supported terminal detected — run this inside ghostty, kitty, alacritty, wezterm, iterm2, windows terminal or warp");let I={terminals:h,palettes:[]},j=zo(I,c);Bo(j),Do(j),ww(j,I);return}if(di("ttheme init"),a){let I=cw(r);if(bi(await pn({message:`ttheme${I?` ${I}`:""} is installed — ${xf(a)}
217
+ ${I===xt.version?"reinstall":"update to"} ${xt.version} and keep all of it?`,active:"yes",inactive:"no, set it up again",initialValue:!0}))){Uf(a,c,!0);return}}let f=await fw(u,a?.terminals??h,c),l=Jf(e),m=a?await wi(l,a.palettes,"palette",!0):await wi(l,[],"series",!0);if(!m)throw wn("nothing changed"),new He;let b=a&&Ze(a),d=b&&m.includes(b)?b:void 0,$=d??m[0],M=m.length>1&&xr(process.env)!=="warp",N=bi(await pn({message:M?"pick a default palette in ttheme preview once installed?":`wear ${$} in every tab?`,initialValue:a?!a.off:!0})),E={terminals:f,palettes:m,off:!N},v=zo(E,c),g=d?{...v,installed:{...v.installed,startup:d}}:v;if(_e([`install ${m.length} palettes — ${Qf(g.catalog,m).join(", ")}`,`copy ${g.copies.length} files under ${r}`,`write ${g.settings.file}`,...g.edits.map((I)=>`edit ${I.file} — a ttheme block: source ttheme.zsh`),...ua(r,g.installed,n),"each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out",N?M?`open ttheme preview — every tab wears the palette picked there, ${$} until then`:`paint every tab with ${$}, this one now`:"leave the terminal colors as they are — `ttheme on` wears a palette later",...f.includes("iterm2")&&N?['make "ttheme · default" the iTerm2 default profile']:[]].join(`
218
+ `),`wiring ${f.join(", ")}`),!bi(await pn({message:"apply these changes?"})))throw wn("nothing changed"),new He;let P=be(),k=Bo(g,P);if(Do(g),N&&M)dw(r);let O=Kt(r);mw({...g,installed:O},E,lw(g.catalog,O),k&&P.running())}import{existsSync as ts,readdirSync as bw,readFileSync as $w,rmSync as kw,utimesSync as Ew}from"node:fs";import{homedir as yw}from"node:os";import{dirname as vw,join as yn}from"node:path";function es(t){return ts(t)?$w(t,"utf8"):""}function Mw(t){try{return Kt(t)}catch{return}}function Sw(t,e){let n=oi(e,t),r=es(n);if(!Wr(r)?.includes(`path = "${ut("")}`))return;return{file:n,content:Qr(r,es(yo(t))||Eo)}}function Iw(t){let{home:e,configHome:n}=t,r=Mw(n),i=[],o=(h,a)=>{let f=es(h),l=a(f);if(l!==f)i.push({file:h,content:l})};o(yn(t.zdotdir,".zshrc"),Yn),o(We("ghostty",n),Yn),o(We("kitty",n),Yn),o(qe(n),Yn),o(hn(n,e),ih);let s=Sw(n,e);if(s)i.push(s);let c=[];for(let h of["ghostty","kitty","alacritty","wezterm","warp"]){let a=xe(h,n,e);if(ts(a))c.push(...bw(a).flatMap((f)=>f.startsWith(ut(""))?[yn(a,f)]:[]))}let u=[hr(e),...r?.wtHome?[vw(si(r.wtHome))]:[],yn(n,"ttheme"),t.cacheDir,t.stateDir];return c.push(...u.filter((h)=>ts(h))),{edits:i,removals:c,touches:r?.wtHome?vo(r.wtHome):[],...r?{state:r}:{}}}function Fw(t,e=be()){let n=[];for(let{file:i,content:o}of t.edits){let s=Ws(i,o);n.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(t.state&&Qe({...t.state,off:!0},e))n.push("gave iTerm2 its own default profile back — it takes it at its next start");for(let i of t.removals)kw(i,{recursive:!0,force:!0});if(t.removals.length>0)n.push(`deleted ${t.removals.length} files and folders ttheme wrote`);let r=new Date;for(let i of t.touches)Ew(i,r,r);return n}function Nw(){let t=yw();return{home:t,configHome:Pt(),zdotdir:process.env.ZDOTDIR??t,cacheDir:Ur(),stateDir:yn(process.env.XDG_STATE_HOME??yn(t,".local","state"),"ttheme")}}async function _f(t=!1){let e=Nw(),n=Iw(e);if(n.edits.length===0&&n.removals.length===0){console.log("nothing of ttheme is installed");return}if(!t){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=yn(e.configHome,"ttheme");di("ttheme uninstall"),_e([...n.edits.map((o)=>`take ttheme out of ${o.file}`),...n.removals.map((o)=>o===r?`delete ${o} — settings, pins and every installed picture`:`delete ${o}`)].join(`
219
+ `),"uninstall");let i=await pn({message:"remove ttheme?"});if(Oe(i)||!i)throw wn("nothing changed"),new He}for(let r of Fw(n))console.log(r);console.log("open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}var Ow={default:([t])=>Of(t),on:()=>Hf(),off:()=>jf(),browse:()=>Tf(),list:([t],{json:e})=>Gf(t,e),add:(t)=>Nf(t),remove:(t)=>Rf(t),update:()=>Lf(),init:(t,{yes:e})=>qf({yes:e}),uninstall:(t,{yes:e})=>_f(e),build:(t,{only:e})=>qr({only:e}),find:([t])=>Ta(t),image:([t,e])=>Aa(t,e)},Vf=Kr.map((t)=>({...t,run:Ow[t.name]}));class Ce extends Error{verb;constructor(t,e){super(t);this.verb=e}}function Cf(t){let e=Vf.find((n)=>n.name===t);if(!e)throw new Ce(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function Hw(t,e){let n={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:o,multiple:s}]of Object.entries(t.flags??{}))n[r]={type:i,multiple:s===!0,...o?{short:o}:{}};try{return Rw({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Ce(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function jw(t){let[e,...n]=t;if(e===void 0)return{kind:"help",code:1};if(e==="-h"||e==="--help")return{kind:"help",code:0};if(e==="-V"||e==="--version")return{kind:"version"};if(e==="help")return n[0]===void 0?{kind:"help",code:0}:{kind:"help",verb:Cf(n[0]),code:0};let r=Cf(e),i=Hw(r,n);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[a,{choices:f}]of Object.entries(r.flags??{}))for(let l of[i.values[a]??[]].flat())if(f&&!f.includes(String(l)))throw new Ce(`--${a} takes ${f.join(", ")} — not ${l}`,r);let o=i.positionals,s=r.args.filter((a)=>a.startsWith("<")).length,c=r.args.some((a)=>a.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(o.length<s)throw new Ce(`missing ${r.args[o.length]}`,r);if(o.length>c)throw new Ce(`too many arguments: ${o.slice(c).join(" ")}`,r);let{help:u,...h}=i.values;return{kind:"run",verb:r,args:o,flags:h}}function ns(t){let e=Object.entries(t.flags??{}).map(([n,{value:r}])=>`[--${n}${r?` ${r}`:""}]`);return[t.name,...e,...t.args].join(" ")}function Xf(t,e=Math.max(...t.map(([n])=>n.length))){return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}var Pw=["tab","catalog","setup"];function rs(t){if(t){let i=Object.entries(t.flags??{}).map(([o,{short:s,value:c,about:u}])=>[`${s?`-${s}, `:""}--${o}${c?` ${c}`:""}`,u]);return[`Usage: ttheme ${ns(t)}`,"",t.about,...i.length>0?["","Options:",...Xf(i)]:[]].join(`
220
+ `)}let e=Vf.filter((i)=>!i.hidden),n=(i)=>e.filter((o)=>o.section===i).map((o)=>[ns(o),o.about]),r=Math.max(...e.map((i)=>ns(i).length));return["Usage: ttheme <command>","",xt.description,"","Commands:",...Pw.flatMap((i,o)=>[...o>0?[""]:[],...Xf(n(i),r)]),"","Examples:"," 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 <command> --help describes one command · ttheme --version prints the version","https://kecan0406.github.io/ttheme"].join(`
221
+ `)}async function Yf(t){let e;try{let n=jw(t);if(n.kind==="version")return console.log(xt.version),0;if(n.kind==="help"){if(n.code===0)console.log(rs(n.verb));else console.error(rs(n.verb));return n.code}if(e=n.verb,!n.verb.run)throw Error("runs in the shell layer — open a new tab once `ttheme init` has wired it");let r=await n.verb.run(n.args,n.flags);return typeof r==="number"?r:0}catch(n){if(n instanceof Ce)return console.error(`ttheme${n.verb?` ${n.verb.name}`:""}: ${n.message}
219
222
 
220
- ${Do(n.verb)}`),1;if(n instanceof He)return 1;let r=process.env.TTHEME_DEBUG&&n instanceof Error?n.stack:void 0;return console.error(`
221
- ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}`),1}}if(Rw)if(process.env.TTHEME_DEBUG&&typeof Bun>"u"&&!process.sourceMapsEnabled){let t=Nw(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=t.status??1}else process.exitCode=await _f(process.argv.slice(2));
223
+ ${rs(n.verb)}`),1;if(n instanceof He)return 1;let r=process.env.TTHEME_DEBUG&&n instanceof Error?n.stack:void 0;return console.error(`
224
+ ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}`),1}}if(Lw)if(process.env.TTHEME_DEBUG&&typeof Bun>"u"&&!process.sourceMapsEnabled){let t=Gw(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=t.status??1}else process.exitCode=await Yf(process.argv.slice(2));
222
225
 
223
- //# debugId=D85E6B78A530B43764756E2164756E21
226
+ //# debugId=D17DB17FBA7CB0BE64756E2164756E21
224
227
  //# sourceMappingURL=ttheme.js.map