@kecan0406/ttheme 1.0.33 → 1.0.35

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,67 +1,65 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as fa}from"node:module";var ra=Object.create;var{getPrototypeOf:ia,defineProperty:Ko,getOwnPropertyNames:oa}=Object;var sa=Object.prototype.hasOwnProperty;function ca(t){return this[t]}var ua,ha,nr=(t,n,e)=>{var r=t!=null&&typeof t==="object";if(r){var i=n?ua??=new WeakMap:ha??=new WeakMap,o=i.get(t);if(o)return o}e=t!=null?ra(ia(t)):{};let s=n||!t||!t.__esModule?Ko(e,"default",{value:t,enumerable:!0}):e;for(let c of oa(t))if(!sa.call(s,c))Ko(s,c,{get:ca.bind(t,c),enumerable:!0});if(r)i.set(t,s);return s};var $t=(t,n)=>()=>(n||t((n={exports:{}}).exports,n),n.exports);var jt=fa(import.meta.url);var xo=$t((j0,or)=>{var Vo=Vo||function(t){return Buffer.from(t).toString("base64")};function wa(t){var n=this,e=Math.round,r=Math.floor,i=Array(64),o=Array(64),s=Array(64),c=Array(64),u,h,f,a,g=Array(65535),d=Array(65535),p=Array(64),l=Array(64),k=[],v=0,I=7,E=Array(64),y=Array(64),$=Array(64),H=Array(256),b=Array(2048),R,O=[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],P=[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],A=[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],U=[0,1,2,3,4,5,6,7,8,9,10,11],x=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],kt=[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 dt(m){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 T=0;T<64;T++){var J=r((L[T]*m+50)/100);if(J<1)J=1;else if(J>255)J=255;i[O[T]]=J}var q=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99];for(var X=0;X<64;X++){var rt=r((q[X]*m+50)/100);if(rt<1)rt=1;else if(rt>255)rt=255;o[O[X]]=rt}var it=[1,1.387039845,1.306562965,1.175875602,1,0.785694958,0.5411961,0.275899379],St=0;for(var wt=0;wt<8;wt++)for(var M=0;M<8;M++)s[St]=1/(i[O[St]]*it[wt]*it[M]*8),c[St]=1/(o[O[St]]*it[wt]*it[M]*8),St++}function B(m,L){var T=0,J=0,q=[];for(var X=1;X<=16;X++){for(var rt=1;rt<=m[X];rt++)q[L[J]]=[],q[L[J]][0]=T,q[L[J]][1]=X,J++,T++;T*=2}return q}function It(){u=B(P,G),h=B(Ft,U),f=B(C,A),a=B(x,kt)}function ot(){var m=1,L=2;for(var T=1;T<=15;T++){for(var J=m;J<L;J++)d[32767+J]=T,g[32767+J]=[],g[32767+J][1]=T,g[32767+J][0]=J;for(var q=-(L-1);q<=-m;q++)d[32767+q]=T,g[32767+q]=[],g[32767+q][1]=T,g[32767+q][0]=L-1+q;m<<=1,L<<=1}}function tt(){for(var m=0;m<256;m++)b[m]=19595*m,b[m+256>>0]=38470*m,b[m+512>>0]=7471*m+32768,b[m+768>>0]=-11059*m,b[m+1024>>0]=-21709*m,b[m+1280>>0]=32768*m+8421375,b[m+1536>>0]=-27439*m,b[m+1792>>0]=-5329*m}function z(m){var L=m[0],T=m[1]-1;while(T>=0){if(L&1<<T)v|=1<<I;if(T--,I--,I<0){if(v==255)w(255),w(0);else w(v);I=7,v=0}}}function w(m){k.push(m)}function K(m){w(m>>8&255),w(m&255)}function ht(m,L){var T,J,q,X,rt,it,St,wt,M=0,j,Z=8,Et=64;for(j=0;j<Z;++j){T=m[M],J=m[M+1],q=m[M+2],X=m[M+3],rt=m[M+4],it=m[M+5],St=m[M+6],wt=m[M+7];var _=T+wt,D=T-wt,at=J+St,W=J-St,st=q+it,Ht=q-it,bt=X+rt,qt=X-rt,nn=_+bt,In=_-bt,Kn=at+st,Jn=at-st;m[M]=nn+Kn,m[M+4]=nn-Kn;var ce=(Jn+In)*0.707106781;m[M+2]=In+ce,m[M+6]=In-ce,nn=qt+Ht,Kn=Ht+W,Jn=W+D;var ue=(nn-Jn)*0.382683433,xe=0.5411961*nn+ue,he=1.306562965*Jn+ue,fe=Kn*0.707106781,ae=D+fe,ge=D-fe;m[M+5]=ge+xe,m[M+3]=ge-xe,m[M+1]=ae+he,m[M+7]=ae-he,M+=8}M=0;for(j=0;j<Z;++j){T=m[M],J=m[M+8],q=m[M+16],X=m[M+24],rt=m[M+32],it=m[M+40],St=m[M+48],wt=m[M+56];var vo=T+wt,zr=T-wt,yo=J+St,So=J-St,Fo=q+it,Io=q-it,No=X+rt,ea=X-rt,le=vo+No,Yr=vo-No,Be=yo+Fo,De=yo-Fo;m[M]=le+Be,m[M+32]=le-Be;var Oo=(De+Yr)*0.707106781;m[M+16]=Yr+Oo,m[M+48]=Yr-Oo,le=ea+Io,Be=Io+So,De=So+zr;var Ho=(le-De)*0.382683433,jo=0.5411961*le+Ho,Ro=1.306562965*De+Ho,Go=Be*0.707106781,Lo=zr+Go,Po=zr-Go;m[M+40]=Po+jo,m[M+24]=Po-jo,m[M+8]=Lo+Ro,m[M+56]=Lo-Ro,M++}var tr;for(j=0;j<Et;++j)tr=m[j]*L[j],p[j]=tr>0?tr+0.5|0:tr-0.5|0;return p}function ft(){K(65504),K(16),w(74),w(70),w(73),w(70),w(0),w(1),w(1),w(0),K(1),K(1),w(0),w(0)}function nt(m){if(!m)return;if(K(65505),m[0]===69&&m[1]===120&&m[2]===105&&m[3]===102)K(m.length+2);else K(m.length+5+2),w(69),w(120),w(105),w(102),w(0);for(var L=0;L<m.length;L++)w(m[L])}function et(m,L){K(65472),K(17),w(8),K(L),K(m),w(3),w(1),w(17),w(0),w(2),w(17),w(1),w(3),w(17),w(1)}function Y(){K(65499),K(132),w(0);for(var m=0;m<64;m++)w(i[m]);w(1);for(var L=0;L<64;L++)w(o[L])}function N(){K(65476),K(418),w(0);for(var m=0;m<16;m++)w(P[m+1]);for(var L=0;L<=11;L++)w(G[L]);w(16);for(var T=0;T<16;T++)w(C[T+1]);for(var J=0;J<=161;J++)w(A[J]);w(1);for(var q=0;q<16;q++)w(Ft[q+1]);for(var X=0;X<=11;X++)w(U[X]);w(17);for(var rt=0;rt<16;rt++)w(x[rt+1]);for(var it=0;it<=161;it++)w(kt[it])}function F(m){if(typeof m>"u"||m.constructor!==Array)return;m.forEach((L)=>{if(typeof L!=="string")return;K(65534);var T=L.length;K(T+2);var J;for(J=0;J<T;J++)w(L.charCodeAt(J))})}function pt(){K(65498),K(12),w(3),w(1),w(0),w(2),w(17),w(3),w(17),w(0),w(63),w(0)}function Q(m,L,T,J,q){var X=q[0],rt=q[240],it,St=16,wt=63,M=64,j=ht(m,L);for(var Z=0;Z<M;++Z)l[O[Z]]=j[Z];var Et=l[0]-T;if(T=l[0],Et==0)z(J[0]);else it=32767+Et,z(J[d[it]]),z(g[it]);var _=63;for(;_>0&&l[_]==0;_--);if(_==0)return z(X),T;var D=1,at;while(D<=_){var W=D;for(;l[D]==0&&D<=_;++D);var st=D-W;if(st>=St){at=st>>4;for(var Ht=1;Ht<=at;++Ht)z(rt);st=st&15}it=32767+l[D],z(q[(st<<4)+d[it]]),z(g[it]),D++}if(_!=wt)z(X);return T}function V(){var m=String.fromCharCode;for(var L=0;L<256;L++)H[L]=m(L)}this.encode=function(m,L){var T=new Date().getTime();if(L)Zt(L);k=[],v=0,I=7,K(65496),ft(),F(m.comments),nt(m.exifBuffer),Y(),et(m.width,m.height),N(),pt();var J=0,q=0,X=0;v=0,I=7,this.encode.displayName="_encode_";var{data:rt,width:it,height:St}=m,wt=it*4,M=it*3,j,Z=0,Et,_,D,at,W,st,Ht,bt;while(Z<St){j=0;while(j<wt){at=wt*Z+j,W=at,st=-1,Ht=0;for(bt=0;bt<64;bt++){if(Ht=bt>>3,st=(bt&7)*4,W=at+Ht*wt+st,Z+Ht>=St)W-=wt*(Z+1+Ht-St);if(j+st>=wt)W-=j+st-wt+4;Et=rt[W++],_=rt[W++],D=rt[W++],E[bt]=(b[Et]+b[_+256>>0]+b[D+512>>0]>>16)-128,y[bt]=(b[Et+768>>0]+b[_+1024>>0]+b[D+1280>>0]>>16)-128,$[bt]=(b[Et+1280>>0]+b[_+1536>>0]+b[D+1792>>0]>>16)-128}J=Q(E,s,J,u,f),q=Q(y,c,q,h,a),X=Q($,c,X,h,a),j+=32}Z+=8}if(I>=0){var qt=[];qt[1]=I+1,qt[0]=(1<<I+1)-1,z(qt)}if(K(65497),typeof or>"u")return new Uint8Array(k);return Buffer.from(k);var nn,In};function Zt(m){if(m<=0)m=1;if(m>100)m=100;if(R==m)return;var L=0;if(m<50)L=Math.floor(5000/m);else L=Math.floor(200-m*2);dt(L),R=m}function xt(){var m=new Date().getTime();if(!t)t=50;V(),It(),ot(),tt(),Zt(t);var L=new Date().getTime()-m}xt()}if(typeof or<"u")or.exports=Yo;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].encode=Yo;function Yo(t,n){if(typeof n>"u")n=50;var e=new wa(n),r=e.encode(t,n);return{data:r,width:t.width,height:t.height}}});var Do=$t((R0,ti)=>{var Dr=function(){var n=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),e=4017,r=799,i=3406,o=2276,s=1567,c=3784,u=5793,h=2896;function f(){}function a(I,E){var y=0,$=[],H,b,R=16;while(R>0&&!I[R-1])R--;$.push({children:[],index:0});var O=$[0],P;for(H=0;H<R;H++){for(b=0;b<I[H];b++){O=$.pop(),O.children[O.index]=E[y];while(O.index>0){if($.length===0)throw Error("Could not recreate Huffman Table");O=$.pop()}O.index++,$.push(O);while($.length<=H)$.push(P={children:[],index:0}),O.children[O.index]=P.children,O=P;y++}if(H+1<R)$.push(P={children:[],index:0}),O.children[O.index]=P.children,O=P}return $[0].children}function g(I,E,y,$,H,b,R,O,P,G){var{precision:C,samplesPerLine:A,scanLines:Ft,mcusPerLine:U,progressive:x,maxH:kt,maxV:dt}=y,B=E,It=0,ot=0;function tt(){if(ot>0)return ot--,It>>ot&1;if(It=I[E++],It==255){var M=I[E++];if(M)throw Error("unexpected marker: "+(It<<8|M).toString(16))}return ot=7,It>>>7}function z(M){var j=M,Z;while((Z=tt())!==null){if(j=j[Z],typeof j==="number")return j;if(typeof j!=="object")throw Error("invalid huffman sequence")}return null}function w(M){var j=0;while(M>0){var Z=tt();if(Z===null)return;j=j<<1|Z,M--}return j}function K(M){var j=w(M);if(j>=1<<M-1)return j;return j+(-1<<M)+1}function ht(M,j){var Z=z(M.huffmanTableDC),Et=Z===0?0:K(Z);j[0]=M.pred+=Et;var _=1;while(_<64){var D=z(M.huffmanTableAC),at=D&15,W=D>>4;if(at===0){if(W<15)break;_+=16;continue}_+=W;var st=n[_];j[st]=K(at),_++}}function ft(M,j){var Z=z(M.huffmanTableDC),Et=Z===0?0:K(Z)<<P;j[0]=M.pred+=Et}function nt(M,j){j[0]|=tt()<<P}var et=0;function Y(M,j){if(et>0){et--;return}var Z=b,Et=R;while(Z<=Et){var _=z(M.huffmanTableAC),D=_&15,at=_>>4;if(D===0){if(at<15){et=w(at)+(1<<at)-1;break}Z+=16;continue}Z+=at;var W=n[Z];j[W]=K(D)*(1<<P),Z++}}var N=0,F;function pt(M,j){var Z=b,Et=R,_=0;while(Z<=Et){var D=n[Z],at=j[D]<0?-1:1;switch(N){case 0:var W=z(M.huffmanTableAC),st=W&15,_=W>>4;if(st===0)if(_<15)et=w(_)+(1<<_),N=4;else _=16,N=1;else{if(st!==1)throw Error("invalid ACn encoding");F=K(st),N=_?2:3}continue;case 1:case 2:if(j[D])j[D]+=(tt()<<P)*at;else if(_--,_===0)N=N==2?3:0;break;case 3:if(j[D])j[D]+=(tt()<<P)*at;else j[D]=F<<P,N=0;break;case 4:if(j[D])j[D]+=(tt()<<P)*at;break}Z++}if(N===4){if(et--,et===0)N=0}}function Q(M,j,Z,Et,_){var D=Z/U|0,at=Z%U,W=D*M.v+Et,st=at*M.h+_;if(M.blocks[W]===void 0&&G.tolerantDecoding)return;j(M,M.blocks[W][st])}function V(M,j,Z){var Et=Z/M.blocksPerLine|0,_=Z%M.blocksPerLine;if(M.blocks[Et]===void 0&&G.tolerantDecoding)return;j(M,M.blocks[Et][_])}var Zt=$.length,xt,m,L,T,J,q;if(x)if(b===0)q=O===0?ft:nt;else q=O===0?Y:pt;else q=ht;var X=0,rt,it;if(Zt==1)it=$[0].blocksPerLine*$[0].blocksPerColumn;else it=U*y.mcusPerColumn;if(!H)H=it;var St,wt;while(X<it){for(m=0;m<Zt;m++)$[m].pred=0;if(et=0,Zt==1){xt=$[0];for(J=0;J<H;J++)V(xt,q,X),X++}else for(J=0;J<H;J++){for(m=0;m<Zt;m++){xt=$[m],St=xt.h,wt=xt.v;for(L=0;L<wt;L++)for(T=0;T<St;T++)Q(xt,q,X,L,T)}if(X++,X===it)break}if(X===it)do{if(I[E]===255){if(I[E+1]!==0)break}E+=1}while(E<I.length-2);if(ot=0,rt=I[E]<<8|I[E+1],rt<65280)throw Error("marker was not found");if(rt>=65488&&rt<=65495)E+=2;else break}return E-B}function d(I,E){var y=[],$=E.blocksPerLine,H=E.blocksPerColumn,b=$<<3,R=new Int32Array(64),O=new Uint8Array(64);function P(B,It,ot){var tt=E.quantizationTable,z,w,K,ht,ft,nt,et,Y,N,F=ot,pt;for(pt=0;pt<64;pt++)F[pt]=B[pt]*tt[pt];for(pt=0;pt<8;++pt){var Q=8*pt;if(F[1+Q]==0&&F[2+Q]==0&&F[3+Q]==0&&F[4+Q]==0&&F[5+Q]==0&&F[6+Q]==0&&F[7+Q]==0){N=u*F[0+Q]+512>>10,F[0+Q]=N,F[1+Q]=N,F[2+Q]=N,F[3+Q]=N,F[4+Q]=N,F[5+Q]=N,F[6+Q]=N,F[7+Q]=N;continue}z=u*F[0+Q]+128>>8,w=u*F[4+Q]+128>>8,K=F[2+Q],ht=F[6+Q],ft=h*(F[1+Q]-F[7+Q])+128>>8,Y=h*(F[1+Q]+F[7+Q])+128>>8,nt=F[3+Q]<<4,et=F[5+Q]<<4,N=z-w+1>>1,z=z+w+1>>1,w=N,N=K*c+ht*s+128>>8,K=K*s-ht*c+128>>8,ht=N,N=ft-et+1>>1,ft=ft+et+1>>1,et=N,N=Y+nt+1>>1,nt=Y-nt+1>>1,Y=N,N=z-ht+1>>1,z=z+ht+1>>1,ht=N,N=w-K+1>>1,w=w+K+1>>1,K=N,N=ft*o+Y*i+2048>>12,ft=ft*i-Y*o+2048>>12,Y=N,N=nt*r+et*e+2048>>12,nt=nt*e-et*r+2048>>12,et=N,F[0+Q]=z+Y,F[7+Q]=z-Y,F[1+Q]=w+et,F[6+Q]=w-et,F[2+Q]=K+nt,F[5+Q]=K-nt,F[3+Q]=ht+ft,F[4+Q]=ht-ft}for(pt=0;pt<8;++pt){var V=pt;if(F[8+V]==0&&F[16+V]==0&&F[24+V]==0&&F[32+V]==0&&F[40+V]==0&&F[48+V]==0&&F[56+V]==0){N=u*ot[pt+0]+8192>>14,F[0+V]=N,F[8+V]=N,F[16+V]=N,F[24+V]=N,F[32+V]=N,F[40+V]=N,F[48+V]=N,F[56+V]=N;continue}z=u*F[0+V]+2048>>12,w=u*F[32+V]+2048>>12,K=F[16+V],ht=F[48+V],ft=h*(F[8+V]-F[56+V])+2048>>12,Y=h*(F[8+V]+F[56+V])+2048>>12,nt=F[24+V],et=F[40+V],N=z-w+1>>1,z=z+w+1>>1,w=N,N=K*c+ht*s+2048>>12,K=K*s-ht*c+2048>>12,ht=N,N=ft-et+1>>1,ft=ft+et+1>>1,et=N,N=Y+nt+1>>1,nt=Y-nt+1>>1,Y=N,N=z-ht+1>>1,z=z+ht+1>>1,ht=N,N=w-K+1>>1,w=w+K+1>>1,K=N,N=ft*o+Y*i+2048>>12,ft=ft*i-Y*o+2048>>12,Y=N,N=nt*r+et*e+2048>>12,nt=nt*e-et*r+2048>>12,et=N,F[0+V]=z+Y,F[56+V]=z-Y,F[8+V]=w+et,F[48+V]=w-et,F[16+V]=K+nt,F[40+V]=K-nt,F[24+V]=ht+ft,F[32+V]=ht-ft}for(pt=0;pt<64;++pt){var Zt=128+(F[pt]+8>>4);It[pt]=Zt<0?0:Zt>255?255:Zt}}v(b*H*8);var G,C;for(var A=0;A<H;A++){var Ft=A<<3;for(G=0;G<8;G++)y.push(new Uint8Array(b));for(var U=0;U<$;U++){P(E.blocks[A][U],O,R);var x=0,kt=U<<3;for(C=0;C<8;C++){var dt=y[Ft+C];for(G=0;G<8;G++)dt[kt+G]=O[x++]}}}return y}function p(I){return I<0?0:I>255?255:I}f.prototype={load:function(E){var y=new XMLHttpRequest;y.open("GET",E,!0),y.responseType="arraybuffer",y.onload=function(){var $=new Uint8Array(y.response||y.mozResponseArrayBuffer);if(this.parse($),this.onload)this.onload()}.bind(this),y.send(null)},parse:function(E){var y=this.opts.maxResolutionInMP*1000*1000,$=0,H=E.length;function b(){var W=E[$]<<8|E[$+1];return $+=2,W}function R(){var W=b(),st=E.subarray($,$+W-2);return $+=st.length,st}function O(W){var st=1,Ht=1,bt,qt;for(qt in W.components)if(W.components.hasOwnProperty(qt)){if(bt=W.components[qt],st<bt.h)st=bt.h;if(Ht<bt.v)Ht=bt.v}var nn=Math.ceil(W.samplesPerLine/8/st),In=Math.ceil(W.scanLines/8/Ht);for(qt in W.components)if(W.components.hasOwnProperty(qt)){bt=W.components[qt];var Kn=Math.ceil(Math.ceil(W.samplesPerLine/8)*bt.h/st),Jn=Math.ceil(Math.ceil(W.scanLines/8)*bt.v/Ht),ce=nn*bt.h,ue=In*bt.v,xe=ue*ce,he=[];v(xe*256);for(var fe=0;fe<ue;fe++){var ae=[];for(var ge=0;ge<ce;ge++)ae.push(new Int32Array(64));he.push(ae)}bt.blocksPerLine=Kn,bt.blocksPerColumn=Jn,bt.blocks=he}W.maxH=st,W.maxV=Ht,W.mcusPerLine=nn,W.mcusPerColumn=In}var P=null,G=null,C=null,A,Ft,U=[],x=[],kt=[],dt=[],B=b(),It=-1;if(this.comments=[],B!=65496)throw Error("SOI not found");B=b();while(B!=65497){var ot,tt,z;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=R();if(B===65534){var K=String.fromCharCode.apply(null,w);this.comments.push(K)}if(B===65504){if(w[0]===74&&w[1]===70&&w[2]===73&&w[3]===70&&w[4]===0)P={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 ht=b(),ft=ht+$-2;while($<ft){var nt=E[$++];v(256);var et=new Int32Array(64);if(nt>>4===0)for(tt=0;tt<64;tt++){var Y=n[tt];et[Y]=E[$++]}else if(nt>>4===1)for(tt=0;tt<64;tt++){var Y=n[tt];et[Y]=b()}else throw Error("DQT: invalid table spec");U[nt&15]=et}break;case 65472:case 65473:case 65474:b(),A={},A.extended=B===65473,A.progressive=B===65474,A.precision=E[$++],A.scanLines=b(),A.samplesPerLine=b(),A.components={},A.componentsOrder=[];var N=A.scanLines*A.samplesPerLine;if(N>y){var F=Math.ceil((N-y)/1e6);throw Error(`maxResolutionInMP limit exceeded by ${F}MP`)}var pt=E[$++],Q,V=0,Zt=0;for(ot=0;ot<pt;ot++){Q=E[$];var xt=E[$+1]>>4,m=E[$+1]&15,L=E[$+2];if(xt<=0||m<=0)throw Error("Invalid sampling factor, expected values above 0");A.componentsOrder.push(Q),A.components[Q]={h:xt,v:m,quantizationIdx:L},$+=3}O(A),x.push(A);break;case 65476:var T=b();for(ot=2;ot<T;){var J=E[$++],q=new Uint8Array(16),X=0;for(tt=0;tt<16;tt++,$++)X+=q[tt]=E[$];v(16+X);var rt=new Uint8Array(X);for(tt=0;tt<X;tt++,$++)rt[tt]=E[$];ot+=17+X,(J>>4===0?dt:kt)[J&15]=a(q,rt)}break;case 65501:b(),Ft=b();break;case 65500:b(),b();break;case 65498:var it=b(),St=E[$++],wt=[],M;for(ot=0;ot<St;ot++){M=A.components[E[$++]];var j=E[$++];M.huffmanTableDC=dt[j>>4],M.huffmanTableAC=kt[j&15],wt.push(M)}var Z=E[$++],Et=E[$++],_=E[$++],D=g(E,$,A,wt,Ft,Z,Et,_>>4,_&15,this.opts);$+=D;break;case 65535:if(E[$]!==255)$--;break;default:if(E[$-3]==255&&E[$-2]>=192&&E[$-2]<=254){$-=3;break}else if(B===224||B==225){if(It!==-1)throw Error(`first unknown JPEG marker at offset ${It.toString(16)}, second unknown JPEG marker ${B.toString(16)} at offset ${($-1).toString(16)}`);It=$-1;let W=b();if(E[$+W-2]===255){$+=W-2;break}}throw Error("unknown JPEG marker "+B.toString(16))}B=b()}if(x.length!=1)throw Error("only single frame JPEGs supported");for(var ot=0;ot<x.length;ot++){var at=x[ot].components;for(var tt in at)at[tt].quantizationTable=U[at[tt].quantizationIdx],delete at[tt].quantizationIdx}this.width=A.samplesPerLine,this.height=A.scanLines,this.jfif=P,this.adobe=G,this.components=[];for(var ot=0;ot<A.componentsOrder.length;ot++){var M=A.components[A.componentsOrder[ot]];this.components.push({lines:d(A,M),scaleX:M.h/A.maxH,scaleY:M.v/A.maxV})}},getData:function(E,y){var $=this.width/E,H=this.height/y,b,R,O,P,G,C,A,Ft,U,x,kt=0,dt,B,It,ot,tt,z,w,K,ht,ft,nt,et=E*y*this.components.length;v(et);var Y=new Uint8Array(et);switch(this.components.length){case 1:b=this.components[0];for(x=0;x<y;x++){G=b.lines[0|x*b.scaleY*H];for(U=0;U<E;U++)dt=G[0|U*b.scaleX*$],Y[kt++]=dt}break;case 2:b=this.components[0],R=this.components[1];for(x=0;x<y;x++){G=b.lines[0|x*b.scaleY*H],C=R.lines[0|x*R.scaleY*H];for(U=0;U<E;U++)dt=G[0|U*b.scaleX*$],Y[kt++]=dt,dt=C[0|U*R.scaleX*$],Y[kt++]=dt}break;case 3:if(nt=!0,this.adobe&&this.adobe.transformCode)nt=!0;else if(typeof this.opts.colorTransform<"u")nt=!!this.opts.colorTransform;b=this.components[0],R=this.components[1],O=this.components[2];for(x=0;x<y;x++){G=b.lines[0|x*b.scaleY*H],C=R.lines[0|x*R.scaleY*H],A=O.lines[0|x*O.scaleY*H];for(U=0;U<E;U++){if(!nt)K=G[0|U*b.scaleX*$],ht=C[0|U*R.scaleX*$],ft=A[0|U*O.scaleX*$];else dt=G[0|U*b.scaleX*$],B=C[0|U*R.scaleX*$],It=A[0|U*O.scaleX*$],K=p(dt+1.402*(It-128)),ht=p(dt-0.3441363*(B-128)-0.71413636*(It-128)),ft=p(dt+1.772*(B-128));Y[kt++]=K,Y[kt++]=ht,Y[kt++]=ft}}break;case 4:if(!this.adobe)throw Error("Unsupported color mode (4 components)");if(nt=!1,this.adobe&&this.adobe.transformCode)nt=!0;else if(typeof this.opts.colorTransform<"u")nt=!!this.opts.colorTransform;b=this.components[0],R=this.components[1],O=this.components[2],P=this.components[3];for(x=0;x<y;x++){G=b.lines[0|x*b.scaleY*H],C=R.lines[0|x*R.scaleY*H],A=O.lines[0|x*O.scaleY*H],Ft=P.lines[0|x*P.scaleY*H];for(U=0;U<E;U++){if(!nt)tt=G[0|U*b.scaleX*$],z=C[0|U*R.scaleX*$],w=A[0|U*O.scaleX*$],ot=Ft[0|U*P.scaleX*$];else dt=G[0|U*b.scaleX*$],B=C[0|U*R.scaleX*$],It=A[0|U*O.scaleX*$],ot=Ft[0|U*P.scaleX*$],tt=255-p(dt+1.402*(It-128)),z=255-p(dt-0.3441363*(B-128)-0.71413636*(It-128)),w=255-p(dt+1.772*(B-128));Y[kt++]=255-tt,Y[kt++]=255-z,Y[kt++]=255-w,Y[kt++]=255-ot}}break;default:throw Error("Unsupported color mode")}return Y},copyToImageData:function(E,y){var{width:$,height:H,data:b}=E,R=this.getData($,H),O=0,P=0,G,C,A,Ft,U,x,kt,dt,B;switch(this.components.length){case 1:for(C=0;C<H;C++)for(G=0;G<$;G++)if(A=R[O++],b[P++]=A,b[P++]=A,b[P++]=A,y)b[P++]=255;break;case 3:for(C=0;C<H;C++)for(G=0;G<$;G++)if(kt=R[O++],dt=R[O++],B=R[O++],b[P++]=kt,b[P++]=dt,b[P++]=B,y)b[P++]=255;break;case 4:for(C=0;C<H;C++)for(G=0;G<$;G++)if(U=R[O++],x=R[O++],A=R[O++],Ft=R[O++],kt=255-p(U*(1-Ft/255)+Ft),dt=255-p(x*(1-Ft/255)+Ft),B=255-p(A*(1-Ft/255)+Ft),b[P++]=kt,b[P++]=dt,b[P++]=B,y)b[P++]=255;break;default:throw Error("Unsupported color mode")}}};var l=0,k=0;function v(I=0){var E=l+I;if(E>k){var y=Math.ceil((E-k)/1024/1024);throw Error(`maxMemoryUsageInMB limit exceeded by at least ${y}MB`)}l=E}return f.resetMaxMemoryUsage=function(I){l=0,k=I},f.getBytesAllocated=function(){return l},f.requestMemoryAllocation=v,f}();if(typeof ti<"u")ti.exports=Bo;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].decode=Bo;function Bo(t,n={}){var e={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512},r={...e,...n},i=new Uint8Array(t),o=new Dr;o.opts=r,Dr.resetMaxMemoryUsage(r.maxMemoryUsageInMB*1024*1024),o.parse(i);var s=r.formatAsRGBA?4:3,c=o.width*o.height*s;try{Dr.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 ns=$t((G0,ts)=>{var $a=xo(),ba=Do();ts.exports={encode:$a,decode:ba}});var ni=$t((L0,rs)=>{var ka=jt("util"),es=jt("stream"),Dt=rs.exports=function(){es.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};ka.inherits(Dt,es);Dt.prototype.read=function(t,n){this._reads.push({length:Math.abs(t),allowLess:t<0,func:n}),process.nextTick(function(){if(this._process(),this._paused&&this._reads&&this._reads.length>0)this._paused=!1,this.emit("drain")}.bind(this))};Dt.prototype.write=function(t,n){if(!this.writable)return this.emit("error",Error("Stream not writable")),!1;let e;if(Buffer.isBuffer(t))e=t;else e=Buffer.from(t,n||this._encoding);if(this._buffers.push(e),this._buffered+=e.length,this._process(),this._reads&&this._reads.length===0)this._paused=!0;return this.writable&&!this._paused};Dt.prototype.end=function(t,n){if(t)this.write(t,n);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 n=this._buffers[0];if(n.length>t.length)this._buffered-=t.length,this._buffers[0]=n.slice(t.length),t.func.call(this,n.slice(0,t.length));else this._buffered-=n.length,this._buffers.shift(),t.func.call(this,n)};Dt.prototype._processRead=function(t){this._reads.shift();let n=0,e=0,r=Buffer.alloc(t.length);while(n<t.length){let i=this._buffers[e++],o=Math.min(i.length,t.length-n);if(i.copy(r,n,0,o),n+=o,o!==i.length)this._buffers[--e]=i.slice(o)}if(e>0)this._buffers.splice(0,e);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 ei=$t((Ea)=>{var bn=[{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]}];Ea.getImagePasses=function(t,n){let e=[],r=t%8,i=n%8,o=(t-r)/8,s=(n-i)/8;for(let c=0;c<bn.length;c++){let u=bn[c],h=o*u.x.length,f=s*u.y.length;for(let a=0;a<u.x.length;a++)if(u.x[a]<r)h++;else break;for(let a=0;a<u.y.length;a++)if(u.y[a]<i)f++;else break;if(h>0&&f>0)e.push({width:h,height:f,index:c})}return e};Ea.getInterlaceIterator=function(t){return function(n,e,r){let i=n%bn[r].x.length,o=(n-i)/bn[r].x.length*8+bn[r].x[i],s=e%bn[r].y.length,c=(e-s)/bn[r].y.length*8+bn[r].y[s];return o*4+c*t*4}}});var ri=$t((K0,is)=>{is.exports=function(n,e,r){let i=n+e-r,o=Math.abs(i-n),s=Math.abs(i-e),c=Math.abs(i-r);if(o<=s&&o<=c)return n;if(s<=c)return e;return r}});var ii=$t((J0,ss)=>{var ya=ei(),Sa=ri();function os(t,n,e){let r=t*n;if(e!==8)r=Math.ceil(r/(8/e));return r}var Un=ss.exports=function(t,n){let{width:e,height:r,interlace:i,bpp:o,depth:s}=t;if(this.read=n.read,this.write=n.write,this.complete=n.complete,this._imageIndex=0,this._images=[],i){let c=ya.getImagePasses(e,r);for(let u=0;u<c.length;u++)this._images.push({byteWidth:os(c[u].width,o,s),height:c[u].height,lineIndex:0})}else this._images.push({byteWidth:os(e,o,s),height:r,lineIndex:0});if(s===8)this._xComparison=o;else if(s===16)this._xComparison=o*2;else this._xComparison=1};Un.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Un.prototype._unFilterType1=function(t,n,e){let r=this._xComparison,i=r-1;for(let o=0;o<e;o++){let s=t[1+o],c=o>i?n[o-r]:0;n[o]=s+c}};Un.prototype._unFilterType2=function(t,n,e){let r=this._lastLine;for(let i=0;i<e;i++){let o=t[1+i],s=r?r[i]:0;n[i]=o+s}};Un.prototype._unFilterType3=function(t,n,e){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<e;s++){let c=t[1+s],u=o?o[s]:0,h=s>i?n[s-r]:0,f=Math.floor((h+u)/2);n[s]=c+f}};Un.prototype._unFilterType4=function(t,n,e){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<e;s++){let c=t[1+s],u=o?o[s]:0,h=s>i?n[s-r]:0,f=s>i&&o?o[s-r]:0,a=Sa(h,u,f);n[s]=c+a}};Un.prototype._reverseFilterLine=function(t){let n=t[0],e,r=this._images[this._imageIndex],i=r.byteWidth;if(n===0)e=t.slice(1,i+1);else switch(e=Buffer.alloc(i),n){case 1:this._unFilterType1(t,e,i);break;case 2:this._unFilterType2(t,e,i);break;case 3:this._unFilterType3(t,e,i);break;case 4:this._unFilterType4(t,e,i);break;default:throw Error("Unrecognised filter type - "+n)}if(this.write(e),r.lineIndex++,r.lineIndex>=r.height)this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex];else this._lastLine=e;if(r)this.read(r.byteWidth+1,this._reverseFilterLine.bind(this));else this._lastLine=null,this.complete()}});var hs=$t((A0,us)=>{var Fa=jt("util"),cs=ni(),Ia=ii(),Na=us.exports=function(t){cs.call(this);let n=[],e=this;this._filter=new Ia(t,{read:this.read.bind(this),write:function(r){n.push(r)},complete:function(){e.emit("complete",Buffer.concat(n))}}),this._filter.start()};Fa.inherits(Na,cs)});var Tn=$t((U0,fs)=>{fs.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 ci=$t((T0,as)=>{var oi=[];(function(){for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)if(n&1)n=3988292384^n>>>1;else n=n>>>1;oi[t]=n}})();var si=as.exports=function(){this._crc=-1};si.prototype.write=function(t){for(let n=0;n<t.length;n++)this._crc=oi[(this._crc^t[n])&255]^this._crc>>>8;return!0};si.prototype.crc32=function(){return this._crc^-1};si.crc32=function(t){let n=-1;for(let e=0;e<t.length;e++)n=oi[(n^t[e])&255]^n>>>8;return n^-1}});var ui=$t((W0,gs)=>{var Nt=Tn(),Oa=ci(),Ot=gs.exports=function(t,n){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[Nt.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Nt.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Nt.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Nt.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Nt.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Nt.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=n.read,this.error=n.error,this.metadata=n.metadata,this.gamma=n.gamma,this.transColor=n.transColor,this.palette=n.palette,this.parsed=n.parsed,this.inflateData=n.inflateData,this.finished=n.finished,this.simpleTransparency=n.simpleTransparency,this.headersFinished=n.headersFinished||function(){}};Ot.prototype.start=function(){this.read(Nt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Ot.prototype._parseSignature=function(t){let n=Nt.PNG_SIGNATURE;for(let e=0;e<n.length;e++)if(t[e]!==n[e]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};Ot.prototype._parseChunkBegin=function(t){let n=t.readUInt32BE(0),e=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&&e!==Nt.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new Oa,this._crc.write(Buffer.from(r)),this._chunks[e])return this._chunks[e](n);if(!i){this.error(Error("Unsupported critical chunk type "+r));return}this.read(n+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 n=t.readInt32BE(0),e=this._crc.crc32();if(this._options.checkCRC&&e!==n){this.error(Error("Crc error - "+n+" - "+e));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 n=t.readUInt32BE(0),e=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 Nt.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=Nt.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:n,height:e,depth:r,interlace:Boolean(c),palette:Boolean(i&Nt.COLORTYPE_PALETTE),color:Boolean(i&Nt.COLORTYPE_COLOR),alpha:Boolean(i&Nt.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 n=Math.floor(t.length/3);for(let e=0;e<n;e++)this._palette.push([t[e*3],t[e*3+1],t[e*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===Nt.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 n=0;n<t.length;n++)this._palette[n][3]=t[n];this.palette(this._palette)}if(this._colorType===Nt.COLORTYPE_GRAYSCALE)this.transColor([t.readUInt16BE(0)]);if(this._colorType===Nt.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)/Nt.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,n){if(this._crc.write(n),this._colorType===Nt.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(n);let e=t-n.length;if(e>0)this._handleIDAT(e);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 hi=$t((Pa)=>{var ls=ei(),Ha=[function(){},function(t,n,e,r){if(r===n.length)throw Error("Ran out of data");let i=n[r];t[e]=i,t[e+1]=i,t[e+2]=i,t[e+3]=255},function(t,n,e,r){if(r+1>=n.length)throw Error("Ran out of data");let i=n[r];t[e]=i,t[e+1]=i,t[e+2]=i,t[e+3]=n[r+1]},function(t,n,e,r){if(r+2>=n.length)throw Error("Ran out of data");t[e]=n[r],t[e+1]=n[r+1],t[e+2]=n[r+2],t[e+3]=255},function(t,n,e,r){if(r+3>=n.length)throw Error("Ran out of data");t[e]=n[r],t[e+1]=n[r+1],t[e+2]=n[r+2],t[e+3]=n[r+3]}],ja=[function(){},function(t,n,e,r){let i=n[0];t[e]=i,t[e+1]=i,t[e+2]=i,t[e+3]=r},function(t,n,e){let r=n[0];t[e]=r,t[e+1]=r,t[e+2]=r,t[e+3]=n[1]},function(t,n,e,r){t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=r},function(t,n,e){t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3]}];function Ra(t,n){let e=[],r=0;function i(){if(r===t.length)throw Error("Ran out of data");let o=t[r];r++;let s,c,u,h,f,a,g,d;switch(n){default:throw Error("unrecognised depth");case 16:g=t[r],r++,e.push((o<<8)+g);break;case 4:g=o&15,d=o>>4,e.push(d,g);break;case 2:f=o&3,a=o>>2&3,g=o>>4&3,d=o>>6&3,e.push(d,g,a,f);break;case 1:s=o&1,c=o>>1&1,u=o>>2&1,h=o>>3&1,f=o>>4&1,a=o>>5&1,g=o>>6&1,d=o>>7&1,e.push(d,g,a,f,h,u,c,s);break}}return{get:function(o){while(e.length<o)i();let s=e.slice(0,o);return e=e.slice(o),s},resetAfterLine:function(){e.length=0},end:function(){if(r!==t.length)throw Error("extra data found")}}}function Ga(t,n,e,r,i,o){let{width:s,height:c,index:u}=t;for(let h=0;h<c;h++)for(let f=0;f<s;f++){let a=e(f,h,u);Ha[r](n,i,a,o),o+=r}return o}function La(t,n,e,r,i,o){let{width:s,height:c,index:u}=t;for(let h=0;h<c;h++){for(let f=0;f<s;f++){let a=i.get(r),g=e(f,h,u);ja[r](n,a,g,o)}i.resetAfterLine()}}Pa.dataToBitMap=function(t,n){let{width:e,height:r,depth:i,bpp:o,interlace:s}=n,c;if(i!==8)c=Ra(t,i);let u;if(i<=8)u=Buffer.alloc(e*r*4);else u=new Uint16Array(e*r*4);let h=Math.pow(2,i)-1,f=0,a,g;if(s)a=ls.getImagePasses(e,r),g=ls.getInterlaceIterator(e,r);else{let d=0;g=function(){let p=d;return d+=4,p},a=[{width:e,height:r}]}for(let d=0;d<a.length;d++)if(i===8)f=Ga(a[d],u,g,o,t,f);else La(a[d],u,g,o,c,h);if(i===8){if(f!==t.length)throw Error("extra data found")}else c.end();return u}});var fi=$t((Z0,ds)=>{function Ja(t,n,e,r,i){let o=0;for(let s=0;s<r;s++)for(let c=0;c<e;c++){let u=i[t[o]];if(!u)throw Error("index "+t[o]+" not in palette");for(let h=0;h<4;h++)n[o+h]=u[h];o+=4}}function Aa(t,n,e,r,i){let o=0;for(let s=0;s<r;s++)for(let c=0;c<e;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++)n[o+h]=0;o+=4}}function Ua(t,n,e,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<e;h++){for(let f=0;f<4;f++)n[c+f]=Math.floor(t[c+f]*o/s+0.5);c+=4}}ds.exports=function(t,n,e=!1){let{depth:r,width:i,height:o,colorType:s,transColor:c,palette:u}=n,h=t;if(s===3)Ja(t,h,i,o,u);else{if(c)Aa(t,h,i,o,c);if(r!==8&&!e){if(r===16)h=Buffer.alloc(i*o*4);Ua(t,h,i,o,r)}}return h}});var ws=$t((q0,ps)=>{var Ta=jt("util"),ai=jt("zlib"),ms=ni(),Wa=hs(),Qa=ui(),Za=hi(),qa=fi(),rn=ps.exports=function(t){ms.call(this),this._parser=new Qa(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()};Ta.inherits(rn,ms);rn.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};rn.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=ai.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 e=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(e,ai.Z_MIN_CHUNK);this._inflate=ai.createInflate({chunkSize:r});let i=e,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)};rn.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new Wa(this._bitmapInfo)};rn.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};rn.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};rn.prototype._simpleTransparency=function(){this._metaData.alpha=!0};rn.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};rn.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};rn.prototype._complete=function(t){if(this.errord)return;let n;try{let e=Za.dataToBitMap(t,this._bitmapInfo);n=qa(e,this._bitmapInfo,this._options.skipRescale),e=null}catch(e){this._handleError(e);return}this.emit("parsed",n)}});var bs=$t((X0,$s)=>{var Xt=Tn();$s.exports=function(t,n,e,r){let i=[Xt.COLORTYPE_COLOR_ALPHA,Xt.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let p=function(){let l=new ArrayBuffer(2);return new DataView(l).setInt16(0,256,!0),new Int16Array(l)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&p)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(n*e*u),f=0,a=0,g=r.bgColor||{};if(g.red===void 0)g.red=s;if(g.green===void 0)g.green=s;if(g.blue===void 0)g.blue=s;function d(){let p,l,k,v=s;switch(r.inputColorType){case Xt.COLORTYPE_COLOR_ALPHA:v=o[f+3],p=o[f],l=o[f+1],k=o[f+2];break;case Xt.COLORTYPE_COLOR:p=o[f],l=o[f+1],k=o[f+2];break;case Xt.COLORTYPE_ALPHA:v=o[f+1],p=o[f],l=p,k=p;break;case Xt.COLORTYPE_GRAYSCALE:p=o[f],l=p,k=p;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)v/=s,p=Math.min(Math.max(Math.round((1-v)*g.red+v*p),0),s),l=Math.min(Math.max(Math.round((1-v)*g.green+v*l),0),s),k=Math.min(Math.max(Math.round((1-v)*g.blue+v*k),0),s)}return{red:p,green:l,blue:k,alpha:v}}for(let p=0;p<e;p++)for(let l=0;l<n;l++){let k=d(o,f);switch(r.colorType){case Xt.COLORTYPE_COLOR_ALPHA:case Xt.COLORTYPE_COLOR:if(r.bitDepth===8){if(h[a]=k.red,h[a+1]=k.green,h[a+2]=k.blue,i)h[a+3]=k.alpha}else if(h.writeUInt16BE(k.red,a),h.writeUInt16BE(k.green,a+2),h.writeUInt16BE(k.blue,a+4),i)h.writeUInt16BE(k.alpha,a+6);break;case Xt.COLORTYPE_ALPHA:case Xt.COLORTYPE_GRAYSCALE:{let v=(k.red+k.green+k.blue)/3;if(r.bitDepth===8){if(h[a]=v,i)h[a+1]=k.alpha}else if(h.writeUInt16BE(v,a),i)h.writeUInt16BE(k.alpha,a+2);break}default:throw Error("unrecognised color Type "+r.colorType)}f+=c,a+=u}return h}});var Ms=$t((_0,Es)=>{var ks=ri();function Xa(t,n,e,r,i){for(let o=0;o<e;o++)r[i+o]=t[n+o]}function _a(t,n,e){let r=0,i=n+e;for(let o=n;o<i;o++)r+=Math.abs(t[o]);return r}function Ca(t,n,e,r,i,o){for(let s=0;s<e;s++){let c=s>=o?t[n+s-o]:0,u=t[n+s]-c;r[i+s]=u}}function za(t,n,e,r){let i=0;for(let o=0;o<e;o++){let s=o>=r?t[n+o-r]:0,c=t[n+o]-s;i+=Math.abs(c)}return i}function Ya(t,n,e,r,i){for(let o=0;o<e;o++){let s=n>0?t[n+o-e]:0,c=t[n+o]-s;r[i+o]=c}}function Va(t,n,e){let r=0,i=n+e;for(let o=n;o<i;o++){let s=n>0?t[o-e]:0,c=t[o]-s;r+=Math.abs(c)}return r}function xa(t,n,e,r,i,o){for(let s=0;s<e;s++){let c=s>=o?t[n+s-o]:0,u=n>0?t[n+s-e]:0,h=t[n+s]-(c+u>>1);r[i+s]=h}}function Ba(t,n,e,r){let i=0;for(let o=0;o<e;o++){let s=o>=r?t[n+o-r]:0,c=n>0?t[n+o-e]:0,u=t[n+o]-(s+c>>1);i+=Math.abs(u)}return i}function Da(t,n,e,r,i,o){for(let s=0;s<e;s++){let c=s>=o?t[n+s-o]:0,u=n>0?t[n+s-e]:0,h=n>0&&s>=o?t[n+s-(e+o)]:0,f=t[n+s]-ks(c,u,h);r[i+s]=f}}function tg(t,n,e,r){let i=0;for(let o=0;o<e;o++){let s=o>=r?t[n+o-r]:0,c=n>0?t[n+o-e]:0,u=n>0&&o>=r?t[n+o-(e+r)]:0,h=t[n+o]-ks(s,c,u);i+=Math.abs(h)}return i}var ng={0:Xa,1:Ca,2:Ya,3:xa,4:Da},eg={0:_a,1:za,2:Va,3:Ba,4:tg};Es.exports=function(t,n,e,r,i){let o;if(!("filterType"in r)||r.filterType===-1)o=[0,1,2,3,4];else if(typeof r.filterType==="number")o=[r.filterType];else throw Error("unrecognised filter types");if(r.bitDepth===16)i*=2;let s=n*i,c=0,u=0,h=Buffer.alloc((s+1)*e),f=o[0];for(let a=0;a<e;a++){if(o.length>1){let g=1/0;for(let d=0;d<o.length;d++){let p=eg[o[d]](t,u,s,i);if(p<g)f=o[d],g=p}}h[c]=f,c++,ng[f](t,u,s,h,c,i),c+=s,u+=s}return h}});var gi=$t((C0,vs)=>{var Gt=Tn(),rg=ci(),ig=bs(),og=Ms(),sg=jt("zlib"),kn=vs.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||sg.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType==="number"?t.colorType:Gt.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType==="number"?t.inputColorType:Gt.COLORTYPE_COLOR_ALPHA,[Gt.COLORTYPE_GRAYSCALE,Gt.COLORTYPE_COLOR,Gt.COLORTYPE_COLOR_ALPHA,Gt.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw Error("option color type:"+t.colorType+" is not supported at present");if([Gt.COLORTYPE_GRAYSCALE,Gt.COLORTYPE_COLOR,Gt.COLORTYPE_COLOR_ALPHA,Gt.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")};kn.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};kn.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};kn.prototype.filterData=function(t,n,e){let r=ig(t,n,e,this._options),i=Gt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return og(r,n,e,this._options,i)};kn.prototype._packChunk=function(t,n){let e=n?n.length:0,r=Buffer.alloc(e+12);if(r.writeUInt32BE(e,0),r.writeUInt32BE(t,4),n)n.copy(r,8);return r.writeInt32BE(rg.crc32(r.slice(4,r.length-4)),r.length-4),r};kn.prototype.packGAMA=function(t){let n=Buffer.alloc(4);return n.writeUInt32BE(Math.floor(t*Gt.GAMMA_DIVISION),0),this._packChunk(Gt.TYPE_gAMA,n)};kn.prototype.packIHDR=function(t,n){let e=Buffer.alloc(13);return e.writeUInt32BE(t,0),e.writeUInt32BE(n,4),e[8]=this._options.bitDepth,e[9]=this._options.colorType,e[10]=0,e[11]=0,e[12]=0,this._packChunk(Gt.TYPE_IHDR,e)};kn.prototype.packIDAT=function(t){return this._packChunk(Gt.TYPE_IDAT,t)};kn.prototype.packIEND=function(){return this._packChunk(Gt.TYPE_IEND,null)}});var Is=$t((z0,Fs)=>{var cg=jt("util"),ys=jt("stream"),ug=Tn(),hg=gi(),Ss=Fs.exports=function(t){ys.call(this);let n=t||{};this._packer=new hg(n),this._deflate=this._packer.createDeflate(),this.readable=!0};cg.inherits(Ss,ys);Ss.prototype.pack=function(t,n,e,r){if(this.emit("data",Buffer.from(ug.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(n,e)),r)this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(t,n,e);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 Gs=$t((be,Rs)=>{var Ns=jt("assert").ok,Wn=jt("zlib"),fg=jt("util"),Os=jt("buffer").kMaxLength;function Nn(t){if(!(this instanceof Nn))return new Nn(t);if(t&&t.chunkSize<Wn.Z_MIN_CHUNK)t.chunkSize=Wn.Z_MIN_CHUNK;if(Wn.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 ag(t){return new Nn(t)}function Hs(t,n){if(n)process.nextTick(n);if(!t._handle)return;t._handle.close(),t._handle=null}Nn.prototype._processChunk=function(t,n,e){if(typeof e==="function")return Wn.Inflate._processChunk.call(this,t,n,e);let r=this,i=t&&t.length,o=this._chunkSize-this._offset,s=this._maxLength,c=0,u=[],h=0,f;this.on("error",function(p){f=p});function a(p,l){if(r._hadError)return;let k=o-l;if(Ns(k>=0,"have should not go down"),k>0){let v=r._buffer.slice(r._offset,r._offset+k);if(r._offset+=k,v.length>s)v=v.slice(0,s);if(u.push(v),h+=v.length,s-=v.length,s===0)return!1}if(l===0||r._offset>=r._chunkSize)o=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if(l===0)return c+=i-p,i=p,!0;return!1}Ns(this._handle,"zlib binding closed");let g;do g=this._handle.writeSync(n,t,c,i,this._buffer,this._offset,o),g=g||this._writeState;while(!this._hadError&&a(g[0],g[1]));if(this._hadError)throw f;if(h>=Os)throw Hs(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+Os.toString(16)+" bytes");let d=Buffer.concat(u,h);return Hs(this),d};fg.inherits(Nn,Wn.Inflate);function gg(t,n){if(typeof n==="string")n=Buffer.from(n);if(!(n instanceof Buffer))throw TypeError("Not a string or buffer");let e=t._finishFlushFlag;if(e==null)e=Wn.Z_FINISH;return t._processChunk(n,e)}function js(t,n){return gg(new Nn(n),t)}Rs.exports=be=js;be.Inflate=Nn;be.createInflate=ag;be.inflateSync=js});var li=$t((Y0,Ps)=>{var Ls=Ps.exports=function(t){this._buffer=t,this._reads=[]};Ls.prototype.read=function(t,n){this._reads.push({length:Math.abs(t),allowLess:t<0,func:n})};Ls.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 n=this._buffer;this._buffer=n.slice(t.length),t.func.call(this,n.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 Ks=$t((mg)=>{var lg=li(),dg=ii();mg.process=function(t,n){let e=[],r=new lg(t);return new dg(n,{read:r.read.bind(r),write:function(o){e.push(o)},complete:function(){}}).start(),r.process(),Buffer.concat(e)}});var Ts=$t((x0,Us)=>{var Js=!0,As=jt("zlib"),wg=Gs();if(!As.deflateSync)Js=!1;var $g=li(),bg=Ks(),kg=ui(),Eg=hi(),Mg=fi();Us.exports=function(t,n){if(!Js)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let e;function r(y){e=y}let i;function o(y){i=y}function s(y){i.transColor=y}function c(y){i.palette=y}function u(){i.alpha=!0}let h;function f(y){h=y}let a=[];function g(y){a.push(y)}let d=new $g(t);if(new kg(n,{read:d.read.bind(d),error:r,metadata:o,gamma:f,palette:c,transColor:s,inflateData:g,simpleTransparency:u}).start(),d.process(),e)throw e;let l=Buffer.concat(a);a.length=0;let k;if(i.interlace)k=As.inflateSync(l);else{let $=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;k=wg(l,{chunkSize:$,maxLength:$})}if(l=null,!k||!k.length)throw Error("bad png - invalid inflate data response");let v=bg.process(k,i);l=null;let I=Eg.dataToBitMap(v,i);v=null;let E=Mg(I,i,n.skipRescale);return i.data=E,i.gamma=h||0,i}});var qs=$t((B0,Zs)=>{var Ws=!0,Qs=jt("zlib");if(!Qs.deflateSync)Ws=!1;var vg=Tn(),yg=gi();Zs.exports=function(t,n){if(!Ws)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new yg(n||{}),i=[];if(i.push(Buffer.from(vg.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=Qs.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 Xs=$t((Ig)=>{var Sg=Ts(),Fg=qs();Ig.read=function(t,n){return Sg(t,n||{})};Ig.write=function(t,n){return Fg(t,n)}});var Cs=$t((Lg)=>{var Hg=jt("util"),_s=jt("stream"),jg=ws(),Rg=Is(),Gg=Xs(),Lt=Lg.PNG=function(t){if(_s.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 jg(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(n){this.data=n,this.emit("parsed",n)}.bind(this)),this._packer=new Rg(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"))};Hg.inherits(Lt,_s);Lt.sync=Gg;Lt.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};Lt.prototype.parse=function(t,n){if(n){let e,r;e=function(i){this.removeListener("error",r),this.data=i,n(null,this)}.bind(this),r=function(i){this.removeListener("parsed",e),n(i,null)}.bind(this),this.once("parsed",e),this.once("error",r)}return this.end(t),this};Lt.prototype.write=function(t){return this._parser.write(t),!0};Lt.prototype.end=function(t){this._parser.end(t)};Lt.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};Lt.prototype._gamma=function(t){this.gamma=t};Lt.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};Lt.bitblt=function(t,n,e,r,i,o,s,c){if(e|=0,r|=0,i|=0,o|=0,s|=0,c|=0,e>t.width||r>t.height||e+i>t.width||r+o>t.height)throw Error("bitblt reading outside image");if(s>n.width||c>n.height||s+i>n.width||c+o>n.height)throw Error("bitblt writing outside image");for(let u=0;u<o;u++)t.data.copy(n.data,(c+u)*n.width+s<<2,(r+u)*t.width+e<<2,(r+u)*t.width+e+i<<2)};Lt.prototype.bitblt=function(t,n,e,r,i,o,s){return Lt.bitblt(this,t,n,e,r,i,o,s),this};Lt.adjustGamma=function(t){if(t.gamma){for(let n=0;n<t.height;n++)for(let e=0;e<t.width;e++){let r=t.width*n+e<<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}};Lt.prototype.adjustGamma=function(){Lt.adjustGamma(this)}});var oo=$t((vb,Dh)=>{var io={to(t,n){if(!n)return`\x1B[${t+1}G`;return`\x1B[${n+1};${t+1}H`},move(t,n){let e="";if(t<0)e+=`\x1B[${-t}D`;else if(t>0)e+=`\x1B[${t}C`;if(n<0)e+=`\x1B[${-n}A`;else if(n>0)e+=`\x1B[${n}B`;return e},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"},up={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},hp={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 n="";for(let e=0;e<t;e++)n+=this.line+(e<t-1?io.up():"");if(t)n+=io.left;return n}};Dh.exports={cursor:io,scroll:up,erase:hp,beep:"\x07"}});import{isMainThread as d0}from"node:worker_threads";import{parseArgs as a0}from"node:util";var en={name:"@kecan0406/ttheme",version:"1.0.33",type:"module",bin:{ttheme:"bin/ttheme.js"},files:["bin","dist/manifest.json","dist/ghostty/ttheme.conf","shell","!shell/check.zsh","ghostty/shaders"],description:"Character terminal palettes for ghostty, kitty, alacritty, wezterm and iTerm2",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 pu}from"node:fs";import{basename as xl,join as Pe}from"node:path";var ga=/^#[0-9a-f]{6}$/;function Jo(t){return ga.test(t)}function Rt(t){let n=Number.parseInt(t.slice(1),16);return[n>>16&255,n>>8&255,n&255]}function Bt(t){let[n,e,r]=Rt(t).map((i)=>{let o=i/255;return o<=0.03928?o/12.92:((o+0.055)/1.055)**2.4});return 0.2126*n+0.7152*e+0.0722*r}function an(t,n){let e=Bt(t),r=Bt(n);return(Math.max(e,r)+0.05)/(Math.min(e,r)+0.05)}function er(t,n){return Math.round(an(t,n)*100)/100}var wn=7,Ao=3,Vr=0.15,Uo=1.6,To=[1,2,3,4,5,6,9,10,11,12,13,14],Wo=[7,15];function de(t,n){let e=t.ansi[n];if(e===void 0)throw Error(`${t.name}: missing ANSI ${n}`);return e}function xr(t,n,e){let r=t.background;return n.flatMap((i)=>{let o=de(t,i);return an(o,r)<e?[`ANSI ${i} ${o} on ${r} is ${er(o,r)}:1, needs ${e}:1`]:[]})}function Qo(t,n){return Math.min(...n.map((e)=>an(de(t,e),t.background)))}var rr=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:wn,measure:({foreground:t,background:n})=>an(t,n),check:({foreground:t,background:n})=>an(t,n)<wn?[`foreground ${t} on ${n} is ${er(t,n)}:1, needs ${wn}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:Ao,measure:(t)=>Qo(t,To),check:(t)=>xr(t,To,Ao)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:Vr,measure:(t)=>Bt(de(t,0)),check:(t)=>{let n=de(t,0);return Bt(n)>Vr?[`ANSI 0 ${n} has luminance ${Bt(n).toFixed(3)}, needs <= ${Vr}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:wn,measure:(t)=>Qo(t,Wo),check:(t)=>xr(t,Wo,wn)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:Uo,measure:(t)=>an(de(t,8),t.background),check:(t)=>xr(t,[8],Uo)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:wn,measure:({foreground:t,selectionBackground:n})=>n===void 0?Number.NaN:an(t,n),check:({foreground:t,selectionBackground:n})=>n!==void 0&&an(t,n)<wn?[`foreground ${t} on selection ${n} is ${er(t,n)}:1, needs ${wn}:1`]:[]}],k0=rr.map((t)=>t.rule),ir=rr.map(({rule:t,label:n,unit:e,min:r,max:i})=>({rule:t,label:n,unit:e,...r===void 0?{}:{min:r},...i===void 0?{}:{max:i}}));function Zo(t){return rr.map((n)=>Math.round(n.measure(t)*1000)/1000)}function Br(t){return rr.filter((n)=>!t.waive.includes(n.rule)).flatMap((n)=>n.check(t).map((e)=>({theme:t.name,rule:n.rule,detail:e})))}function qo(t){return t.flatMap(Br)}var la=["black","red","green","yellow","blue","magenta","cyan","white"];function Xo(t,n){return[t,...la.map((e,r)=>`${e} = '${n[r]}'`),""].join(`
3
- `)}var me={id:"alacritty",limits:"no shaders, no runtime color API (OSC only)",emit(t){let n=[...An(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}'`,"",Xo("[colors.normal]",t.ansi.slice(0,8)),Xo("[colors.bright]",t.ansi.slice(8,16))].join(`
4
- `),e=[`# ${t.name} — font settings.`,`# Pair with the palette: import = ["~/.config/alacritty/themes/${t.name}.toml"]`,"","[font]",`size = ${t.font.size}`,"","[font.normal]",`family = '${t.font.family}'`,""].join(`
5
- `);return[{path:`alacritty/themes/${t.name}.toml`,content:n},{path:`alacritty/config/${t.name}.toml`,content:e}]}};import{isDeepStrictEqual as da}from"node:util";var pe={id:"ghostty",emit(t){let n=[...An(t),`background = ${t.background}`,`foreground = ${t.foreground}`,`cursor-color = ${t.cursor}`,`selection-background = ${t.selectionBackground}`,`selection-foreground = ${t.foreground}`,...t.ansi.map((e,r)=>`palette = ${r}=${e}`),"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(`
6
- `);return[{path:`ghostty/themes/${t.name}`,content:n}]},emitShared(t){let[n]=t;if(!n)return[];for(let r of t)if(!da(r.font,n.font)||r.ghostty.shader!==n.ghostty.shader)throw Error(`${r.name}: per-theme font/shader overrides cannot be expressed in the shared ghostty/ttheme.conf`);return[{path:"ghostty/ttheme.conf",content:["# ttheme — shared font and shader, identical for every palette.","# Pick colors with: theme = <palette>",`font-family = ${n.font.family}`,`font-size = ${n.font.size}`,...n.font.codepointMap.map((r)=>`font-codepoint-map = ${r.range}=${r.family}`),...n.ghostty.shader?["",`custom-shader = ~/.config/ghostty/shaders/${n.ghostty.shader}`,"custom-shader-animation = true"]:[],""].join(`
7
- `)}]}};function $n(t){let[n,e,r]=Rt(t);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":e/255,"Red Component":n/255}}function _o(t){return{...Object.fromEntries(t.ansi.map((n,e)=>[`Ansi ${e} Color`,$n(n)])),"Background Color":$n(t.background),"Bold Color":$n(t.foreground),"Cursor Color":$n(t.cursor),"Cursor Text Color":$n(t.background),"Foreground Color":$n(t.foreground),"Selected Text Color":$n(t.foreground),"Selection Color":$n(t.selectionBackground)}}function ma(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function Co(t,n,e,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,...ma(n.get(s.name)),..._o(s)}),o=[...e?[i(e,"default")]:[],...t.map((s)=>i(s,s.name))];return`${JSON.stringify({Profiles:o},null,2)}
8
- `}function pa(t,n){return[` <key>${t}</key>`,"\t<dict>",...Object.entries(n).flatMap(([e,r])=>[` <key>${e}</key>`,typeof r==="string"?` <string>${r}</string>`:` <real>${r}</real>`]),"\t</dict>"].join(`
9
- `)}var we={id:"iterm2",limits:"colors only — font lives in the profile; colors are Display P3, the space iTerm2 reads OSC colors in",emit(t){let n=['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>",...Object.entries(_o(t)).map(([e,r])=>pa(e,r)),"</dict>","</plist>",""].join(`
10
- `);return[{path:`iterm2/${t.name}.itermcolors`,content:n}]}};var $e={id:"kitty",limits:"no GLSL shaders, no per-codepoint font mapping",emit(t){let n=[...An(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((r,i)=>`color${i} ${r}`),""].join(`
11
- `),e=[`# ${t.name} — font settings.`,`# Pair with the palette: include themes/${t.name}.conf`,`font_family ${t.font.family}`,`font_size ${t.font.size}`,""].join(`
12
- `);return[{path:`kitty/themes/${t.name}.conf`,content:n},{path:`kitty/config/${t.name}.conf`,content:e}]}};function zo(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, 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(`
13
- `)}import{createHash as Jg}from"node:crypto";import{mkdirSync as ic,readdirSync as On,readFileSync as oc,renameSync as sc,rmSync as Zn,statSync as Ag,utimesSync as Ug,writeFileSync as ur}from"node:fs";import{isAbsolute as Tg,join as Mt}from"node:path";var Vs=nr(ns(),1),sr=nr(Cs(),1),zs=[137,80,78,71,13,10,26,10],xs=13;function ke(t){return t.length>=zs.length&&zs.every((n,e)=>t[e]===n)}function Pg(t){let n=sr.PNG.sync.read(Buffer.from(t));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function Bs(t,n){if(ke(t)){let e=Ee(t);if(e&&e.width*e.height>n)throw Error(`${e.width}×${e.height} is over ${n/1e6} megapixels`);return Pg(t)}if(t[0]===255&&t[1]===216){let e=Vs.decode(t,{useTArray:!0,formatAsRGBA:!0,maxResolutionInMP:n/1e6,maxMemoryUsageInMB:1024});return{width:e.width,height:e.height,data:e.data}}throw Error("not a PNG or JPEG image")}function Qn(t){let n=new sr.PNG({width:t.width,height:t.height});return n.data=Buffer.from(t.data),sr.PNG.sync.write(n)}function Ys(t,n){for(let e=0;e+n.length<=t.length;e++){let r=!0;for(let i=0;i<n.length&&r;i++)r=t[e+i]===n.charCodeAt(i);if(r)return e}return-1}function Ee(t){if(t.length<33||!ke(t))return null;let n=new DataView(t.buffer,t.byteOffset,t.byteLength),e=n.getUint32(16),r=n.getUint32(20);if(t[25]===4||t[25]===6)return{width:e,height:r,alpha:!0};let i=Ys(t,"IDAT");return{width:e,height:r,alpha:Ys(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function Ds(t,n=xs){let{width:e,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)>=n)e=Math.min(e,c),i=Math.max(i,c),r=Math.min(r,s),o=Math.max(o,s);return i<0?null:{x:e,y:r,w:i-e+1,h:o-r+1}}function Me(t,n={x:0,y:0,w:t.width,h:t.height}){let e=0;for(let r=n.y;r<n.y+n.h;r++)for(let i=n.x;i<n.x+n.w;i++)if((t.data[(r*t.width+i)*4+3]??0)<xs)e++;return Math.round(e*100/(n.w*n.h))}function Kg(t,n){if(n<=1)return t;let e=Math.max(1,Math.floor(t.width/n)),r=Math.max(1,Math.floor(t.height/n)),i=new Uint8Array(e*r*4),o=t.data;for(let s=0;s<r;s++)for(let c=0;c<e;c++){let u=0,h=0,f=0,a=0;for(let d=0;d<n;d++)for(let p=0;p<n;p++){let l=((s*n+d)*t.width+c*n+p)*4,k=o[l+3]??0;u+=(o[l]??0)*k,h+=(o[l+1]??0)*k,f+=(o[l+2]??0)*k,a+=k}let g=(s*e+c)*4;if(a>0)i[g]=Math.round(u/a),i[g+1]=Math.round(h/a),i[g+2]=Math.round(f/a);i[g+3]=Math.round(a/(n*n))}return{width:e,height:r,data:i}}function tc(t,n,e){let r=Math.min(n/t.width,e/t.height),i=Math.max(1,Math.round(t.width*r)),o=Math.max(1,Math.round(t.height*r)),s=cr(t,{x:0,y:0,w:t.width,h:t.height},i,o),c=new Uint8Array(n*e*4),u=Math.floor((n-i)/2),h=Math.floor((e-o)/2);for(let f=0;f<o;f++)c.set(s.data.subarray(f*i*4,(f+1)*i*4),((h+f)*n+u)*4);return{width:n,height:e,data:c}}function cr(t,n,e,r){let i=Math.max(1,Math.floor(Math.min(n.w/e,n.h/r))),o=Kg(t,i),s=o.data,c=new Uint8Array(e*r*4);for(let u=0;u<r;u++){let h=Math.min(o.height-1,Math.max(0,n.y/i+(u+0.5)*n.h/i/r-0.5)),f=Math.floor(h),a=Math.min(o.height-1,f+1),g=h-f;for(let d=0;d<e;d++){let p=Math.min(o.width-1,Math.max(0,n.x/i+(d+0.5)*n.w/i/e-0.5)),l=Math.floor(p),k=Math.min(o.width-1,l+1),v=p-l,I=(f*o.width+l)*4,E=(f*o.width+k)*4,y=(a*o.width+l)*4,$=(a*o.width+k)*4,H=(s[I+3]??0)*(1-v)*(1-g),b=(s[E+3]??0)*v*(1-g),R=(s[y+3]??0)*(1-v)*g,O=(s[$+3]??0)*v*g,P=H+b+R+O,G=(u*e+d)*4;if(P>0)for(let C=0;C<3;C++){let A=(s[I+C]??0)*H+(s[E+C]??0)*b+(s[y+C]??0)*R+(s[$+C]??0)*O;c[G+C]=Math.round(A/P)}c[G+3]=Math.round(P)}}return{width:e,height:r,data:c}}var nc={width:2560,height:1550},Wg=2560,Qg=0.1,gn={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Zg=Bt(di("#19161e","#9b86c8",0.2)),qg="shelf";function di(t,n,e){let r=Rt(t),i=Rt(n);return`#${r.map((o,s)=>Math.round(o+((i[s]??0)-o)*e).toString(16).padStart(2,"0")).join("")}`}function Xg(t,n){if(n==="background"||n==="foreground"||n==="cursor")return t[n];if(n==="selection"&&t.selection)return t.selection;let e=/^ansi(\d|1[0-5])$/.exec(n),r=e?t.ansi[Number(e[1])]:void 0;if(!r)throw Error(`${t.name} has no slot ${n}`);return r}function ec(t){if(t(1))return 1;let n=0,e=1;for(let r=0;r<40;r++){let i=(n+e)/2;if(t(i))n=i;else e=i}return n}function rc(t,n){let e=Xg(t,n),i=ec((h)=>Br({name:t.name,background:di(t.background,e,h),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),o=ec((h)=>Bt(di(t.background,e,h))<=Zg),s=Math.floor(Math.min(i,o)*1000)/1000,c=Rt(t.background),u=Math.hypot(...Rt(e).map((h,f)=>(h-(c[f]??0))*s));return{slot:n,color:e,cap:i,matched:o,opacity:s,reach:u}}function hr(t,n){let e=rc(t,"cursor");if(e.opacity>=Qg)return e;return n.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>rc(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,e)}function mi(t,n,e){let r=Rt(n),i=Rt(e),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 _g(t,n,e){let r=Rt(n),i=t.data,o=new Uint8Array(i.length);for(let s=0;s<i.length;s+=4){let c=(i[s+3]??0)/255*e;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 cc(t){return Ds(t)??{x:0,y:0,w:t.width,h:t.height}}function Cg(t,n){if(t<=0||n<=0)return nc;let e=Math.min(1,nc.width/Math.max(t,n));return{width:Math.round(t*e),height:Math.round(n*e)}}function zg(t,n){let e=Math.min(1,Wg/Math.max(n.w,n.h));return cr(t,n,Math.round(n.w*e),Math.round(n.h*e))}function uc(t,n,e,r){if(r<gn.stands){let u=t.w*e>t.h*n?{x:t.x+(t.w-t.h*n/e)/2,y:t.y,w:t.h*n/e,h:t.h}:{x:t.x,y:t.y,w:t.w,h:t.w*e/n};return{crop:u,at:{x:0,y:0,w:n,h:e},focus:(u.y-t.y+u.h/2)/t.h}}let i=Math.max(gn.tall*e,gn.reach*n*t.h/t.w),o=i*t.w/t.h;if(o>gn.widest*n)o=gn.widest*n,i=o*t.h/t.w;let s=gn.headroom*e,c=Math.min(1,(e-s)/i);return{crop:{x:t.x,y:t.y,w:t.w,h:t.h*c},at:{x:n*(1-gn.margin)-o,y:s,w:o,h:i*c},focus:Math.min(1,(e/2-s)/i)}}function hc(t,n,e,r){let i=Math.max(1,Math.round(n.at.w)),o=Math.max(1,Math.round(n.at.h)),s=cr(t,n.crop,i,o),c=new Uint8Array(e*r*4),u=Math.round(n.at.x),h=Math.round(n.at.y);for(let f=0;f<o;f++){let a=h+f,g=Math.max(0,-u),d=Math.min(i,e-u);if(a<0||a>=r||d<=g)continue;c.set(s.data.subarray((f*i+g)*4,(f*i+d)*4),(a*e+u+g)*4)}return{width:e,height:r,data:c}}function fc(t,n,e,r,i){let o=cc(t),s=hc(t,uc(o,r,i,Me(t,o)),r,i);return _g(mi(s,n.background,e.color),n.background,e.opacity)}function En(t){return Mt(t,"ttheme","backgrounds")}function Yg(t,n,e,r,i){return[...r?[`# from ${r}`]:[],...i?[`# image ${i}`]:[],`background-image = ${n}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${e}`,`config-file = ?${t}.tune.conf`,`config-file = ?${t}.off.conf`,""].join(`
14
- `)}function ac(t,n,e){let r=new Map;for(let s of[`${n}.conf`,`${n}.tune.conf`,`${n}.off.conf`]){let c;try{c=oc(Mt(t,s),"utf8")}catch{if(s===`${n}.conf`)return;continue}for(let u of c.split(`
15
- `)){let h=/^(background-image(?:-fit|-opacity)?)\s*=\s*(.*?)\s*$/.exec(u);if(h)r.set(h[1],h[2])}}let i=r.get("background-image")??"";if(i==="")return;let o=Number(r.get("background-image-opacity")??1);return{image:i.startsWith("~/")?Mt(e,i.slice(2)):Tg(i)?i:Mt(t,i),opacity:Number.isFinite(o)?o:1,cover:r.get("background-image-fit")==="cover"}}function Vg(t,n){for(let e of On(t))if(pi(e,n))Zn(Mt(t,e))}function xg(t){return`${t.site}_${t.id}`}function fr(t,n){return Mt(t,qg,n)}function pi(t,n){let e=t.slice(n.length);return t.startsWith(n)&&(e===".conf"||e===".tune.conf"||e===".off.conf"||/^(\.[0-9a-f]{8})?(@[a-z0-9-]+)?\.png$/.test(e))}function ve(t,n){try{return/^# image (\S+)$/m.exec(oc(Mt(t,`${n}.conf`),"utf8"))?.[1]}catch{return}}function Bg(t,n){try{return On(fr(t,n))}catch{return[]}}function gc(t,n){let e=ve(t,n);return[...e?[e]:[],...Bg(t,n)].sort()}function lc(t,n){let e=ve(t,n);if(!e)return;let r=Mt(fr(t,n),e);Zn(r,{recursive:!0,force:!0}),ic(r,{recursive:!0});for(let i of On(t))if(pi(i,n))sc(Mt(t,i),Mt(r,i.slice(n.length)))}function dc(t,n,e){let r=Mt(fr(t,n),e);for(let i of On(r))sc(Mt(r,i),Mt(t,`${n}${i}`));Zn(r,{recursive:!0})}function mc(t,n,e){try{return On(Mt(t,"originals")).find((r)=>r.startsWith(`${n}-${e}.`))}catch{return}}function pc(t,n,e){let r=mc(t,n,e);if(r){let i=new Date;Ug(Mt(t,"originals",r),i,i)}}function wc(t,n,e){let r=En(t),i=gc(r,n),o=ve(r,n);if(!o||i.length<2)throw Error(`${n} has no other image`);let s=(i.indexOf(o)+e+i.length)%i.length,c=i[s];return lc(r,n),dc(r,n,c),pc(r,n,c),{key:c,at:s+1,of:i.length}}function $c(t,n){let e=En(t),r=On(e).filter((h)=>pi(h,n));if(r.length===0)throw Error(`${n} has no image`);let i=gc(e,n),o=ve(e,n),s=o&&mc(e,n,o);if(s)Zn(Mt(e,"originals",s));for(let h of r)Zn(Mt(e,h));let c=i.filter((h)=>h!==o),u=c[(o?i.indexOf(o):0)%c.length];if(u)dc(e,n,u),pc(e,n,u);return{key:o,left:c.length}}function Dg(t,n,e){if(ve(t,n)!==e)lc(t,n);if(e)Zn(Mt(fr(t,n),e),{recursive:!0,force:!0});Vg(t,n)}function bc(t,n,e,r,i,o){let s=En(t),c=n.name,u=xg(i);ic(Mt(s,"originals"),{recursive:!0}),Dg(s,c,u);let h=cc(r),{width:f,height:a}=Cg(o.width,o.height),g=uc(h,f,a,Me(r,h)),d=Qn(mi(zg(r,h),n.background,e.color)),p=Qn(mi(hc(r,g,f,a),n.background,e.color)),l=Mt(s,`${c}.${Jg("sha1").update(d).update(p).digest("hex").slice(0,8)}`),k=`${l}.png`,v=`${l}@fill-${Math.round(g.focus*100)}.png`,I=Mt(s,`${c}.conf`),E=Mt(s,"originals",`${c}-${i.site}_${i.id}.${i.ext}`);return ur(k,d),ur(v,p),ur(I,Yg(c,v,e.opacity,i.from,u)),ur(E,i.bytes),[k,v,I,E]}function kc(t){let n=Mt(En(t),"originals"),e=new Map,r;try{r=On(n)}catch{return new Map}for(let i of r){let o=/^(.+)-([a-z.]+)_(\d+)\.[a-z]+$/.exec(i),[,s,c,u]=o??[];if(!s||!c||!u)continue;let h=Ag(Mt(n,i)).mtimeMs,f=e.get(s);if(!f||h>f.at)e.set(s,{site:c,id:Number(u),at:h})}return new Map([...e].map(([i,{site:o,id:s}])=>[i,{site:o,id:s}]))}function wi(t){let{slot:n,color:e,opacity:r}=hr({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:Zo(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:n,color:e,opacity:r}}}function qn(t){return t.filter((n)=>n.default!==!0)}function tl(t){let[n]=t;if(!n)throw Error("manifest needs at least one theme");return{version:en.version,gate:ir,placement:gn,font:n.font,...n.ghostty.shader?{shader:n.ghostty.shader}:{},palettes:t.map(wi)}}var $i={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(tl(t),null,2)}
16
- `}]}};import{readdirSync as Rl,readFileSync as yi}from"node:fs";import{basename as Gl,join as Si}from"node:path";import{readdirSync as nl,rmSync as el,statSync as rl}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as il}from"node:net";import{homedir as ol}from"node:os";import{join as Se}from"node:path";import{setTimeout as sl}from"node:timers/promises";var Hn=100,Rn=25000000,cl=536870912,Fe=["safe","questionable","explicit"],jn=["nudity","underwear"],ul={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},ye={safe:"s",questionable:"q",explicit:"e"},hl=8191,fl=20000,al=5000,Ec=3000,Mc=8,gl=3000,Fc=60000,vc=3,ki=`ttheme/${en.version} (+${en.homepage})`,ll=["orig","tile","thumb","cut"],Ic=new Map,dl=yl(process.env.TTHEME_FIND_HOSTS),ml=vl(process.env.TTHEME_FIND_CUTOUTS);il(gl);function yc(t){try{return nl(t)}catch{return[]}}function ar(t){return t.startsWith("//")?`https:${t}`:t}function Ie(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function Ne(t){let n=t.trim();if(!n)return[];let e=JSON.parse(n);if(Array.isArray(e))return e;let r=e.posts;return Array.isArray(r)?r:[]}function pl(t){let n=t.trim(),r=(n?JSON.parse(n):{}).tags??{};return new Map(Object.entries(r).map(([i,o])=>[i,String(o)]))}function bi(t,n,e){let r=ar(String(t??""));return{file:r,width:Number(n)||0,height:Number(e)||0,ext:Ie(r)}}function Nc(t,n){let e=ar(String(n.preview??""));if(!n.file||!e||!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:n.file,preview:e,ext:n.ext,owner:String(n.owner??""),artist:n.artist,score:Number(t.score)||0,rating:String(t.rating??""),md5:String(n.md5??""),source:String(t.source??""),tags:n.tags.split(/\s+/).filter(Boolean),solo:n.solo,family:Number(t.parent_id)||(t.has_children===!0?Number(t.id):0),smaller:n.versions.filter((o)=>o.file&&o.width>0&&o.height>0&&o.width*o.height<r*i)}]}function wl(t){let n=pl(t);return Ne(t).flatMap((e)=>{let r=ar(String(e.file_url??"")),i=String(e.tags??"");return Nc(e,{preview:e.preview_url,file:r,ext:String(e.file_ext||Ie(r)).toLowerCase(),owner:e.author,artist:i.split(/\s+/).find((o)=>n.get(o)==="artist")??"",md5:e.md5,tags:i,solo:void 0,versions:[bi(e.jpeg_url,e.jpeg_width,e.jpeg_height),bi(e.sample_url,e.sample_width,e.sample_height)]})})}function $l(t){return Ne(t).flatMap((n)=>{let e=ar(String(n.file_url??"")),r=String(n.tag_string??""),i=n.media_asset??{};return Nc(n,{preview:i.variants?.find((o)=>o.type==="360x360")?.url??n.preview_file_url,file:e,ext:String(n.file_ext||Ie(e)).toLowerCase(),owner:"",artist:String(n.tag_string_artist??"").split(/\s+/)[0]??"",md5:n.md5,tags:r,solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((o)=>bi(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 bl(t){return Ne(t).flatMap((n)=>{let e=String(n.value??"");return e?[{value:e,count:Number(n.post_count)||0}]:[]})}function kl(t){return Ne(t).flatMap((n)=>{let e=String(n.name??"");return e?[{value:e,count:Number(n.count)||0}]:[]})}function El(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function Ml(t){let n=t.trim()?JSON.parse(t):{};return Number(n.counts?.posts)||0}function vl(t){let n=new Map;for(let e of(t??"").split(/\s+/).filter(Boolean)){let r=e.indexOf("=");if(r>0)n.set(e.slice(0,r),e.slice(r+1).split(",").filter(Boolean))}return n}function yl(t){let n=new Map;for(let e of(t??"").split(/[\s,]+/).filter(Boolean)){let r=e.indexOf("="),i=e.slice(0,r);try{let o=new URL(e.slice(r+1));if(i&&o.protocol==="https:")n.set(i,o.origin)}catch{}}return n}function Oc(t,n,e,r){let i=(t??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let o=n.filter((s)=>i.includes(s));return o.length>0?o:[...e]}function gr(t){return Oc(t,Fe,["safe"])}function lr(t){return Oc(t,jn,jn,"none")}function Hc(t,n,e){return{safe:new Set(t),questionable:new Set(n),explicit:new Set(e)}}function jc(t){let n=dl.get(t.key),e=ml.get(t.key);return{...t,origin:n??t.origin,moved:n!==void 0&&n!==t.origin,cutouts:e??t.cutouts,vouched:t.vouched&&e===void 0}}function Rc(t){return t.length<2?t.join(""):t.map((n)=>`~${n}`).join(" ")}function Sc(t){let n=jc(t),e=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...n,cutouts:Rc(n.cutouts),ratings:Hc([ye.safe],[ye.questionable],[ye.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${ye[i]}`;let o=Fe.filter((c)=>!r.includes(c)),[s]=o;return o.length===1&&s?`-rating:${ye[s]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,postsUrl:(r,i)=>`${n.origin}/post.json?${e({limit:String(Hn),page:String(i+1),tags:r})}`,countUrl:(r)=>`${n.origin}/post.xml?${new URLSearchParams({limit:"1",tags:r})}`,postUrl:(r)=>`${n.origin}/post.json?${e({tags:`id:${r}`})}`,pageUrl:(r)=>`${n.origin}/post/show/${r}`,parse:wl,count:El}}function Sl(t){let n=jc(t),e=Hc(["g"],["s","q"],["e"]);return{...n,cutouts:Rc(n.cutouts),ratings:e,rate:(r)=>r.length===Fe.length?"":`rating:${r.flatMap((i)=>[...e[i]]).join(",")}`,best:"order:score",tagBudget:2,postsUrl:(r,i)=>`${n.origin}/posts.json?${new URLSearchParams({limit:String(Hn),page:String(i+1),tags:r})}`,countUrl:(r)=>`${n.origin}/counts/posts.json?${new URLSearchParams({tags:r})}`,postUrl:(r)=>`${n.origin}/posts.json?${new URLSearchParams({limit:"1",tags:`id:${r}`})}`,pageUrl:(r)=>`${n.origin}/posts/${r}`,parse:$l,count:Ml}}function Fl(t){return gt.find((n)=>n.key===t||n.name===t||new URL(n.origin).host===t)}function Ei(t){return t.split(/\s+/).filter((n)=>n&&!n.startsWith("rating:")).length}function dr(t,n){let e=t.trim();if(/^\d+$/.test(e))return{site:n,id:Number(e)};let r=/^([\w.]+):(\d+)$/.exec(e);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(e)}catch{return}let o=Fl(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=[Sl({key:"danbooru",name:"danbooru",origin:"https://danbooru.donmai.us",cutouts:["transparent_background"],vouched:!1,tunneled:!0,ansi:2}),Sc({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,tunneled:!1,ansi:6}),Sc({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,tunneled:!1,ansi:5})],ln=134217728;function on(t,n){let e=gt.indexOf(t);return(e===-1?gt.length:e)*ln+n}function Mi(t){let n;try{n=new URL(t).hostname}catch{return""}return n.split(".").slice(-2).join(".")}function Gc(){return gt.filter((t)=>!t.tunneled).map((t)=>Mi(t.origin)).flatMap((t)=>[t,`.${t}`]).join(",")}function Lc(t,n=jn){return t.tags.filter((e)=>n.some((r)=>ul[r].has(e)))}function Pc(t,n,e=["safe"]){return e.some((r)=>t.ratings[r].has(n.rating))}function Oe(t){return[t,...t.smaller].find((n)=>n.width*n.height<=Rn)}function Kc(t){let n=new Map;for(let[e,r]of[...t].sort(([i],[o])=>i<o?-1:1)){if(r==="")continue;n.set(r,[...n.get(r)??[],e])}return n}function Jc(){return Se(process.env.XDG_CACHE_HOME??Se(ol(),".cache"),"ttheme")}function yn(t){return Se(Jc(),t.key)}function Ac(t=cl,n=Jc()){let e=[],r=0;for(let i of yc(n))for(let o of ll){let s=Se(n,i,o);for(let c of yc(s)){let u=Se(s,c);try{let{size:h,mtimeMs:f}=rl(u);e.push({path:u,size:h,at:f}),r+=h}catch{}}}e.sort((i,o)=>i.at-o.at);for(let i of e){if(r<=t)return;try{el(i.path,{force:!0}),r-=i.size}catch{}}}function Il(t,n){if(t!==null&&/^\s*\d+\s*$/.test(t))return Number(t)*1000;let e=t===null?Number.NaN:Date.parse(t);return Number.isNaN(e)?Fc:Math.max(0,e-n)}function Mn(t){return Ic.get(t.key)??0}function Nl(t){for(let n=t;n instanceof Error;n=n.cause)if(n.code==="ECONNRESET")return!0;return!1}function Ol(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}async function vn(t,n,e,r={},i=fl){for(let o=1;;o++){let s=Mn(t)-Date.now();if(s>0)await sl(s,void 0,{signal:e});let c;try{c=await fetch(n,{headers:{"User-Agent":ki,Referer:`${t.origin}/`,...r},signal:i?AbortSignal.any([e,AbortSignal.timeout(i)]):e})}catch(u){if(o<vc&&!e.aborted&&Nl(u))continue;throw u}if(c.status===429&&o<vc){await c.body?.cancel();let u=Il(c.headers.get("retry-after"),Date.now());if(u>Fc)throw Error(`${t.name} asks to wait ${Math.ceil(u/1000)}s`);Ic.set(t.key,Math.max(Mn(t),Date.now()+u));continue}if(!c.ok)throw await c.body?.cancel(),Error(Ol(c)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${c.status}`);return c}}async function Uc(t,n,e,r){return t.parse(await(await vn(t,t.postsUrl(n,e),r)).text())}async function Tc(t,n,e){return t.count(await(await vn(t,t.countUrl(n),e)).text())}async function vi(t,n,e){let[r]=t.parse(await(await vn(t,t.postUrl(n),e)).text());return r}function Hl(t){let n=gt.find((r)=>r.key==="danbooru"),e=new URLSearchParams({limit:String(2*Hn),only:"md5,tag_string",tags:`md5:${t.join(",")}`});return`${n.origin}/posts.json?${e}`}function jl(t){return new Map(Ne(t).flatMap((n)=>{let e=String(n.md5??"");return e?[[e,String(n.tag_string??"").split(/\s+/).filter(Boolean)]]:[]}))}function Wc(t,n){for(let e of t){let r=n.get(e.md5);if(r)e.tags=[...new Set([...e.tags,...r])],e.solo=r.includes("solo")}}async function Qc(t,n){let e=gt.find((i)=>i.key==="danbooru"),r=new Map;if(Mn(e)>Date.now())return r;for(let i=0;i<t.length;i+=Hn){let o=await(await vn(e,Hl(t.slice(i,i+Hn)),n,{},al)).text();for(let[s,c]of jl(o))r.set(s,c)}return r}async function Zc(t,n){let e=gt.find((o)=>o.key==="danbooru");if(Mn(e)<=Date.now())try{let o=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(Mc)}),s=`${e.origin}/autocomplete.json?${o}`;return bl(await(await vn(e,s,n,{},Ec)).text())}catch(o){if(n.aborted)throw o}let r=gt.find((o)=>o.key==="yande"),i=new URLSearchParams({name:t,order:"count",limit:String(Mc)});return kl(await(await vn(r,`${r.origin}/tag.json?${i}`,n,{},Ec)).text())}async function qc(t,n,e){let r=await vn(t,n,e,{Range:`bytes=0-${hl}`});return Ee(new Uint8Array(await r.arrayBuffer()))}async function Xc(t,n,e,r){let i=await vn(t,n,e,{},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:a,value:g}=await s.read();if(a)break;c.push(g),u+=g.length,r?.(u,o)}let h=new Uint8Array(u),f=0;for(let a of c)h.set(a,f),f+=a.length;return h}var Ll="_defaults.toml",dn="_groups.toml",_c=3,Cc=["background","foreground","cursor","selection"],Pl=new Set(["next","help","preview","pin","unpin","config"]);function vt(t,n){throw Error(`${t}: ${n}`)}function Gn(t,n,e){if(typeof e!=="string"||!Jo(e))vt(t,`${n} must be "#rrggbb" (lowercase), got ${JSON.stringify(e)}`);return e}function _t(t,n,e){if(typeof e!=="string"||e.length===0)vt(t,`${n} must be a non-empty string`);return e}function mn(t){return t&&typeof t==="object"?t:{}}function Kl(t,n,e){let r={...mn(e),...mn(n)},i=r.codepoint_map??[];if(!Array.isArray(i))vt(t,"font.codepoint_map must be an array");return{family:_t(t,"font.family",r.family),size:Number(r.size),codepointMap:i.map((o)=>{let s=mn(o);return{range:_t(t,"font.codepoint_map[].range",s.range),family:_t(t,"font.codepoint_map[].family",s.family)}})}}function Jl(t,n,e){if(n===void 0)return[e.cursor,e.selectionBackground,e.background];let r=Array.isArray(n)?n:[n];if(r.length===0)vt(t,"ghostty.icon_screen must not be empty");return r.map((i,o)=>Gn(t,`ghostty.icon_screen[${o}]`,i))}function Al(t,n,e,r){let i={...mn(e),...mn(n)};return{shader:i.shader===void 0?void 0:_t(t,"ghostty.shader",i.shader),iconGhost:i.icon_ghost===void 0?r.cursor:Gn(t,"ghostty.icon_ghost",i.icon_ghost),iconScreen:Jl(t,i.icon_screen,r)}}function Ul(t){return new Map([...Cc.map((n)=>[n,t[n]]),...t.ansi.map((n,e)=>[`ansi${e}`,n])])}function Tl(t,n,e){if(!Array.isArray(n)||n.length!==_c)vt(t,`meta.signature must name exactly ${_c} palette slots`);let r=Ul(e),i=[],o=[];for(let[s,c]of n.entries()){let u=`meta.signature[${s}]`,h=_t(t,u,c),f=r.get(h);if(f===void 0)vt(t,`${u} ${JSON.stringify(c)} is not a palette slot — use ${Cc.join(", ")} or ansi0-ansi15`);i.push(h),o.push(f)}if(new Set(o).size!==o.length)vt(t,"meta.signature slots must resolve to three different colors");return{names:i,colors:o}}function Wl(t,n,e){if(n===void 0)return;if(!e)vt(t,"meta.booru_sites renames meta.booru per site, so it needs meta.booru");if(!n||typeof n!=="object"||Array.isArray(n))vt(t,'meta.booru_sites must be a table of site = "tag" or site = ["tag", ...]');let r={};for(let[i,o]of Object.entries(n)){let s=gt.find((u)=>u.key===i);if(!s)vt(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)))vt(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))vt(t,`meta.booru_sites.${i} takes one tag — ${s.name} searches ${s.tagBudget} tags at a time`);r[i]=c}return r}function Ql(t){let e=Bun.TOML.parse(yi(Si(t,dn),"utf8")).group;if(!Array.isArray(e)||e.length===0)vt(dn,"needs at least one [[group]] table");return e.map((r)=>{let i=mn(r);return{name:_t(dn,"group.name",i.name),native:i.native===void 0?void 0:_t(dn,"group.native",i.native),lead:_t(dn,"group.lead",i.lead)}})}function Zl(t,n,e,r){let i=Bun.TOML.parse(n),o=mn(i.meta),s=mn(i.colors),c=mn(i.contrast),u=s.ansi;if(!Array.isArray(u)||u.length!==16)vt(t,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(u)?u.length:typeof u}`);let h=_t(t,"meta.name",o.name);if(h!==Gl(t,".toml"))vt(t,`meta.name "${h}" does not match the filename`);if(Pl.has(h))vt(t,`meta.name "${h}" collides with a ttheme subcommand`);if(h.startsWith("-"))vt(t,`meta.name "${h}" would be read as a flag by the ttheme CLI`);let f=o.role;if(f!==void 0&&f!=="default")vt(t,`meta.role must be "default", got ${JSON.stringify(f)}`);let a=_t(t,"meta.group",o.group),g=r.get(a);if(!g)vt(t,`meta.group "${a}" has no [[group]] table in ${dn}`);let d=Gn(t,"colors.background",s.background),p=Gn(t,"colors.foreground",s.foreground),l=Gn(t,"colors.cursor",s.cursor),k=Gn(t,"colors.selection_background",s.selection_background),v=u.map((H,b)=>Gn(t,`colors.ansi[${b}]`,H)),I=Tl(t,o.signature,{background:d,foreground:p,cursor:l,selection:k,ansi:v}),E=o.booru===void 0?void 0:_t(t,"meta.booru",o.booru);if(E!==void 0&&/\s/.test(E))vt(t,`meta.booru must be a single booru tag, got ${JSON.stringify(E)}`);let y=Wl(t,o.booru_sites,E),$=Array.isArray(c.waive)?c.waive.map(String):[];if($.length>0&&typeof c.reason!=="string")vt(t,"contrast.waive needs a contrast.reason explaining why");return{name:h,group:a,native:g.native,lead:g.lead===h,order:Number(o.order),role:f,ansiSource:_t(t,"meta.ansi_source",o.ansi_source),...E?{booru:E}:{},...y?{booruSites:y}:{},background:d,foreground:p,cursor:l,selectionBackground:k,ansi:v,signature:I.colors,signatureSlots:I.names,font:Kl(t,i.font,e.font),ghostty:Al(t,i.ghostty,e.ghostty,{background:d,cursor:l,selectionBackground:k}),waive:$,waiveReason:typeof c.reason==="string"?c.reason:void 0}}function zc(t){let n=Bun.TOML.parse(yi(Si(t,Ll),"utf8")),e=Ql(t),r=new Map(e.map((s)=>[s.name,s]));if(r.size!==e.length)vt(dn,"group.name must be unique");let i=Rl(t).filter((s)=>s.endsWith(".toml")&&!s.startsWith("_")).map((s)=>Zl(s,yi(Si(t,s),"utf8"),n,r)).sort((s,c)=>s.order-c.order);if(new Set(i.map((s)=>s.order)).size!==i.length)throw Error("themes: meta.order must be unique across all themes");for(let s of e){let c=i.filter((u)=>u.group===s.name);if(c.length===0)vt(dn,`group "${s.name}" has no themes`);if(!c.some((u)=>u.name===s.lead))vt(dn,`group "${s.name}" lead "${s.lead}" is not one of its themes`)}return i}function Yc(t){return t.filter((n)=>n.role===void 0)}function He(t){let n=(e,r)=>e<r?-1:e>r?1:0;return[...t].sort((e,r)=>n(e.group.toLowerCase(),r.group.toLowerCase())||n(e.name,r.name))}var mr=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"];var Fi=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function je(t,n){let e=`# ttheme begin
17
- ${n}
18
- # ttheme end
19
- `;if(Fi.test(t))return t.replace(Fi,e);if(t==="")return e;return`${t.replace(/\n*$/,`
2
+ import{createRequire as Zf}from"node:module";var Tf=Object.create;var{getPrototypeOf:Uf,defineProperty:us,getOwnPropertyNames:Kf}=Object;var Af=Object.prototype.hasOwnProperty;function Jf(t){return this[t]}var Wf,Qf,vr=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?Wf??=new WeakMap:Qf??=new WeakMap,o=i.get(t);if(o)return o}n=t!=null?Tf(Uf(t)):{};let s=e||!t||!t.__esModule?us(n,"default",{value:t,enumerable:!0}):n;for(let c of Kf(t))if(!Af.call(s,c))us(s,c,{get:Jf.bind(t,c),enumerable:!0});if(r)i.set(t,s);return s};var bt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Pt=Zf(import.meta.url);var vs=bt((Hw,Fr)=>{var ys=ys||function(t){return Buffer.from(t).toString("base64")};function Vf(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),g=Array(64),$=[],y=0,F=7,E=Array(64),M=Array(64),p=Array(64),R=Array(256),k=Array(2048),j,H=[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],X=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],K=[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],A=[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],Et=[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 dt(d){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 U=r((G[J]*d+50)/100);if(U<1)U=1;else if(U>255)U=255;i[H[J]]=U}var q=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99];for(var x=0;x<64;x++){var rt=r((q[x]*d+50)/100);if(rt<1)rt=1;else if(rt>255)rt=255;o[H[x]]=rt}var it=[1,1.387039845,1.306562965,1.175875602,1,0.785694958,0.5411961,0.275899379],St=0;for(var wt=0;wt<8;wt++)for(var v=0;v<8;v++)s[St]=1/(i[H[St]]*it[wt]*it[v]*8),c[St]=1/(o[H[St]]*it[wt]*it[v]*8),St++}function B(d,G){var J=0,U=0,q=[];for(var x=1;x<=16;x++){for(var rt=1;rt<=d[x];rt++)q[G[U]]=[],q[G[U]][0]=J,q[G[U]][1]=x,U++,J++;J*=2}return q}function Nt(){u=B(L,P),h=B(Ft,A),a=B(X,K),f=B(z,Et)}function ot(){var d=1,G=2;for(var J=1;J<=15;J++){for(var U=d;U<G;U++)m[32767+U]=J,l[32767+U]=[],l[32767+U][1]=J,l[32767+U][0]=U;for(var q=-(G-1);q<=-d;q++)m[32767+q]=J,l[32767+q]=[],l[32767+q][1]=J,l[32767+q][0]=G-1+q;d<<=1,G<<=1}}function tt(){for(var d=0;d<256;d++)k[d]=19595*d,k[d+256>>0]=38470*d,k[d+512>>0]=7471*d+32768,k[d+768>>0]=-11059*d,k[d+1024>>0]=-21709*d,k[d+1280>>0]=32768*d+8421375,k[d+1536>>0]=-27439*d,k[d+1792>>0]=-5329*d}function C(d){var G=d[0],J=d[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(d){$.push(d)}function T(d){w(d>>8&255),w(d&255)}function ht(d,G){var J,U,q,x,rt,it,St,wt,v=0,O,Z=8,yt=64;for(O=0;O<Z;++O){J=d[v],U=d[v+1],q=d[v+2],x=d[v+3],rt=d[v+4],it=d[v+5],St=d[v+6],wt=d[v+7];var _=J+wt,D=J-wt,ft=U+St,W=U-St,st=q+it,jt=q-it,kt=x+rt,_t=x-rt,ne=_+kt,He=_-kt,qe=ft+st,xe=ft-st;d[v]=ne+qe,d[v+4]=ne-qe;var $n=(xe+He)*0.707106781;d[v+2]=He+$n,d[v+6]=He-$n,ne=_t+jt,qe=jt+W,xe=W+D;var kn=(ne-xe)*0.382683433,$r=0.5411961*ne+kn,En=1.306562965*xe+kn,yn=qe*0.707106781,vn=D+yn,Mn=D-yn;d[v+5]=Mn+$r,d[v+3]=Mn-$r,d[v+1]=vn+En,d[v+7]=vn-En,v+=8}v=0;for(O=0;O<Z;++O){J=d[v],U=d[v+8],q=d[v+16],x=d[v+24],rt=d[v+32],it=d[v+40],St=d[v+48],wt=d[v+56];var Vo=J+wt,pi=J-wt,Yo=U+St,zo=U-St,Bo=q+it,Do=q-it,ts=x+rt,Lf=x-rt,Sn=Vo+ts,wi=Vo-ts,kr=Yo+Bo,Er=Yo-Bo;d[v]=Sn+kr,d[v+32]=Sn-kr;var es=(Er+wi)*0.707106781;d[v+16]=wi+es,d[v+48]=wi-es,Sn=Lf+Do,kr=Do+zo,Er=zo+pi;var ns=(Sn-Er)*0.382683433,rs=0.5411961*Sn+ns,is=1.306562965*Er+ns,os=kr*0.707106781,ss=pi+os,cs=pi-os;d[v+40]=cs+rs,d[v+24]=cs-rs,d[v+8]=ss+is,d[v+56]=ss-is,v++}var yr;for(O=0;O<yt;++O)yr=d[O]*G[O],b[O]=yr>0?yr+0.5|0:yr-0.5|0;return b}function at(){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(d){if(!d)return;if(T(65505),d[0]===69&&d[1]===120&&d[2]===105&&d[3]===102)T(d.length+2);else T(d.length+5+2),w(69),w(120),w(105),w(102),w(0);for(var G=0;G<d.length;G++)w(d[G])}function nt(d,G){T(65472),T(17),w(8),T(G),T(d),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 d=0;d<64;d++)w(i[d]);w(1);for(var G=0;G<64;G++)w(o[G])}function N(){T(65476),T(418),w(0);for(var d=0;d<16;d++)w(L[d+1]);for(var G=0;G<=11;G++)w(P[G]);w(16);for(var J=0;J<16;J++)w(X[J+1]);for(var U=0;U<=161;U++)w(K[U]);w(1);for(var q=0;q<16;q++)w(Ft[q+1]);for(var x=0;x<=11;x++)w(A[x]);w(17);for(var rt=0;rt<16;rt++)w(z[rt+1]);for(var it=0;it<=161;it++)w(Et[it])}function I(d){if(typeof d>"u"||d.constructor!==Array)return;d.forEach((G)=>{if(typeof G!=="string")return;T(65534);var J=G.length;T(J+2);var U;for(U=0;U<J;U++)w(G.charCodeAt(U))})}function pt(){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 Q(d,G,J,U,q){var x=q[0],rt=q[240],it,St=16,wt=63,v=64,O=ht(d,G);for(var Z=0;Z<v;++Z)g[H[Z]]=O[Z];var yt=g[0]-J;if(J=g[0],yt==0)C(U[0]);else it=32767+yt,C(U[m[it]]),C(l[it]);var _=63;for(;_>0&&g[_]==0;_--);if(_==0)return C(x),J;var D=1,ft;while(D<=_){var W=D;for(;g[D]==0&&D<=_;++D);var st=D-W;if(st>=St){ft=st>>4;for(var jt=1;jt<=ft;++jt)C(rt);st=st&15}it=32767+g[D],C(q[(st<<4)+m[it]]),C(l[it]),D++}if(_!=wt)C(x);return J}function Y(){var d=String.fromCharCode;for(var G=0;G<256;G++)R[G]=d(G)}this.encode=function(d,G){var J=new Date().getTime();if(G)xt(G);$=[],y=0,F=7,T(65496),at(),I(d.comments),et(d.exifBuffer),V(),nt(d.width,d.height),N(),pt();var U=0,q=0,x=0;y=0,F=7,this.encode.displayName="_encode_";var{data:rt,width:it,height:St}=d,wt=it*4,v=it*3,O,Z=0,yt,_,D,ft,W,st,jt,kt;while(Z<St){O=0;while(O<wt){ft=wt*Z+O,W=ft,st=-1,jt=0;for(kt=0;kt<64;kt++){if(jt=kt>>3,st=(kt&7)*4,W=ft+jt*wt+st,Z+jt>=St)W-=wt*(Z+1+jt-St);if(O+st>=wt)W-=O+st-wt+4;yt=rt[W++],_=rt[W++],D=rt[W++],E[kt]=(k[yt]+k[_+256>>0]+k[D+512>>0]>>16)-128,M[kt]=(k[yt+768>>0]+k[_+1024>>0]+k[D+1280>>0]>>16)-128,p[kt]=(k[yt+1280>>0]+k[_+1536>>0]+k[D+1792>>0]>>16)-128}U=Q(E,s,U,u,a),q=Q(M,c,q,h,f),x=Q(p,c,x,h,f),O+=32}Z+=8}if(F>=0){var _t=[];_t[1]=F+1,_t[0]=(1<<F+1)-1,C(_t)}if(T(65497),typeof Fr>"u")return new Uint8Array($);return Buffer.from($);var ne,He};function xt(d){if(d<=0)d=1;if(d>100)d=100;if(j==d)return;var G=0;if(d<50)G=Math.floor(5000/d);else G=Math.floor(200-d*2);dt(G),j=d}function Yt(){var d=new Date().getTime();if(!t)t=50;Y(),Nt(),ot(),tt(),xt(t);var G=new Date().getTime()-d}Yt()}if(typeof Fr<"u")Fr.exports=Es;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].encode=Es;function Es(t,e){if(typeof e>"u")e=50;var n=new Vf(e),r=n.encode(t,e);return{data:r,width:t.width,height:t.height}}});var Ss=bt((Ow,yi)=>{var Ei=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 M=0,p=[],R,k,j=16;while(j>0&&!F[j-1])j--;p.push({children:[],index:0});var H=p[0],L;for(R=0;R<j;R++){for(k=0;k<F[R];k++){H=p.pop(),H.children[H.index]=E[M];while(H.index>0){if(p.length===0)throw Error("Could not recreate Huffman Table");H=p.pop()}H.index++,p.push(H);while(p.length<=R)p.push(L={children:[],index:0}),H.children[H.index]=L.children,H=L;M++}if(R+1<j)p.push(L={children:[],index:0}),H.children[H.index]=L.children,H=L}return p[0].children}function l(F,E,M,p,R,k,j,H,L,P){var{precision:X,samplesPerLine:K,scanLines:Ft,mcusPerLine:A,progressive:z,maxH:Et,maxV:dt}=M,B=E,Nt=0,ot=0;function tt(){if(ot>0)return ot--,Nt>>ot&1;if(Nt=F[E++],Nt==255){var v=F[E++];if(v)throw Error("unexpected marker: "+(Nt<<8|v).toString(16))}return ot=7,Nt>>>7}function C(v){var O=v,Z;while((Z=tt())!==null){if(O=O[Z],typeof O==="number")return O;if(typeof O!=="object")throw Error("invalid huffman sequence")}return null}function w(v){var O=0;while(v>0){var Z=tt();if(Z===null)return;O=O<<1|Z,v--}return O}function T(v){var O=w(v);if(O>=1<<v-1)return O;return O+(-1<<v)+1}function ht(v,O){var Z=C(v.huffmanTableDC),yt=Z===0?0:T(Z);O[0]=v.pred+=yt;var _=1;while(_<64){var D=C(v.huffmanTableAC),ft=D&15,W=D>>4;if(ft===0){if(W<15)break;_+=16;continue}_+=W;var st=e[_];O[st]=T(ft),_++}}function at(v,O){var Z=C(v.huffmanTableDC),yt=Z===0?0:T(Z)<<L;O[0]=v.pred+=yt}function et(v,O){O[0]|=tt()<<L}var nt=0;function V(v,O){if(nt>0){nt--;return}var Z=k,yt=j;while(Z<=yt){var _=C(v.huffmanTableAC),D=_&15,ft=_>>4;if(D===0){if(ft<15){nt=w(ft)+(1<<ft)-1;break}Z+=16;continue}Z+=ft;var W=e[Z];O[W]=T(D)*(1<<L),Z++}}var N=0,I;function pt(v,O){var Z=k,yt=j,_=0;while(Z<=yt){var D=e[Z],ft=O[D]<0?-1:1;switch(N){case 0:var W=C(v.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)*ft;else if(_--,_===0)N=N==2?3:0;break;case 3:if(O[D])O[D]+=(tt()<<L)*ft;else O[D]=I<<L,N=0;break;case 4:if(O[D])O[D]+=(tt()<<L)*ft;break}Z++}if(N===4){if(nt--,nt===0)N=0}}function Q(v,O,Z,yt,_){var D=Z/A|0,ft=Z%A,W=D*v.v+yt,st=ft*v.h+_;if(v.blocks[W]===void 0&&P.tolerantDecoding)return;O(v,v.blocks[W][st])}function Y(v,O,Z){var yt=Z/v.blocksPerLine|0,_=Z%v.blocksPerLine;if(v.blocks[yt]===void 0&&P.tolerantDecoding)return;O(v,v.blocks[yt][_])}var xt=p.length,Yt,d,G,J,U,q;if(z)if(k===0)q=H===0?at:et;else q=H===0?V:pt;else q=ht;var x=0,rt,it;if(xt==1)it=p[0].blocksPerLine*p[0].blocksPerColumn;else it=A*M.mcusPerColumn;if(!R)R=it;var St,wt;while(x<it){for(d=0;d<xt;d++)p[d].pred=0;if(nt=0,xt==1){Yt=p[0];for(U=0;U<R;U++)Y(Yt,q,x),x++}else for(U=0;U<R;U++){for(d=0;d<xt;d++){Yt=p[d],St=Yt.h,wt=Yt.v;for(G=0;G<wt;G++)for(J=0;J<St;J++)Q(Yt,q,x,G,J)}if(x++,x===it)break}if(x===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 m(F,E){var M=[],p=E.blocksPerLine,R=E.blocksPerColumn,k=p<<3,j=new Int32Array(64),H=new Uint8Array(64);function L(B,Nt,ot){var tt=E.quantizationTable,C,w,T,ht,at,et,nt,V,N,I=ot,pt;for(pt=0;pt<64;pt++)I[pt]=B[pt]*tt[pt];for(pt=0;pt<8;++pt){var Q=8*pt;if(I[1+Q]==0&&I[2+Q]==0&&I[3+Q]==0&&I[4+Q]==0&&I[5+Q]==0&&I[6+Q]==0&&I[7+Q]==0){N=u*I[0+Q]+512>>10,I[0+Q]=N,I[1+Q]=N,I[2+Q]=N,I[3+Q]=N,I[4+Q]=N,I[5+Q]=N,I[6+Q]=N,I[7+Q]=N;continue}C=u*I[0+Q]+128>>8,w=u*I[4+Q]+128>>8,T=I[2+Q],ht=I[6+Q],at=h*(I[1+Q]-I[7+Q])+128>>8,V=h*(I[1+Q]+I[7+Q])+128>>8,et=I[3+Q]<<4,nt=I[5+Q]<<4,N=C-w+1>>1,C=C+w+1>>1,w=N,N=T*c+ht*s+128>>8,T=T*s-ht*c+128>>8,ht=N,N=at-nt+1>>1,at=at+nt+1>>1,nt=N,N=V+et+1>>1,et=V-et+1>>1,V=N,N=C-ht+1>>1,C=C+ht+1>>1,ht=N,N=w-T+1>>1,w=w+T+1>>1,T=N,N=at*o+V*i+2048>>12,at=at*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+Q]=C+V,I[7+Q]=C-V,I[1+Q]=w+nt,I[6+Q]=w-nt,I[2+Q]=T+et,I[5+Q]=T-et,I[3+Q]=ht+at,I[4+Q]=ht-at}for(pt=0;pt<8;++pt){var Y=pt;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[pt+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}C=u*I[0+Y]+2048>>12,w=u*I[32+Y]+2048>>12,T=I[16+Y],ht=I[48+Y],at=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=C-w+1>>1,C=C+w+1>>1,w=N,N=T*c+ht*s+2048>>12,T=T*s-ht*c+2048>>12,ht=N,N=at-nt+1>>1,at=at+nt+1>>1,nt=N,N=V+et+1>>1,et=V-et+1>>1,V=N,N=C-ht+1>>1,C=C+ht+1>>1,ht=N,N=w-T+1>>1,w=w+T+1>>1,T=N,N=at*o+V*i+2048>>12,at=at*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]=C+V,I[56+Y]=C-V,I[8+Y]=w+nt,I[48+Y]=w-nt,I[16+Y]=T+et,I[40+Y]=T-et,I[24+Y]=ht+at,I[32+Y]=ht-at}for(pt=0;pt<64;++pt){var xt=128+(I[pt]+8>>4);Nt[pt]=xt<0?0:xt>255?255:xt}}y(k*R*8);var P,X;for(var K=0;K<R;K++){var Ft=K<<3;for(P=0;P<8;P++)M.push(new Uint8Array(k));for(var A=0;A<p;A++){L(E.blocks[K][A],H,j);var z=0,Et=A<<3;for(X=0;X<8;X++){var dt=M[Ft+X];for(P=0;P<8;P++)dt[Et+P]=H[z++]}}}return M}function b(F){return F<0?0:F>255?255:F}a.prototype={load:function(E){var M=new XMLHttpRequest;M.open("GET",E,!0),M.responseType="arraybuffer",M.onload=function(){var p=new Uint8Array(M.response||M.mozResponseArrayBuffer);if(this.parse(p),this.onload)this.onload()}.bind(this),M.send(null)},parse:function(E){var M=this.opts.maxResolutionInMP*1000*1000,p=0,R=E.length;function k(){var W=E[p]<<8|E[p+1];return p+=2,W}function j(){var W=k(),st=E.subarray(p,p+W-2);return p+=st.length,st}function H(W){var st=1,jt=1,kt,_t;for(_t in W.components)if(W.components.hasOwnProperty(_t)){if(kt=W.components[_t],st<kt.h)st=kt.h;if(jt<kt.v)jt=kt.v}var ne=Math.ceil(W.samplesPerLine/8/st),He=Math.ceil(W.scanLines/8/jt);for(_t in W.components)if(W.components.hasOwnProperty(_t)){kt=W.components[_t];var qe=Math.ceil(Math.ceil(W.samplesPerLine/8)*kt.h/st),xe=Math.ceil(Math.ceil(W.scanLines/8)*kt.v/jt),$n=ne*kt.h,kn=He*kt.v,$r=kn*$n,En=[];y($r*256);for(var yn=0;yn<kn;yn++){var vn=[];for(var Mn=0;Mn<$n;Mn++)vn.push(new Int32Array(64));En.push(vn)}kt.blocksPerLine=qe,kt.blocksPerColumn=xe,kt.blocks=En}W.maxH=st,W.maxV=jt,W.mcusPerLine=ne,W.mcusPerColumn=He}var L=null,P=null,X=null,K,Ft,A=[],z=[],Et=[],dt=[],B=k(),Nt=-1;if(this.comments=[],B!=65496)throw Error("SOI not found");B=k();while(B!=65497){var ot,tt,C;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=j();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 ht=k(),at=ht+p-2;while(p<at){var et=E[p++];y(256);var nt=new Int32Array(64);if(et>>4===0)for(tt=0;tt<64;tt++){var V=e[tt];nt[V]=E[p++]}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");A[et&15]=nt}break;case 65472:case 65473:case 65474:k(),K={},K.extended=B===65473,K.progressive=B===65474,K.precision=E[p++],K.scanLines=k(),K.samplesPerLine=k(),K.components={},K.componentsOrder=[];var N=K.scanLines*K.samplesPerLine;if(N>M){var I=Math.ceil((N-M)/1e6);throw Error(`maxResolutionInMP limit exceeded by ${I}MP`)}var pt=E[p++],Q,Y=0,xt=0;for(ot=0;ot<pt;ot++){Q=E[p];var Yt=E[p+1]>>4,d=E[p+1]&15,G=E[p+2];if(Yt<=0||d<=0)throw Error("Invalid sampling factor, expected values above 0");K.componentsOrder.push(Q),K.components[Q]={h:Yt,v:d,quantizationIdx:G},p+=3}H(K),z.push(K);break;case 65476:var J=k();for(ot=2;ot<J;){var U=E[p++],q=new Uint8Array(16),x=0;for(tt=0;tt<16;tt++,p++)x+=q[tt]=E[p];y(16+x);var rt=new Uint8Array(x);for(tt=0;tt<x;tt++,p++)rt[tt]=E[p];ot+=17+x,(U>>4===0?dt:Et)[U&15]=f(q,rt)}break;case 65501:k(),Ft=k();break;case 65500:k(),k();break;case 65498:var it=k(),St=E[p++],wt=[],v;for(ot=0;ot<St;ot++){v=K.components[E[p++]];var O=E[p++];v.huffmanTableDC=dt[O>>4],v.huffmanTableAC=Et[O&15],wt.push(v)}var Z=E[p++],yt=E[p++],_=E[p++],D=l(E,p,K,wt,Ft,Z,yt,_>>4,_&15,this.opts);p+=D;break;case 65535:if(E[p]!==255)p--;break;default:if(E[p-3]==255&&E[p-2]>=192&&E[p-2]<=254){p-=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 ${(p-1).toString(16)}`);Nt=p-1;let W=k();if(E[p+W-2]===255){p+=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 ft=z[ot].components;for(var tt in ft)ft[tt].quantizationTable=A[ft[tt].quantizationIdx],delete ft[tt].quantizationIdx}this.width=K.samplesPerLine,this.height=K.scanLines,this.jfif=L,this.adobe=P,this.components=[];for(var ot=0;ot<K.componentsOrder.length;ot++){var v=K.components[K.componentsOrder[ot]];this.components.push({lines:m(K,v),scaleX:v.h/K.maxH,scaleY:v.v/K.maxV})}},getData:function(E,M){var p=this.width/E,R=this.height/M,k,j,H,L,P,X,K,Ft,A,z,Et=0,dt,B,Nt,ot,tt,C,w,T,ht,at,et,nt=E*M*this.components.length;y(nt);var V=new Uint8Array(nt);switch(this.components.length){case 1:k=this.components[0];for(z=0;z<M;z++){P=k.lines[0|z*k.scaleY*R];for(A=0;A<E;A++)dt=P[0|A*k.scaleX*p],V[Et++]=dt}break;case 2:k=this.components[0],j=this.components[1];for(z=0;z<M;z++){P=k.lines[0|z*k.scaleY*R],X=j.lines[0|z*j.scaleY*R];for(A=0;A<E;A++)dt=P[0|A*k.scaleX*p],V[Et++]=dt,dt=X[0|A*j.scaleX*p],V[Et++]=dt}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],j=this.components[1],H=this.components[2];for(z=0;z<M;z++){P=k.lines[0|z*k.scaleY*R],X=j.lines[0|z*j.scaleY*R],K=H.lines[0|z*H.scaleY*R];for(A=0;A<E;A++){if(!et)T=P[0|A*k.scaleX*p],ht=X[0|A*j.scaleX*p],at=K[0|A*H.scaleX*p];else dt=P[0|A*k.scaleX*p],B=X[0|A*j.scaleX*p],Nt=K[0|A*H.scaleX*p],T=b(dt+1.402*(Nt-128)),ht=b(dt-0.3441363*(B-128)-0.71413636*(Nt-128)),at=b(dt+1.772*(B-128));V[Et++]=T,V[Et++]=ht,V[Et++]=at}}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],j=this.components[1],H=this.components[2],L=this.components[3];for(z=0;z<M;z++){P=k.lines[0|z*k.scaleY*R],X=j.lines[0|z*j.scaleY*R],K=H.lines[0|z*H.scaleY*R],Ft=L.lines[0|z*L.scaleY*R];for(A=0;A<E;A++){if(!et)tt=P[0|A*k.scaleX*p],C=X[0|A*j.scaleX*p],w=K[0|A*H.scaleX*p],ot=Ft[0|A*L.scaleX*p];else dt=P[0|A*k.scaleX*p],B=X[0|A*j.scaleX*p],Nt=K[0|A*H.scaleX*p],ot=Ft[0|A*L.scaleX*p],tt=255-b(dt+1.402*(Nt-128)),C=255-b(dt-0.3441363*(B-128)-0.71413636*(Nt-128)),w=255-b(dt+1.772*(B-128));V[Et++]=255-tt,V[Et++]=255-C,V[Et++]=255-w,V[Et++]=255-ot}}break;default:throw Error("Unsupported color mode")}return V},copyToImageData:function(E,M){var{width:p,height:R,data:k}=E,j=this.getData(p,R),H=0,L=0,P,X,K,Ft,A,z,Et,dt,B;switch(this.components.length){case 1:for(X=0;X<R;X++)for(P=0;P<p;P++)if(K=j[H++],k[L++]=K,k[L++]=K,k[L++]=K,M)k[L++]=255;break;case 3:for(X=0;X<R;X++)for(P=0;P<p;P++)if(Et=j[H++],dt=j[H++],B=j[H++],k[L++]=Et,k[L++]=dt,k[L++]=B,M)k[L++]=255;break;case 4:for(X=0;X<R;X++)for(P=0;P<p;P++)if(A=j[H++],z=j[H++],K=j[H++],Ft=j[H++],Et=255-b(A*(1-Ft/255)+Ft),dt=255-b(z*(1-Ft/255)+Ft),B=255-b(K*(1-Ft/255)+Ft),k[L++]=Et,k[L++]=dt,k[L++]=B,M)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 M=Math.ceil((E-$)/1024/1024);throw Error(`maxMemoryUsageInMB limit exceeded by at least ${M}MB`)}g=E}return a.resetMaxMemoryUsage=function(F){g=0,$=F},a.getBytesAllocated=function(){return g},a.requestMemoryAllocation=y,a}();if(typeof yi<"u")yi.exports=Ms;else if(typeof window<"u")window["jpeg-js"]=window["jpeg-js"]||{},window["jpeg-js"].decode=Ms;function Ms(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 Ei;o.opts=r,Ei.resetMaxMemoryUsage(r.maxMemoryUsageInMB*1024*1024),o.parse(i);var s=r.formatAsRGBA?4:3,c=o.width*o.height*s;try{Ei.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 Fs=bt((jw,Is)=>{var Yf=vs(),zf=Ss();Is.exports={encode:Yf,decode:zf}});var vi=bt((Rw,Hs)=>{var Bf=Pt("util"),Ns=Pt("stream"),Bt=Hs.exports=function(){Ns.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Bf.inherits(Bt,Ns);Bt.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))};Bt.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};Bt.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()};Bt.prototype.destroySoon=Bt.prototype.end;Bt.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};Bt.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};Bt.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)};Bt.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)};Bt.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 Mi=bt((Df)=>{var be=[{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]}];Df.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<be.length;c++){let u=be[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};Df.getInterlaceIterator=function(t){return function(e,n,r){let i=e%be[r].x.length,o=(e-i)/be[r].x.length*8+be[r].x[i],s=n%be[r].y.length,c=(n-s)/be[r].y.length*8+be[r].y[s];return o*4+c*t*4}}});var Si=bt((Gw,Os)=>{Os.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 Ii=bt((Lw,Rs)=>{var nl=Mi(),rl=Si();function js(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var Xe=Rs.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=nl.getImagePasses(n,r);for(let u=0;u<c.length;u++)this._images.push({byteWidth:js(c[u].width,o,s),height:c[u].height,lineIndex:0})}else this._images.push({byteWidth:js(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};Xe.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Xe.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}};Xe.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}};Xe.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}};Xe.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=rl(h,u,a);e[s]=c+f}};Xe.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 Ls=bt((Tw,Gs)=>{var il=Pt("util"),Ps=vi(),ol=Ii(),sl=Gs.exports=function(t){Ps.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()};il.inherits(sl,Ps)});var Ce=bt((Uw,Ts)=>{Ts.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 Hi=bt((Kw,Us)=>{var Fi=[];(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;Fi[t]=e}})();var Ni=Us.exports=function(){this._crc=-1};Ni.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Fi[(this._crc^t[e])&255]^this._crc>>>8;return!0};Ni.prototype.crc32=function(){return this._crc^-1};Ni.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Fi[(e^t[n])&255]^e>>>8;return e^-1}});var Oi=bt((Aw,Ks)=>{var Ht=Ce(),cl=Hi(),Ot=Ks.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[Ht.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Ht.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Ht.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Ht.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Ht.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Ht.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(Ht.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Ot.prototype._parseSignature=function(t){let e=Ht.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!==Ht.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new cl,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 Ht.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=Ht.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:Boolean(c),palette:Boolean(i&Ht.COLORTYPE_PALETTE),color:Boolean(i&Ht.COLORTYPE_COLOR),alpha:Boolean(i&Ht.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===Ht.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===Ht.COLORTYPE_GRAYSCALE)this.transColor([t.readUInt16BE(0)]);if(this._colorType===Ht.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)/Ht.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===Ht.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 ji=bt((gl)=>{var As=Mi(),ul=[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]}],hl=[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 al(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 fl(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);ul[r](e,i,f,o),o+=r}return o}function ll(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);hl[r](e,f,l,o)}i.resetAfterLine()}}gl.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:o,interlace:s}=e,c;if(i!==8)c=al(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=As.getImagePasses(n,r),l=As.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=fl(f[m],u,l,o,t,a);else ll(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 Ri=bt((Ww,Js)=>{function ml(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 pl(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 wl(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}}Js.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)ml(t,h,i,o,u);else{if(c)pl(t,h,i,o,c);if(r!==8&&!n){if(r===16)h=Buffer.alloc(i*o*4);wl(t,h,i,o,r)}}return h}});var Zs=bt((Qw,Qs)=>{var bl=Pt("util"),Pi=Pt("zlib"),Ws=vi(),$l=Ls(),kl=Oi(),El=ji(),yl=Ri(),ie=Qs.exports=function(t){Ws.call(this),this._parser=new kl(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()};bl.inherits(ie,Ws);ie.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};ie.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=Pi.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,Pi.Z_MIN_CHUNK);this._inflate=Pi.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)};ie.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new $l(this._bitmapInfo)};ie.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};ie.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};ie.prototype._simpleTransparency=function(){this._metaData.alpha=!0};ie.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};ie.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};ie.prototype._complete=function(t){if(this.errord)return;let e;try{let n=El.dataToBitMap(t,this._bitmapInfo);e=yl(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var xs=bt((Zw,qs)=>{var Xt=Ce();qs.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 m(){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 $=m(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 Cs=bt((qw,Xs)=>{var _s=Si();function vl(t,e,n,r,i){for(let o=0;o<n;o++)r[i+o]=t[e+o]}function Ml(t,e,n){let r=0,i=e+n;for(let o=e;o<i;o++)r+=Math.abs(t[o]);return r}function Sl(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 Il(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 Fl(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 Nl(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 Hl(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 Ol(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 jl(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]-_s(c,u,h);r[i+s]=a}}function Rl(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]-_s(s,c,u);i+=Math.abs(h)}return i}var Pl={0:vl,1:Sl,2:Fl,3:Hl,4:jl},Gl={0:Ml,1:Il,2:Nl,3:Ol,4:Rl};Xs.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=Gl[o[m]](t,u,s,i);if(b<l)a=o[m],l=b}}h[c]=a,c++,Pl[a](t,u,s,h,c,i),c+=s,u+=s}return h}});var Gi=bt((xw,Vs)=>{var Lt=Ce(),Ll=Hi(),Tl=xs(),Ul=Cs(),Kl=Pt("zlib"),$e=Vs.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||Kl.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")};$e.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};$e.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};$e.prototype.filterData=function(t,e,n){let r=Tl(t,e,n,this._options),i=Lt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return Ul(r,e,n,this._options,i)};$e.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(Ll.crc32(r.slice(4,r.length-4)),r.length-4),r};$e.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)};$e.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)};$e.prototype.packIDAT=function(t){return this._packChunk(Lt.TYPE_IDAT,t)};$e.prototype.packIEND=function(){return this._packChunk(Lt.TYPE_IEND,null)}});var Ds=bt((_w,Bs)=>{var Al=Pt("util"),Ys=Pt("stream"),Jl=Ce(),Wl=Gi(),zs=Bs.exports=function(t){Ys.call(this);let e=t||{};this._packer=new Wl(e),this._deflate=this._packer.createDeflate(),this.readable=!0};Al.inherits(zs,Ys);zs.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(Jl.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 oc=bt((jn,ic)=>{var tc=Pt("assert").ok,Ve=Pt("zlib"),Ql=Pt("util"),ec=Pt("buffer").kMaxLength;function Oe(t){if(!(this instanceof Oe))return new Oe(t);if(t&&t.chunkSize<Ve.Z_MIN_CHUNK)t.chunkSize=Ve.Z_MIN_CHUNK;if(Ve.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 Zl(t){return new Oe(t)}function nc(t,e){if(e)process.nextTick(e);if(!t._handle)return;t._handle.close(),t._handle=null}Oe.prototype._processChunk=function(t,e,n){if(typeof n==="function")return Ve.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(tc($>=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}tc(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>=ec)throw nc(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+ec.toString(16)+" bytes");let m=Buffer.concat(u,h);return nc(this),m};Ql.inherits(Oe,Ve.Inflate);function ql(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=Ve.Z_FINISH;return t._processChunk(e,n)}function rc(t,e){return ql(new Oe(e),t)}ic.exports=jn=rc;jn.Inflate=Oe;jn.createInflate=Zl;jn.inflateSync=rc});var Li=bt((Xw,cc)=>{var sc=cc.exports=function(t){this._buffer=t,this._reads=[]};sc.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};sc.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 uc=bt((Xl)=>{var xl=Li(),_l=Ii();Xl.process=function(t,e){let n=[],r=new xl(t);return new _l(e,{read:r.read.bind(r),write:function(o){n.push(o)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var lc=bt((Vw,fc)=>{var hc=!0,ac=Pt("zlib"),Vl=oc();if(!ac.deflateSync)hc=!1;var Yl=Li(),zl=uc(),Bl=Oi(),Dl=ji(),tg=Ri();fc.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(M){n=M}let i;function o(M){i=M}function s(M){i.transColor=M}function c(M){i.palette=M}function u(){i.alpha=!0}let h;function a(M){h=M}let f=[];function l(M){f.push(M)}let m=new Yl(t);if(new Bl(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 g=Buffer.concat(f);f.length=0;let $;if(i.interlace)$=ac.inflateSync(g);else{let p=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;$=Vl(g,{chunkSize:p,maxLength:p})}if(g=null,!$||!$.length)throw Error("bad png - invalid inflate data response");let y=zl.process($,i);g=null;let F=Dl.dataToBitMap(y,i);y=null;let E=tg(F,i,e.skipRescale);return i.data=E,i.gamma=h||0,i}});var pc=bt((Yw,mc)=>{var gc=!0,dc=Pt("zlib");if(!dc.deflateSync)gc=!1;var eg=Ce(),ng=Gi();mc.exports=function(t,e){if(!gc)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new ng(e||{}),i=[];if(i.push(Buffer.from(eg.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=dc.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 wc=bt((og)=>{var rg=lc(),ig=pc();og.read=function(t,e){return rg(t,e||{})};og.write=function(t,e){return ig(t,e)}});var $c=bt((lg)=>{var ug=Pt("util"),bc=Pt("stream"),hg=Zs(),ag=Ds(),fg=wc(),Tt=lg.PNG=function(t){if(bc.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 hg(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 ag(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"))};ug.inherits(Tt,bc);Tt.sync=fg;Tt.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};Tt.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};Tt.prototype.write=function(t){return this._parser.write(t),!0};Tt.prototype.end=function(t){this._parser.end(t)};Tt.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};Tt.prototype._gamma=function(t){this.gamma=t};Tt.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};Tt.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)};Tt.prototype.bitblt=function(t,e,n,r,i,o,s){return Tt.bitblt(this,t,e,n,r,i,o,s),this};Tt.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}};Tt.prototype.adjustGamma=function(){Tt.adjustGamma(this)}});var Ho=bt((Rk,Ta)=>{var No={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"},qp={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},xp={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?No.up():"");if(t)e+=No.left;return e}};Ta.exports={cursor:No,scroll:qp,erase:xp,beep:"\x07"}});import{spawnSync as fw}from"node:child_process";import{isMainThread as lw}from"node:worker_threads";import{parseArgs as sw}from"node:util";var re={name:"@kecan0406/ttheme",version:"1.0.35",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 Xu}from"node:fs";import{basename as Fd,join as Dn}from"node:path";var xf=/^#[0-9a-f]{6}$/;function hs(t){return xf.test(t)}function Gt(t){let e=Number.parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function zt(t){let[e,n,r]=Gt(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 ae(t,e){let n=zt(t),r=zt(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function Mr(t,e){return Math.round(ae(t,e)*100)/100}var pe=7,as=3,bi=0.15,fs=1.6,ls=[1,2,3,4,5,6,9,10,11,12,13,14],gs=[7,15];function In(t,e){let n=t.ansi[e];if(n===void 0)throw Error(`${t.name}: missing ANSI ${e}`);return n}function $i(t,e,n){let r=t.background;return e.flatMap((i)=>{let o=In(t,i);return ae(o,r)<n?[`ANSI ${i} ${o} on ${r} is ${Mr(o,r)}:1, needs ${n}:1`]:[]})}function ds(t,e){return Math.min(...e.map((n)=>ae(In(t,n),t.background)))}var Sr=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:pe,measure:({foreground:t,background:e})=>ae(t,e),check:({foreground:t,background:e})=>ae(t,e)<pe?[`foreground ${t} on ${e} is ${Mr(t,e)}:1, needs ${pe}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:as,measure:(t)=>ds(t,ls),check:(t)=>$i(t,ls,as)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:bi,measure:(t)=>zt(In(t,0)),check:(t)=>{let e=In(t,0);return zt(e)>bi?[`ANSI 0 ${e} has luminance ${zt(e).toFixed(3)}, needs <= ${bi}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:pe,measure:(t)=>ds(t,gs),check:(t)=>$i(t,gs,pe)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:fs,measure:(t)=>ae(In(t,8),t.background),check:(t)=>$i(t,[8],fs)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:pe,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:ae(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&ae(t,e)<pe?[`foreground ${t} on selection ${e} is ${Mr(t,e)}:1, needs ${pe}:1`]:[]}],bw=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 ms(t){return Sr.map((e)=>Math.round(e.measure(t)*1000)/1000)}function ki(t){return Sr.filter((e)=>!t.waive.includes(e.rule)).flatMap((e)=>e.check(t).map((n)=>({theme:t.name,rule:e.rule,detail:n})))}function ps(t){return t.flatMap(ki)}var _f=["black","red","green","yellow","blue","magenta","cyan","white"];function ws(t,e){return[t,..._f.map((n,r)=>`${n} = '${e[r]}'`),""].join(`
3
+ `)}var Fn={id:"alacritty",limits:"no runtime color API (OSC only)",emit(t){let e=[..._e(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}'`,"",ws("[colors.normal]",t.ansi.slice(0,8)),ws("[colors.bright]",t.ansi.slice(8,16))].join(`
4
+ `);return[{path:`alacritty/themes/${ct(t.name)}.toml`,content:e}]}};var Nn={id:"ghostty",emit(t){let e=[..._e(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/${ct(t.name)}`,content:e}]}};function we(t){let[e,n,r]=Gt(t);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":n/255,"Red Component":e/255}}function bs(t){return{...Object.fromEntries(t.ansi.map((e,n)=>[`Ansi ${n} Color`,we(e)])),"Background Color":we(t.background),"Bold Color":we(t.foreground),"Cursor Color":we(t.cursor),"Cursor Text Color":we(t.background),"Foreground Color":we(t.foreground),"Selected Text Color":we(t.foreground),"Selection Color":we(t.selectionBackground)}}function Xf(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function $s(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,...Xf(e.get(s.name)),...bs(s)}),o=[...n?[i(n,"default")]:[],...t.map((s)=>i(s,s.name))];return`${JSON.stringify({Profiles:o},null,2)}
6
+ `}function Cf(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 Hn={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(bs(t)).map(([n,r])=>Cf(n,r)),"</dict>","</plist>",""].join(`
8
+ `);return[{path:`iterm2/${ct(t.name)}.itermcolors`,content:e}]}};var On={id:"kitty",emit(t){let e=[..._e(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/${ct(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 mg}from"node:crypto";import{mkdirSync as Oc,readdirSync as je,readFileSync as jc,renameSync as Rc,rmSync as ze,statSync as pg,utimesSync as wg,writeFileSync as Or}from"node:fs";import{isAbsolute as bg,join as vt}from"node:path";var yc=vr(Fs(),1),Nr=vr($c(),1),kc=[137,80,78,71,13,10,26,10],vc=13;function Rn(t){return t.length>=kc.length&&kc.every((e,n)=>t[n]===e)}function gg(t){let e=Nr.PNG.sync.read(Buffer.from(t));return{width:e.width,height:e.height,data:new Uint8Array(e.data)}}function Mc(t,e){if(Rn(t)){let n=Pn(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);return gg(t)}if(t[0]===255&&t[1]===216){let n=yc.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 Ye(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 Ec(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 Pn(t){if(t.length<33||!Rn(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=Ec(t,"IDAT");return{width:n,height:r,alpha:Ec(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function Sc(t,e=vc){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 Gn(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)<vc)n++;return Math.round(n*100/(e.w*e.h))}function dg(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 g=((s*e+m)*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 Ic(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=Hr(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 Hr(t,e,n,r){let i=Math.max(1,Math.floor(Math.min(e.w/n,e.h/r))),o=dg(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)),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,M=(f*o.width+g)*4,p=(f*o.width+$)*4,R=(s[F+3]??0)*(1-y)*(1-l),k=(s[E+3]??0)*y*(1-l),j=(s[M+3]??0)*(1-y)*l,H=(s[p+3]??0)*y*l,L=R+k+j+H,P=(u*n+m)*4;if(L>0)for(let X=0;X<3;X++){let K=(s[F+X]??0)*R+(s[E+X]??0)*k+(s[M+X]??0)*j+(s[p+X]??0)*H;c[P+X]=Math.round(K/L)}c[P+3]=Math.round(L)}}return{width:n,height:r,data:c}}var Fc={width:2560,height:1550},$g=2560,kg=0.1,fe={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Eg=zt(Ti("#19161e","#9b86c8",0.2)),yg="shelf";function Ti(t,e,n){let r=Gt(t),i=Gt(e);return`#${r.map((o,s)=>Math.round(o+((i[s]??0)-o)*n).toString(16).padStart(2,"0")).join("")}`}function vg(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 Nc(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 Hc(t,e){let n=vg(t,e),i=Nc((h)=>ki({name:t.name,background:Ti(t.background,n,h),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),o=Nc((h)=>zt(Ti(t.background,n,h))<=Eg),s=Math.floor(Math.min(i,o)*1000)/1000,c=Gt(t.background),u=Math.hypot(...Gt(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=Hc(t,"cursor");if(n.opacity>=kg)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>Hc(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function Ui(t,e,n){let r=Gt(e),i=Gt(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 Mg(t,e,n){let r=Gt(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 Pc(t){return Sc(t)??{x:0,y:0,w:t.width,h:t.height}}function Sg(t,e){if(t<=0||e<=0)return Fc;let n=Math.min(1,Fc.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function Ig(t,e){let n=Math.min(1,$g/Math.max(e.w,e.h));return Hr(t,e,Math.round(e.w*n),Math.round(e.h*n))}function Gc(t,e,n,r){if(r<fe.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(fe.tall*n,fe.reach*e*t.h/t.w),o=i*t.w/t.h;if(o>fe.widest*e)o=fe.widest*e,i=o*t.h/t.w;let s=fe.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-fe.margin)-o,y:s,w:o,h:i*c},focus:Math.min(1,(n/2-s)/i)}}function Lc(t,e,n,r){let i=Math.max(1,Math.round(e.at.w)),o=Math.max(1,Math.round(e.at.h)),s=Hr(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 Tc(t,e,n,r,i){let o=Pc(t),s=Lc(t,Gc(o,r,i,Gn(t,o)),r,i);return Mg(Ui(s,e.background,n.color),e.background,n.opacity)}function ke(t){return vt(t,"ttheme","backgrounds")}function Fg(t,e,n,r,i){return[...r?[`# from ${r}`]:[],...i?[`# image ${i}`]:[],`background-image = ${e}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${n}`,`config-file = ?${t}.tune.conf`,`config-file = ?${t}.off.conf`,""].join(`
11
+ `)}function Uc(t,e,n){let r=new Map;for(let s of[`${e}.conf`,`${e}.tune.conf`,`${e}.off.conf`]){let c;try{c=jc(vt(t,s),"utf8")}catch{if(s===`${e}.conf`)return;continue}for(let u of c.split(`
12
+ `)){let h=/^(background-image(?:-fit|-opacity)?)\s*=\s*(.*?)\s*$/.exec(u);if(h)r.set(h[1],h[2])}}let i=r.get("background-image")??"";if(i==="")return;let o=Number(r.get("background-image-opacity")??1);return{image:i.startsWith("~/")?vt(n,i.slice(2)):bg(i)?i:vt(t,i),opacity:Number.isFinite(o)?o:1,cover:r.get("background-image-fit")==="cover"}}function Ng(t,e){for(let n of je(t))if(Ki(n,e))ze(vt(t,n))}function Hg(t){return`${t.site}_${t.id}`}function Rr(t,e){return vt(t,yg,e)}function Ki(t,e){let n=t.slice(e.length);return t.startsWith(e)&&(n===".conf"||n===".tune.conf"||n===".off.conf"||/^(\.[0-9a-f]{8})?(@[a-z0-9-]+)?\.png$/.test(n))}function Ln(t,e){try{return/^# image (\S+)$/m.exec(jc(vt(t,`${e}.conf`),"utf8"))?.[1]}catch{return}}function Og(t,e){try{return je(Rr(t,e))}catch{return[]}}function Kc(t,e){let n=Ln(t,e);return[...n?[n]:[],...Og(t,e)].sort()}function Ac(t,e){let n=Ln(t,e);if(!n)return;let r=vt(Rr(t,e),n);ze(r,{recursive:!0,force:!0}),Oc(r,{recursive:!0});for(let i of je(t))if(Ki(i,e))Rc(vt(t,i),vt(r,i.slice(e.length)))}function Jc(t,e,n){let r=vt(Rr(t,e),n);for(let i of je(r))Rc(vt(r,i),vt(t,`${e}${i}`));ze(r,{recursive:!0})}function Wc(t,e,n){try{return je(vt(t,"originals")).find((r)=>r.startsWith(`${e}-${n}.`))}catch{return}}function Qc(t,e,n){let r=Wc(t,e,n);if(r){let i=new Date;wg(vt(t,"originals",r),i,i)}}function Zc(t,e,n){let r=ke(t),i=Kc(r,e),o=Ln(r,e);if(!o||i.length<2)throw Error(`${e} has no other image`);let s=(i.indexOf(o)+n+i.length)%i.length,c=i[s];return Ac(r,e),Jc(r,e,c),Qc(r,e,c),{key:c,at:s+1,of:i.length}}function qc(t,e){let n=ke(t),r=je(n).filter((h)=>Ki(h,e));if(r.length===0)throw Error(`${e} has no image`);let i=Kc(n,e),o=Ln(n,e),s=o&&Wc(n,e,o);if(s)ze(vt(n,"originals",s));for(let h of r)ze(vt(n,h));let c=i.filter((h)=>h!==o),u=c[(o?i.indexOf(o):0)%c.length];if(u)Jc(n,e,u),Qc(n,e,u);return{key:o,left:c.length}}function jg(t,e,n){if(Ln(t,e)!==n)Ac(t,e);if(n)ze(vt(Rr(t,e),n),{recursive:!0,force:!0});Ng(t,e)}function xc(t,e,n,r,i,o){let s=ke(t),c=e.name,u=Hg(i);Oc(vt(s,"originals"),{recursive:!0}),jg(s,c,u);let h=Pc(r),{width:a,height:f}=Sg(o.width,o.height),l=Gc(h,a,f,Gn(r,h)),m=Ye(Ui(Ig(r,h),e.background,n.color)),b=Ye(Ui(Lc(r,l,a,f),e.background,n.color)),g=vt(s,`${c}.${mg("sha1").update(m).update(b).digest("hex").slice(0,8)}`),$=`${g}.png`,y=`${g}@fill-${Math.round(l.focus*100)}.png`,F=vt(s,`${c}.conf`),E=vt(s,"originals",`${c}-${i.site}_${i.id}.${i.ext}`);return Or($,m),Or(y,b),Or(F,Fg(c,y,n.opacity,i.from,u)),Or(E,i.bytes),[$,y,F,E]}function _c(t){let e=vt(ke(t),"originals"),n=new Map,r;try{r=je(e)}catch{return new Map}for(let i of r){let o=/^(.+)-([a-z.]+)_(\d+)\.[a-z]+$/.exec(i),[,s,c,u]=o??[];if(!s||!c||!u)continue;let h=pg(vt(e,i)).mtimeMs,a=n.get(s);if(!a||h>a.at)n.set(s,{site:c,id:Number(u),at:h})}return new Map([...n].map(([i,{site:o,id:s}])=>[i,{site:o,id:s}]))}function Ai(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:ms(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r}}}function Re(t){return t.filter((e)=>e.default!==!0)}function Rg(t){let[e]=t;if(!e)throw Error("manifest needs at least one theme");return{version:re.version,gate:Ir,placement:fe,palettes:t.map(Ai)}}var Ji={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(Rg(t),null,2)}
13
+ `}]}};import{readdirSync as ad,readFileSync as bu}from"node:fs";import{basename as fd,join as $u}from"node:path";import{readdirSync as Pg,rmSync as Gg,statSync as Lg}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as Tg}from"node:net";import{homedir as Ug}from"node:os";import{join as Un}from"node:path";import{setTimeout as Kg}from"node:timers/promises";var Pe=100,Le=25000000,Ag=536870912,Kn=["safe","questionable","explicit"],Ge=["nudity","underwear"],Jg={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},Tn={safe:"s",questionable:"q",explicit:"e"},Wg=8191,Qg=20000,Zg=5000,Xc=3000,Cc=8,qg=3000,Bc=60000,Vc=3,Qi=`ttheme/${re.version} (+${re.homepage})`,xg=["orig","tile","thumb","cut"],Dc=new Map,_g=nd(process.env.TTHEME_FIND_HOSTS),Xg=ed(process.env.TTHEME_FIND_CUTOUTS);Tg(qg);function Yc(t){try{return Pg(t)}catch{return[]}}function Pr(t){return t.startsWith("//")?`https:${t}`:t}function An(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function Jn(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 Cg(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,o])=>[i,String(o)]))}function Wi(t,e,n){let r=Pr(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:An(r)}}function tu(t,e){let n=Pr(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 Vg(t){let e=Cg(t);return Jn(t).flatMap((n)=>{let r=Pr(String(n.file_url??"")),i=String(n.tags??"");return tu(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||An(r)).toLowerCase(),owner:n.author,artist:i.split(/\s+/).find((o)=>e.get(o)==="artist")??"",md5:n.md5,tags:i,solo:void 0,versions:[Wi(n.jpeg_url,n.jpeg_width,n.jpeg_height),Wi(n.sample_url,n.sample_width,n.sample_height)]})})}function Yg(t){return Jn(t).flatMap((e)=>{let n=Pr(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return tu(e,{preview:i.variants?.find((o)=>o.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||An(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)=>Wi(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 zg(t){return Jn(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function Bg(t){return Jn(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function Dg(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function td(t){let e=t.trim()?JSON.parse(t):{};return Number(e.counts?.posts)||0}function ed(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 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 Gr(t){return eu(t,Kn,["safe"])}function Lr(t){return eu(t,Ge,Ge,"none")}function nu(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function ru(t){let e=_g.get(t.key),n=Xg.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 iu(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function zc(t){let e=ru(t),n=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...e,cutouts:iu(e.cutouts),ratings:nu([Tn.safe],[Tn.questionable],[Tn.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${Tn[i]}`;let o=Kn.filter((c)=>!r.includes(c)),[s]=o;return o.length===1&&s?`-rating:${Tn[s]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(Pe),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:Vg,count:Dg}}function rd(t){let e=ru(t),n=nu(["g"],["s","q"],["e"]);return{...e,cutouts:iu(e.cutouts),ratings:n,rate:(r)=>r.length===Kn.length?"":`rating:${r.flatMap((i)=>[...n[i]]).join(",")}`,best:"order:score",tagBudget:2,postsUrl:(r,i)=>`${e.origin}/posts.json?${new URLSearchParams({limit:String(Pe),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:Yg,count:td}}function id(t){return lt.find((e)=>e.key===t||e.name===t||new URL(e.origin).host===t)}function Zi(t){return t.split(/\s+/).filter((e)=>e&&!e.startsWith("rating:")).length}function Tr(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=lt.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=id(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 lt=[rd({key:"danbooru",name:"danbooru",origin:"https://danbooru.donmai.us",cutouts:["transparent_background"],vouched:!1,tunneled:!0,ansi:2}),zc({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,tunneled:!1,ansi:6}),zc({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,tunneled:!1,ansi:5})],le=134217728;function oe(t,e){let n=lt.indexOf(t);return(n===-1?lt.length:n)*le+e}function qi(t){let e;try{e=new URL(t).hostname}catch{return""}return e.split(".").slice(-2).join(".")}function ou(){return lt.filter((t)=>!t.tunneled).map((t)=>qi(t.origin)).flatMap((t)=>[t,`.${t}`]).join(",")}function su(t,e=Ge){return t.tags.filter((n)=>e.some((r)=>Jg[r].has(n)))}function cu(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function Wn(t){return[t,...t.smaller].find((e)=>e.width*e.height<=Le)}function uu(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 Un(process.env.XDG_CACHE_HOME??Un(Ug(),".cache"),"ttheme")}function ve(t){return Un(Ur(),t.key)}function hu(t=Ag,e=Ur()){let n=[],r=0;for(let i of Yc(e))for(let o of xg){let s=Un(e,i,o);for(let c of Yc(s)){let u=Un(s,c);try{let{size:h,mtimeMs:a}=Lg(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{Gg(i.path,{force:!0}),r-=i.size}catch{}}}function od(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)?Bc:Math.max(0,n-e)}function Ee(t){return Dc.get(t.key)??0}function sd(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function cd(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}async function ye(t,e,n,r={},i=Qg){for(let o=1;;o++){let s=Ee(t)-Date.now();if(s>0)await Kg(s,void 0,{signal:n});let c;try{c=await fetch(e,{headers:{"User-Agent":Qi,Referer:`${t.origin}/`,...r},signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(u){if(o<Vc&&!n.aborted&&sd(u))continue;throw u}if(c.status===429&&o<Vc){await c.body?.cancel();let u=od(c.headers.get("retry-after"),Date.now());if(u>Bc)throw Error(`${t.name} asks to wait ${Math.ceil(u/1000)}s`);Dc.set(t.key,Math.max(Ee(t),Date.now()+u));continue}if(!c.ok)throw await c.body?.cancel(),Error(cd(c)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${c.status}`);return c}}async function au(t,e,n,r){return t.parse(await(await ye(t,t.postsUrl(e,n),r)).text())}async function fu(t,e,n){return t.count(await(await ye(t,t.countUrl(e),n)).text())}async function xi(t,e,n){let[r]=t.parse(await(await ye(t,t.postUrl(e),n)).text());return r}function ud(t){let e=lt.find((r)=>r.key==="danbooru"),n=new URLSearchParams({limit:String(2*Pe),only:"md5,tag_string",tags:`md5:${t.join(",")}`});return`${e.origin}/posts.json?${n}`}function hd(t){return new Map(Jn(t).flatMap((e)=>{let n=String(e.md5??"");return n?[[n,String(e.tag_string??"").split(/\s+/).filter(Boolean)]]:[]}))}function lu(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 gu(t,e){let n=lt.find((i)=>i.key==="danbooru"),r=new Map;if(Ee(n)>Date.now())return r;for(let i=0;i<t.length;i+=Pe){let o=await(await ye(n,ud(t.slice(i,i+Pe)),e,{},Zg)).text();for(let[s,c]of hd(o))r.set(s,c)}return r}async function du(t,e){let n=lt.find((o)=>o.key==="danbooru");if(Ee(n)<=Date.now())try{let o=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(Cc)}),s=`${n.origin}/autocomplete.json?${o}`;return zg(await(await ye(n,s,e,{},Xc)).text())}catch(o){if(e.aborted)throw o}let r=lt.find((o)=>o.key==="yande"),i=new URLSearchParams({name:t,order:"count",limit:String(Cc)});return Bg(await(await ye(r,`${r.origin}/tag.json?${i}`,e,{},Xc)).text())}async function mu(t,e,n){let r=await ye(t,e,n,{Range:`bytes=0-${Wg}`});return Pn(new Uint8Array(await r.arrayBuffer()))}async function pu(t,e,n,r){let i=await ye(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 ge="_groups.toml",wu=3,ku=["background","foreground","cursor","selection"];function It(t,e){throw Error(`${t}: ${e}`)}function Te(t,e,n){if(typeof n!=="string"||!hs(n))It(t,`${e} must be "#rrggbb" (lowercase), got ${JSON.stringify(n)}`);return n}function Me(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 ld(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)=>Te(t,`ghostty.icon_screen[${o}]`,i))}function gd(t,e,n){let r=Qn(e);return{iconGhost:r.icon_ghost===void 0?n.cursor:Te(t,"ghostty.icon_ghost",r.icon_ghost),iconScreen:ld(t,r.icon_screen,n)}}function dd(t){return new Map([...ku.map((e)=>[e,t[e]]),...t.ansi.map((e,n)=>[`ansi${n}`,e])])}function md(t,e,n){if(!Array.isArray(e)||e.length!==wu)It(t,`meta.signature must name exactly ${wu} palette slots`);let r=dd(n),i=[],o=[];for(let[s,c]of e.entries()){let u=`meta.signature[${s}]`,h=Me(t,u,c),a=r.get(h);if(a===void 0)It(t,`${u} ${JSON.stringify(c)} is not a palette slot — use ${ku.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 pd(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=lt.find((u)=>u.key===i);if(!s)It(t,`meta.booru_sites.${i} is not a find site — use ${lt.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 wd(t){let n=Bun.TOML.parse(bu($u(t,ge),"utf8")).group;if(!Array.isArray(n)||n.length===0)It(ge,"needs at least one [[group]] table");return n.map((r)=>{let i=Qn(r);return{name:Me(ge,"group.name",i.name),native:i.native===void 0?void 0:Me(ge,"group.native",i.native),lead:Me(ge,"group.lead",i.lead)}})}function bd(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=Me(t,"meta.name",i.name);if(u!==fd(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=Me(t,"meta.group",i.group),f=n.get(a);if(!f)It(t,`meta.group "${a}" has no [[group]] table in ${ge}`);let l=Te(t,"colors.background",o.background),m=Te(t,"colors.foreground",o.foreground),b=Te(t,"colors.cursor",o.cursor),g=Te(t,"colors.selection_background",o.selection_background),$=c.map((p,R)=>Te(t,`colors.ansi[${R}]`,p)),y=md(t,i.signature,{background:l,foreground:m,cursor:b,selection:g,ansi:$}),F=i.booru===void 0?void 0:Me(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=pd(t,i.booru_sites,F),M=Array.isArray(s.waive)?s.waive.map(String):[];if(M.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:Me(t,"meta.ansi_source",i.ansi_source),...F?{booru:F}:{},...E?{booruSites:E}:{},background:l,foreground:m,cursor:b,selectionBackground:g,ansi:$,signature:y.colors,signatureSlots:y.names,ghostty:gd(t,r.ghostty,{background:l,cursor:b,selectionBackground:g}),waive:M,waiveReason:typeof s.reason==="string"?s.reason:void 0}}function Eu(t){let e=wd(t),n=new Map(e.map((o)=>[o.name,o]));if(n.size!==e.length)It(ge,"group.name must be unique");let r=ad(t).filter((o)=>o.endsWith(".toml")&&!o.startsWith("_")).map((o)=>bd(o,bu($u(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(ge,`group "${o.name}" has no themes`);if(!s.some((c)=>c.name===o.lead))It(ge,`group "${o.name}" lead "${o.lead}" is not one of its themes`)}return r}function yu(t){return t.filter((e)=>e.role===void 0)}function Zn(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 $d=["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:$d,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 Ar=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp"],Iu="# ttheme begin",Fu="# ttheme end",qn=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function xn(t,e){let n=`${Iu}
14
+ ${e}
15
+ ${Fu}
16
+ `;if(qn.test(t))return t.replace(qn,n);if(t==="")return n;return`${t.replace(/\n*$/,`
20
17
  `)}
21
- ${e}`}function pr(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 Dc(t,n){let e=[`command = ${t}/launch-tab.zsh`,"shell-integration = zsh"];if(n)e.push(`theme = ${n}`);return e.push(`config-file = ${t}/ttheme.conf`,`config-file = ?${t}/backgrounds/shown.conf`),e.join(`
22
- `)}function tu(t){return`source ${t}/ttheme.zsh`}var ql="# ttheme settings — uncomment a line to change it; exported variables win over this file",wr={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 Ii(t,n){let e=`: \${${t}:=${n}}`;return wr[t]?.default===n?`# ${e}`:e}function nu(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function Xl(t,n){if(nu(n).test(t))return t;let e=wr[n];return`${t.replace(/\n*$/,`
18
+ ${n}`}function _n(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*$/,`
19
+ `)}function Ue(t,e){let n=t.replace(qn,"");return new RegExp(String.raw`^[ \t]*${e}(?:[ \t]*=|[ \t]+\S)`,"m").test(n)}function Jr(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 Nu(t,e,n=""){let r=[];if(!Ue(n,"command")){if(r.push(`command = ${t}/launch-tab.zsh`),!Ue(n,"shell-integration"))r.push("shell-integration = zsh")}if(e)r.push(`theme = ${ct(e)}`);return r.push(`config-file = ?${t}/backgrounds/shown.conf`),r.join(`
20
+ `)}function Hu(t){return`source ${t}/ttheme.zsh`}var kd="# ttheme settings — uncomment a line to change it; exported variables win over this file",Xn={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 _i(t,e){let n=`: \${${t}:=${e}}`;return Xn[t]?.default===e?`# ${n}`:n}function Ou(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function Ed(t,e){if(Ou(e).test(t))return t;let n=Xn[e];return`${t.replace(/\n*$/,`
23
21
  `)}
24
- ${e.doc}
25
- ${Ii(n,e.default)}
26
- `}function Ni(){let t=Object.entries(wr).map(([n,e])=>`${e.doc}
27
- ${Ii(n,e.default)}`);return`${[ql,...t].join(`
22
+ ${n.doc}
23
+ ${_i(e,n.default)}
24
+ `}var ju=Object.keys(Xn);function Xi(){let t=Object.entries(Xn).map(([e,n])=>`${n.doc}
25
+ ${_i(e,n.default)}`);return`${[kd,...t].join(`
28
26
 
29
27
  `)}
30
- `}function eu(t,n,e){let r=Ii(n,e),i=nu(n);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
28
+ `}function Ru(t,e,n){let r=_i(e,n),i=Ou(e);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
31
29
  `)}
32
30
  ${r}
33
- `}function ru(t){if(t==="")return Ni();return Object.keys(wr).reduce(Xl,t)}function iu(t,n){return[...t?[`include themes/${t}.conf`]:[],`watcher ${n}`,"window_logo_scale 100","window_logo_alpha 1"].join(`
34
- `)}var _l=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,Vc=/^[ \t]*\[/m,xc=/^[ \t]*import[ \t]*=/m,Cl=/^[ \t]*general[ \t]*[.=]/m;function zl(t){return t?`[general]
35
- import = ["${t}"]`:""}function $r(t,n){let e=t.replace(Fi,""),r=_l.exec(e);if(!r){let u=e.search(Vc),h=u<0?e:e.slice(0,u);if(Cl.test(e)||xc.test(h))return;return je(t,zl(n))}let i=r.index+r[0].length,o=e.slice(i),s=o.search(Vc);if(xc.test(s<0?o:o.slice(0,s)))return;let c=n?`import = ["${n}"]
36
- `:"";return`${e.slice(0,i)}
37
- # ttheme begin
38
- ${c}# ttheme end${o}`}var Bc=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,Yl=/^return config[ \t]*$/gm;function ou(t){return`dofile(${JSON.stringify(t)})(config)`}function br(t,n){let e=`-- ttheme begin
39
- ${n}
40
- -- ttheme end
41
- `;if(Bc.test(t))return t.replace(Bc,e);if(t==="")return`local wezterm = require 'wezterm'
31
+ `}function Pu(t){if(t==="")return Xi();return Object.keys(Xn).reduce(Ed,t)}function Gu(t,e,n=""){return[...t?[`include themes/${ct(t)}.conf`]:[],`watcher ${e}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!Ue(n,r.split(" ")[0]))].join(`
32
+ `)}function Lu(t){let e=t.replace(qn,"");return/^[ \t]*\[colors[\].]/m.test(e)||/^[ \t]*colors[ \t]*[.=]/m.test(e)}var yd=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,vu=/^[ \t]*\[/m,Mu=/^[ \t]*import[ \t]*=/m,vd=/^[ \t]*general[ \t]*[.=]/m;function Md(t){return t?`[general]
33
+ import = ["${t}"]`:""}function Cn(t,e){let n=t.replace(qn,""),r=yd.exec(n);if(!r){let u=n.search(vu),h=u<0?n:n.slice(0,u);if(vd.test(n)||Mu.test(h))return;return xn(t,Md(e))}let i=r.index+r[0].length,o=n.slice(i),s=o.search(vu);if(Mu.test(s<0?o:o.slice(0,s)))return;let c=e?`import = ["${e}"]
34
+ `:"";return`${n.slice(0,i)}
35
+ ${Iu}
36
+ ${c}${Fu}${o}`}var Su=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,Sd=/^return config[ \t]*$/gm;function Tu(t){return`dofile(${JSON.stringify(t)})(config)`}var Uu=`local wezterm = require 'wezterm'
42
37
  local config = wezterm.config_builder()
43
38
 
39
+ `;function Ku(t){let e=t.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return e===`${Uu}return config
40
+ `?"":e}function Vn(t,e){let n=`-- ttheme begin
44
41
  ${e}
42
+ -- ttheme end
43
+ `;if(Su.test(t))return t.replace(Su,n);if(t==="")return`${Uu}${n}
45
44
  return config
46
- `;let r=[...t.matchAll(Yl)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${e}
47
- ${t.slice(r.index)}`}var su="[appearance.themes]";function cu(t){let n=t.findIndex((r)=>r.trim()===su);if(n<0)return;let e=t.findIndex((r,i)=>i>n&&r.trimStart().startsWith("["));return[n,e<0?t.length:e]}function uu(t){let n=t.split(`
48
- `),e=cu(n);if(!e)return;return n.slice(e[0]+1,e[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function hu(t){return`{ custom = { name = "${t}", path = "ttheme-${t}.yaml" } }`}function fu(t,n){let e=t.split(`
49
- `),r=cu(e);if(!r)return n===void 0?t:`${t.replace(/\n*$/,`
45
+ `;let r=[...t.matchAll(Sd)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${n}
46
+ ${t.slice(r.index)}`}var Au="[appearance.themes]";function Ju(t){let e=t.findIndex((r)=>r.trim()===Au);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(`
47
+ `),n=Ju(e);if(!n)return;return e.slice(n[0]+1,n[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function Wu(t){return`{ custom = { name = "${t}", path = "${ct(t)}.yaml" } }`}function Qr(t,e){let n=t.split(`
48
+ `),r=Ju(n);if(!r)return e===void 0?t:`${t.replace(/\n*$/,`
50
49
  `)}
51
- ${su}
52
- theme = ${n}
53
- `;let i=e.findIndex((o,s)=>s>r[0]&&s<r[1]&&/^theme\s*=/.test(o));if(i>=0)e.splice(i,1,...n===void 0?[]:[`theme = ${n}`]);else if(n!==void 0)e.splice(r[0]+1,0,`theme = ${n}`);return e.join(`
54
- `)}function Oi(t,n,e=[]){for(let c of t)for(let u of[c.name,c.group,c.native??"",c.ansiSource])if(/["$`\\]/.test(u))throw Error(`${c.name}: "${u}" contains a character that breaks zsh quoting`);let r=Math.max(0,...t.map((c)=>c.name.length)),i=(c,u)=>` ${c.name.padEnd(r)} "${u}"`,o=(c)=>c.map((u)=>u.name).join(" "),s=qn(t);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${en.version}`,"",'# the palette new tabs open with, which the iTerm2 "ttheme · default" profile wears',`typeset -g TTHEME_STARTUP=${n??""}`,"","# the terminals ttheme is wired into: a picture change reaches every one of them, from whichever runs the shell",`typeset -ga TTHEME_TERMINALS=(${e.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${Ni().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...t.map((c)=>i(c,[c.background,c.foreground,c.cursor,c.selection,...c.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(He(s))})`,"","typeset -gA TTHEME_GROUP=(",...t.map((c)=>i(c,c.group)),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...t.filter((c)=>c.native).map((c)=>i(c,c.native??"")),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...t.map((c)=>i(c,c.ansiSource)),")",""].join(`
55
- `)}var Hi={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:Oi(t.map(wi))}]}};var Vl=["black","red","green","yellow","blue","magenta","cyan","white"];function au(t,n){return[` ${t}:`,...Vl.map((e,r)=>` ${e}: "${n[r]}"`)]}var Re={id:"warp",limits:"colors only — no selection color, and Warp paints one theme app-wide",emit(t){let n=[`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:",...au("normal",t.ansi.slice(0,8)),...au("bright",t.ansi.slice(8,16)),""].join(`
56
- `);return[{path:`warp/themes/ttheme-${t.name}.yaml`,content:n}]}};var gu=(t)=>`[${t.map((n)=>`"${n}"`).join(", ")}]`,Ge={id:"wezterm",limits:"no shaders; OSC repaints per pane, pictures show per window",emit(t){let n=["[metadata]",`name = "${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 = ${gu(t.ansi.slice(0,8))}`,`brights = ${gu(t.ansi.slice(8,16))}`,""].join(`
57
- `),e=[`-- ${t.name} — font settings.`,"-- Merge into your wezterm.lua config table:",`-- local t = require("ttheme.${t.name}")`,`-- config.color_scheme = "${t.name}"`,"-- config.font = t.font","-- config.font_size = t.font_size","return {",` font = require("wezterm").font("${t.font.family}"),`,` font_size = ${t.font.size},`,"}",""].join(`
58
- `);return[{path:`wezterm/colors/${t.name}.toml`,content:n},{path:`wezterm/config/${t.name}.lua`,content:e}]}},Xn=(t)=>JSON.stringify(t);function lu(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${Xn(t.path)}`,`local COLORS = ${Xn(t.colors)}`,`local BACKGROUNDS = ${Xn(t.backgrounds)}`,`local STARTUP = ${t.startup?Xn(t.startup):"nil"}`,"local PALETTES = {",...t.palettes.map((n)=>` [${Xn(n.name)}] = ${Xn(n.background)},`),"}","","local X = { left = 'Left', center = 'Center', right = 'Right' }","local Y = { top = 'Top', center = 'Middle', bottom = 'Bottom' }","local SIZE = { cover = 'Cover', contain = 'Contain', stretch = '100%' }","","local function locate(path)"," if path:sub(1, 2) == '~/' then"," return os.getenv('HOME') .. path:sub(2)"," elseif path:sub(1, 1) == '/' or path:match('^%a:[/\\\\]') then"," return path"," end"," return BACKGROUNDS .. '/' .. path","end","","local function read(path, into)"," local f = io.open(path, 'r')"," if not f then"," return false"," end"," for line in f:lines() do"," local key, value = line:match('^%s*([%w%-]+)%s*=%s*(.-)%s*$')"," if key == 'config-file' then"," read(locate((value:gsub('^%?', ''))), into)"," elseif key then"," into[key] = value"," end"," end"," f:close()"," return true","end","","local function layers(palette)"," local color = PALETTES[palette]"," local c = {}"," if not color or not read(BACKGROUNDS .. '/' .. palette .. '.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(`
59
- `)}var du=["black","red","green","yellow","blue","purple","cyan","white"];function mu(t){return{name:t.name,background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(du.map((n,e)=>[n,t.ansi[e]])),...Object.fromEntries(du.map((n,e)=>[`bright${n[0]?.toUpperCase()}${n.slice(1)}`,t.ansi[e+8]]))}}function ji(t,n,e){let r={...n&&e?{profiles:[{updates:n,colorScheme:e}]}:{},schemes:t.map(mu)};return`${JSON.stringify(r,null,2)}
60
- `}var Le={id:"windows-terminal",limits:"colors only — no kitty graphics, so no pictures; OSC repaints per pane",emit(t){return[{path:`windows-terminal/schemes/${t.name}.json`,content:`${JSON.stringify(mu(t),null,2)}
61
- `}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:ji(t)}]}};function An(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}var wu=Pe(import.meta.dirname,".."),Bl=Pe(wu,"themes"),Ri=Pe(wu,"dist"),kr=[pe,$e,me,Ge,we,Le,Re],Dl=[Hi,$i],$u=kr.map((t)=>t.id);async function Er({only:t}={}){if(typeof Bun>"u")throw Error("ttheme build needs bun — run it from a checkout: bun src/bin.ts build");let n=t&&t.length>0?kr.filter((o)=>t.includes(o.id)):kr,e=zc(Bl),r=qo(e);if(r.length>0){for(let o of r)console.error(` ✗ ${o.theme} [${o.rule}] ${o.detail}`);throw Error(`${r.length} contrast violation(s). Fix the palette, or waive the rule in its [contrast] section with a reason.`)}if(n.length===kr.length)pu(Ri,{recursive:!0,force:!0});else for(let o of n)pu(Pe(Ri,o.id),{recursive:!0,force:!0});let i=0;for(let o of[...n,...Dl]){let s=e.flatMap((h)=>o.emit?.(h)??[]),c=o.emitShared?.(e)??[];for(let h of[...s,...c])await Bun.write(Pe(Ri,h.path),h.content),i++;let u=s.length>0?`${e.length} themes${o.limits?` (${o.limits})`:""}`:c.map((h)=>xl(h.path)).join(" ");console.log(` ${o.id.padEnd(16)} ${u}`)}console.log(`
62
- ${e.length} themes (${Yc(e).length} in the new-tab rotation) -> ${i} files in dist/`)}import{spawn as Rh}from"node:child_process";import{createHash as Gh}from"node:crypto";import{existsSync as xn,mkdirSync as _e,mkdtempSync as Hm,readFileSync as Lh,rmSync as xi,statSync as jm,writeFileSync as Ce}from"node:fs";import{tmpdir as Rm}from"node:os";import{dirname as Jr,join as fn}from"node:path";import{pathToFileURL as Gm}from"node:url";import{execFile as td}from"node:child_process";import{createHash as Mu}from"node:crypto";import{existsSync as nd,mkdtempSync as ed,readFileSync as Sr,rmSync as rd,statSync as vu,writeFileSync as yu}from"node:fs";import{homedir as id,tmpdir as od}from"node:os";import{join as Mr}from"node:path";import{fileURLToPath as sd}from"node:url";import{promisify as cd}from"node:util";var sn=cd(td),vr=67108864,ud=4096,Pi=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],hd=["text/uri-list","text/plain;charset=utf-8","text/plain"],Gi=[...Pi,"text/uri-list","text/plain"];function fd(t){try{return vu(t).isFile()}catch{return!1}}function ad(t){let n=[],e="",r="",i=!1;for(let o=0;o<t.length;o++){let s=t[o];if(r==="'")if(s==="'")r="";else e+=s;else if(r==='"')if(s==='"')r="";else if(s==="\\"&&'"\\$`'.includes(t[o+1]??""))e+=t[++o];else e+=s;else if(s==="\\"&&o+1<t.length)e+=t[++o],i=!0;else if(s==="'"||s==='"')r=s,i=!0;else if(/\s/.test(s)){if(i)n.push(e);e="",i=!1}else e+=s,i=!0}if(i)n.push(e);return n}function bu(t){if(/^file:\/\//i.test(t))try{return sd(t)}catch{return}if(t.startsWith("~/"))return Mr(id(),t.slice(2));return t.startsWith("/")?t:void 0}function Fr(t,n=fd){let e=[];for(let r of t.replace(/\r\n?/g,`
50
+ ${Au}
51
+ theme = ${e}
52
+ `;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(`
53
+ `)}function Ci(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=Re(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=${re.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=(${ju.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${Xi().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(Zn(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(`
54
+ `)}var Vi={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:Ci(t.map(Ai))}]}};var Id=["black","red","green","yellow","blue","magenta","cyan","white"];function Qu(t,e){return[` ${t}:`,...Id.map((n,r)=>` ${n}: "${e[r]}"`)]}var Yn={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: ${zt(t.background)<0.18?"darker":"lighter"}`,"terminal_colors:",...Qu("normal",t.ansi.slice(0,8)),...Qu("bright",t.ansi.slice(8,16)),""].join(`
55
+ `);return[{path:`warp/themes/${ct(t.name)}.yaml`,content:e}]}};var Zu=(t)=>`[${t.map((e)=>`"${e}"`).join(", ")}]`,zn={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(t){let e=["[metadata]",`name = "${ct(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 = ${Zu(t.ansi.slice(0,8))}`,`brights = ${Zu(t.ansi.slice(8,16))}`,""].join(`
56
+ `);return[{path:`wezterm/colors/${ct(t.name)}.toml`,content:e}]}},Be=(t)=>JSON.stringify(t);function qu(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${Be(t.path)}`,`local COLORS = ${Be(t.colors)}`,`local BACKGROUNDS = ${Be(t.backgrounds)}`,`local STARTUP = ${t.startup?Be(ct(t.startup)):"nil"}`,"local PALETTES = {",...t.palettes.map((e)=>` [${Be(e.name)}] = ${Be(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(`
57
+ `)}var xu=["black","red","green","yellow","blue","purple","cyan","white"];function _u(t){return{name:ct(t.name),background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(xu.map((e,n)=>[e,t.ansi[n]])),...Object.fromEntries(xu.map((e,n)=>[`bright${e[0]?.toUpperCase()}${e.slice(1)}`,t.ansi[n+8]]))}}function Yi(t,e,n){let r={...e&&n?{profiles:[{updates:e,colorScheme:ct(n)}]}:{},schemes:t.map(_u)};return`${JSON.stringify(r,null,2)}
58
+ `}var Bn={id:"windows-terminal",limits:"no kitty graphics, so no pictures; OSC repaints per pane",emit(t){return[{path:`windows-terminal/schemes/${ct(t.name)}.json`,content:`${JSON.stringify(_u(t),null,2)}
59
+ `}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:Yi(t)}]}};function ct(t){return`ttheme-${t}`}function _e(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}var Cu=Dn(import.meta.dirname,".."),Nd=Dn(Cu,"themes"),zi=Dn(Cu,"dist"),Zr=[Nn,On,Fn,zn,Hn,Bn,Yn],Hd=[Vi,Ji],n$=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=Eu(Nd),r=ps(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)Xu(zi,{recursive:!0,force:!0});else for(let o of e)Xu(Dn(zi,o.id),{recursive:!0,force:!0});let i=0;for(let o of[...e,...Hd]){let s=n.flatMap((h)=>o.emit?.(h)??[]),c=o.emitShared?.(n)??[];for(let h of[...s,...c])await Bun.write(Dn(zi,h.path),h.content),i++;let u=s.length>0?`${n.length} themes${o.limits?` (${o.limits})`:""}`:c.map((h)=>Fd(h.path)).join(" ");console.log(` ${o.id.padEnd(16)} ${u}`)}console.log(`
60
+ ${n.length} themes (${yu(n).length} in the new-tab rotation) -> ${i} files in dist/`)}import{spawn as ma}from"node:child_process";import{createHash as pa}from"node:crypto";import{existsSync as cn,mkdirSync as lr,mkdtempSync as lp,readFileSync as wa,rmSync as Eo,statSync as gp,writeFileSync as gr}from"node:fs";import{tmpdir as dp}from"node:os";import{dirname as si,join as he}from"node:path";import{pathToFileURL as mp}from"node:url";import{execFile as Od}from"node:child_process";import{createHash as Bu}from"node:crypto";import{existsSync as jd,mkdtempSync as Rd,readFileSync as Cr,rmSync as Pd,statSync as Du,writeFileSync as th}from"node:fs";import{homedir as Gd,tmpdir as Ld}from"node:os";import{join as xr}from"node:path";import{fileURLToPath as Td}from"node:url";import{promisify as Ud}from"node:util";var se=Ud(Od),_r=67108864,Kd=4096,to=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],Ad=["text/uri-list","text/plain;charset=utf-8","text/plain"],Bi=[...to,"text/uri-list","text/plain"];function Jd(t){try{return Du(t).isFile()}catch{return!1}}function Wd(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 Vu(t){if(/^file:\/\//i.test(t))try{return Td(t)}catch{return}if(t.startsWith("~/"))return xr(Gd(),t.slice(2));return t.startsWith("/")?t:void 0}function Vr(t,e=Jd){let n=[];for(let r of t.replace(/\r\n?/g,`
63
61
  `).split(`
64
- `)){let i=bu(r.trim());if(i&&n(i)){e.push(i);continue}for(let o of ad(r)){if(/^https?:\/\/\S+$/i.test(o)){e.push(o);continue}let s=bu(o);if(s&&n(s))e.push(s)}}return e}function gd(t){if(t[0]!==255||t[1]!==216)return null;let n=2;while(n+9<t.length){if(t[n]!==255){n++;continue}let e=t[n+1];if(e===255){n++;continue}let r=t[n+2]<<8|t[n+3];if(e>=192&&e<=207&&e!==196&&e!==200&&e!==204)return{height:t[n+5]<<8|t[n+6],width:t[n+7]<<8|t[n+8]};n+=2+r}return null}function ku(t){let n=ke(t)?Ee(t):gd(t);if(!n)return;return{ext:ke(t)?"png":"jpg",width:n.width,height:n.height}}async function yr(t,n){let e=ku(t);if(e&&e.width*e.height<=Rn)return{bytes:t,...e,source:n};if(process.platform!=="darwin")throw Error(e?`${e.width}×${e.height} is over ${Rn/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=ed(Mr(od(),"ttheme-attach-"));try{let i=Mr(r,"in"),o=Mr(r,"out.png");yu(i,t);let s=!e||e.width*e.height>Rn?["--resampleHeightWidthMax",String(ud)]:[];await sn("sips",["-s","format","png",...s,i,"--out",o]).catch(()=>{throw Error("that is not a picture macOS can read")});let c=new Uint8Array(Sr(o)),u=ku(c);if(!u)throw Error("that is not a picture macOS can read");return{bytes:c,...u,source:n}}finally{rd(r,{recursive:!0,force:!0})}}async function Ki(t,n){if(/^https?:\/\//i.test(t)){let e=await fetch(t,{headers:{"User-Agent":ki},signal:n});if(!e.ok)throw Error(`${new URL(t).host} answered ${e.status}`);if(Number(e.headers.get("content-length")??0)>vr)throw Error("that picture is over 64 MB");let r=new Uint8Array(await e.arrayBuffer());if(/^text\/html/i.test(e.headers.get("content-type")??""))throw Error(`${new URL(t).host} sent a web page, not a picture — copy the image address instead`);return yr(r,t)}if(vu(t).size>vr)throw Error("that picture is over 64 MB");return yr(new Uint8Array(Sr(t)),t)}var Su=new Map,Ir={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)=>Su.get(t)??"",parse:()=>[],count:()=>0};function Fu(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function Iu(t,n){Su.set(t,n)}function Nu(t){return Number.parseInt(Mu("sha1").update(t).digest("hex").slice(0,8),16)%ln}var ld=`ObjC.import('AppKit')
62
+ `)){let i=Vu(r.trim());if(i&&e(i)){n.push(i);continue}for(let o of Wd(r)){if(/^https?:\/\/\S+$/i.test(o)){n.push(o);continue}let s=Vu(o);if(s&&e(s))n.push(s)}}return n}function Qd(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 Yu(t){let e=Rn(t)?Pn(t):Qd(t);if(!e)return;return{ext:Rn(t)?"png":"jpg",width:e.width,height:e.height}}async function Xr(t,e){let n=Yu(t);if(n&&n.width*n.height<=Le)return{bytes:t,...n,source:e};if(process.platform!=="darwin")throw Error(n?`${n.width}×${n.height} is over ${Le/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=Rd(xr(Ld(),"ttheme-attach-"));try{let i=xr(r,"in"),o=xr(r,"out.png");th(i,t);let s=!n||n.width*n.height>Le?["--resampleHeightWidthMax",String(Kd)]:[];await se("sips",["-s","format","png",...s,i,"--out",o]).catch(()=>{throw Error("that is not a picture macOS can read")});let c=new Uint8Array(Cr(o)),u=Yu(c);if(!u)throw Error("that is not a picture macOS can read");return{bytes:c,...u,source:e}}finally{Pd(r,{recursive:!0,force:!0})}}async function eo(t,e){if(/^https?:\/\//i.test(t)){let n=await fetch(t,{headers:{"User-Agent":Qi},signal:e});if(!n.ok)throw Error(`${new URL(t).host} answered ${n.status}`);if(Number(n.headers.get("content-length")??0)>_r)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(Du(t).size>_r)throw Error("that picture is over 64 MB");return Xr(new Uint8Array(Cr(t)),t)}var eh=new Map,Yr={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 nh(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function rh(t,e){eh.set(t,e)}function ih(t){return Number.parseInt(Bu("sha1").update(t).digest("hex").slice(0,8),16)%le}var Zd=`ObjC.import('AppKit')
65
63
  function run(argv) {
66
64
  const pb = $.NSPasteboard.generalPasteboard
67
65
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -86,16 +84,16 @@ function run(argv) {
86
84
  if (web && web.count > 0) return web.objectAtIndex(0).absoluteString.js
87
85
  const text = pb.stringForType('public.utf8-plain-text')
88
86
  return text && !text.isNil() ? text.js : ''
89
- }`,dd=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
87
+ }`,qd=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
90
88
  $c = [Windows.Forms.Clipboard]
91
89
  $f = $c::GetFileDropList(); if ($f.Count) { $f; exit }
92
90
  $p = Join-Path $env:TEMP 'ttheme-clipboard.png'
93
91
  $s = $c::GetData('PNG'); if ($s -is [IO.MemoryStream]) { [IO.File]::WriteAllBytes($p, $s.ToArray()); $p; exit }
94
92
  $i = $c::GetImage(); if ($i) { $i.Save($p, [Drawing.Imaging.ImageFormat]::Png); $p; exit }
95
- $c::GetText()`;function Ou(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(Sr("/proc/version","utf8"))}catch{return!1}}async function md(t){let n=Boolean(process.env.WAYLAND_DISPLAY),e=n?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await sn(e[0],e[1])).stdout.split(`
96
- `).map((s)=>s.trim()),i=(s)=>n?sn("wl-paste",["--no-newline","--type",s],{encoding:"buffer",maxBuffer:vr}):sn("xclip",["-selection","clipboard","-t",s,"-o"],{encoding:"buffer",maxBuffer:vr});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let o=Pi.find((s)=>r.includes(s));if(o)return yu(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 Ji(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function Hu(t){if(process.platform==="darwin"){let n=(await sn("osascript",["-l","JavaScript","-e",ld,t])).stdout.trim();return n===t?{image:t}:{text:n}}if(Ou()){let n=(await sn("powershell.exe",["-NoProfile","-STA","-Command",dd])).stdout.replace(/\r/g,"").trim(),e=await Promise.all(n.split(`
97
- `).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await sn("wslpath",["-u",r])).stdout.trim():r));return e.length===1&&/ttheme-clipboard\.png$/.test(e[0]??"")?{image:e[0]}:{text:e.join(`
98
- `)}}if(process.platform==="linux")return md(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var pd=`ObjC.import('AppKit')
93
+ $c::GetText()`;function oh(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(Cr("/proc/version","utf8"))}catch{return!1}}async function xd(t){let e=Boolean(process.env.WAYLAND_DISPLAY),n=e?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await se(n[0],n[1])).stdout.split(`
94
+ `).map((s)=>s.trim()),i=(s)=>e?se("wl-paste",["--no-newline","--type",s],{encoding:"buffer",maxBuffer:_r}):se("xclip",["-selection","clipboard","-t",s,"-o"],{encoding:"buffer",maxBuffer:_r});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let o=to.find((s)=>r.includes(s));if(o)return th(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 no(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function sh(t){if(process.platform==="darwin"){let e=(await se("osascript",["-l","JavaScript","-e",Zd,t])).stdout.trim();return e===t?{image:t}:{text:e}}if(oh()){let e=(await se("powershell.exe",["-NoProfile","-STA","-Command",qd])).stdout.replace(/\r/g,"").trim(),n=await Promise.all(e.split(`
95
+ `).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await se("wslpath",["-u",r])).stdout.trim():r));return n.length===1&&/ttheme-clipboard\.png$/.test(n[0]??"")?{image:n[0]}:{text:n.join(`
96
+ `)}}if(process.platform==="linux")return xd(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var _d=`ObjC.import('AppKit')
99
97
  function run() {
100
98
  const pb = $.NSPasteboard.generalPasteboard
101
99
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -107,8 +105,8 @@ function run() {
107
105
  picture = ['public.png', 'public.tiff', 'public.jpeg', 'public.heic'].some((t) => types.includes(t))
108
106
  }
109
107
  return pb.changeCount + '\\t' + (picture ? 'picture' : '')
110
- }`;async function ju(){if(Ji())return;if(process.platform==="darwin"){let[t="",n=""]=(await sn("osascript",["-l","JavaScript","-e",pd])).stdout.trim().split("\t");return{stamp:t,picture:n==="picture"}}if(process.platform==="linux"&&!Ou()){let n=Boolean(process.env.WAYLAND_DISPLAY)?(await sn("wl-paste",["--list-types"])).stdout:(await sn("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:n,picture:/^image\//m.test(n)}}return}function Ru(t){let n=[],e="",r=0;while(r<t.length){if(t[r]!=="\x1B"){e+=t[r],r++;continue}if(t.startsWith("\x1B[200~",r)){let o=t.indexOf("\x1B[201~",r+6);if(o===-1)return{events:n,keys:e,pending:t.slice(r)};n.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((a)=>a!==-1);if(o.length===0)return{events:n,keys:e,pending:t.slice(r)};let s=Math.min(...o),c=t.slice(r+2,s),[u="",h="",...f]=c.split(";");n.push({kind:"osc",code:u,meta:wd(h),payload:f.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")n.push({kind:"attributes"});else{let[o="0",s="0"]=(i[1]??"").split(";");n.push({kind:"mode",mode:Number(o),value:Number(s)})}r+=1+i[0].length;continue}if(/^(?:\[(?:\?[\d;$]*|2|20|200|201)?|\](?:5|55|552|5522|7|72)?)$/.test(t.slice(r+1)))return{events:n,keys:e,pending:t.slice(r)};e+=t[r],r++}return{events:n,keys:e,pending:""}}function wd(t){let n={};for(let e of t.split(":")){let r=e.indexOf("=");if(r>0)n[e.slice(0,r)]=e.slice(r+1)}return n}var Ke=(t)=>Buffer.from(t).toString("base64"),Li=(t)=>Buffer.from(t,"base64");function Eu(t,n){return n.find((e)=>t.includes(e))}class Ai{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=Ke(Mu("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(t,n){this.send=t,this.deliver=n}start(){let t="\x1B[?2004h";if(this.clipboard)t+="\x1B[?5522h";if(this.drops)t+=`\x1B]72;t=a;${Gi.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=${Ke("ttheme")}:pw=${this.pw};${Ke(".")}\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,n){if(t.type!=="read")return;let e=t.status??"";if(e==="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(e==="DATA"){if(r.mime=t.mime?Li(t.mime).toString("utf8"):r.mime,n)r.chunks.push(Li(n));return}if(this.reading=void 0,e!=="DONE"){this.deliver({kind:"error",message:e==="EPERM"?"the clipboard read was not allowed":`the terminal answered ${e}`});return}let i=Buffer.concat(r.chunks);if(r.listing){let o=i.toString("utf8").split(/\s+/).filter(Boolean),s=Eu(o,[...Pi,...hd]);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=${Ke(u)}:pw=${c};${Ke(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,n){let e=t.t??"";if(e==="m"){if(t.x==="-1"){this.offered=[];return}if(n){this.offered=n.split(" ").filter(Boolean);let c=Gi.filter((u)=>this.offered.includes(u));this.send(`\x1B]72;t=m:o=${c.length>0?1:0};${c.join(" ")}\x1B\\`)}return}if(e==="M"){let c=n?n.split(" ").filter(Boolean):this.offered,u=Eu(c,Gi);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(e==="R"){this.dropping=void 0,this.send("\x1B]72;t=r:o=0\x1B\\"),this.deliver({kind:"error",message:`the drop failed: ${n.split(":")[0]||"unknown error"}`});return}if(e!=="r"&&e!=="")return;if(n)r.chunks.push(Li(n));if(t.m==="1"||n)return;this.dropping=void 0;let i=Buffer.concat(r.chunks),o=r.mimes[r.index-1]??"",s;if(o.startsWith("image/"))s={kind:"bytes",bytes:new Uint8Array(i),source:"drop"};else{let c=i.toString("utf8"),u=o==="text/uri-list"?Fr(c).find((h)=>nd(h)):void 0;s=u?{kind:"bytes",bytes:new Uint8Array(Sr(u)),source:u}:{kind:"text",text:c}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(s)}}import{existsSync as $d,mkdirSync as bd,readFileSync as kd,writeFileSync as Ed}from"node:fs";import{dirname as Md,join as vd}from"node:path";var Gu="https://kecan0406.github.io/ttheme/manifest.json",yd=20000;function Nr(t){return vd(t,"ttheme","catalog.json")}function Or(t,n){let e=Nr(t);bd(Md(e),{recursive:!0}),Ed(e,`${JSON.stringify(n,null,2)}
111
- `)}function Pt(t){let n=Nr(t);if(!$d(n))throw Error(`no catalog at ${n} — run \`ttheme init\` first`);return Lu(kd(n,"utf8"))}function Lu(t){let n;try{n=JSON.parse(t)}catch{throw Error("catalog is not valid JSON")}let e=n;if(typeof e?.version!=="string"||!Array.isArray(e.palettes))throw Error("catalog has no version or palettes");for(let r of e.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 e}async function Pu(t){let n;try{n=await fetch(t,{signal:AbortSignal.timeout(yd)})}catch(e){throw Error(`cannot reach the registry at ${t} — ${e instanceof Error?e.message:String(e)}`)}if(!n.ok)throw Error(`registry at ${t} answered ${n.status}`);return Lu(await n.text())}function Ku(t){let n=new Set(t.waived??[]);return ir.flatMap((e,r)=>{let i=t.gate?.[r];if(n.has(e.rule)||typeof i!=="number")return[];if(e.min!==void 0&&i<e.min)return[`${e.label} ${i} < ${e.min}`];if(e.max!==void 0&&i>e.max)return[`${e.label} ${i} > ${e.max}`];return[]})}function Hr(t,n){let e=t.find((r)=>r.name===n);if(!e)throw Error(`no palette named ${n} in the catalog — \`ttheme list\` shows what is there`);return e}function Ju(t,n){let e=n.toLowerCase();return t.filter((r)=>[r.name,r.group,r.native??"",r.ansiSource].some((i)=>i.toLowerCase().includes(e)))}function Au(t,n,e){let r=e.toLowerCase(),i=(o)=>o.name===n.name?0:o.group===n.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 Uu(t,n){return t.booruSites?.[n]??(t.booru?[t.booru]:[])}import{spawn as Sd}from"node:child_process";var Fd=30000,Id=3,Nd=97,Od=`ObjC.import('Vision')
108
+ }`;async function ch(){if(no())return;if(process.platform==="darwin"){let[t="",e=""]=(await se("osascript",["-l","JavaScript","-e",_d])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!oh()){let e=Boolean(process.env.WAYLAND_DISPLAY)?(await se("wl-paste",["--list-types"])).stdout:(await se("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:e,picture:/^image\//m.test(e)}}return}function uh(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:Xd(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 Xd(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 tr=(t)=>Buffer.from(t).toString("base64"),Di=(t)=>Buffer.from(t,"base64");function zu(t,e){return e.find((n)=>t.includes(n))}class ro{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=tr(Bu("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;${Bi.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=${tr("ttheme")}:pw=${this.pw};${tr(".")}\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?Di(t.mime).toString("utf8"):r.mime,e)r.chunks.push(Di(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=zu(o,[...to,...Ad]);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=${tr(u)}:pw=${c};${tr(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=Bi.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=zu(c,Bi);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(Di(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"?Vr(c).find((h)=>jd(h)):void 0;s=u?{kind:"bytes",bytes:new Uint8Array(Cr(u)),source:u}:{kind:"text",text:c}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(s)}}import{existsSync as Cd,mkdirSync as Vd,readFileSync as Yd,writeFileSync as zd}from"node:fs";import{dirname as Bd,join as Dd}from"node:path";var hh="https://kecan0406.github.io/ttheme/manifest.json",tm=20000;function zr(t){return Dd(t,"ttheme","catalog.json")}function Br(t,e){let n=zr(t);Vd(Bd(n),{recursive:!0}),zd(n,`${JSON.stringify(e,null,2)}
109
+ `)}function Ut(t){let e=zr(t);if(!Cd(e))throw Error(`no catalog at ${e} — run \`ttheme init\` first`);return ah(Yd(e,"utf8"))}function ah(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(tm)})}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 ah(await e.text())}function lh(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 Dr(t,e){let n=t.find((r)=>r.name===e);if(!n)throw Error(`no palette named ${e} in the catalog — ${io(t,[e])}`);return n}function io(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 gh(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 dh(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 mh(t,e){return t.booruSites?.[e]??(t.booru?[t.booru]:[])}import{spawn as em}from"node:child_process";var nm=30000,rm=3,im=97,om=`ObjC.import('Vision')
112
110
  ObjC.import('CoreImage')
113
111
  ObjC.import('CoreGraphics')
114
112
  function run(argv) {
@@ -127,94 +125,99 @@ function run(argv) {
127
125
  $.CIImage.imageWithCVPixelBuffer(buffer), $.NSURL.fileURLWithPath(argv[1]), $.kCIFormatRGBA8,
128
126
  $.CGColorSpaceCreateWithName($.kCGColorSpaceSRGB), $({}), error)
129
127
  if (!written) throw new Error('write failed')
130
- }`;function Ui(){return process.platform==="darwin"}function Tu(t){return t>=Id&&t<=Nd}function Wu(t,n,e){return new Promise((r,i)=>{let o=Sd("osascript",["-l","JavaScript","-e",Od,t,n],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([e,AbortSignal.timeout(Fd)])}),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(`
131
- `).at(-1)||`osascript exited ${c}`))})})}var Jt={pitch:25,cols:22,rows:9,height:13},Ln={cols:25,rows:16},Hd=2147483648,jd=-1073741826,Rd=1600,Gd="\x1B[0m",un="\x1B[1m",ut="\x1B[2m",Je="\x1B[31m",cn="\x1B[32m",Ut="\x1B[33m",jr="\x1B[1;34m",Ld="\x1B[35m",Pd={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 qu(t){let n=[],e=0;while(e<t.length){let r=t[e]??"";if(r==="\x1B"){let i=/^(?:\[([0-9;]*)([A-Za-z~])|O([A-Za-z]))/.exec(t.slice(e+1));if(i){n.push(Pd[`${i[1]??""}${i[2]??i[3]??""}`]??"nop"),e+=1+i[0].length;continue}let o=t[e+1]??"";if(/^[a-z]$/.test(o)){n.push(`alt-${o}`),e+=2;continue}n.push("esc"),e++;continue}n.push(r==="\r"||r===`
132
- `?"enter":r==="\t"?"tab":r==="\x03"?"ctrl-c":r==="\x16"?"ctrl-v":r===""||r==="\b"?"backspace":r),e++}return n}var Xu="\x1B]1337;ReportCellSize\x07\x1B[16t",Qu="\x1B]1337;ReportCellSize=";function Qi(t){let n=t.indexOf(Qu);if(n!==-1){let i=t.slice(n+Qu.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,n)+i.slice(s+(i[s]==="\x07"?1:2))}}}let e=t.indexOf("\x1B[6;"),r=e===-1?null:/^\[6;(\d+);(\d+)t/.exec(t.slice(e+1));if(!r)return null;return{cell:{h:Number(r[1]),w:Number(r[2])},rest:t.slice(0,e)+t.slice(e+1+r[0].length)}}function _n(t,n){return{perRow:Math.max(1,Math.floor((t+1)/Jt.pitch)),rowsVis:Math.max(1,Math.floor((n-4)/Jt.height))}}function _u(t){return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`}function Cu(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 zu(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function Yu(t){return`\x1B[38;2;${Rt(t).join(";")}m`}function Ti(t){return`\x1B[48;2;${Rt(t).join(";")}m`}function Ct(t){return Array.from(t).length}class Rr{parts=[];cols;constructor(t){this.cols=t}put(t,n,e=""){return this.parts.push({col:t,text:n,sgr:e}),t+Ct(n)}run(t,n){let e=t;for(let[r,i]of n)e=this.put(e,r,i);return e}right(t,n){this.run(t-n.reduce((e,[r])=>e+Ct(r),0),n)}render(){let t="";for(let{col:n,text:e,sgr:r}of this.parts){if(n>=this.cols||n<0)continue;let i=Array.from(e).slice(0,this.cols-n).join("");t+=`\x1B[${n+1}G${r}${i}${r?Gd:""}`}return t}}function Vu(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function Kd(t,n){if(!n)return Vu(t);return n>=1e6?`${(t/1e6).toFixed(1)}/${(n/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(n/1000)} KB`}function xu(t){return t.replace(/_\([^)]*\)?$/,"")}function Bu(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<Rd?Ut:ut]}function Ae(t,n,e,r){let i=[...r.keys??[]],o=r.lead,s=r.right,c=()=>{let f=[...o?[Ct(o[0])]:[],...i.map(([g,d])=>Ct(g)+1+Ct(d))];return(r.badge?Ct(r.badge)+4:0)+f.reduce((g,d)=>g+d,0)+3*Math.max(0,f.length-1)+(s?3+Ct(s[0])+1+Ct(s[1]):0)};while(c()>n)if(i.length>2)i.splice(-2,1);else if(s)s=void 0;else if(i.length>1)i.splice(-2,1);else break;if(o&&c()>n){let f=Math.max(0,Ct(o[0])-(c()-n)-1);o=[`${Array.from(o[0]).slice(0,f).join("")}…`,o[1]]}let u=0;if(r.badge)u=t.put(0,` ${r.badge} `,`\x1B[7;1m${e}`)+2;if([...o?[[o]]:[],...i.map(([f,a])=>[[f,un],[` ${a}`,ut]])].forEach((f,a)=>{u=t.run(u+(a?3:0),f)}),s)t.right(n,[[s[0],un],[` ${s[1]}`,ut]])}function Jd(t,n,e,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 f=e;for(let p=0;p<8;p++)f=(t[n]?.put(f,"▀".repeat(h),Yu(s[p]??u)+Ti(s[p+8]??u))??f)+1;let a=["❯ ",cn],g=[[["~/code/demo",jr],[" on ",ut],["main",Ld],[" +2",cn],[" ~1",Ut]]];if(g.push([a,["git status -sb",""]]),r>=44)g.push([["## ",""],["main",cn],["...",""],["origin/main",Je],[" [ahead 1]",Ut]]);if(g.push([[" M",Je],[" src/main.rs",""]]),g.push([["??",Je],[" notes.md",""]]),g.push([]),r>=44)g.push([a,["ls",""]]),g.push([["docs",jr],[" ",""],["src",jr],[" ",""],["tests",jr],[" Cargo.toml README.md",""]]),g.push([]);g.push([a,["cargo test",""]]),g.push([[" ✓",cn],[" parses config",""]]);let d=[[" ✗",Je],[" renders frame",""]];if(r>=44)d.push([" expected ",ut],["3",cn],[", received ",ut],["2",Je]);g.push(d),g.push([]),g.push([a,["echo ",""],["selected text",Ti(c)],[" ",""],[" ",Ti(u)]]),g.forEach((p,l)=>{let k=n+2+l;if(k<=i)t[k]?.run(e,p)})}function Ad(t,n,e,r,i,o){t[n]?.put(e,`╭${"─".repeat(i-2)}╮`,o);for(let s=n+1;s<n+r-1;s++)t[s]?.put(e,"│",o),t[s]?.put(e+i-1,"│",o);t[n+r-1]?.put(e,`╰${"─".repeat(i-2)}╯`,o)}function Wi(t,n=t.site,e=t.siteAnsi){return[` ${n} `,`\x1B[7;${30+e}m`]}function Ud(t){return`${gt[Math.floor(t/ln)]?.name??"local"} ${t%ln}`}function Td(t,n,e){let r=[{name:"all",moved:!1},...gt].flatMap((s,c)=>{let u=`${s.name}${s.moved?"*":""}`,h=s.name===e.site?Wi(e,u):[` ${u} `,ut];return c?[[" ",""],h]:[h]}),i=r.reduce((s,[c])=>s+Ct(c),0)<=n,o=t.run(0,i?r:[Wi(e)]);if(e.asking!==void 0)t.run(o,[[` ${e.asking} was cut off — this network may block it. turn on the unblock proxy? `,Ut],["y",un],[" turn on ",ut],["n",un],[" not now",ut]])}function Wd(t,n,e,r){if(e.editing!==void 0){let c=t.run(0,[["⌕ ",r],[e.editing,""],["█",r]]),u=e.suggest?.length?" ↑↓ pick enter searches":" enter searches";t.put(c,e.editing?u:` a tag, a post url or an id, or drop a picture or ctrl+v — ${e.tag||"esc leaves"}`,ut);return}let i=t.run(0,[["⌕ ",r],[e.tag||"nothing yet — / searches, ctrl+v pastes a picture",e.tag?"":ut]]),o=jn.filter((c)=>!e.block.includes(c)),s=[e.preset,...e.solo?["solo"]:[],e.order,...e.rating.join("+")==="safe"?[]:[e.rating.join("+")],...o.length>0?[`allows ${o.join("+")}`]:[],...e.unblocked?["unblock"]:[]];if(t.put(i,` ${s.join(" ")}`,ut),e.total>0||!e.searching){let c=[[`${e.tiles.length}/${e.checked}`,""]];if(e.checked<e.total)c.push([` of ${e.total}`,ut]);t.right(n,c)}}function Qd(t){if(t.cut==="on")return[[`cut out · ${t.clear}% transparent`,cn]];if(t.cut==="off")return[["opaque · x cuts out",Ut]];if(t.cut==="failed")return[["opaque · no cut-out",Ut]];return[t.clear>0?[`${t.clear}% transparent`,cn]:["opaque",Ut]]}function Zu(t){return t.site==="all"?"any site":t.site}function Du(t){if(t.installing!==void 0)return[`installing ${t.palette} ← ${Ud(t.installing)}`,Ut];if(t.hint)return[t.hint,cn];if(t.error)return[t.error,Ut];if(t.waiting!==void 0)return[`${t.slow??t.site} asked to slow down · ${t.waiting}s`,Ut];if(t.fetching)return[`fetching ${t.fetching.id%ln} · ${Kd(t.fetching.got,t.fetching.size)}`,Ut];if(t.cutting!==void 0)return[`cutting out ${t.cutting%ln}`,Ut];if(t.preparing!==void 0)return[`preparing ${t.preparing%ln}`,Ut];if(t.saved)return[t.saved,cn];if(t.note)return[t.note,ut];return}function Zd(t,n,e,r,i,o){let{perRow:s,rowsVis:c}=_n(e,r);Wd(t[0],e,i,o),Td(t[1],e,i);for(let d=0;d<s*c;d++){let p=i.top*s+d,l=i.tiles[p];if(!l)break;let k=2+Math.floor(d/s)*Jt.height,v=d%s*Jt.pitch,I=p===i.focus;if(I)Ad(t,k,v,Jt.height,Jt.pitch-1,o);if(l.thumb)n.push({id:l.key,path:l.thumb,row:k+1,col:v+1,cols:Jt.cols,rows:Jt.rows,z:-1});if(t[k+10]?.run(v+1,[...i.installed.includes(l.key)?[["✓ ",cn]]:[],...i.site==="all"?[["● ",`\x1B[${30+l.siteAnsi}m`]]:[],[String(l.id),I?un:""],[" ",""],Bu(l)]),l.mates.length>0)t[k+10]?.put(v+Jt.cols,"≈",o);let E=l.artist?xu(l.artist):l.owner&&`@${l.owner}`;if(E)t[k+11]?.put(v+1,E.slice(0,Jt.cols-8),ut);let y=[];if(l.score>0)y.push([`★${l.score}`,ut]);if(l.variants>1)y.push([` ×${l.variants}`,o]);if(y.length>0)t[k+11]?.right(v+Jt.cols+1,y)}let u=i.top*s,h=i.tiles.length-(i.top+c)*s,f=[...u>0?[`↑ ${u} above`]:[],...h>0?[`↓ ${h} more`]:[]];if(f.length>0)t[r-2]?.put(0,f.join(" "),ut);if(!i.searching&&i.tiles.length===0&&!i.error)t[3]?.put(0,i.preset==="cutouts"?`no transparent cutouts of ${i.tag} on ${Zu(i)} — c searches every post, tab tries ${i.nextSite}`:`no posts of ${i.tag} on ${Zu(i)} — tab tries ${i.nextSite}`,ut);let a=t[r-1],g=Du(i);if(i.searching&&i.tiles.length===0&&!g){Ae(a,e,o,{badge:"FIND",lead:[i.preset==="cutouts"?"checking png headers":"fetching posts",ut],right:["esc","back"]});return}Ae(a,e,o,{badge:"FIND",lead:g,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 qd(t,n,e,r,i,o){let s=i.tiles[i.focus];if(!s)return;let c=i.shown?.id===s.key?i.shown:void 0,u=[Wi(i,s.site,s.siteAnsi),[" ",""],[String(s.id),un],[" ",""],Bu(s)];if(s.artist)u.push([` · ${xu(s.artist)}`,""]);if(s.score>0)u.push([` · ★${s.score}`,ut]);if(c)u.push([` · ${Vu(c.bytes)}`,ut]);if(s.owner)u.push([` · ${s.owner}`,ut]);if(s.origin)u.push([` · ${s.origin}`,ut]);if(c)u.push([" ",""],...Qd(c));if(t[0]?.run(0,u),s.mates.length>0)t[0]?.right(e,[["≈ ",o],[s.mates.join(" "),ut]]);if(Jd(t,3,2,e-4,r-2,i),i.shown)n.push({id:Hd+i.shown.id,path:i.shown.path,row:0,col:0,cols:e,rows:r,z:jd});let h=Du(i);Ae(t[r-1],e,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 Xd={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 _d(t,n,e,r,i){let o=r.panel??0,s=Math.max(...r.settings.map((g)=>g.label.length)),c=Math.max(...r.settings.map((g)=>g.choices.reduce((d,p)=>d+p.length+(g.multi?6:3),0))),u=Math.min(n-2,Math.max(28,s+c+8)),h=r.settings.length+4,f=Math.floor((n-u)/2),a=Math.max(2,Math.floor((e-h)/2));t[a]?.put(f,`╭─ settings ${"─".repeat(Math.max(0,u-13))}╮`);for(let g=a+1;g<a+h-1;g++)t[g]?.put(f,`│${" ".repeat(u-2)}│`);r.settings.forEach((g,d)=>{let p=t[a+2+d];p.put(f+3,g.label,d===o?un:ut);let l=f+5+s,k=g.value.split(" ");g.choices.forEach((v,I)=>{let E=k.includes(v),y=g.multi&&d===o&&I===g.cursor?"4;":"",$=g.multi?` ${E?"[x]":"[ ]"} ${v} `:` ${v} `;l=p.put(l,$,E?`\x1B[${y}7;${30+r.siteAnsi}m`:y?`\x1B[4m${ut}`:ut)+1})}),t[a+h-1]?.put(f,`╰${"─".repeat(u-2)}╯`),Ae(t[e-1],n,i,{badge:"SET",keys:[["↑↓","setting"],["←→","value"],["space","toggle"],["enter","save"]],right:["esc","undo"]})}function Cd(t,n,e,r,i){let o=Xd[r.mode],s=Math.min(n-2,50),c=o.length+4,u=Math.floor((n-s)/2),h=Math.max(2,Math.floor((e-c)/2));t[h]?.put(u,`╭─ keys ${"─".repeat(s-9)}╮`);for(let f=h+1;f<h+c-1;f++)t[f]?.put(u,`│${" ".repeat(s-2)}│`);o.forEach(([f,a],g)=>{t[h+2+g]?.put(u+3,f,un),t[h+2+g]?.put(u+13,a.slice(0,s-16))}),t[h+c-1]?.put(u,`╰${"─".repeat(s-2)}╯`),Ae(t[e-1],n,i,{badge:"KEYS",right:["? esc","close"]})}function zd(t,n,e){let r=n.suggest??[],i=r.map((c)=>c.count>0?String(c.count):c.palette??"0"),o=Math.max(...r.map((c)=>Ct(c.value))),s=Math.max(7,...i.map(Ct));r.forEach((c,u)=>{let h=u===n.pick,f=t[1+u];f?.run(0,[[h?"▸ ":" ",e],[c.value,h?un+e:""]]),f?.right(2+o+2+s,[[i[u],ut]])})}function th(t,n,e){let r=Array.from({length:e},()=>new Rr(n)),i=[],o=Yu(t.colors.cursor);if(n<Ln.cols||e<Ln.rows)return r[0]?.put(0,"ttheme find",un+o),r[1]?.put(0,`needs ${Ln.cols}×${Ln.rows} — now ${n}×${e}`),r[2]?.put(0,"esc quits",ut),{lines:r.map((s)=>s.render()),images:i};if(t.mode==="try")qd(r,i,n,e,t,o);else Zd(r,i,n,e,t,o);if(t.mode==="grid"&&t.editing!==void 0&&t.suggest?.length){for(let s=1;s<e-1;s++)r[s]=new Rr(n);return zd(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<e;c++)r[c]=new Rr(n);if(t.help)Cd(r,n,e,t,o);else _d(r,n,e,t,o);return{lines:r.map((c)=>c.render()),images:s}}return{lines:r.map((s)=>s.render()),images:i}}var Yd=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),Vd=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),xd=0.04,Bd=0.1,Dd=0.05,tm=4096;function nm(t){return new Set(t.cutouts.split(/\s+/).map((n)=>n.replace(/^~/,"")).filter(Boolean))}function em(t,n,e,r=0){let{site:i,post:o}=t,s=new Set(o.tags),c=[...nm(i)].some((f)=>s.has(f)),u=Math.min(o.width,o.height),h=o.width>0&&o.height>0?o.width/o.height/(n.w/n.h):1;return(o.solo?2:0)+([...Yd].some((f)=>s.has(f))?-3:0)+([...Vd].some((f)=>s.has(f))?-1.5:0)+2*Math.min(1,u/n.h)+(c?1.5:-Math.min(1.5,Math.abs(Math.log(h))))+(e>0?1.5*Math.log1p(Math.max(0,o.score))/Math.log1p(e):0)+2*r}function Gr(t,n,e=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:em(i,n,r.get(i.site)??0,e.get(i.post))})).sort((i,o)=>o.score-i.score||i.at-o.at).map(({pick:i})=>i)}function eh(t){let n=new Map;for(let r of t)n.set(r.site,[...n.get(r.site)??[],r]);let e=[];for(let r=0;e.length<t.length;r++)for(let i of n.values()){let o=i[r];if(o)e.push(o)}return e}function Zi(t){let n=t/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4}function nh(t,n,e){let[r,i,o]=[Zi(t),Zi(n),Zi(e)],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 rh(t,n){let e=n.map((s)=>nh(...Rt(s))).filter(([,s,c])=>Math.hypot(s,c)>=xd);if(e.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/tm))),i=e.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,f,a]=nh(t.data[u],t.data[u+1],t.data[u+2]);e.forEach(([g,d,p],l)=>{if(Math.hypot(h-g,f-d,a-p)<Bd)i[l]=i[l]+1})}if(o===0)return 0;return i.reduce((s,c)=>s+Math.min(1,c/o/Dd),0)/e.length}import{execFileSync as rm,spawn as im}from"node:child_process";import{existsSync as zt,mkdirSync as Te,readFileSync as Sn,rmSync as qi,utimesSync as om,writeFileSync as Cn}from"node:fs";import{homedir as Pr}from"node:os";import{dirname as We,join as mt}from"node:path";var sm={ghostty:pe,kitty:$e,alacritty:me,wezterm:Ge,iterm2:we,"windows-terminal":Le,warp:Re},ih="ttheme-default";function zn(t=process.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"){let n=(e,r)=>rm(e,r,{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();return{read:()=>{try{return process.platform==="darwin"?n("defaults",["read",t,"Default Bookmark Guid"])||void 0:void 0}catch{return}},write:(e)=>{if(process.platform==="darwin")n("defaults",["write",t,"Default Bookmark Guid","-string",e])},running:()=>{try{return n("pgrep",["-x","iTerm2"])!==""}catch{return!1}}}}function hn(t){return t.off?void 0:Yn(t)}function Qe(t,n){if(!t.terminals.includes("iterm2"))return t;let e=n.read();return e&&!e.startsWith("ttheme-")?{...t,itermBase:e}:t}function Ze(t,n){if(!t.terminals.includes("iterm2"))return!1;let e=n.read(),r=hn(t)?ih:e===ih?t.itermBase:void 0;if(!r||r===e)return!1;return n.write(r),!0}function Tt(){return process.env.XDG_CONFIG_HOME??mt(Pr(),".config")}function oh(t){return mt(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function sh(t){return mt(t,"ttheme","installed.json")}function Yt(t){let n=sh(t);if(!zt(n))throw Error(`nothing installed yet at ${n} — run \`ttheme init\` first`);let e=JSON.parse(Sn(n,"utf8"));if(!Array.isArray(e?.palettes)||!Array.isArray(e.terminals))throw Error(`${n} has no palettes or terminals`);return{terminals:e.terminals.filter((r)=>mr.includes(r)),...e.startup?{startup:e.startup}:{},...e.off?{off:!0}:{},...e.itermBase?{itermBase:e.itermBase}:{},...e.wtHome?{wtHome:e.wtHome}:{},...e.wtProfile?{wtProfile:e.wtProfile}:{},palettes:e.palettes}}function qe(t,n){let e=sh(t);Te(We(e),{recursive:!0}),Cn(e,`${JSON.stringify(n,null,2)}
133
- `)}function Ue(t,n){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,font:n.font,ghostty:{...n.shader?{shader:n.shader}:{},iconGhost:t.cursor,iconScreen:[t.cursor,t.selection,t.background]},waive:t.waived??[]}}function ch(t,n){let e=new Map(t.palettes.map((o)=>[o.name,o])),r=n.filter((o)=>!e.has(o));if(r.length>0)throw Error(`not in the catalog: ${r.join(", ")} — \`ttheme list\` shows what is there`);let i=n.flatMap((o)=>{let s=Ku(e.get(o));return s.length>0?[`${o}: ${s.join(", ")}`]:[]});if(i.length>0)throw Error(`these palettes fail the contrast gate:
128
+ }`;function oo(){return process.platform==="darwin"}function ph(t){return t>=rm&&t<=im}function wh(t,e,n){return new Promise((r,i)=>{let o=em("osascript",["-l","JavaScript","-e",om,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(nm)])}),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(`
129
+ `).at(-1)||`osascript exited ${c}`))})})}var At={pitch:25,cols:22,rows:9,height:13},Ke={cols:25,rows:16},sm=2147483648,cm=-1073741826,um=1600,hm="\x1B[0m",ue="\x1B[1m",ut="\x1B[2m",er="\x1B[31m",ce="\x1B[32m",Qt="\x1B[33m",ti="\x1B[1;34m",am="\x1B[35m",fm={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 kh(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(fm[`${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===`
130
+ `?"enter":r==="\t"?"tab":r==="\x03"?"ctrl-c":r==="\x16"?"ctrl-v":r===""||r==="\b"?"backspace":r),n++}return e}var Eh="\x1B]1337;ReportCellSize\x07\x1B[16t",bh="\x1B]1337;ReportCellSize=";function uo(t){let e=t.indexOf(bh);if(e!==-1){let i=t.slice(e+bh.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 De(t,e){return{perRow:Math.max(1,Math.floor((t+1)/At.pitch)),rowsVis:Math.max(1,Math.floor((e-4)/At.height))}}function yh(t){return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`}function vh(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 Mh(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function Sh(t){return`\x1B[38;2;${Gt(t).join(";")}m`}function so(t){return`\x1B[48;2;${Gt(t).join(";")}m`}function Ct(t){return Array.from(t).length}class ei{parts=[];cols;constructor(t){this.cols=t}put(t,e,n=""){return this.parts.push({col:t,text:e,sgr:n}),t+Ct(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+Ct(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?hm:""}`}return t}}function Ih(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function lm(t,e){if(!e)return Ih(t);return e>=1e6?`${(t/1e6).toFixed(1)}/${(e/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(e/1000)} KB`}function Fh(t){return t.replace(/_\([^)]*\)?$/,"")}function Nh(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<um?Qt:ut]}function nr(t,e,n,r){let i=[...r.keys??[]],o=r.lead,s=r.right,c=()=>{let a=[...o?[Ct(o[0])]:[],...i.map(([l,m])=>Ct(l)+1+Ct(m))];return(r.badge?Ct(r.badge)+4:0)+a.reduce((l,m)=>l+m,0)+3*Math.max(0,a.length-1)+(s?3+Ct(s[0])+1+Ct(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,Ct(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,ue],[` ${f}`,ut]])].forEach((a,f)=>{u=t.run(u+(f?3:0),a)}),s)t.right(e,[[s[0],ue],[` ${s[1]}`,ut]])}function gm(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),Sh(s[b]??u)+so(s[b+8]??u))??a)+1;let f=["❯ ",ce],l=[[["~/code/demo",ti],[" on ",ut],["main",am],[" +2",ce],[" ~1",Qt]]];if(l.push([f,["git status -sb",""]]),r>=44)l.push([["## ",""],["main",ce],["...",""],["origin/main",er],[" [ahead 1]",Qt]]);if(l.push([[" M",er],[" src/main.rs",""]]),l.push([["??",er],[" notes.md",""]]),l.push([]),r>=44)l.push([f,["ls",""]]),l.push([["docs",ti],[" ",""],["src",ti],[" ",""],["tests",ti],[" Cargo.toml README.md",""]]),l.push([]);l.push([f,["cargo test",""]]),l.push([[" ✓",ce],[" parses config",""]]);let m=[[" ✗",er],[" renders frame",""]];if(r>=44)m.push([" expected ",ut],["3",ce],[", received ",ut],["2",er]);l.push(m),l.push([]),l.push([f,["echo ",""],["selected text",so(c)],[" ",""],[" ",so(u)]]),l.forEach((b,g)=>{let $=e+2+g;if($<=i)t[$]?.run(n,b)})}function dm(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 co(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function mm(t){return`${lt[Math.floor(t/le)]?.name??"local"} ${t%le}`}function pm(t,e,n){let r=[{name:"all",moved:!1},...lt].flatMap((s,c)=>{let u=`${s.name}${s.moved?"*":""}`,h=s.name===n.site?co(n,u):[` ${u} `,ut];return c?[[" ",""],h]:[h]}),i=r.reduce((s,[c])=>s+Ct(c),0)<=e,o=t.run(0,i?r:[co(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",ue],[" turn on ",ut],["n",ue],[" not now",ut]])}function wm(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"}`,ut);return}let i=t.run(0,[["⌕ ",r],[n.tag||"nothing yet — / searches, ctrl+v pastes a picture",n.tag?"":ut]]),o=Ge.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(" ")}`,ut),n.total>0||!n.searching){let c=[[`${n.tiles.length}/${n.checked}`,""]];if(n.checked<n.total)c.push([` of ${n.total}`,ut]);t.right(e,c)}}function bm(t){if(t.cut==="on")return[[`cut out · ${t.clear}% transparent`,ce]];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`,ce]:["opaque",Qt]]}function $h(t){return t.site==="all"?"any site":t.site}function Hh(t){if(t.installing!==void 0)return[`installing ${t.palette} ← ${mm(t.installing)}`,Qt];if(t.hint)return[t.hint,ce];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%le} · ${lm(t.fetching.got,t.fetching.size)}`,Qt];if(t.cutting!==void 0)return[`cutting out ${t.cutting%le}`,Qt];if(t.preparing!==void 0)return[`preparing ${t.preparing%le}`,Qt];if(t.saved)return[t.saved,ce];if(t.note)return[t.note,ut];return}function $m(t,e,n,r,i,o){let{perRow:s,rowsVis:c}=De(n,r);wm(t[0],n,i,o),pm(t[1],n,i);for(let m=0;m<s*c;m++){let b=i.top*s+m,g=i.tiles[b];if(!g)break;let $=2+Math.floor(m/s)*At.height,y=m%s*At.pitch,F=b===i.focus;if(F)dm(t,$,y,At.height,At.pitch-1,o);if(g.thumb)e.push({id:g.key,path:g.thumb,row:$+1,col:y+1,cols:At.cols,rows:At.rows,z:-1});if(t[$+10]?.run(y+1,[...i.installed.includes(g.key)?[["✓ ",ce]]:[],...i.site==="all"?[["● ",`\x1B[${30+g.siteAnsi}m`]]:[],[String(g.id),F?ue:""],[" ",""],Nh(g)]),g.mates.length>0)t[$+10]?.put(y+At.cols,"≈",o);let E=g.artist?Fh(g.artist):g.owner&&`@${g.owner}`;if(E)t[$+11]?.put(y+1,E.slice(0,At.cols-8),ut);let M=[];if(g.score>0)M.push([`★${g.score}`,ut]);if(g.variants>1)M.push([` ×${g.variants}`,o]);if(M.length>0)t[$+11]?.right(y+At.cols+1,M)}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(" "),ut);if(!i.searching&&i.tiles.length===0&&!i.error)t[3]?.put(0,i.preset==="cutouts"?`no transparent cutouts of ${i.tag} on ${$h(i)} — c searches every post, tab tries ${i.nextSite}`:`no posts of ${i.tag} on ${$h(i)} — tab tries ${i.nextSite}`,ut);let f=t[r-1],l=Hh(i);if(i.searching&&i.tiles.length===0&&!l){nr(f,n,o,{badge:"FIND",lead:[i.preset==="cutouts"?"checking png headers":"fetching posts",ut],right:["esc","back"]});return}nr(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 km(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=[co(i,s.site,s.siteAnsi),[" ",""],[String(s.id),ue],[" ",""],Nh(s)];if(s.artist)u.push([` · ${Fh(s.artist)}`,""]);if(s.score>0)u.push([` · ★${s.score}`,ut]);if(c)u.push([` · ${Ih(c.bytes)}`,ut]);if(s.owner)u.push([` · ${s.owner}`,ut]);if(s.origin)u.push([` · ${s.origin}`,ut]);if(c)u.push([" ",""],...bm(c));if(t[0]?.run(0,u),s.mates.length>0)t[0]?.right(n,[["≈ ",o],[s.mates.join(" "),ut]]);if(gm(t,3,2,n-4,r-2,i),i.shown)e.push({id:sm+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:cm});let h=Hh(i);nr(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 Em={grid:[["move","←↑↓→ home end pgup pgdn"],["try on","enter"],["site",`tab all, ${lt.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 ym(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?ue:ut);let g=a+5+s,$=l.value.split(" ");l.choices.forEach((y,F)=>{let E=$.includes(y),M=l.multi&&m===o&&F===l.cursor?"4;":"",p=l.multi?` ${E?"[x]":"[ ]"} ${y} `:` ${y} `;g=b.put(g,p,E?`\x1B[${M}7;${30+r.siteAnsi}m`:M?`\x1B[4m${ut}`:ut)+1})}),t[f+h-1]?.put(a,`╰${"─".repeat(u-2)}╯`),nr(t[n-1],e,i,{badge:"SET",keys:[["↑↓","setting"],["←→","value"],["space","toggle"],["enter","save"]],right:["esc","undo"]})}function vm(t,e,n,r,i){let o=Em[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,ue),t[h+2+l]?.put(u+13,f.slice(0,s-16))}),t[h+c-1]?.put(u,`╰${"─".repeat(s-2)}╯`),nr(t[n-1],e,i,{badge:"KEYS",right:["? esc","close"]})}function Mm(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)=>Ct(c.value))),s=Math.max(7,...i.map(Ct));r.forEach((c,u)=>{let h=u===e.pick,a=t[1+u];a?.run(0,[[h?"▸ ":" ",n],[c.value,h?ue+n:""]]),a?.right(2+o+2+s,[[i[u],ut]])})}function Oh(t,e,n){let r=Array.from({length:n},()=>new ei(e)),i=[],o=Sh(t.colors.cursor);if(e<Ke.cols||n<Ke.rows)return r[0]?.put(0,"ttheme find",ue+o),r[1]?.put(0,`needs ${Ke.cols}×${Ke.rows} — now ${e}×${n}`),r[2]?.put(0,"esc quits",ut),{lines:r.map((s)=>s.render()),images:i};if(t.mode==="try")km(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 ei(e);return Mm(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 ei(e);if(t.help)vm(r,e,n,t,o);else ym(r,e,n,t,o);return{lines:r.map((c)=>c.render()),images:s}}return{lines:r.map((s)=>s.render()),images:i}}var Sm=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),Im=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),Fm=0.04,Nm=0.1,Hm=0.05,Om=4096;function jm(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function Rm(t,e,n,r=0){let{site:i,post:o}=t,s=new Set(o.tags),c=[...jm(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)+([...Sm].some((a)=>s.has(a))?-3:0)+([...Im].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 ni(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:Rm(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 Rh(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 ho(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function jh(t,e,n){let[r,i,o]=[ho(t),ho(e),ho(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 Ph(t,e){let n=e.map((s)=>jh(...Gt(s))).filter(([,s,c])=>Math.hypot(s,c)>=Fm);if(n.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/Om))),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]=jh(t.data[u],t.data[u+1],t.data[u+2]);n.forEach(([l,m,b],g)=>{if(Math.hypot(h-l,a-m,f-b)<Nm)i[g]=i[g]+1})}if(o===0)return 0;return i.reduce((s,c)=>s+Math.min(1,c/o/Hm),0)/n.length}import{execFileSync as Qm,spawn as Zm}from"node:child_process";import{existsSync as Dt,mkdirSync as or,readFileSync as en,realpathSync as qm,rmSync as lo,utimesSync as xm,writeFileSync as sr}from"node:fs";import{homedir as nn}from"node:os";import{dirname as cr,join as mt}from"node:path";import{chmodSync as Pm,copyFileSync as Gm,existsSync as tn,mkdirSync as Lm,readFileSync as ao,realpathSync as Tm,renameSync as Um,rmSync as Gh,statSync as Km,writeFileSync as Am}from"node:fs";import{dirname as Jm}from"node:path";function Lh(t){return`${t}.ttheme.bak`}var Wm=/^(?:#|--) ttheme begin$|path = "ttheme-/m;function fo(t){let e=Lh(t);if(tn(t)&&!tn(e)&&!Wm.test(ao(t,"utf8")))Gm(t,e)}function Th(t,e){let n=tn(t)?Tm(t):t;Lm(Jm(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(Am(r,e),tn(n))Pm(r,Km(n).mode&4095);Um(r,n)}function rr(t,e){if((tn(t)?ao(t,"utf8"):void 0)===e)return!1;return fo(t),Th(t,e),!0}function Uh(t,e){let n=Lh(t),r=tn(n)?ao(n,"utf8"):void 0;if(e===""&&r===void 0)return Gh(t,{force:!0}),"removed";if(Th(t,e),r===void 0||r===e)return Gh(n,{force:!0}),"restored";return"kept backup"}var _m={ghostty:Nn,kitty:On,alacritty:Fn,wezterm:zn,iterm2:Hn,"windows-terminal":Bn,warp:Yn},Kh="ttheme-default";function Se(t=process.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"){let e=(n,r)=>Qm(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 te(t){return t.off?void 0:on(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 We(t,e){if(!t.terminals.includes("iterm2"))return!1;let n=e.read(),r=te(t)?Kh:n===Kh?t.itermBase:void 0;if(!r||r===n)return!1;return e.write(r),!0}function Rt(){return process.env.XDG_CONFIG_HOME??mt(nn(),".config")}function hr(t){return mt(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function Ah(t){return mt(t,"ttheme","installed.json")}function Jt(t){let e=Ah(t);if(!Dt(e))throw Error(`nothing installed yet at ${e} — run \`ttheme init\` first`);let n=JSON.parse(en(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)=>Ar.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){let n=Ah(t);or(cr(n),{recursive:!0}),sr(n,`${JSON.stringify(e,null,2)}
131
+ `)}function ir(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 Jh(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(", ")} — ${io(Re(t.palettes),r)}`);let i=e.flatMap((o)=>{let s=lh(n.get(o));return s.length>0?[`${o}: ${s.join(", ")}`]:[]});if(i.length>0)throw Error(`these palettes fail the contrast gate:
134
132
  ${i.join(`
135
- `)}`);return t.palettes.filter((o)=>n.includes(o.name))}function uh(t,n){let e=t==="wezterm"?"colors":"themes";return(sm[t].emit?.(n)??[]).flatMap((r)=>{let[,i,o]=r.path.split("/");return i===e&&o!==void 0?[{file:o,content:r.content}]:[]})}function Kr(t){return process.platform==="darwin"?mt(t,".warp","themes"):mt(process.env.XDG_DATA_HOME??mt(t,".local","share"),"warp-terminal","themes")}function Lr(t,n,e){if(t==="warp")return Kr(e);return mt(n,t,t==="wezterm"?"colors":"themes")}function cm(t,n){return process.platform==="darwin"?mt(t,".warp","settings.toml"):mt(n,"warp-terminal","settings.toml")}var um='"dark"',hm="setTimeout(() => { const fs = require('node:fs'); const [file, next, seen] = process.argv.slice(-3); if (fs.readFileSync(file, 'utf8') === seen) fs.writeFileSync(file, next) }, 1500)";function fm(t,n,e,r){let i=cm(n,t);if(!zt(i))return;let o=mt(t,"ttheme","warp.base"),s=Sn(i,"utf8"),c=uu(s),u=c?.includes('path = "ttheme-')===!0,h;if(e){if(!u&&!zt(o))Te(We(o),{recursive:!0}),Cn(o,c??"");h=hu(e)}else{if(!u)return;h=zt(o)&&Sn(o,"utf8")||um,qi(o,{force:!0})}let f=fu(s,h);if(f===s)return;if(r)im(process.execPath,["-e",hm,i,f,s],{detached:!0,stdio:"ignore"}).unref();else Cn(i,f);return i}function hh(t){return mt(t,"ttheme","kitty.py")}function Xi(t,n){let e=mt(n,".wezterm.lua");return zt(e)?e:mt(t,"wezterm","wezterm.lua")}function am(t){return mt(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function gm(t){return[mt(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),mt(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),mt(t,"Microsoft","Windows Terminal","settings.json")].filter((n)=>zt(n))}function lm(t){for(let n of t){let e=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(Sn(n,"utf8"))?.[1];if(e)return e}return}function Yn(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function dm(t,n,e){if(t==="ghostty")return{file:mt(n,"ghostty","config"),body:Dc(mt(n,"ttheme"),e)};return{file:mt(n,"kitty","kitty.conf"),body:iu(e,hh(n))}}function _i(t){return mt(t,"alacritty","alacritty.toml")}function mm(t,n){return n?mt(t,"alacritty","themes",`${n}.toml`):void 0}function fh(t,n,e,r,i){let o=En(t),s=e.map((h)=>Ue(h,n)),c=new Map;for(let h of s){let f=ac(o,h.name,i);if(f)c.set(h.name,f)}let u=new Set(qn(e).map((h)=>h.name));return Co(s.filter((h)=>u.has(h.name)),c,s.find((h)=>h.name===hn(r)),r.itermBase)}function Vn(t,n=Pr()){let e=Yt(t);if(!e.terminals.includes("iterm2"))return;let r=Pt(t),i=oh(n);Te(We(i),{recursive:!0}),Cn(i,fh(t,r,ch(r,e.palettes),e,n))}function Xe(t,n,e,r=Pr()){let i=ch(n,e.palettes),o=[],s=(h,f)=>{if(o.push(h),zt(h)&&Sn(h,"utf8")===f)return!1;return Te(We(h),{recursive:!0}),Cn(h,f),!0},c=hn(e);for(let h of e.terminals){if(h==="iterm2"){s(oh(r),fh(t,n,i,e,r));continue}if(h==="windows-terminal"){if(e.wtHome){let p=gm(e.wtHome),l=i.map((v)=>Ue(v,n)),k=ji(l,e.wtProfile??lm(p),c);if(s(am(e.wtHome),k)){let v=new Date;for(let I of p)om(I,v,v)}}continue}let f=c!==void 0&&h==="warp"&&!zt(mt(Kr(r),`ttheme-${c}.yaml`)),a=h==="warp"?fm(t,r,c,f):void 0;for(let p of i)for(let{file:l,content:k}of uh(h,Ue(p,n)))s(mt(Lr(h,t,r),l),k);if(h==="warp"){if(a)o.push(a);continue}if(h==="wezterm"){let p=mt(t,"ttheme","wezterm.lua");s(p,lu({path:p,colors:Lr("wezterm",t,r),backgrounds:En(t),...c?{startup:c}:{},palettes:i.map((v)=>Ue(v,n))}));let l=Xi(t,r),k=br(zt(l)?Sn(l,"utf8"):"",ou(p));if(k!==void 0)s(l,k);continue}if(h==="alacritty"){let p=_i(t),l=$r(zt(p)?Sn(p,"utf8"):"",mm(t,c));if(l!==void 0)s(p,l);continue}if(h==="kitty")s(hh(t),zo({themes:Lr("kitty",t,r),backgrounds:En(t)}));let{file:g,body:d}=dm(h,t,c);s(g,je(zt(g)?Sn(g,"utf8"):"",d))}let u=mt(t,"ttheme","palettes.zsh");return Te(We(u),{recursive:!0}),Cn(u,Oi(i,c,e.terminals)),o.push(u),qi(`${u}.zwc`,{force:!0}),o}function Ci(t,n,e,r,i=Pr()){let o=[];for(let s of e)for(let c of n.palettes.filter((u)=>r.includes(u.name)))for(let{file:u}of uh(s,Ue(c,n))){let h=mt(Lr(s,t,i),u);if(zt(h))qi(h,{force:!0}),o.push(h)}return o}import{mkdirSync as mh,readFileSync as ph,writeFileSync as wh}from"node:fs";import{dirname as $h}from"node:path";import{isMainThread as bm,parentPort as bh,Worker as km}from"node:worker_threads";var pm=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,wm=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"]];function zi(t){let n=/(\d+)_p(\d+)/.exec(t.source);return[...t.md5?[`md5:${t.md5}`]:[],...n&&t.source.includes("pximg")?[`pixiv:${n[1]}_p${n[2]}`]:[]]}function ah(t,n){let e=pm.exec(n.source)?.[1]?.toLowerCase();return[`post:${t.key}:${n.id}`,...n.md5?[`md5:${n.md5}`]:[],...e&&e!==n.md5?[`md5:${e}`]:[],...wm.flatMap(([r,i])=>{let o=r.exec(n.source)?.[1];return o?[`post:${i}:${Number(o)}`]:[]}),...n.family?[`family:${t.key}:${n.family}`]:[]]}function gh(t,n){let e=t.owner||t.artist;return e!==""&&e===(n.owner||n.artist)&&t.width===n.width&&t.height===n.height}function lh(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),f=Math.max(h+1,Math.floor((u+1)*t.width/9)),a=0;for(let g=s;g<c;g++)for(let d=h;d<f;d++){let p=(g*t.width+d)*4,l=t.data[p+3]/255,k=0.299*t.data[p]+0.587*t.data[p+1]+0.114*t.data[p+2];a+=k*l+255*(1-l)}r.push(a/((f-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 $m(t,n){let e=BigInt(`0x${t}`)^BigInt(`0x${n}`),r=0;while(e>0n)r+=Number(e&1n),e>>=1n;return r}function dh(t,n){if(t.width<=0||t.height<=0||n.width<=0||n.height<=0)return!1;return Math.abs(Math.log(t.width/t.height/(n.width/n.height)))<0.01&&$m(t.hash,n.hash)<=2}var Em={thumb:"tile",match:"tile",show:"view",backdrop:"view"};function Mm(t){let n=Bs(new Uint8Array(ph(t.from)),Rn);if(t.job==="backdrop")return bc(t.home,t.colors,t.tone,n,{...t.origin,bytes:new Uint8Array(ph(t.source))},t),0;if(t.job==="match")return{match:rh(n,t.colors),hash:lh(n)};if(t.job==="thumb")return mh($h(t.to),{recursive:!0}),wh(t.to,Qn(tc(n,t.width,t.height))),0;let e=Me(n);return mh($h(t.to),{recursive:!0}),wh(t.to,Qn(fc(n,t.colors,t.tone,t.width,t.height))),e}function vm(t){t.on("message",(n)=>{try{t.postMessage({id:n.id,value:Mm(n)})}catch(e){t.postMessage({id:n.id,error:e instanceof Error?e.message:String(e)})}})}class kh{worker;next=1;waiting=new Map;send(t){let n=this.next++;return new Promise((e,r)=>{let i=this.open();this.waiting.set(n,{ok:e,no:r}),i.ref(),i.postMessage({...t,id:n})})}close(){this.worker?.terminate(),this.worker=void 0,this.drop(Error("renderer closed"))}open(){if(this.worker)return this.worker;let t=new km(import.meta.filename);t.unref(),t.on("message",({id:e,value:r,error:i})=>{let o=this.waiting.get(e);if(this.waiting.delete(e),this.waiting.size===0)t.unref();if(i!==void 0)o?.no(Error(i));else o?.ok(r)});let n=(e)=>{if(this.worker===t)this.worker=void 0;this.drop(e instanceof Error?e:Error("renderer stopped"))};return t.on("error",n),t.on("exit",()=>n(void 0)),this.worker=t,t}drop(t){for(let n of this.waiting.values())n.no(t);this.waiting.clear()}}class Yi{lines=new Map;run(t){let n=Em[t.job],e=this.lines.get(n);if(!e)e=new kh,this.lines.set(n,e);return e.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}if(!bm&&bh)vm(bh);import{connect as ym,createServer as Sm}from"node:net";var Fm=20,Eh=22;function Vi(t){let n=new Uint8Array(t.reduce((r,i)=>r+i.length,0)),e=0;for(let r of t)n.set(r,e),e+=r.length;return n}function Im(t,n=Fm){let e=t.subarray(5);if(t[0]!==Eh||e.length<2)return[t];let r=Math.max(1,Math.min(n,e.length-1)),i=(o)=>Vi([Uint8Array.from([t[0],t[1],t[2],o.length>>8,o.length&255]),o]);return[i(e.subarray(0,r)),i(e.subarray(r))]}function Nm(t,n,e,r){let i=ym(e,n,()=>{i.setNoDelay(!0),t.write(`HTTP/1.1 200 Connection Established\r
133
+ `)}`);return t.palettes.filter((o)=>e.includes(o.name))}function Wh(t,e){let n=t==="wezterm"?"colors":"themes";return(_m[t].emit?.(e)??[]).flatMap((r)=>{let[,i,o]=r.path.split("/");return i===n&&o!==void 0?[{file:o,content:r.content}]:[]})}function ri(t){return process.platform==="darwin"?mt(t,".warp","themes"):mt(process.env.XDG_DATA_HOME??mt(t,".local","share"),"warp-terminal","themes")}function Ae(t,e,n){if(t==="warp")return ri(n);return mt(e,t,t==="wezterm"?"colors":"themes")}function ii(t,e){return process.platform==="darwin"?mt(t,".warp","settings.toml"):mt(e,"warp-terminal","settings.toml")}var go='"dark"';function mo(t){return mt(t,"ttheme","warp.base")}var Xm="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 Cm(t,e,n,r){let i=ii(e,t);if(!Dt(i))return;let o=mo(t),s=en(i,"utf8"),c=Wr(s),u=c?.includes(`path = "${ct("")}`)===!0,h;if(n){if(!u&&!Dt(o))or(cr(o),{recursive:!0}),sr(o,c??"");h=Wu(n)}else{if(!u)return;h=Dt(o)&&en(o,"utf8")||go,lo(o,{force:!0})}let a=Qr(s,h);if(a===s)return;if(r)fo(i),Zm(process.execPath,["-e",Xm,qm(i),a,s],{detached:!0,stdio:"ignore"}).unref();else rr(i,a);return i}function Qh(t){return mt(t,"ttheme","kitty.py")}function rn(t,e){let n=mt(e,".wezterm.lua");return Dt(n)?n:mt(t,"wezterm","wezterm.lua")}function oi(t){return mt(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function po(t){return[mt(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),mt(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),mt(t,"Microsoft","Windows Terminal","settings.json")].filter((e)=>Dt(e))}function Vm(t){for(let e of t){let n=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(en(e,"utf8"))?.[1];if(n)return n}return}function on(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function Je(t,e){return t==="ghostty"?mt(e,"ghostty","config"):mt(e,"kitty","kitty.conf")}function Zh(t,e,n,r){return t==="ghostty"?Nu(mt(e,"ttheme"),n,r):Gu(n,Qh(e),r)}function de(t){return Dt(t)?en(t,"utf8"):""}function Qe(t){return mt(t,"alacritty","alacritty.toml")}function Ym(t,e){return e?mt(t,"alacritty","themes",`${ct(e)}.toml`):void 0}function qh(t,e,n,r){let i=ke(t),o=e.map(ir),s=new Map;for(let u of o){let h=Uc(i,u.name,r);if(h)s.set(u.name,h)}let c=new Set(Re(e).map((u)=>u.name));return $s(o.filter((u)=>c.has(u.name)),s,o.find((u)=>u.name===te(n)),n.itermBase)}function sn(t,e=nn()){let n=Jt(t);if(!n.terminals.includes("iterm2"))return;let r=Ut(t),i=hr(e);or(cr(i),{recursive:!0}),sr(i,qh(t,Jh(r,n.palettes),n,e))}function fr(t,e,n,r=nn()){let i=Jh(e,n.palettes),o=[],s=(a,f)=>{if(o.push(a),Dt(a)&&en(a,"utf8")===f)return!1;return or(cr(a),{recursive:!0}),sr(a,f),!0},c=(a,f)=>{o.push(a),rr(a,f)},u=te(n);for(let a of n.terminals){if(a==="iterm2"){s(hr(r),qh(t,i,n,r));continue}if(a==="windows-terminal"){if(n.wtHome){let g=po(n.wtHome),$=i.map(ir),y=Yi($,n.wtProfile??Vm(g),u);if(s(oi(n.wtHome),y)){let F=new Date;for(let E of g)xm(E,F,F)}}continue}let f=u!==void 0&&a==="warp"&&!Dt(mt(ri(r),`ttheme-${u}.yaml`)),l=a==="warp"?Cm(t,r,u,f):void 0;for(let g of i)for(let{file:$,content:y}of Wh(a,ir(g)))s(mt(Ae(a,t,r),$),y);if(a==="warp"){if(l)o.push(l);continue}if(a==="wezterm"){let g=mt(t,"ttheme","wezterm.lua");s(g,qu({path:g,colors:Ae("wezterm",t,r),backgrounds:ke(t),...u?{startup:u}:{},palettes:i.map(ir)}));let $=rn(t,r),y=Vn(de($),Tu(g));if(y!==void 0)c($,y);continue}if(a==="alacritty"){let g=Qe(t),$=Cn(de(g),Ym(t,u));if($!==void 0)c(g,$);continue}if(a==="kitty")s(Qh(t),ks({themes:Ae("kitty",t,r),backgrounds:ke(t)}));let m=Je(a,t),b=de(m);c(m,xn(b,Zh(a,t,u,b)))}let h=mt(t,"ttheme","palettes.zsh");return or(cr(h),{recursive:!0}),sr(h,Ci(i,u,n.terminals)),o.push(h),lo(`${h}.zwc`,{force:!0}),o}function xh(t,e){return t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}function zm(t){return[...new Set(t.split(`
134
+ `).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function _h(t,e,n=nn()){let r=te(e),i=(s)=>xh(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 ${oi(e.wtHome)} — its schemes, and touch settings.json so it reloads`);continue}if(o.push(`write ${i(Ae(s,t,n))}/${ct("*")} — a theme file per palette`),s==="warp"){let h=ii(n,t);if(r&&Dt(h))o.push(`edit ${i(h)} — [appearance.themes] theme; \`ttheme off\` puts yours back`);continue}if(s==="wezterm"){let h=rn(t,n);if(Vn(de(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(Cn(de(h),void 0)!==void 0)o.push(`edit ${i(h)} — a ttheme block: general.import`);continue}let c=Je(s,t),u=de(c);o.push(`edit ${i(c)} — a ttheme block: ${zm(Zh(s,t,r,u))}`)}return o}function Xh(t,e,n=nn()){let r=[],i=(o)=>xh(o,n);if(e.includes("ghostty")){let o=Je("ghostty",t);if(Ue(de(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=de(Je("kitty",t));if(Ue(o,"window_logo_scale")||Ue(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(Lu(de(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 wo(t,e,n,r,i=nn()){let o=[];for(let s of n)for(let c of e.palettes.filter((u)=>r.includes(u.name)))for(let{file:u}of Wh(s,ir(c))){let h=mt(Ae(s,t,i),u);if(Dt(h))lo(h,{force:!0}),o.push(h)}return o}import{mkdirSync as Bh,readFileSync as Dh,writeFileSync as ta}from"node:fs";import{dirname as ea}from"node:path";import{isMainThread as ep,parentPort as na,Worker as np}from"node:worker_threads";var Bm=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,Dm=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"]];function bo(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 Ch(t,e){let n=Bm.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...Dm.flatMap(([r,i])=>{let o=r.exec(e.source)?.[1];return o?[`post:${i}:${Number(o)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function Vh(t,e){let n=t.owner||t.artist;return n!==""&&n===(e.owner||e.artist)&&t.width===e.width&&t.height===e.height}function Yh(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,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 tp(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function zh(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&&tp(t.hash,e.hash)<=2}var rp={thumb:"tile",match:"tile",show:"view",backdrop:"view"};function ip(t){let e=Mc(new Uint8Array(Dh(t.from)),Le);if(t.job==="backdrop")return xc(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(Dh(t.source))},t),0;if(t.job==="match")return{match:Ph(e,t.colors),hash:Yh(e)};if(t.job==="thumb")return Bh(ea(t.to),{recursive:!0}),ta(t.to,Ye(Ic(e,t.width,t.height))),0;let n=Gn(e);return Bh(ea(t.to),{recursive:!0}),ta(t.to,Ye(Tc(e,t.colors,t.tone,t.width,t.height))),n}function op(t){t.on("message",(e)=>{try{t.postMessage({id:e.id,value:ip(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class ra{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 np(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 $o{lines=new Map;run(t){let e=rp[t.job],n=this.lines.get(e);if(!n)n=new ra,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}if(!ep&&na)op(na);import{connect as sp,createServer as cp}from"node:net";var up=20,ia=22;function ko(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 hp(t,e=up){let n=t.subarray(5);if(t[0]!==ia||n.length<2)return[t];let r=Math.max(1,Math.min(e,n.length-1)),i=(o)=>ko([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 ap(t,e,n,r){let i=sp(n,e,()=>{i.setNoDelay(!0),t.write(`HTTP/1.1 200 Connection Established\r
136
135
  \r
137
- `);let o=r,s=!1,c=(u)=>{if(s){i.write(u);return}if(o=Vi([o,u]),o.length<5)return;let h=o[3]*256+o[4];if(o[0]!==Eh){s=!0,i.write(o);return}if(o.length<5+h)return;s=!0;let[f,a]=Im(o.subarray(0,5+h));i.write(f),setTimeout(()=>{if(a)i.write(a);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 Om(t){t.setNoDelay(!0);let n=new Uint8Array(0),e=(r)=>{n=Vi([n,r]);let i=Buffer.from(n).toString("latin1"),o=i.indexOf(`\r
136
+ `);let o=r,s=!1,c=(u)=>{if(s){i.write(u);return}if(o=ko([o,u]),o.length<5)return;let h=o[3]*256+o[4];if(o[0]!==ia){s=!0,i.write(o);return}if(o.length<5+h)return;s=!0;let[a,f]=hp(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 fp(t){t.setNoDelay(!0);let e=new Uint8Array(0),n=(r)=>{e=ko([e,r]);let i=Buffer.from(e).toString("latin1"),o=i.indexOf(`\r
138
137
  \r
139
- `);if(o===-1)return;t.off("data",e);let s=/^CONNECT ([^ :]+):(\d+)/.exec(i);if(!s){t.end(`HTTP/1.1 405 Method Not Allowed\r
138
+ `);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
139
  \r
141
- `);return}Nm(t,s[1],Number(s[2]),n.subarray(o+4))};t.on("data",e),t.on("error",()=>t.destroy())}function Mh(){let t=Sm(Om);return new Promise((n,e)=>{t.once("error",e),t.listen(0,"127.0.0.1",()=>{n({port:t.address().port,close:()=>{t.close(),t.unref()}})})})}var Bn=[{name:"TTHEME_FIND_RATING",label:"rating",choices:Fe,multi:{read:gr}},{name:"TTHEME_FIND_BLOCK",label:"block",choices:jn,multi:{read:lr,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"]},...Ui()?[{name:"TTHEME_FIND_REMOVE_BG",label:"remove bg",choices:["on","off"]}]:[]];function Lm(t,n){if(t.multi)return t.multi.read(n).join(" ")||t.multi.none;return t.choices.find((e)=>e===n)??t.choices[0]}var Pm=["fit","newest","score"];function vh(t){return Pm.find((n)=>n===t)??"fit"}function Km(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var yh=12,Jm=4,Am=150,Sh=12,Um=2,Tm=150,Wm=30,Qm=4000,Zm=8000,Fh=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,qm=process.platform==="win32"?"alt+v":"ctrl+v",Ih=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",Xm=1280,Nh=2,_m=3,Cm=8;function Ar(t,n){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:n}}function Dn(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return Dn(t.errors[0]);if(t.cause)return Dn(t.cause);let n=t.code;if(typeof n==="string")return n;let e=(t.message||t.name).split(".")[0]??"";return e.length>56?`${e.slice(0,55)}…`:e}function Bi(t,n){return`${t}: ${Dn(n)}`}function Oh(t){return t.width*t.height}function Hh(t){return`${t.id}-${Gh("sha1").update(t.preview).digest("hex").slice(0,8)}`}function zm(t){let n=t.lastIndexOf("\x1B");return n!==-1&&/^\[?[0-9;]*$/.test(t.slice(n+1))}function Di(t,n){try{return JSON.parse(Lh(fn(yn(t),n),"utf8"))}catch{return{}}}function to(t,n,e){_e(yn(t),{recursive:!0}),Ce(fn(yn(t),n),`${JSON.stringify(e)}
142
- `)}class Ph{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(Bn.map((t)=>[t.name,Lm(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 Yi;sent=new Map;placed=new Map;current;fetch;settle;partial;suggestTimer;suggesting;input="";typed="";grabber=new Ai((t)=>this.write(t),(t)=>void this.got(t));featureWait;noticeTimer;peekTimer;peeked;attaching;probeWait;done;dirty=!1;unblock=!1;scratch=Hm(fn(Rm(),"ttheme-find-"));home;catalog;entry;constructor(t,n,e,r){this.home=t,this.catalog=n,this.entry=e,this.tone=hr(e,e.signatureSlots),this.view={palette:e.name,tag:r,site:this.tabName,siteAnsi:this.tabAnsi,nextSite:this.nextTabName,preset:this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:vh(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:gr(this.setting("TTHEME_FIND_RATING")),block:lr(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",unblocked:process.env.TTHEME_FIND_PROXY!==void 0,settings:Bn.map((i)=>({label:i.label,choices:[...i.choices],value:this.setting(i.name),multi:i.multi&&{none:i.multi.none},cursor:0})),colors:{cursor:e.cursor,selection:e.selection,ansi:e.ansi},tiles:[],installed:[],checked:0,total:0,searching:r!=="",focus:0,top:0,mode:"grid",help:!1,editing:r===""?"":void 0},this.board=Ar(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??Jm}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,n,e){return fn(yn(t),"orig",`${n}.${e}`)}previewPath(t){return fn(yn(t.site),"thumb",`${Hh(t.post)}.${Ie(t.post.preview)}`)}tileOf(t,n){let{site:e,post:r}=t,i=on(e,r.id),o=Oe(r)??r;return{id:r.id,key:i,site:e.name,siteAnsi:e.ansi,width:o.width,height:o.height,reduced:o!==r,owner:r.owner,artist:e===Ir?Fu(r.source):r.artist,score:r.score,variants:n,origin:Mi(r.source),mates:this.owners.get(e.key)?.get(r.owner)??[],thumb:this.thumbPath.get(i)}}show(){let t=this.view,n=this.board;t.tiles=n.groups.flatMap((e)=>e.open?e.posts.map((r)=>this.tileOf(r,0)):[this.tileOf(e.posts[0],e.posts.length)]),t.checked=n.checked,t.total=n.total,t.searching=n.searching,t.note=n.note,t.focus=Math.max(0,Math.min(n.focus,t.tiles.length-1)),t.top=n.top}syncSite(){let t=this.view;t.site=this.tabName,t.siteAnsi=this.tabAnsi,t.nextSite=this.nextTabName}async run(){let{stdin:t,stdout:n}=process;t.setRawMode(!0),t.resume(),t.on("data",this.onData),n.on("resize",this.onResize),this.write("\x1B[?25l\x1B[?7l\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H");let e=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 e;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),n.off("resize",this.onResize),this.write("\x1B_Ga=d,d=A,q=2\x1B\\\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H"),t.setRawMode(!1),t.pause(),this.saveProbes(),this.renders.close(),xi(this.scratch,{recursive:!0,force:!0}),Ac(),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 n=setTimeout(()=>{this.probeWait=void 0,t(null)},1000);this.probeWait=(e)=>{clearTimeout(n),this.probeWait=void 0,t(e)},this.write(Xu)})}onData=(t)=>{this.input+=t.toString("utf8");for(let e=Qi(this.input);e;e=Qi(this.input))this.input=e.rest,this.probeWait?.(e.cell);if(this.probeWait)return;let n=Ru(this.input);if(this.input=n.pending,this.view.editing===void 0&&n.keys.length>8&&/^(?:\/|~\/|file:|https?:)/.test(n.keys))this.pasted(n.keys),n.keys="";this.typed+=n.keys;for(let e of n.events)this.inbound(e);if(clearTimeout(this.partial),zm(this.typed)){this.partial=setTimeout(this.flushKeys,Wm);return}this.flushKeys()};flushKeys=()=>{let t=qu(this.typed);this.typed="";for(let n of t)this.key(n)};features(){if(process.env.TMUX)return Promise.resolve();return new Promise((t)=>{let n=setTimeout(()=>{this.featureWait=void 0,t()},500);this.featureWait=()=>{clearTimeout(n),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 n=this.view;if(n.editing!==void 0&&t.trim()!==""&&!this.picture(t)){n.editing+=t.replace(/[\r\n]+/g," "),this.suggest(),this.draw();return}if(n.installing!==void 0||n.asking!==void 0||n.panel!==void 0||n.help)return;if(t.trim()===""){this.fromClipboard();return}this.attach(t)}picture(t){let n=t.trim();if(/^https?:\/\/\S+$/i.test(n))return!dr(n,this.site??gt[0]);return Fr(n).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 — ${Ih}`);return}this.pasted(t.text);return}await this.bring(()=>yr(t.bytes,t.source))}notice(t,n=Qm){let e=this.view;e.error=t,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(e.error===t)e.error=void 0,this.draw()},n),this.draw()}async peek(){let t=this.view,n;try{n=await ju()}catch{return}if(!n||n.stamp===this.peeked)return;if(this.peeked=n.stamp,!n.picture||t.installing!==void 0||t.asking!==void 0)return;t.hint=`picture on the clipboard · ${qm} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.draw()},Zm),this.draw()}async fromClipboard(){let t=this.view;if(Ji()){if(this.grabber.clipboard){this.grabber.ask();return}this.notice("over ssh the clipboard is not here — drop the file");return}let n;try{n=await Hu(fn(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`could not read the clipboard: ${Dn(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in n){await this.bring(async(r)=>({...await Ki(n.image,r),source:"clipboard"}));return}let e=n.text.trim();if(!e){this.notice(`no picture on the clipboard — ${Ih}`);return}if(this.picture(e)){await this.attach(e);return}if(t.editing===void 0)t.editing="";this.pasted(e)}async attach(t){let n=t.trim();if(/^https?:\/\//i.test(n)){let i=dr(n,this.site??gt[0]);if(i){await this.jump(i.site,i.id);return}}let[e,...r]=Fr(n).sort((i,o)=>Number(!Fh.test(i))-Number(!Fh.test(o)));if(!e){this.notice("nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>Ki(e,i),r.length)}async bring(t,n=0){let e=this.view;this.attaching?.abort();let r=new AbortController;this.attaching=r,e.error=void 0,e.saved=void 0,e.note="reading the picture…",this.draw();let i;try{i=await t(AbortSignal.any([r.signal,this.signal]))}catch(g){if(!r.signal.aborted)e.note=void 0,this.notice(Dn(g),8000);return}if(r.signal.aborted)return;e.note=n>0?`the first picture of ${n+1} — drop one at a time to try the others`:void 0,this.quietSuggest(),e.editing=void 0,e.suggest=void 0,e.pick=void 0;let o=Nu(i.bytes);Iu(o,i.source);let s=this.origPath(Ir,o,i.ext);_e(Jr(s),{recursive:!0}),Ce(s,i.bytes);let c=Gm(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:Gh("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],solo:void 0,family:0,smaller:[]},h={site:Ir,post:u},f=this.previewPath(h);_e(Jr(f),{recursive:!0}),Ce(f,i.bytes),++this.gen,this.current=void 0,e.shown=void 0;let a=Ar(`local|post:${o}`,!1);this.board=a,this.boards.set(a.key,a),this.single(a,h)}single(t,n){t.searching=!1,this.posts.set(on(n.site,n.post.id),n),t.groups=[{posts:[n],open:!1}],t.checked=1,t.total=1,this.thumbQueue.push(n),this.thumbs(),this.view.mode="try",this.show(),this.select(),this.draw()}onClock=()=>{let t=this.sites.reduce((r,i)=>Mn(i)>Mn(r)?i:r),n=Math.ceil((Mn(t)-Date.now())/1000),e=n>0?n:void 0;if(e!==this.view.waiting)this.view.waiting=e,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 n=this.view;if(t==="ctrl-c"){this.finish(2);return}if(n.installing!==void 0)return;if(n.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")&&n.panel===void 0){this.fromClipboard();return}if(n.editing!==void 0){this.editKey(t);return}if(n.panel!==void 0){this.panelKey(t);return}if(n.help){if(t==="?"||t==="esc")n.help=!1,this.draw();return}if(this.cols<Ln.cols||this.rows<Ln.rows){if(t==="esc")this.finish(2);return}if(t==="?"){n.help=!0,this.draw();return}if(n.mode==="try"){this.tryKey(t);return}this.gridKey(t)}gridKey(t){let n=this.view,{perRow:e,rowsVis:r}=_n(this.cols,this.rows),o={left:-1,right:1,up:-e,down:e,pgup:-e*r,pgdn:e*r,home:-n.focus,end:n.tiles.length}[t];if(o!==void 0){this.focus(n.focus+o);return}if(t==="enter"&&n.tiles[n.focus]){n.mode="try",n.error=void 0,this.select();return}if(t==="v"){this.fromClipboard();return}if(t==="c"){n.preset=n.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==="/"){n.editing="",this.draw();return}if(t===" "){this.unfold();return}if(t==="o"){this.openPage();return}if(t==="s"){n.panel=0,this.draw();return}if(t==="esc")this.finish(2)}panelKey(t){let n=this.view,e=n.panel??0,r=n.settings[e];if(t==="up"||t==="down"){n.panel=Math.max(0,Math.min(n.settings.length-1,e+(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"){n.settings.forEach((i,o)=>{i.value=this.setting(Bn[o]?.name??"")}),n.panel=void 0,this.draw();return}if(t==="enter"||t==="alt-c")n.panel=void 0,this.adopt()}adopt(){let t=this.view,n=Bn.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let o=Bn[i];if(o)this.values.set(o.name,r.value)});let e=Bn.filter((r,i)=>this.setting(r.name)!==n[i]);if(e.length===0){this.draw();return}this.save(e),t.rating=gr(this.setting("TTHEME_FIND_RATING")),t.block=lr(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=vh(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((n)=>[n.name,this.setting(n.name)]))}store(t){let n=fn(this.home,"ttheme","config.zsh");try{let e=xn(n)?Lh(n,"utf8"):"";return Ce(n,t.reduce((r,[i,o])=>eu(r,i,o),e)),!0}catch(e){return this.view.error=e instanceof Error?e.message:String(e),!1}}askKey(t){let n=this.view;if(t==="y"){if(n.asking=void 0,this.store([["TTHEME_FIND_UNBLOCK","1"]])){this.unblock=!0,this.finish(0);return}this.draw();return}if(t==="n"||t==="esc")n.asking=void 0,this.draw()}editKey(t){let n=this.view,e=n.editing??"",r=n.suggest??[];if((t==="up"||t==="down")&&r.length>0){let i=n.pick??-1,o=t==="down"?Math.min(r.length-1,i+1):i-1;n.pick=o<0?void 0:o,this.draw();return}if(t==="esc"||t==="enter")this.quietSuggest();if(t==="esc"){if(n.editing=void 0,n.tag===""){this.finish(2);return}this.draw();return}if(t==="enter"){let i=n.pick===void 0?void 0:r[n.pick],o=i?e.replace(/\S*$/,i.value):e;if(n.editing=void 0,n.suggest=void 0,n.pick=void 0,o.trim()){this.commit(o.trim());return}if(n.tag===""){this.finish(2);return}this.draw();return}if(t==="backspace"){n.editing=e.slice(0,-1),this.suggest(),this.draw();return}if(t.length===1&&t>=" ")n.editing=e+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 n=/\S*$/.exec(t.editing??"")?.[0]??"";if(!Km(n)){t.suggest=void 0;return}let e=[...new Map(Au(this.catalog.palettes,this.entry,n).map((i)=>[i.booru,{value:i.booru,count:0,palette:i.name}])).values()].slice(0,_m);t.suggest=e.length>0?e:void 0;let r=new AbortController;this.suggesting=r,this.suggestTimer=setTimeout(async()=>{try{let i=await Zc(n,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(e.map((c)=>c.value));t.suggest=[...e.map((c)=>({...c,count:o.get(c.value)??0})),...i.filter((c)=>!s.has(c.value))].slice(0,Cm),t.pick=t.pick!==void 0&&t.pick<e.length?t.pick:void 0,this.draw()}}catch{}},Am)}async commit(t){let n=dr(t,this.site??gt[0]);if(n){await this.jump(n.site,n.id);return}if(this.picture(t)){await this.attach(t);return}this.view.tag=t,this.boards.clear(),await this.search()}async jump(t,n){let e=++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=Ar(`${t.key}|post:${n}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.draw();try{let i=await vi(t,n,this.signal);if(e!==this.gen)return;if(!i){r.searching=!1,r.error=`${t.name} has no post ${n}`,this.view.error=r.error,this.show(),this.draw();return}this.single(r,{site:t,post:i})}catch(i){this.fail(e,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,n=0;for(let e of this.board.groups){let r=e.open?e.posts.length:1;if(t.focus<n+r){if(e.posts.length<2)return;e.open=!e.open,this.board.focus=n;for(let i of e.posts)if(!this.thumbPath.has(on(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.draw();return}n+=r}}openPage(){let t=this.view.tiles[this.view.focus],n=t&&this.posts.get(t.key);if(!n)return;let e=process.platform==="darwin"?"open":"xdg-open";try{Rh(e,[n.site.pageUrl(n.post.id)],{stdio:"ignore",detached:!0}).unref()}catch{}}tryKey(t){let n=this.view;if(t==="left"||t==="right"){this.direction=t==="left"?-1:1,this.focus(n.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),n.fetching=void 0,n.mode="grid",n.error=void 0,this.draw()}focus(t){let n=this.view;if(n.tiles.length===0)return;let e=Math.max(0,Math.min(n.tiles.length-1,t));if(e===n.focus)return;if(n.focus=e,this.board.focus=e,this.scroll(),this.pump(),n.mode==="try")this.select();this.draw()}scroll(){let t=this.view,{perRow:n,rowsVis:e}=_n(this.cols,this.rows),r=Math.floor(t.focus/n);if(r<t.top)t.top=r;if(r>t.top+e-1)t.top=r-e+1;this.board.top=t.top}query(t){let n=this.view,e=n.tag===this.entry.booru?Uu(this.entry,t.key):[n.tag];if(e.length===0)return;let r=e.length>1,i=n.preset==="cutouts"?t.cutouts:"",o=r&&i.includes("~"),s=[r?e.map((h)=>`~${h}`).join(" "):e[0],t.rate(this.view.rating),o?"":i,n.order==="score"?t.best:""].filter(Boolean),c=[],u=[];for(let h of s)if(Ei([...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,n=Ar(this.boardKey,!0);this.board=n,this.boards.set(n.key,n),this.view.error=void 0;let e=this.sites.flatMap((o)=>{let s=this.query(o);return s?[{site:o,...s}]:[]}),r=this.sites.filter((o)=>!e.some((s)=>s.site===o)),i=[...e.flatMap(({notes:o})=>o),...r.length>0?[`${this.entry.name} has no tag on ${r.map((o)=>o.name).join(", ")}`]:[]];if(n.note=i.length>0?i.join(" · "):void 0,e.length===0)n.searching=!1;this.show(),this.draw(),this.tally(t,n,e);try{let o=await Promise.all(e.map(async(s)=>({plan:s,owners:await this.mateOwners(s.site)})));if(t!==this.gen)return;n.sources=o.flatMap(({plan:{site:s,tags:c},owners:u})=>[...Ei(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,n,e){let r=await Promise.allSettled(e.map(({site:i,tags:o})=>Tc(i,o,this.signal)));if(t===this.gen)n.total=r.reduce((i,o)=>i+(o.status==="fulfilled"?o.value:0),0),this.show(),this.draw()}fail(t,n,e=this.site){if(t!==this.gen||this.signal.aborted)return;this.board.error=Bi(e?.name??this.tabName,n),this.board.searching=!1,this.view.error=this.board.error,this.offer(e,n),this.show(),this.draw()}offer(t,n){if(t&&!this.view.unblocked&&Kh()&&Dn(n)==="ECONNRESET")this.view.asking=t.name}drop(t,n,e){for(let r of t.sources)if(r.site===n)r.done=!0;t.note=[t.note,Bi(n.name,e)].filter(Boolean).join(" · "),this.offer(n,e)}wants(){let{perRow:t,rowsVis:n}=_n(this.cols,this.rows);return this.view.tiles.length<(this.board.top+n+Nh)*t}need(){let{perRow:t,rowsVis:n}=_n(this.cols,this.rows);return(n+Nh)*t}live(t){return this.boards.get(t.key)===t}page(t,n,e){let r=`${t.key}|${n}|${e}`,i=this.pages.get(r);if(!i)i=Uc(t,n,e,this.signal).then((o)=>this.borrow(o)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(t){let n=t.filter((e)=>e.solo===void 0&&e.md5!=="");if(n.length>0)try{Wc(n,await Qc(n.map((e)=>e.md5),this.signal))}catch{}return t}async round(t){let n=gt.flatMap((c)=>{let u=t.sources.find((h)=>h.site===c&&!h.done);return u?[u]:[]}),e=await Promise.all(n.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 e){if(!u)continue;c.page++,c.done=u.length<Hn;let h=t.last.get(c);for(let f of u){let a=h&&gh(h.post,f)?h.set:`set:${c.site.key}:${f.id}`;h={post:f,set:a};let g=on(c.site,f.id);if(t.seen.has(g))continue;t.seen.add(g);let d={site:c.site,post:f};if(this.eligible(d))t.kin.set(d,[a,...ah(c.site,f)]),r.push(d);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=n.length>1?eh(i):i;else{let c=Gr(i,this.frame(),this.matched),u=c.slice(0,this.need());if(await this.looks(u),!this.live(t))return;s=[...Gr(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 n=t.queue.slice(0,this.need()).filter((e)=>!this.looking.has(on(e.site,e.post.id)));if(n.length===0)return;this.aheading=!0,this.looks(n).then(()=>{this.aheading=!1;for(let e of new Set(n.map((r)=>t.roundOf.get(r)??0)))this.resort(t,e);this.ahead(t)})}resort(t,n){let e=t.queue.flatMap((i,o)=>t.roundOf.get(i)===n?[o]:[]),r=Gr(e.map((i)=>t.queue[i]),this.frame(),this.matched);e.forEach((i,o)=>{t.queue[i]=r[o]})}dedupe(t,n){let e=[];for(let r of n){let i=zi(r.post),o=i.map((c)=>t.same.get(c)).find(Boolean);if(!o){for(let c of i)t.same.set(c,r);e.push(r);continue}if(t.checked++,Oh(r.post)<=Oh(o.post))continue;for(let c of[...i,...zi(o.post)])t.same.set(c,r);let s=e.indexOf(o);if(s>=0){e[s]=r;continue}this.replace(t,o,r)}return e}replace(t,n,e){t.roundOf.set(e,t.roundOf.get(n)??0);let r=t.queue.indexOf(n);if(r>=0){t.queue[r]=e;return}for(let i of t.groups){let o=i.posts.indexOf(n);if(o>=0){i.posts[o]=e,this.posts.set(on(e.site,e.post.id),e),this.thumbQueue.push(e),this.thumbs();return}}}async looks(t){let n=0;await Promise.all(Array.from({length:Sh},async()=>{while(n<t.length)await this.look(t[n++])}))}look(t){let n=on(t.site,t.post.id),e=this.looking.get(n);if(!e)e=(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(n,i),this.matched.set(t.post,i.match),i})().catch(()=>{return}),this.looking.set(n,e);return e}async pump(){let t=this.gen,n=this.board;if(this.pumping===t||n.sources.length===0)return;this.pumping=t;let e=[],r;try{n.searching=!0;while(t===this.gen){while(e.length<yh&&n.queue.length>0&&this.wants()){let s=n.queue.shift();e.push({pick:s,passed:this.vet(s)})}if(this.ahead(n),!r&&n.queue.length<yh&&n.sources.some((s)=>!s.done)&&this.wants()){let s=this.round(n).then(()=>{if(r===s)r=void 0});s.catch(()=>{}),r=s}let i=e.shift();if(!i){if(!r)break;await r,this.show(),this.draw();continue}let o=await i.passed;if(t!==this.gen)return;if(n.checked++,o)this.admit(i.pick);this.show(),this.draw()}if(t===this.gen)n.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:n}){let e=Oe(n);if(!Pc(t,n,this.view.rating)||Lc(n,this.view.block).length>0||!e)return!1;if(this.view.solo&&n.solo===!1)return!1;return this.view.preset==="all"?["png","jpg","jpeg"].includes(e.ext):n.ext==="png"}async vet(t){let[n]=await Promise.all([this.passes(t),this.look(t)]);return n}async passes({site:t,post:n}){return this.view.preset==="all"||t.vouched||this.transparent(t,n)}probes(t){let n=this.probed.get(t.key);if(!n)n=Di(t,"probes.json"),this.probed.set(t.key,n);return n}async transparent(t,n){let e=this.probes(t),r=e[n.id];if(r!==void 0)return r;try{let i=(await qc(t,n.file,this.signal))?.alpha===!0;return e[n.id]=i,this.unsaved.add(t.key),i}catch{return!1}}saveProbes(){for(let t of this.unsaved){let n=gt.find((e)=>e.key===t);if(n)to(n,"probes.json",this.probes(n))}this.unsaved.clear()}admit(t){let{site:n,post:e}=t,r=this.board,i=on(n,e.id);this.posts.set(i,t);let o=r.kin.get(t)??[],s=this.looked.get(i),c=s&&{hash:s.hash,width:e.width,height:e.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,n,e){for(let r of n){let i=t.kindred.get(r);if(i)return i}return e&&t.shapes.find((r)=>dh(r.shape,e))?.group}register(t,n,e,r){for(let i of e)if(!t.kindred.has(i))t.kindred.set(i,n);if(r)t.shapes.push({shape:r,group:n})}async mateOwners(t){let n=this.owners.get(t.key);if(n)return n;let e=kc(this.home),r=Di(t,"owners.json"),i=this.catalog.palettes.flatMap((u)=>{let h=e.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 vi(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);to(t,"owners.json",r);let c=Kc(s);return this.owners.set(t.key,c),c}async cached(t,n,e,r){if(xn(n))return jm(n).size;let i=this.inflight.get(n);if(i)return i;let o=(async()=>{let s=await Xc(t,e,this.signal,r);return _e(Jr(n),{recursive:!0}),Ce(n,s),s.length})();this.inflight.set(n,o);try{return await o}finally{this.inflight.delete(n)}}thumbs(){while(this.thumbing<Sh&&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:n,post:e}=t,r=Jt.cols*this.cell.w,i=Jt.rows*this.cell.h,o=fn(yn(n),"tile",`${Hh(e)}-${r}x${i}.png`);if(!xn(o)){let s=this.previewPath(t);await this.cached(n,s,e.preview),await this.renders.run({job:"thumb",from:s,to:o,width:r,height:i})}this.thumbPath.set(on(n,e.id),o),this.show(),this.draw()}select(){let t=this.view,n=t.tiles[t.focus];if(this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,!n)return;if(this.current?.key===n.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(n),Tm),this.draw()}async load(t){let n=this.view,e=this.posts.get(t.key),r=e&&Oe(e.post);if(!e||!r)return;let{site:i}=e,o=this.board,s=new AbortController;this.fetch=s;try{let c=this.origPath(i,t.id,r.ext);if(!xn(c))n.fetching={id:t.key,got:0,size:0},this.draw();let u=await this.cached(i,c,r.file,(a,g)=>{if(n.fetching?.id===t.key)n.fetching={id:t.key,got:a,size:g},this.draw()});if(s.signal.aborted)return;if(n.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};n.preparing=t.key,this.flush();let f=await this.render(h,"plain");if(s.signal.aborted||o!==this.board)return;if(f.clear===0&&Ui()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(n.preparing=void 0,n.cutting=t.key,this.flush(),h.cut=await this.cutOut(i,t.id,c,s.signal),s.signal.aborted||o!==this.board)return;if(n.cutting=void 0,h.cut){n.preparing=t.key,this.flush();let a=await this.render(h,"cut").catch(()=>{return});if(s.signal.aborted||o!==this.board)return;if(a&&Tu(a.clear))h.using="cut";else xi(h.cut,{force:!0}),h.cut=void 0,h.failed=!0}else h.failed=!0}if(this.current=h,n.tiles[n.focus]?.key===t.key)await this.present();this.preload()}catch(c){if(!s.signal.aborted&&!this.signal.aborted)n.error=Bi(i.name,c)}finally{if(n.fetching?.id===t.key)n.fetching=void 0;if(n.preparing===t.key)n.preparing=void 0;if(n.cutting===t.key)n.cutting=void 0;this.draw()}}async cutOut(t,n,e,r){let i=fn(yn(t),"cut",`${n}.png`);if(xn(i))return i;try{return _e(Jr(i),{recursive:!0}),await Wu(e,i,r),i}catch{xi(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 n of[t.focus+this.direction,t.focus-this.direction]){if(this.prefetching>=Um)return;let e=t.tiles[n],r=e&&this.posts.get(e.key),i=r&&Oe(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:e.key,path:c,ext:i.ext,size:0,using:"plain",failed:!1},"plain")).catch(()=>{}).finally(()=>{this.prefetching--})}}async render(t,n){let e=this.cols*this.cell.w,r=this.rows*this.cell.h,i=Math.min(e,Xm),o=Math.max(1,Math.round(r*i/e)),s=fn(this.scratch,`${t.site.key}-${t.id}${n==="cut"?"c":""}-${i}x${o}.png`),c=`${t.site.key}:${t.id}:${n}`,u=this.clarity.get(c);if(u!==void 0&&xn(s))return{clear:u,path:s};let h=await this.renders.run({job:"show",from:n==="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 n=t.using,{clear:e,path:r}=await this.render(t,n);if(this.current!==t||t.using!==n)return;this.view.shown={id:t.key,clear:e,bytes:t.size,path:r,cut:t.cut?n==="cut"?"on":"off":t.failed?"failed":"none"}}reveal(){let t=this.view;t.preparing=this.current?.key,this.flush(),this.present().catch((n)=>{t.error=n instanceof Error?n.message:String(n)}).finally(()=>{if(t.preparing===this.current?.key)t.preparing=void 0;this.draw()})}async install(){let t=this.view,n=t.tiles[t.focus],e=this.current;if(!n||e?.key!==n.key||t.preparing!==void 0||t.shown?.id!==n.key)return;t.installing=n.key,t.error=void 0,this.flush();try{await this.renders.run({job:"backdrop",from:e.using==="cut"?e.cut:e.path,source:e.path,home:this.home,colors:this.entry,tone:this.tone,origin:{site:e.site.key,id:e.id,ext:e.ext,from:`${e.site.name} ${e.id} ${e.site.pageUrl(e.id)}`},width:this.cols*this.cell.w,height:this.rows*this.cell.h});let r=Di(e.site,"owners.json");r[e.id]=this.posts.get(e.key)?.post.owner??"",to(e.site,"owners.json",r),Vn(this.home),t.saved=`background · ${this.entry.name} ← ${e.site.name} ${e.id}`,t.installed.push(n.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=th(this.view,this.cols,this.rows),n="\x1B[?2026h";t.lines.forEach((r,i)=>{n+=`\x1B[${i+1};1H\x1B[K${r}`});let e=new Set;for(let r of t.images){if(e.add(r.id),this.sent.get(r.id)!==r.path)n+=_u(r),this.sent.set(r.id,r.path),this.placed.delete(r.id);let i=`${r.row};${r.col};${r.cols};${r.rows};${r.z}`;if(this.placed.get(r.id)!==i)n+=Cu(r),this.placed.set(r.id,i)}for(let r of this.sent.keys())if(!e.has(r))n+=zu(r),this.sent.delete(r),this.placed.delete(r);this.write(`${n}\x1B[?2026l`)}}function Kh(){if(process.versions.bun)return!0;let[t=0,n=0]=process.versions.node.split(".").map(Number);return t>22||t===22&&n>=21}async function jh(){if(!Kh())return process.stderr.write(`unblock needs node 22.21 or newer — this is ${process.versions.node}
143
- `),1;let t=await Mh(),n=Rh(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,Gc()].filter(Boolean).join(","),TTHEME_FIND_PROXY:String(t.port)}}),e=await new Promise((r)=>n.on("exit",(i)=>r(i??1)));return t.close(),e}async function Jh(t){if(process.env.TTHEME_FIND_UNBLOCK==="1"&&!process.env.TTHEME_FIND_PROXY)return jh();let n=Tt(),e=Pt(n),r=Hr(e.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("ttheme find needs a terminal");let i=new Ph(n,e,r,r.booru??""),o=await i.run(),s=i.unblock?await jh():o;if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
144
- `),0;return s}function Ah(t,n){let e=Tt();if(Hr(Pt(e).palettes,t),n==="next"||n==="prev"){let{key:r,at:i,of:o}=wc(e,t,n==="next"?1:-1);return Vn(e),process.stderr.write(`background · ${t} ${i}/${o} ${r}
145
- `),0}if(n==="drop"){let{key:r,left:i}=$c(e,t);return Vn(e),process.stderr.write(`background · ${t} removed ${r??"the picture"} · ${i} left
146
- `),0}if(n==="tuned")return Vn(e),0;throw Error(`unknown image action ${n} — next, prev, drop or tuned`)}import{execFileSync as Yp,spawnSync as Vp}from"node:child_process";import{chmodSync as xp,copyFileSync as Bp,existsSync as Qt,mkdirSync as ko,readdirSync as Dp,readFileSync as se,rmSync as Wf,writeFileSync as Qf}from"node:fs";import{homedir as t0}from"node:os";import{dirname as oe,join as ct}from"node:path";import{styleText as co}from"node:util";import{stdout as ef,stdin as fp}from"node:process";import ap from"node:readline";var Uh=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(n)=>{let e=0;t.lastIndex=0;while(t.test(n))e+=1;return n.length-e}})(),Th=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Wh=(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 Ym=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Vm=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Qh=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,xm=/\t{1,1000}/y,Zh=/[\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,Bm=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Dm=/\p{M}+/gu,tp={limit:1/0,ellipsis:""},qh=(t,n={},e={})=>{let r=n.limit??1/0,i=n.ellipsis??"",o=n?.ellipsisWidth??(i?qh(i,tp,e).width:0),s=0,c=e.controlWidth??0,u=e.tabWidth??8,h=e.emojiWidth??2,f=2,a=e.regularWidth??1,g=e.wideWidth??2,d=[[Bm,a],[Ym,0],[Vm,c],[xm,u],[Zh,h],[Qh,g]],p=0,l=0,k=t.length,v=0,I=!1,E=k,y=Math.max(0,r-o),$=0,H=0,b=0,R=0;t:while(!0){if(H>$||l>=k&&l>p){let O=t.slice($,H)||t.slice(p,l);v=0;for(let P of O.replaceAll(Dm,"")){let G=P.codePointAt(0)||0;if(Th(G))R=2;else if(Wh(G))R=g;else R=a;if(b+R>y)E=Math.min(E,Math.max($,p)+v);if(b+R>r){I=!0;break t}v+=P.length,b+=R}$=H=0}if(l>=k)break t;for(let O=0,P=d.length;O<P;O++){let[G,C]=d[O];if(G.lastIndex=l,G.test(t)){if(v=G===Qh?Uh(t.slice(l,G.lastIndex)):G===Zh?1:G.lastIndex-l,R=v*C,b+R>y)E=Math.min(E,l+Math.floor((y-b)/C));if(b+R>r){I=!0;break t}b+=R,$=p,H=l,l=p=G.lastIndex;continue t}}l+=1}return{width:I?y:b,index:I?E:k,truncated:I,ellipsed:I&&r>=o}},Xh=qh;var np={limit:1/0,ellipsis:"",ellipsisWidth:0},ep=(t,n={})=>{return Xh(t,np,n).width},Kt=ep;var Ur="\x1B",Vh="›",rp=39,eo="\x07",xh="[",ip="]",Bh="m",ro=`${ip}8;;`,_h=new RegExp(`(?:\\${xh}(?<code>\\d+)m|\\${ro}(?<uri>.*)${eo})`,"y"),Ch=(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},zh=(t)=>`${Ur}${xh}${t}${Bh}`,Yh=(t)=>`${Ur}${ro}${t}${eo}`,no=(t,n,e)=>{let r=n[Symbol.iterator](),i=!1,o=!1,s=t.at(-1),c=s===void 0?0:Kt(s),u=r.next(),h=r.next(),f=0;while(!u.done){let a=u.value,g=Kt(a);if(c+g<=e)t[t.length-1]+=a;else t.push(a),c=0;if(a===Ur||a===Vh)i=!0,o=n.startsWith(ro,f+1);if(i){if(o){if(a===eo)i=!1,o=!1}else if(a===Bh)i=!1}else if(c+=g,c===e&&!h.done)t.push(""),c=0;u=h,h=r.next(),f+=a.length}if(s=t.at(-1),!c&&s!==void 0&&s.length&&t.length>1)t[t.length-2]+=t.pop()},op=(t)=>{let n=t.split(" "),e=n.length;while(e){if(Kt(n[e-1]))break;e--}if(e===n.length)return t;return n.slice(0,e).join(" ")+n.slice(e).join("")},sp=(t,n,e={})=>{if(e.trim!==!1&&t.trim()==="")return"";let r="",i,o,s=t.split(" "),c=[""],u=0;for(let a=0;a<s.length;a++){let g=s[a];if(e.trim!==!1){let p=c.at(-1)??"",l=p.trimStart();if(p.length!==l.length)c[c.length-1]=l,u=Kt(l)}if(a!==0){if(u>=n&&(e.wordWrap===!1||e.trim===!1))c.push(""),u=0;if(u||e.trim===!1)c[c.length-1]+=" ",u++}let d=Kt(g);if(e.hard&&d>n){let p=n-u,l=1+Math.floor((d-p-1)/n);if(Math.floor((d-1)/n)<l)c.push("");no(c,g,n),u=Kt(c.at(-1)??"");continue}if(u+d>n&&u&&d){if(e.wordWrap===!1&&u<n){no(c,g,n),u=Kt(c.at(-1)??"");continue}c.push(""),u=0}if(u+d>n&&e.wordWrap===!1){no(c,g,n),u=Kt(c.at(-1)??"");continue}c[c.length-1]+=g,u+=d}if(e.trim!==!1)c=c.map((a)=>op(a));let h=c.join(`
147
- `),f=!1;for(let a=0;a<h.length;a++){let g=h[a];if(r+=g,!f){if(f=g>="\uD800"&&g<="\uDBFF",f)continue}else f=!1;if(g===Ur||g===Vh){_h.lastIndex=a+1;let p=_h.exec(h)?.groups;if(p?.code!==void 0){let l=Number.parseFloat(p.code);i=l===rp?void 0:l}else if(p?.uri!==void 0)o=p.uri.length===0?void 0:p.uri}if(h[a+1]===`
148
- `){if(o)r+=Yh("");let d=i?Ch(i):void 0;if(i&&d)r+=zh(d)}else if(g===`
149
- `){if(i&&Ch(i))r+=zh(i);if(o)r+=Yh(o)}}return r},cp=/\r?\n/;function Fn(t,n,e){return String(t).normalize().split(cp).map((r)=>sp(r,n,e)).join(`
150
- `)}var Wt=nr(oo(),1);function te(t,n,e){if(!e.some((s)=>!s.disabled))return t;let r=t+n,i=Math.max(e.length-1,0),o=r<0?i:r>i?0:r;return e[o]?.disabled?te(o,n<0?-1:1,e):o}function Tr(t,n,e,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+e)),s=Math.min(s,i[o].length)+n;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let c=0;for(let u=0;u<o;u++)c+=i[u].length+1;return c+s}var gp=["up","down","left","right","space","enter","cancel"],lp=["January","February","March","April","May","June","July","August","September","October","November","December"],At={actions:new Set(gp),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:[...lp],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,n)=>`There are only ${t} days in ${n}`,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 rf(t,n){if(typeof t=="string")return At.aliases.get(t)===n;for(let e of t)if(e!==void 0&&rf(e,n))return!0;return!1}function dp(t,n){if(t===n)return;let e=t.split(`
152
- `),r=n.split(`
153
- `),i=Math.max(e.length,r.length),o=[];for(let s=0;s<i;s++)e[s]!==r[s]&&o.push(s);return{lines:o,numLinesBefore:e.length,numLinesAfter:r.length,numLines:i}}var Nb=globalThis.process.platform.startsWith("win"),uo=Symbol("clack:cancel");function ne(t){return t===uo}function Wr(t,n){let e=t;e.isTTY&&e.setRawMode(n)}var Zr=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,fo=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function ze(t,n,e,r=e,i=e,o){let s=Zr(t??ef);return Fn(n,s-e.length,{hard:!0,trim:!1}).split(`
154
- `).map((c,u,h)=>{let f=o?o(c,u):c;return u===0?`${r}${f}`:u===h.length-1?`${i}${f}`:`${e}${f}`}).join(`
155
- `)}function of(t,n){if("~standard"in t){let e=t["~standard"].validate(n);if(e instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return e.issues?.at(0)?.message}return t(n)}class pn{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(t,n=!0){let{input:e=fp,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=n,this._abortSignal=o,this.input=e,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(t,n){let e=this._subscribers.get(t)??[];e.push(n),this._subscribers.set(t,e)}on(t,n){this.setSubscriber(t,{cb:n})}once(t,n){this.setSubscriber(t,{cb:n,once:!0})}emit(t,...n){let e=this._subscribers.get(t)??[],r=[];for(let i of e)i.cb(...n),i.once&&r.push(()=>e.splice(e.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(uo);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=ap.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),Wr(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Wt.cursor.show),this.output.off("resize",this.render),Wr(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Wt.cursor.show),this.output.off("resize",this.render),Wr(this.input,!1),t(uo)})})}_isActionKey(t,n){return t==="\t"}_shouldSubmit(t,n){return!0}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,n){this.userInput=t??"",this.emit("userInput",this.userInput),n&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(t,n){if(this._track&&n.name!=="return"&&(n.name&&this._isActionKey(t,n)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),n?.name&&(!this._track&&At.aliases.has(n.name)&&this.emit("cursor",At.aliases.get(n.name)),At.actions.has(n.name)&&this.emit("cursor",n.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t,n),n?.name==="return"&&this._shouldSubmit(t,n)){if(this.opts.validate){let e=of(this.opts.validate,this.value);e&&(this.error=e instanceof Error?e.message:e,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}rf([t,n?.name,n?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
156
- `),Wr(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=Fn(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
157
- `).length-1;this.output.write(Wt.cursor.move(-999,t*-1))}render(){let t=Fn(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Wt.cursor.hide);else{let n=dp(this._prevFrame,t),e=fo(this.output);if(this.restoreCursor(),n){let r=Math.max(0,n.numLinesAfter-e),i=Math.max(0,n.numLinesBefore-e),o=n.lines.find((s)=>s>=r);if(o===void 0){this._prevFrame=t;return}if(n.lines.length===1){this.output.write(Wt.cursor.move(0,o-i)),this.output.write(Wt.erase.lines(1));let s=t.split(`
158
- `);this.output.write(s[o]),this._prevFrame=t,this.output.write(Wt.cursor.move(0,s.length-o-1));return}else if(n.lines.length>1){if(r<i)o=r;else{let c=o-i;c>0&&this.output.write(Wt.cursor.move(0,c))}this.output.write(Wt.erase.down());let s=t.split(`
140
+ `);return}ap(t,s[1],Number(s[2]),e.subarray(o+4))};t.on("data",n),t.on("error",()=>t.destroy())}function oa(){let t=cp(fp);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 un=[{name:"TTHEME_FIND_RATING",label:"rating",choices:Kn,multi:{read:Gr}},{name:"TTHEME_FIND_BLOCK",label:"block",choices:Ge,multi:{read:Lr,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"]},...oo()?[{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 wp=["fit","newest","score"];function sa(t){return wp.find((e)=>e===t)??"fit"}function bp(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var ca=12,$p=4,kp=150,ua=12,Ep=2,yp=150,vp=30,Mp=4000,Sp=8000,ha=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,Ip=process.platform==="win32"?"alt+v":"ctrl+v",aa=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",Fp=1280,fa=2,Np=3,Hp=8;function ci(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 hn(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return hn(t.errors[0]);if(t.cause)return hn(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 yo(t,e){return`${t}: ${hn(e)}`}function la(t){return t.width*t.height}function ga(t){return`${t.id}-${pa("sha1").update(t.preview).digest("hex").slice(0,8)}`}function Op(t){let e=t.lastIndexOf("\x1B");return e!==-1&&/^\[?[0-9;]*$/.test(t.slice(e+1))}function vo(t,e){try{return JSON.parse(wa(he(ve(t),e),"utf8"))}catch{return{}}}function Mo(t,e,n){lr(ve(t),{recursive:!0}),gr(he(ve(t),e),`${JSON.stringify(n)}
141
+ `)}class ba{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(un.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 $o;sent=new Map;placed=new Map;current;fetch;settle;partial;suggestTimer;suggesting;input="";typed="";grabber=new ro((t)=>this.write(t),(t)=>void this.got(t));featureWait;noticeTimer;peekTimer;peeked;attaching;probeWait;done;dirty=!1;unblock=!1;scratch=lp(he(dp(),"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:sa(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:Gr(this.setting("TTHEME_FIND_RATING")),block:Lr(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",unblocked:process.env.TTHEME_FIND_PROXY!==void 0,settings:un.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=ci(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:lt[this.tab-1]}get sites(){return this.site?[this.site]:lt}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??$p}get nextTabName(){let t=(this.tab+1)%(lt.length+1);return t===0?"all":lt[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 he(ve(t),"orig",`${e}.${n}`)}previewPath(t){return he(ve(t.site),"thumb",`${ga(t.post)}.${An(t.post.preview)}`)}tileOf(t,e){let{site:n,post:r}=t,i=oe(n,r.id),o=Wn(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===Yr?nh(r.source):r.artist,score:r.score,variants:e,origin:qi(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(),Eo(this.scratch,{recursive:!0,force:!0}),hu(),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(Eh)})}onData=(t)=>{this.input+=t.toString("utf8");for(let n=uo(this.input);n;n=uo(this.input))this.input=n.rest,this.probeWait?.(n.cell);if(this.probeWait)return;let e=uh(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),Op(this.typed)){this.partial=setTimeout(this.flushKeys,vp);return}this.flushKeys()};flushKeys=()=>{let t=kh(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!Tr(e,this.site??lt[0]);return Vr(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 — ${aa}`);return}this.pasted(t.text);return}await this.bring(()=>Xr(t.bytes,t.source))}notice(t,e=Mp){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 ch()}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 · ${Ip} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.draw()},Sp),this.draw()}async fromClipboard(){let t=this.view;if(no()){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 sh(he(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`could not read the clipboard: ${hn(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await eo(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`no picture on the clipboard — ${aa}`);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=Tr(e,this.site??lt[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=Vr(e).sort((i,o)=>Number(!ha.test(i))-Number(!ha.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)=>eo(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(hn(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=ih(i.bytes);rh(o,i.source);let s=this.origPath(Yr,o,i.ext);lr(si(s),{recursive:!0}),gr(s,i.bytes);let c=mp(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:pa("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],solo:void 0,family:0,smaller:[]},h={site:Yr,post:u},a=this.previewPath(h);lr(si(a),{recursive:!0}),gr(a,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let f=ci(`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(oe(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)=>Ee(i)>Ee(r)?i:r),e=Math.ceil((Ee(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<Ke.cols||this.rows<Ke.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}=De(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)%(lt.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(un[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=un.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let o=un[i];if(o)this.values.set(o.name,r.value)});let n=un.filter((r,i)=>this.setting(r.name)!==e[i]);if(n.length===0){this.draw();return}this.save(n),t.rating=Gr(this.setting("TTHEME_FIND_RATING")),t.block=Lr(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=sa(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=he(this.home,"ttheme","config.zsh");try{let n=cn(e)?wa(e,"utf8"):"";return gr(e,t.reduce((r,[i,o])=>Ru(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(!bp(e)){t.suggest=void 0;return}let n=[...new Map(dh(this.catalog.palettes,this.entry,e).map((i)=>[i.booru,{value:i.booru,count:0,palette:i.name}])).values()].slice(0,Np);t.suggest=n.length>0?n:void 0;let r=new AbortController;this.suggesting=r,this.suggestTimer=setTimeout(async()=>{try{let i=await du(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,Hp),t.pick=t.pick!==void 0&&t.pick<n.length?t.pick:void 0,this.draw()}}catch{}},kp)}async commit(t){let e=Tr(t,this.site??lt[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=lt.indexOf(t)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ci(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.draw();try{let i=await xi(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(oe(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{ma(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}=De(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?mh(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(Zi([...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=ci(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})=>[...Zi(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=yo(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&&$a()&&hn(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,yo(e.name,n)].filter(Boolean).join(" · "),this.offer(e,n)}wants(){let{perRow:t,rowsVis:e}=De(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+fa)*t}need(){let{perRow:t,rowsVis:e}=De(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=au(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{lu(e,await gu(e.map((n)=>n.md5),this.signal))}catch{}return t}async round(t){let e=lt.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<Pe;let h=t.last.get(c);for(let a of u){let f=h&&Vh(h.post,a)?h.set:`set:${c.site.key}:${a.id}`;h={post:a,set:f};let l=oe(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,...Ch(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?Rh(i):i;else{let c=ni(i,this.frame(),this.matched),u=c.slice(0,this.need());if(await this.looks(u),!this.live(t))return;s=[...ni(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(oe(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=ni(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=bo(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++,la(r.post)<=la(o.post))continue;for(let c of[...i,...bo(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(oe(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:ua},async()=>{while(e<t.length)await this.look(t[e++])}))}look(t){let e=oe(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<ca&&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<ca&&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=Wn(e);if(!cu(t,e,this.view.rating)||su(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=vo(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 mu(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=lt.find((n)=>n.key===t);if(e)Mo(e,"probes.json",this.probes(e))}this.unsaved.clear()}admit(t){let{site:e,post:n}=t,r=this.board,i=oe(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)=>zh(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=_c(this.home),r=vo(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 xi(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);Mo(t,"owners.json",r);let c=uu(s);return this.owners.set(t.key,c),c}async cached(t,e,n,r){if(cn(e))return gp(e).size;let i=this.inflight.get(e);if(i)return i;let o=(async()=>{let s=await pu(t,n,this.signal,r);return lr(si(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<ua&&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=At.cols*this.cell.w,i=At.rows*this.cell.h,o=he(ve(e),"tile",`${ga(n)}-${r}x${i}.png`);if(!cn(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(oe(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),yp),this.draw()}async load(t){let e=this.view,n=this.posts.get(t.key),r=n&&Wn(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(!cn(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&&oo()&&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&&ph(f.clear))h.using="cut";else Eo(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=yo(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=he(ve(t),"cut",`${e}.png`);if(cn(i))return i;try{return lr(si(i),{recursive:!0}),await wh(n,i,r),i}catch{Eo(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>=Ep)return;let n=t.tiles[e],r=n&&this.posts.get(n.key),i=r&&Wn(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,Fp),o=Math.max(1,Math.round(r*i/n)),s=he(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&&cn(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=vo(n.site,"owners.json");r[n.id]=this.posts.get(n.key)?.post.owner??"",Mo(n.site,"owners.json",r),sn(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=Oh(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+=yh(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+=vh(r),this.placed.set(r.id,i)}for(let r of this.sent.keys())if(!n.has(r))e+=Mh(r),this.sent.delete(r),this.placed.delete(r);this.write(`${e}\x1B[?2026l`)}}function $a(){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 da(){if(!$a())return process.stderr.write(`unblock needs node 22.21 or newer — this is ${process.versions.node}
142
+ `),1;let t=await oa(),e=ma(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,ou()].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 ka(t){if(process.env.TTHEME_FIND_UNBLOCK==="1"&&!process.env.TTHEME_FIND_PROXY)return da();let e=Rt(),n=Ut(e),r=Dr(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new ba(e,n,r,r.booru??""),o=await i.run(),s=i.unblock?await da():o;if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
143
+ `),0;return s}function Ea(t,e){let n=Rt();if(Dr(Ut(n).palettes,t),e==="next"||e==="prev"){let{key:r,at:i,of:o}=Zc(n,t,e==="next"?1:-1);return sn(n),process.stderr.write(`background · ${t} ${i}/${o} ${r}
144
+ `),0}if(e==="drop"){let{key:r,left:i}=qc(n,t);return sn(n),process.stderr.write(`background · ${t} removed ${r??"the picture"} · ${i} left
145
+ `),0}if(e==="tuned")return sn(n),0;throw Error(`unknown image action ${e} — next, prev, drop or tuned`)}import{execFileSync as j0,spawnSync as R0}from"node:child_process";import{chmodSync as P0,copyFileSync as G0,existsSync as qt,mkdirSync as Zo,readdirSync as L0,readFileSync as wn,rmSync as yf,writeFileSync as T0}from"node:fs";import{homedir as U0}from"node:os";import{dirname as pn,join as $t}from"node:path";import{styleText as jo}from"node:util";import{stdout as Aa,stdin as _p}from"node:process";import Xp from"node:readline";var ya=(()=>{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}})(),va=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Ma=(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 jp=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Rp=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Sa=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Pp=/\t{1,1000}/y,Ia=/[\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,Gp=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Lp=/\p{M}+/gu,Tp={limit:1/0,ellipsis:""},Fa=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",o=e?.ellipsisWidth??(i?Fa(i,Tp,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=[[Gp,f],[jp,0],[Rp,c],[Pp,u],[Ia,h],[Sa,l]],b=0,g=0,$=t.length,y=0,F=!1,E=$,M=Math.max(0,r-o),p=0,R=0,k=0,j=0;t:while(!0){if(R>p||g>=$&&g>b){let H=t.slice(p,R)||t.slice(b,g);y=0;for(let L of H.replaceAll(Lp,"")){let P=L.codePointAt(0)||0;if(va(P))j=2;else if(Ma(P))j=l;else j=f;if(k+j>M)E=Math.min(E,Math.max(p,b)+y);if(k+j>r){F=!0;break t}y+=L.length,k+=j}p=R=0}if(g>=$)break t;for(let H=0,L=m.length;H<L;H++){let[P,X]=m[H];if(P.lastIndex=g,P.test(t)){if(y=P===Sa?ya(t.slice(g,P.lastIndex)):P===Ia?1:P.lastIndex-g,j=y*X,k+j>M)E=Math.min(E,g+Math.floor((M-k)/X));if(k+j>r){F=!0;break t}k+=j,p=b,R=g,g=b=P.lastIndex;continue t}}g+=1}return{width:F?M:k,index:F?E:$,truncated:F,ellipsed:F&&r>=o}},Na=Fa;var Up={limit:1/0,ellipsis:"",ellipsisWidth:0},Kp=(t,e={})=>{return Na(t,Up,e).width},Kt=Kp;var ui="\x1B",Pa="›",Ap=39,Io="\x07",Ga="[",Jp="]",La="m",Fo=`${Jp}8;;`,Ha=new RegExp(`(?:\\${Ga}(?<code>\\d+)m|\\${Fo}(?<uri>.*)${Io})`,"y"),Oa=(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},ja=(t)=>`${ui}${Ga}${t}${La}`,Ra=(t)=>`${ui}${Fo}${t}${Io}`,So=(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===ui||f===Pa)i=!0,o=e.startsWith(Fo,a+1);if(i){if(o){if(f===Io)i=!1,o=!1}else if(f===La)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()},Wp=(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("")},Qp=(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 m=Kt(l);if(n.hard&&m>e){let b=e-u,g=1+Math.floor((m-b-1)/e);if(Math.floor((m-1)/e)<g)c.push("");So(c,l,e),u=Kt(c.at(-1)??"");continue}if(u+m>e&&u&&m){if(n.wordWrap===!1&&u<e){So(c,l,e),u=Kt(c.at(-1)??"");continue}c.push(""),u=0}if(u+m>e&&n.wordWrap===!1){So(c,l,e),u=Kt(c.at(-1)??"");continue}c[c.length-1]+=l,u+=m}if(n.trim!==!1)c=c.map((f)=>Wp(f));let h=c.join(`
146
+ `),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===ui||l===Pa){Ha.lastIndex=f+1;let b=Ha.exec(h)?.groups;if(b?.code!==void 0){let g=Number.parseFloat(b.code);i=g===Ap?void 0:g}else if(b?.uri!==void 0)o=b.uri.length===0?void 0:b.uri}if(h[f+1]===`
147
+ `){if(o)r+=Ra("");let m=i?Oa(i):void 0;if(i&&m)r+=ja(m)}else if(l===`
148
+ `){if(i&&Oa(i))r+=ja(i);if(o)r+=Ra(o)}}return r},Zp=/\r?\n/;function Ie(t,e,n){return String(t).normalize().split(Zp).map((r)=>Qp(r,e,n)).join(`
149
+ `)}var Zt=vr(Ho(),1);function an(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?an(o,e<0?-1:1,n):o}function hi(t,e,n,r){let i=r.split(`
150
+ `),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 Cp=["up","down","left","right","space","enter","cancel"],Vp=["January","February","March","April","May","June","July","August","September","October","November","December"],Wt={actions:new Set(Cp),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:[...Vp],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 Ja(t,e){if(typeof t=="string")return Wt.aliases.get(t)===e;for(let n of t)if(n!==void 0&&Ja(n,e))return!0;return!1}function Yp(t,e){if(t===e)return;let n=t.split(`
151
+ `),r=e.split(`
152
+ `),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 Uk=globalThis.process.platform.startsWith("win"),Ro=Symbol("clack:cancel");function Fe(t){return t===Ro}function ai(t,e){let n=t;n.isTTY&&n.setRawMode(e)}var li=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,Go=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function dr(t,e,n,r=n,i=n,o){let s=li(t??Aa);return Ie(e,s-n.length,{hard:!0,trim:!1}).split(`
153
+ `).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(`
154
+ `)}function Wa(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 me{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=_p,output:r=Aa,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(Ro);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=Xp.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),ai(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),ai(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Zt.cursor.show),this.output.off("resize",this.render),ai(this.input,!1),t(Ro)})})}_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&&Wt.aliases.has(e.name)&&this.emit("cursor",Wt.aliases.get(e.name)),Wt.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=Wa(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")}Ja([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
+ `),ai(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=Ie(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
156
+ `).length-1;this.output.write(Zt.cursor.move(-999,t*-1))}render(){let t=Ie(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=Yp(this._prevFrame,t),n=Go(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(`
157
+ `);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(`
159
158
  `).slice(o);this.output.write(s.join(`
160
- `)),this._prevFrame=t;return}}this.output.write(Wt.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function mp(t,n){if(t===void 0||n.length===0)return 0;let e=n.findIndex((r)=>r.value===t);return e!==-1?e:0}function pp(t,n){return(n.label??String(n.value)).toLowerCase().includes(t.toLowerCase())}function wp(t,n){if(n)return t?n:n[0]}var $p=class extends pn{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#n=0;#i="";#t;#o;#c;get cursor(){return this.#n}get userInputWithCursor(){if(!this.userInput)return co(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let n=this.userInput.slice(0,this.cursor),e=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${n}${co("inverse",e)}${r}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(n){super(n),this.#o=n.options,this.#c=n.placeholder;let e=this.options;this.filteredOptions=[...e],this.multiple=n.multiple===!0,this.#t=typeof n.options=="function"?n.filter:n.filter??pp;let r;if(n.initialValue&&Array.isArray(n.initialValue)?this.multiple?r=n.initialValue:r=n.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let o=e.findIndex((s)=>s.value===i);o!==-1&&(this.toggleSelected(i),this.#n=o)}this.focusedValue=this.options[this.#n]?.value,this.on("key",(i,o)=>this.#e(i,o)),this.on("userInput",(i)=>this.#r(i))}_isActionKey(n,e){return n==="\t"||this.multiple&&this.isNavigating&&e.name==="space"&&n!==void 0&&n!==""}#e(n,e){let r=e.name==="up",i=e.name==="down",o=e.name==="return",s=this.userInput===""||this.userInput==="\t",c=this.#c,u=this.options,h=c!==void 0&&c!==""&&u.some((f)=>!f.disabled&&(this.#t?this.#t(c,f):!0));if(e.name==="tab"&&s&&h){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(c,!0),this.isNavigating=!1;return}r||i?(this.#n=te(this.#n,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#n]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=wp(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(e.name==="tab"||this.isNavigating&&e.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(n){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(n)?this.selectedValues=this.selectedValues.filter((e)=>e!==n):this.selectedValues=[...this.selectedValues,n]:this.selectedValues=[n])}#r(n){if(n!==this.#i){this.#i=n;let e=this.options;n&&this.#t?this.filteredOptions=e.filter((o)=>this.#t?.(n,o)):this.filteredOptions=[...e];let r=mp(this.focusedValue,this.filteredOptions);this.#n=te(r,0,this.filteredOptions);let i=this.filteredOptions[this.#n];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class ao extends pn{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",(n)=>{this.output.write(Wt.cursor.move(0,-1)),this.value=n,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var bp={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function tf(t){return[...t].map((n)=>bp[n])}function kp(t){let n=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),e=[],r="/";for(let i of n)i.type==="literal"?r=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&e.push({type:i.type,len:i.type==="year"?4:2});return{segments:e,separator:r}}function so(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function Qr(t){return{year:so(t.year),month:so(t.month),day:so(t.day)}}function ho(t,n){return new Date(t||2001,n||1,0).getDate()}function sf(t){let{year:n,month:e,day:r}=Qr(t);if(!n||n<0||n>9999||!e||e<1||e>12||!r||r<1)return;let i=new Date(Date.UTC(n,e-1,r));if(!(i.getUTCFullYear()!==n||i.getUTCMonth()!==e-1||i.getUTCDate()!==r))return{year:n,month:e,day:r}}function nf(t){let n=sf(t);return n?new Date(Date.UTC(n.year,n.month-1,n.day)):void 0}function Ep(t,n,e,r){let i=e?{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.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&&n.year===i.year?i.month:1,max:o&&n.year===o.year?o.month:12}:{min:i&&n.year===i.year&&n.month===i.month?i.day:1,max:o&&n.year===o.year&&n.month===o.month?o.day:ho(n.year,n.month)}}class cf extends pn{#n;#i;#t;#o;#c;#e={segmentIndex:0,positionInSegment:0};#r=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#e}}get segmentValues(){return{...this.#t}}get segments(){return this.#n}get separator(){return this.#i}get formattedValue(){return this.#a(this.#t)}#a(t){return this.#n.map((n)=>t[n.type]).join(this.#i)}#u(){this._setUserInput(this.#a(this.#t)),this._setValue(nf(this.#t)??void 0)}constructor(t){let n=t.format?{segments:tf(t.format),separator:t.separator??"/"}:kp(t.locale),e=t.separator??n.separator,r=t.format?tf(t.format):n.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(e);super({...t,initialUserInput:s},!1),this.#n=r,this.#i=e,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.#e.segmentIndex,this.#n.length-1)),n=this.#n[t];if(n)return this.#e.positionInSegment=Math.max(0,Math.min(this.#e.positionInSegment,n.len-1)),{segment:n,index:t}}#f(t){this.inlineError="",this.#s=null;let n=this.#h();n&&(this.#e.segmentIndex=Math.max(0,Math.min(this.#n.length-1,n.index+t)),this.#e.positionInSegment=0,this.#r=!0)}#g(t){let n=this.#h();if(!n)return;let{segment:e}=n,r=this.#t[e.type],i=!r||r.replace(/_/g,"")==="",o=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,s=Ep(e.type,Qr(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,[e.type]:c.toString().padStart(e.len,"0")},this.#r=!0,this.#s=null,this.#u()}#d(t){if(t)switch(t){case"right":return this.#f(1);case"left":return this.#f(-1);case"up":return this.#g(1);case"down":return this.#g(-1)}}#m(t,n){if(n?.name==="backspace"||n?.sequence===""||n?.sequence==="\b"||t===""||t==="\b"){this.inlineError="";let e=this.#h();if(!e)return;if(!this.#t[e.segment.type].replace(/_/g,"")){this.#f(-1);return}this.#t[e.segment.type]="_".repeat(e.segment.len),this.#r=!0,this.#e.positionInSegment=0,this.#u();return}if(n?.name==="tab"){this.inlineError="";let e=this.#h();if(!e)return;let r=n.shift?-1:1,i=e.index+r;i>=0&&i<this.#n.length&&(this.#e.segmentIndex=i,this.#e.positionInSegment=0,this.#r=!0);return}if(t&&/^[0-9]$/.test(t)){let e=this.#h();if(!e)return;let{segment:r}=e,i=!this.#t[r.type].replace(/_/g,"");if(this.#r&&this.#s!==null&&!i){let g=this.#s+t,d={...this.#t,[r.type]:g},p=this.#l(d,r);if(p){this.inlineError=p,this.#s=null,this.#r=!1;return}this.inlineError="",this.#t[r.type]=g,this.#s=null,this.#r=!1,this.#u(),e.index<this.#n.length-1&&(this.#e.segmentIndex=e.index+1,this.#e.positionInSegment=0,this.#r=!0);return}this.#r&&!i&&(this.#t[r.type]="_".repeat(r.len),this.#e.positionInSegment=0),this.#r=!1,this.#s=null;let o=this.#t[r.type],s=o.indexOf("_"),c=s>=0?s:Math.min(this.#e.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 g=Number.parseInt(t,10);u=`0${t}`,h=g<=(r.type==="month"?1:2)}if(r.type==="year"&&(u=(o.replace(/_/g,"")+t).padStart(r.len,"_")),!u.includes("_")){let g={...this.#t,[r.type]:u},d=this.#l(g,r);if(d){this.inlineError=d;return}}this.inlineError="",this.#t[r.type]=u;let f=u.includes("_")?void 0:sf(this.#t);if(f){let{year:g,month:d}=f,p=ho(g,d);this.#t={year:String(Math.max(0,Math.min(9999,g))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,d))).padStart(2,"0"),day:String(Math.max(1,Math.min(p,f.day))).padStart(2,"0")}}this.#u();let a=u.indexOf("_");h?(this.#r=!0,this.#s=t):a>=0?this.#e.positionInSegment=a:s>=0&&e.index<this.#n.length-1?(this.#e.segmentIndex=e.index+1,this.#e.positionInSegment=0,this.#r=!0):this.#e.positionInSegment=Math.min(c+1,r.len-1)}}#l(t,n){let{month:e,day:r}=Qr(t);if(n.type==="month"&&(e<0||e>12))return At.date.messages.invalidMonth;if(n.type==="day"&&(r<0||r>31))return At.date.messages.invalidDay(31,"any month")}#p(t){let{year:n,month:e,day:r}=Qr(this.#t);if(n&&e&&r){let i=ho(n,e);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=nf(this.#t)??t.defaultValue??void 0}}var Mp=class extends pn{options;cursor=0;#n;getGroupItems(n){return this.options.filter((e)=>e.group===n)}isGroupSelected(n){let e=this.getGroupItems(n),r=this.value;return r===void 0?!1:e.every((i)=>r.includes(i.value))}toggleValue(){let n=this.options[this.cursor];if(n!==void 0)if(this.value===void 0&&(this.value=[]),n.group===!0){let e=n.value,r=this.getGroupItems(e);this.isGroupSelected(e)?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 e=this.value.includes(n.value);this.value=e?this.value.filter((r)=>r!==n.value):[...this.value,n.value]}}constructor(n){super(n,!1);let{options:e}=n;this.#n=n.selectableGroups!==!1,this.options=Object.entries(e).flatMap(([r,i])=>[{value:r,group:!0,label:r},...i.map((o)=>({...o,group:r}))]),this.value=[...n.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:r})=>r===n.cursorAt),this.#n?0:1),this.on("cursor",(r)=>{switch(r){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},vp=new Set(["up","down","left","right"]);class uf extends pn{#n=!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 n=t.slice(0,this.cursor),e=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return e===`
161
- `?`${n}█
162
- ${r}`:`${n}${co("inverse",e)}${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 n=this.value??"";switch(t){case"up":this._cursor=Tr(this._cursor,0,-1,n);return;case"down":this._cursor=Tr(this._cursor,0,1,n);return;case"left":this._cursor=Tr(this._cursor,-1,0,n);return;case"right":this._cursor=Tr(this._cursor,1,0,n);return}}_shouldSubmit(t,n){if(this.#i)return this.focused==="submit"?!0:(this.#t(`
163
- `),this._cursor++,!1);let e=this.#n;return this.#n=!0,e&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
159
+ `)),this._prevFrame=t;return}}this.output.write(Zt.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function zp(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 Bp(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function Dp(t,e){if(e)return t?e:e[0]}var t0=class extends me{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#t;#o;#c;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return jo(["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}${jo("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??Bp;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=an(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=Dp(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=zp(this.focusedValue,this.filteredOptions);this.#e=an(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 Lo extends me{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 e0={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function Ua(t){return[...t].map((e)=>e0[e])}function n0(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 Oo(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function fi(t){return{year:Oo(t.year),month:Oo(t.month),day:Oo(t.day)}}function Po(t,e){return new Date(t||2001,e||1,0).getDate()}function Qa(t){let{year:e,month:n,day:r}=fi(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 Ka(t){let e=Qa(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function r0(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:Po(e.year,e.month)}}class Za extends me{#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(Ka(this.#t)??void 0)}constructor(t){let e=t.format?{segments:Ua(t.format),separator:t.separator??"/"}:n0(t.locale),n=t.separator??e.separator,r=t.format?Ua(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=r0(n.type,fi(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:Qa(this.#t);if(a){let{year:l,month:m}=a,b=Po(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}=fi(t);if(e.type==="month"&&(n<0||n>12))return Wt.date.messages.invalidMonth;if(e.type==="day"&&(r<0||r>31))return Wt.date.messages.invalidDay(31,"any month")}#p(t){let{year:e,month:n,day:r}=fi(this.#t);if(e&&n&&r){let i=Po(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=Ka(this.#t)??t.defaultValue??void 0}}var i0=class extends me{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}})}},o0=new Set(["up","down","left","right"]);class qa extends me{#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
+ `?`${e}█
161
+ ${r}`:`${e}${jo("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=hi(this._cursor,0,-1,e);return;case"down":this._cursor=hi(this._cursor,0,1,e);return;case"left":this._cursor=hi(this._cursor,-1,0,e);return;case"right":this._cursor=hi(this._cursor,1,0,e);return}}_shouldSubmit(t,e){if(this.#i)return this.focused==="submit"?!0:(this.#t(`
162
+ `),this._cursor++,!1);let n=this.#e;return this.#e=!0,n&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
164
163
  `&&(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 n=t.initialUserInput??t.initialValue;super({...t,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#i=t.showSubmit??!1,this.on("key",(e,r)=>{if(r?.name&&vp.has(r.name)){this.#n=!1,this.#o(r.name);return}if(e==="\t"&&this.#i){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#n=!1,r?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(r?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}e&&(this.#i&&this.focused==="submit"&&(this.focused="editor"),this.#t(e??""),this._cursor++)}}),this.on("userInput",(e)=>{this._setValue(e)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}class go extends pn{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,n=this.value!==void 0&&this.value.length===t.length;this.value=n?[]:t.map((e)=>e.value)}toggleInvert(){let t=this.value;if(!t)return;let n=this._enabledOptions.filter((e)=>!t.includes(e.value));this.value=n.map((e)=>e.value)}toggleValue(){this.value===void 0&&(this.value=[]);let t=this.value.includes(this._value);this.value=t?this.value.filter((n)=>n!==this._value):[...this.value,this._value]}constructor(t){super(t,!1),this.options=t.options,this.value=[...t.initialValues??[]];let n=Math.max(this.options.findIndex(({value:e})=>e===t.cursorAt),0);this.cursor=this.options[n]?.disabled?te(n,1,this.options):n,this.on("key",(e,r)=>{r.name==="a"&&this.toggleAll(),r.name==="i"&&this.toggleInvert()}),this.on("cursor",(e)=>{switch(e){case"left":case"up":this.cursor=te(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=te(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}import{styleText as S,stripVTControlCharacters as Ab}from"node:util";import Vt from"node:process";var pf=nr(oo(),1);function yp(){if(Vt.platform!=="win32")return Vt.env.TERM!=="linux";return Boolean(Vt.env.CI)||Boolean(Vt.env.WT_SESSION)||Boolean(Vt.env.TERMINUS_SUBLIME)||Vt.env.ConEmuTask==="{cmd::Cmder}"||Vt.env.TERM_PROGRAM==="Terminus-Sublime"||Vt.env.TERM_PROGRAM==="vscode"||Vt.env.TERM==="xterm-256color"||Vt.env.TERM==="alacritty"||Vt.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Sp=yp();var lt=(t,n)=>Sp?t:n,Fp=lt("◆","*"),Ip=lt("■","x"),Np=lt("▲","x"),wf=lt("◇","o"),Op=lt("┌","T"),yt=lt("│","|"),ee=lt("└","—"),Qb=lt("┐","T"),Zb=lt("┘","—"),hf=lt("●",">"),ff=lt("○"," "),Hp=lt("◻","[•]"),af=lt("◼","[+]"),gf=lt("◻","[ ]"),qb=lt("▪","•"),lf=lt("─","-"),jp=lt("╮","+"),Rp=lt("├","+"),Gp=lt("╯","+"),Lp=lt("╰","+"),Xb=lt("╭","+"),_b=lt("●","•"),Cb=lt("◆","*"),zb=lt("▲","!"),Yb=lt("■","x"),$f=(t)=>{switch(t){case"initial":case"active":return S("cyan",Fp);case"cancel":return S("red",Ip);case"error":return S("yellow",Np);case"submit":return S("green",wf)}},Pp=(t)=>{switch(t){case"initial":case"active":return S("cyan",yt);case"cancel":return S("red",yt);case"error":return S("yellow",yt);case"submit":return S("green",yt)}};function Kp(t,n){let e=[`${n?`${S("cyan",yt)} `:""}${t.join(" • ")}`];return n&&e.push(S("cyan",ee)),e}var df=(t,n,e,r,i,o=!1)=>{let s=n,c=0;if(o)for(let u=r-1;u>=e;u--){let h=t[u];if(h&&(s-=h.length),c++,s<=i)break}else for(let u=e;u<r;u++){let h=t[u];if(h&&(s-=h.length),c++,s<=i)break}return{lineCount:s,removals:c}},mf=({cursor:t,options:n,style:e,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let c=Zr(r)-o,u=fo(r),h=S("dim","..."),f=Math.max(u-s,0),a=Math.max(Math.min(i,f),5),g=0;t>=a-3&&(g=Math.max(Math.min(t-a+3,n.length-a),0));let d=a<n.length&&g>0,p=a<n.length&&g+a<n.length,l=Math.min(g+a,n.length),k=[],v=0;d&&v++,p&&v++;let I=g+(d?1:0),E=l-(p?1:0);for(let $=I;$<E;$++){let H=n[$],b=H?e(H,$===t):"",R=Fn(b,c,{hard:!0,trim:!1}).split(`
166
- `);k.push(R),v+=R.length}if(v>f){let $=0,H=0,b=v,R=t-I,O=f,P=()=>df(k,b,0,R,O),G=()=>df(k,b,R+1,k.length,O,!0);d?({lineCount:b,removals:$}=P(),b>O&&(p||(O-=1),{lineCount:b,removals:H}=G())):(p||(O-=1),{lineCount:b,removals:H}=G(),b>O&&(O-=1,{lineCount:b,removals:$}=P())),$>0&&(d=!0,k.splice(0,$)),H>0&&(p=!0,k.splice(k.length-H,H))}let y=[];d&&y.push(h);for(let $ of k)for(let H of $)y.push(H);return p&&y.push(h),y};var lo=(t)=>{let n=t.active??"Yes",e=t.inactive??"No";return new ao({active:n,inactive:e,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let r=t.withGuide??At.withGuide,i=`${$f(this.state)} `,o=r?`${S("gray",yt)} `:"",s=ze(t.output,t.message,o,i),c=`${r?`${S("gray",yt)}
164
+ `),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&&o0.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 To extends me{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?an(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=an(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=an(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}import{styleText as S,stripVTControlCharacters as Xk}from"node:util";import Vt from"node:process";var Ba=vr(Ho(),1);function s0(){if(Vt.platform!=="win32")return Vt.env.TERM!=="linux";return Boolean(Vt.env.CI)||Boolean(Vt.env.WT_SESSION)||Boolean(Vt.env.TERMINUS_SUBLIME)||Vt.env.ConEmuTask==="{cmd::Cmder}"||Vt.env.TERM_PROGRAM==="Terminus-Sublime"||Vt.env.TERM_PROGRAM==="vscode"||Vt.env.TERM==="xterm-256color"||Vt.env.TERM==="alacritty"||Vt.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var c0=s0();var gt=(t,e)=>c0?t:e,u0=gt("◆","*"),h0=gt("■","x"),a0=gt("▲","x"),Da=gt("◇","o"),f0=gt("┌","T"),Mt=gt("│","|"),fn=gt("└","—"),zk=gt("┐","T"),Bk=gt("┘","—"),xa=gt("●",">"),_a=gt("○"," "),l0=gt("◻","[•]"),Xa=gt("◼","[+]"),Ca=gt("◻","[ ]"),Dk=gt("▪","•"),Va=gt("─","-"),g0=gt("╮","+"),d0=gt("├","+"),m0=gt("╯","+"),p0=gt("╰","+"),t1=gt("╭","+"),e1=gt("●","•"),n1=gt("◆","*"),r1=gt("▲","!"),i1=gt("■","x"),tf=(t)=>{switch(t){case"initial":case"active":return S("cyan",u0);case"cancel":return S("red",h0);case"error":return S("yellow",a0);case"submit":return S("green",Da)}},w0=(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 b0(t,e){let n=[`${e?`${S("cyan",Mt)} `:""}${t.join(" • ")}`];return e&&n.push(S("cyan",fn)),n}var Ya=(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}},za=({cursor:t,options:e,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let c=li(r)-o,u=Go(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,g=Math.min(l+f,e.length),$=[],y=0;m&&y++,b&&y++;let F=l+(m?1:0),E=g-(b?1:0);for(let p=F;p<E;p++){let R=e[p],k=R?n(R,p===t):"",j=Ie(k,c,{hard:!0,trim:!1}).split(`
165
+ `);$.push(j),y+=j.length}if(y>a){let p=0,R=0,k=y,j=t-F,H=a,L=()=>Ya($,k,0,j,H),P=()=>Ya($,k,j+1,$.length,H,!0);m?({lineCount:k,removals:p}=L(),k>H&&(b||(H-=1),{lineCount:k,removals:R}=P())):(b||(H-=1),{lineCount:k,removals:R}=P(),k>H&&(H-=1,{lineCount:k,removals:p}=L())),p>0&&(m=!0,$.splice(0,p)),R>0&&(b=!0,$.splice($.length-R,R))}let M=[];m&&M.push(h);for(let p of $)for(let R of p)M.push(R);return b&&M.push(h),M};var pr=(t)=>{let e=t.active??"Yes",n=t.inactive??"No";return new Lo({active:e,inactive:n,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let r=t.withGuide??Wt.withGuide,i=`${tf(this.state)} `,o=r?`${S("gray",Mt)} `:"",s=dr(t.output,t.message,o,i),c=`${r?`${S("gray",Mt)}
167
166
  `:""}${s}
168
- `,u=this.value?n:e;switch(this.state){case"submit":{let h=r?`${S("gray",yt)} `:"";return`${c}${h}${S("dim",u)}`}case"cancel":{let h=r?`${S("gray",yt)} `:"";return`${c}${h}${S(["strikethrough","dim"],u)}${r?`
169
- ${S("gray",yt)}`:""}`}default:{let h=r?`${S("cyan",yt)} `:"",f=r?S("cyan",ee):"";return`${c}${h}${this.value?`${S("green",hf)} ${n}`:`${S("dim",ff)} ${S("dim",n)}`}${t.vertical?r?`
170
- ${S("cyan",yt)} `:`
171
- `:` ${S("dim","/")} `}${this.value?`${S("dim",ff)} ${S("dim",e)}`:`${S("green",hf)} ${e}`}
172
- ${f}
173
- `}}}}).prompt()};var Jp=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Space:")} select`,`${S("dim","Enter:")} confirm`],Ye=(t,n)=>t.split(`
174
- `).map((e)=>n(e)).join(`
175
- `),bf=(t)=>{let n=(i,o)=>{let s=i.label??String(i.value);return o==="disabled"?`${S("gray",gf)} ${Ye(s,(c)=>S(["strikethrough","gray"],c))}${i.hint?` ${S("dim",`(${i.hint??"disabled"})`)}`:""}`:o==="active"?`${S("cyan",Hp)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="selected"?`${S("green",af)} ${Ye(s,(c)=>S("dim",c))}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="cancelled"?`${Ye(s,(c)=>S(["strikethrough","dim"],c))}`:o==="active-selected"?`${S("green",af)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="submitted"?`${Ye(s,(c)=>S("dim",c))}`:`${S("dim",gf)} ${Ye(s,(c)=>S("dim",c))}`},e=t.required??!0,r=t.showInstructions??!0;return new go({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:e,cursorAt:t.cursorAt,validate(i){if(e&&(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??At.withGuide,o=ze(t.output,t.message,i?`${Pp(this.state)} `:"",`${$f(this.state)} `),s=`${i?`${S("gray",yt)}
167
+ `,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?`
168
+ ${S("gray",Mt)}`:""}`}default:{let h=r?`${S("cyan",Mt)} `:"",a=r?S("cyan",fn):"";return`${c}${h}${this.value?`${S("green",xa)} ${e}`:`${S("dim",_a)} ${S("dim",e)}`}${t.vertical?r?`
169
+ ${S("cyan",Mt)} `:`
170
+ `:` ${S("dim","/")} `}${this.value?`${S("dim",_a)} ${S("dim",n)}`:`${S("green",xa)} ${n}`}
171
+ ${a}
172
+ `}}}}).prompt()};var $0=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Space:")} select`,`${S("dim","Enter:")} confirm`],mr=(t,e)=>t.split(`
173
+ `).map((n)=>e(n)).join(`
174
+ `),ef=(t)=>{let e=(i,o)=>{let s=i.label??String(i.value);return o==="disabled"?`${S("gray",Ca)} ${mr(s,(c)=>S(["strikethrough","gray"],c))}${i.hint?` ${S("dim",`(${i.hint??"disabled"})`)}`:""}`:o==="active"?`${S("cyan",l0)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="selected"?`${S("green",Xa)} ${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",Xa)} ${s}${i.hint?` ${S("dim",`(${i.hint})`)}`:""}`:o==="submitted"?`${mr(s,(c)=>S("dim",c))}`:`${S("dim",Ca)} ${mr(s,(c)=>S("dim",c))}`},n=t.required??!0,r=t.showInstructions??!0;return new To({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.
175
+ ${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??Wt.withGuide,o=dr(t.output,t.message,i?`${w0(this.state)} `:"",`${tf(this.state)} `),s=`${i?`${S("gray",Mt)}
177
176
  `:""}${o}
178
- `,c=this.value??[],u=(h,f)=>{if(h.disabled)return n(h,"disabled");let a=c.includes(h.value);return f&&a?n(h,"active-selected"):a?n(h,"selected"):n(h,f?"active":"inactive")};switch(this.state){case"submit":{let h=this.options.filter(({value:a})=>c.includes(a)).map((a)=>n(a,"submitted")).join(S("dim",", "))||S("dim","none"),f=ze(t.output,h,i?`${S("gray",yt)} `:"");return`${s}${f}`}case"cancel":{let h=this.options.filter(({value:a})=>c.includes(a)).map((a)=>n(a,"cancelled")).join(S("dim",", "));if(h.trim()==="")return`${s}${S("gray",yt)}`;let f=ze(t.output,h,i?`${S("gray",yt)} `:"");return`${s}${f}${i?`
179
- ${S("gray",yt)}`:""}`}case"error":{let h=i?`${S("yellow",yt)} `:"",f=this.error.split(`
180
- `).map((d,p)=>p===0?`${i?`${S("yellow",ee)} `:""}${S("yellow",d)}`:` ${d}`).join(`
181
- `),a=s.split(`
182
- `).length,g=f.split(`
183
- `).length+1;return`${s}${h}${mf({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:a+g,style:u}).join(`
177
+ `,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?`
178
+ ${S("gray",Mt)}`:""}`}case"error":{let h=i?`${S("yellow",Mt)} `:"",a=this.error.split(`
179
+ `).map((m,b)=>b===0?`${i?`${S("yellow",fn)} `:""}${S("yellow",m)}`:` ${m}`).join(`
180
+ `),f=s.split(`
181
+ `).length,l=a.split(`
182
+ `).length+1;return`${s}${h}${za({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:f+l,style:u}).join(`
184
183
  ${h}`)}
185
- ${f}
186
- `}default:{let h=i?`${S("cyan",yt)} `:"",f=s.split(`
187
- `).length,a=r?Kp(Jp,i):i?[S("cyan",ee)]:[],g=a.join(`
188
- `),d=a.length+1;return`${s}${h}${mf({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:f+d,style:u}).join(`
184
+ ${a}
185
+ `}default:{let h=i?`${S("cyan",Mt)} `:"",a=s.split(`
186
+ `).length,f=r?b0($0,i):i?[S("cyan",fn)]:[],l=f.join(`
187
+ `),m=f.length+1;return`${s}${h}${za({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:h.length,rowPadding:a+m,style:u}).join(`
189
188
  ${h}`)}
190
- ${g}
191
- `}}}}).prompt()};var qr=(t="",n)=>{let e=n?.output??process.stdout,r=n?.withGuide??At.withGuide?`${S("gray",ee)} `:"";e.write(`${r}${S("red",t)}
189
+ ${l}
190
+ `}}}}).prompt()};var ln=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${S("gray",fn)} `:"";n.write(`${r}${S("red",t)}
192
191
 
193
- `)},kf=(t="",n)=>{let e=n?.output??process.stdout,r=n?.withGuide??At.withGuide?`${S("gray",Op)} `:"";e.write(`${r}${t}
194
- `)},Ef=(t="",n)=>{let e=n?.output??process.stdout,r=n?.withGuide??At.withGuide?`${S("gray",yt)}
195
- ${S("gray",ee)} `:"";e.write(`${r}${t}
192
+ `)},gi=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${S("gray",f0)} `:"";n.write(`${r}${t}
193
+ `)},nf=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${S("gray",Mt)}
194
+ ${S("gray",fn)} `:"";n.write(`${r}${t}
196
195
 
197
- `)};var Ap=(t)=>t,Up=(t,n,e)=>{let r={hard:!0,trim:!1},i=Fn(t,n,r).split(`
198
- `),o=i.reduce((u,h)=>Math.max(Kt(h),u),0),s=i.map(e).reduce((u,h)=>Math.max(Kt(h),u),0),c=n-(s-o);return Fn(t,c,r)},Xr=(t="",n="",e)=>{let r=e?.output??Vt.stdout,i=e?.withGuide??At.withGuide,o=e?.format??Ap,s=["",...Up(t,Zr(r)-6,o).split(`
199
- `).map(o),""],c=Kt(n),u=Math.max(s.reduce((g,d)=>{let p=Kt(d);return p>g?p:g},0),c)+2,h=s.map((g)=>`${S("gray",yt)} ${g}${" ".repeat(u-Kt(g))}${S("gray",yt)}`).join(`
200
- `),f=i?`${S("gray",yt)}
201
- `:"",a=i?Rp:Lp;r.write(`${f}${S("green",wf)} ${S("reset",n)} ${S("gray",lf.repeat(Math.max(u-c-1,1))+jp)}
196
+ `)};var k0=(t)=>t,E0=(t,e,n)=>{let r={hard:!0,trim:!1},i=Ie(t,e,r).split(`
197
+ `),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 Ie(t,c,r)},gn=(t="",e="",n)=>{let r=n?.output??Vt.stdout,i=n?.withGuide??Wt.withGuide,o=n?.format??k0,s=["",...E0(t,li(r)-6,o).split(`
198
+ `).map(o),""],c=Kt(e),u=Math.max(s.reduce((l,m)=>{let b=Kt(m);return b>l?b:l},0),c)+2,h=s.map((l)=>`${S("gray",Mt)} ${l}${" ".repeat(u-Kt(l))}${S("gray",Mt)}`).join(`
199
+ `),a=i?`${S("gray",Mt)}
200
+ `:"",f=i?d0:p0;r.write(`${a}${S("green",Da)} ${S("reset",e)} ${S("gray",Va.repeat(Math.max(u-c-1,1))+g0)}
202
201
  ${h}
203
- ${S("gray",a+lf.repeat(u+2)+Gp)}
204
- `)};var Vb={light:lt("─","-"),heavy:lt("━","="),block:lt("█","#")};var xb=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Enter:")} confirm`];var Bb=`${S("gray",yt)} `;import{existsSync as zp}from"node:fs";import{openSync as Tp,writeSync as Wp}from"node:fs";import{ReadStream as Qp}from"node:tty";var vf=["10","11","12","17",...Array.from({length:16},(t,n)=>`4;${n}`)];function _r(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((n,e)=>`\x1B]4;${e};${n}\x1B\\`)].join("")}function yf(t){let n=new Map;for(let e of t.split("\x1B")){let r=e.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,o]=r??[];if(i&&o)n.set(i,o)}return n}function Sf(t){return[...t].map(([n,e])=>`\x1B]${n};${e}\x1B\\`).join("")}async function Ff(){let t,n;try{t=Tp("/dev/tty","r+"),n=new Qp(t),n.setRawMode(!0)}catch{return new Map}try{Wp(t,vf.map((r)=>`\x1B]${r};?\x1B\\`).join(""));let e="";return await new Promise((r)=>{let i=setTimeout(r,120);n.on("data",(o)=>{if(e+=o.toString(),yf(e).size>=vf.length)clearTimeout(i),r()})}),yf(e)}finally{n.setRawMode(!1),n.destroy()}}function re(t){let n=t.replace("#","");return[n.slice(0,2),n.slice(2,4),n.slice(4,6)].map((e)=>Number.parseInt(e,16)).join(";")}function If(t,n){return`\x1B[48;2;${re(n)}m ${t} \x1B[0m`}function mo(t,n){return`\x1B[48;2;${re(t)};38;2;${re(n)}m ● \x1B[0m`}function Nf(t){return`\x1B[38;2;${re(t)}m`}function po(t,n){return`\x1B[48;2;${re(n)}m${t.map((e)=>`\x1B[38;2;${re(e)}m▄`).join("")} \x1B[0m`}function Cr(t,n){let e=n.toLowerCase();return[t.name,t.group,t.native??""].some((r)=>r.toLowerCase().includes(e))}function Hf(t,n,e){let r=e.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((f)=>!f.default&&f.group===s.group),u=r?c.filter((f)=>Cr(f,r)):c;if(r&&u.length===0)continue;let h=r.length>0||n.has(s.group);if(i.push({kind:"group",name:s.group,native:s.native,lead:c.find((f)=>f.lead)??s,expanded:h,count:u.length}),h)i.push(...u.map((f)=>({kind:"palette",entry:f})))}return i}function Zp(t,n){let e=n.trim(),r=new Set(t.filter((i)=>!i.default&&(e===""||Cr(i,e))).map((i)=>i.group));return Hf(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function qp(t){let n=t.findIndex((e)=>e.kind==="palette");return n===-1?0:n}var tn="\x1B[0m",ie="\x1B[2m",Xp="\x1B[1m",Of="\x1B[1;7m",_p="\x1B[36m",Cp="\x1B[33m";function jf(t){return t==="decode"||t==="glitch"?t:"typewriter"}class wo extends pn{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((e)=>!e.default),this.series=[...new Set(this.named.map((e)=>e.group))],this.seriesPad=Math.max(0,...this.series.map((e)=>e.length)),this.maxItems=t.maxItems??12,this.color=t.color??!0,this.fx=t.fx??"typewriter",this.onFocus=t.onFocus,this.rollExample();let n=setInterval(()=>{this.rollExample(),this.fxStep=8,this.output.emit("resize")},3000);n.unref?.(),this.once("finalize",()=>{clearInterval(n),clearTimeout(this.fxTimer)}),this.rebuild("first"),this.on("cursor",(e)=>{if(e==="up")this.move(-1);else if(e==="down")this.move(1);else if(e==="left")this.fold(!1);else if(e==="right")this.fold(!0)}),this.on("userInput",(e)=>{if(e!==this.lastInput)this.lastInput=e,this.rebuild("keep")}),this.on("key",(e,r)=>{if(r?.name==="space")this.pick(this.rows[this.cursor])})}_isActionKey(t){return t==="\t"||t===" "}members(t){let n=this.scope==="palette"?this.userInput.trim():"";return this.named.filter((e)=>e.group===t&&(n===""||Cr(e,n)))}everyone(t){return t.flatMap((n)=>n.kind==="group"?this.members(n.name):[])}pick(t){let n=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(n.length===0)return;let e=n.some((r)=>!this.picked.has(r));for(let r of n)if(e)this.picked.add(r);else this.picked.delete(r)}pickedIn(t){return this.members(t).filter((n)=>this.picked.has(n.name)).length}pickedCount(){if(this.scope==="palette")return this.picked.size;return this.series.filter((t)=>this.members(t).every((n)=>this.picked.has(n.name))).length}rollExample(){let t=this.named[Math.floor(Math.random()*this.named.length)],n=this.series[Math.floor(Math.random()*this.series.length)];if(!t||!n){this.example="";return}let e=`${t.name} | ${n}`;this.example=e.length>30?`${e.slice(0,29)}…`:e,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 n=this.fx==="decode"?"abcdefghijklmnopqrstuvwxyz":"▓▒░#*+=<>?/-_",e=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||e(r)?r:n[Math.floor(Math.random()*n.length)]??r).join("")}sync(){let t=this.rows[this.cursor],n=t?.kind==="palette"?t.entry:t?.kind==="group"&&this.scope==="series"?t.lead:void 0;if(n&&n.name!==this.lastFocused)this.lastFocused=n.name,this.onFocus?.(n)}rebuild(t){let n=this.rows[this.cursor],e=this.scope==="series"?Zp(this.entries,this.userInput):Hf(this.entries,this.expanded,this.userInput),r=e.length>0?qp(e)+1:0;if(this.rows=e.length>0?[{kind:"all",count:this.allCount(e)},...e]:[],t==="first")this.cursor=r;else if(t==="keep"){let i=n?.kind==="palette"?n.entry.name:"",o=i?this.rows.findIndex((s)=>s.kind==="palette"&&s.entry.name===i):-1;this.cursor=o===-1?r:o}else if(this.cursor>=this.rows.length)this.cursor=Math.max(0,this.rows.length-1);this.sync()}allCount(t){return this.scope==="series"?t.length:this.everyone(t).length}move(t){let n=this.cursor+t;if(n>=0&&n<this.rows.length)this.cursor=n;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 n=this.rows[this.cursor];if(n?.kind==="group"){if(t!==n.expanded)this.toggle(n.name)}else if(n?.kind==="palette"&&!t&&!n.entry.default){let e=n.entry.group;if(this.expanded.delete(e),this.rebuild("clamp"),this.cursor=this.rows.findIndex((r)=>r.kind==="group"&&r.name===e),this.cursor===-1)this.cursor=0;this.sync()}}renderRow(t,n){let e=n?"▶ ":" ";if(t.kind==="all"){let o=this.everyone(this.rows).every((c)=>this.picked.has(c.name))?"● ":"○ ",s=`(${t.count})`;return`${e}${o}select all ${this.color?`${ie}${s}${tn}`: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`${e}${o}${s} ${c}`;let u=t.lead;return`${e}${o}${s} ${mo(u.background,u.cursor)}${po(u.ansi.slice(1,7),u.background)} ${ie}${c}${tn}`}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?n?`${Of} ${t.name} ${tn}`:c?`${Of}${Nf(c.cursor)} ${t.name} ${tn}`:` ${Xp}${t.name}${tn} `:n?`[${t.name}]`:` ${t.name}`,h=this.color?If("●",t.lead.selection):"",f=`${this.pickedIn(t.name)}/${t.count}`,a=this.color?` ${ie}(${f})${tn}`:` (${f})`,g=t.native?this.color?` ${ie}${t.native}${tn}`:` ${t.native}`:"";return`${o}${u}${h}${a}${g}`}let r=t.entry,i=this.picked.has(r.name)?"● ":"○ ";if(!this.color)return` ${e}${i}${r.name.padEnd(13)} ● · ${r.ansiSource}`;return` ${e}${i}${r.name.padEnd(13)} ${mo(r.background,r.cursor)}${po(r.ansi.slice(1,7),r.background)} ${ie}${r.ansiSource}${tn}`}draw(){let t=(l)=>this.color?`${ie}${l}${tn}`:l,n=(l)=>this.color?`${_p}${l}${tn}`:l,e=this.scope==="series"?"series":"catalog";if(this.state==="submit")return`${t("◇")} ${e} ${t(`· ${this.pickedCount()} picked`)}`;if(this.state==="cancel")return`${t(`◇ ${e} · cancelled`)}`;let r=this.userInput.trim(),i=this.scope==="series"?this.series.length:this.named.length,o=this.scope==="series"?this.rows.filter((l)=>l.kind==="group").length:r?this.named.filter((l)=>Cr(l,r)).length:i,s=`${n("◆")} ${e} ${t(`(${o}/${i} · ${this.pickedCount()} picked)`)}`,c=`${n("│")} ${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((l,k)=>`${n("│")} ${this.renderRow(l,this.top+k===this.cursor)}`):[`${n("│")} ${t(`no ${this.scope==="series"?"series":"palettes"} match '${this.userInput}'`)}`];while(h.length<this.maxItems)h.push(n("│"));let f=this.rows.length-this.top-u.length,a=f>0?`${n("│")} ${t(`↓ ${f} more`)}`:n("│"),g=this.scope==="series"?"":" · ←→ fold",d=this.scope==="series"?"continue":"install",p=this.state==="error"?`${n("└")} ${this.color?`${Cp}${this.error}${tn}`:this.error}`:`${n("└")} ${t(`↑↓ move${g} · space pick · type to filter · enter ${d} · esc cancel`)}`;return[s,c,...h,a,p].join(`
205
- `)}}function Ve(t,n,e,r){let i=zn(),o=Boolean(hn(e))!==Boolean(hn(r)),s=o?Qe(r,i):r;return Xe(t,n,s),qe(t,s),o&&Ze(s,i)&&i.running()}function $o(t){console.log(`
206
- ${t} palettes installed — open a new tab, or reload your terminal config`)}function Rf(t){let n=Tt(),e=Pt(n),r=Yt(n),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]};Ve(n,e,r,s);for(let c of o)console.log(` + ${c}`);$o(s.palettes.length)}function Gf(t){let n=Tt(),e=Pt(n),r=Yt(n),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))};Ve(n,e,r,o),Ci(n,e,r.terminals,i);for(let s of i)console.log(` - ${s}`);$o(o.palettes.length)}function Lf(t){let n=Tt(),e=Pt(n),r=Yt(n);if(!r.palettes.includes(t))throw Error(`${t} is not installed — \`ttheme add ${t}\` first`);let{off:i,...o}=r,s=zn(),c=Qe({...o,startup:t},s);Xe(n,e,c),qe(n,c);let u=Ze(c,s);console.log(Jf(t,c.terminals,u&&s.running()).join(`
207
- `))}function Pf(){let t=Tt(),n=Yt(t),e=Yn(n);if(!e)throw Error("no palettes installed — `ttheme browse` picks some");if(!n.off){console.log(`already on · ${e}`);return}let{off:r,...i}=n,o=Ve(t,Pt(t),n,i);console.log(Jf(e,i.terminals,o).join(`
208
- `))}function Kf(){let t=Tt(),n=Yt(t);if(n.off){console.log("already off");return}let e=Ve(t,Pt(t),n,{...n,off:!0}),r=Yn(n);if(console.log(`off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`),e)console.log("iterm2 new tabs open on your own profile once iTerm2 restarts")}function Jf(t,n,e){let r=n.filter((o)=>o!=="iterm2"),i=r.length>0?[`default ${t} · ${r.join(", ")} open new tabs with it once their config reloads`]:[];if(n.includes("iterm2"))i.push(e?'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 Af(t){let n=Tt(),e=Pt(n),r=new Set(Yt(n).palettes),i=qn(e.palettes),o=He(t?Ju(i,t):i),s=Math.max(...o.map((u)=>u.name.length),0);for(let u of o)console.log(` ${r.has(u.name)?"●":"○"} ${u.name.padEnd(s)} ${u.group}`);let c=t?`${o.length} of ${i.length}`:`${i.length}`;console.log(`
209
- ${c} palettes — ${o.filter((u)=>r.has(u.name)).length} installed`)}async function Uf(){let t=Tt(),n=zp(Nr(t))?Pt(t).palettes.length:0,e=await Pu(Gu);Or(t,e);let r=e.palettes.length-n;console.log(`catalog ${e.version} — ${e.palettes.length} palettes${r>0?` (+${r})`:""}`)}async function bo(t,n,e,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:He(t.palettes),o=process.stdout.isTTY===!0&&!process.env.NO_COLOR,s=o?await Ff():new Map,c=new wo({entries:i,scope:e,installed:n,required:r,color:!process.env.NO_COLOR,fx:jf(process.env.TTHEME_FX),onFocus:o?(h)=>process.stdout.write(_r(h)):void 0}),u=await c.prompt();if(process.stdout.write(Sf(s)),ne(u))return;return t.palettes.filter((h)=>c.picked.has(h.name)).map((h)=>h.name)}async function Tf(){let t=Tt(),n=Pt(t),e=Yt(t),r=await bo(n,e.palettes,"palette");if(!r){console.log("nothing changed");return}let i=e.palettes.filter((c)=>!r.includes(c)),o=r.filter((c)=>!e.palettes.includes(c));if(o.length===0&&i.length===0){console.log("nothing changed");return}let s={...e,palettes:r};Ve(t,n,e,s),Ci(t,n,e.terminals,i);for(let c of o)console.log(` + ${c}`);for(let c of i)console.log(` - ${c}`);$o(s.palettes.length)}function Zf(t,n,e){for(let r of Dp(n))t.push({from:ct(n,r),to:ct(e,r)})}function Cf(t){return JSON.parse(se(ct(t,"dist","manifest.json"),"utf8"))}function qf(t,n){let e=ct(n.root,"dist"),r=ct(n.configHome,"ttheme"),i=[{from:ct(n.root,"bin","ttheme.js"),to:ct(r,"ttheme.js")},{from:ct(n.root,"shell","ttheme.zsh"),to:ct(r,"ttheme.zsh")},{from:ct(n.root,"shell","launch-tab.zsh"),to:ct(r,"launch-tab.zsh"),executable:!0},{from:ct(e,"ghostty","ttheme.conf"),to:ct(r,"ttheme.conf")}];Zf(i,ct(n.root,"shell","adapters"),ct(r,"adapters"));let o=[{file:ct(n.zdotdir,".zshrc"),block:tu(r)}],s=ct(r,"config.zsh"),c=ru(Qt(s)?se(s,"utf8"):""),u={file:s,content:c},h=[];if(t.terminals.includes("ghostty"))Zf(i,ct(n.root,"ghostty","shaders"),ct(n.configHome,"ghostty","shaders"));if(t.terminals.includes("alacritty")){let g=_i(n.configHome);if(Qt(g)&&$r(se(g,"utf8"),void 0)===void 0)h.push(`${g} already imports files under [general] — ttheme left it alone; add ${ct(n.configHome,"alacritty","themes")}/<palette>.toml to that import list yourself`)}if(t.terminals.includes("wezterm")){let g=Xi(n.configHome,n.home);if(Qt(g)&&br(se(g,"utf8"),"")===void 0)h.push(`${g} has no \`return config\` line — ttheme left it alone; call \`dofile("${ct(r,"wezterm.lua")}")(config)\` from it yourself`)}let f=t.terminals.includes("windows-terminal");if(f&&!n.wtHome)h.push("windows terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself");if(t.terminals.includes("warp"))h.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,...f&&n.wtHome?{wtHome:n.wtHome}:{},...f&&n.wtProfile?{wtProfile:n.wtProfile}:{},...t.off?{off:!0}:{}};return{home:n.home,copies:i,edits:o,settings:u,catalog:Cf(n.root),installed:a,notes:h}}function n0(t){try{return Yt(t).itermBase}catch{return}}function Xf(t,n=zn()){for(let o of t.copies)if(ko(oe(o.to),{recursive:!0}),Wf(o.to,{force:!0}),Wf(`${o.to}.zwc`,{force:!0}),Bp(o.from,o.to),o.executable)xp(o.to,493);ko(oe(t.settings.file),{recursive:!0}),Qf(t.settings.file,t.settings.content);let e=oe(oe(t.settings.file)),r=n0(e),i=Qe(r?{...t.installed,itermBase:r}:t.installed,n);Or(e,t.catalog),qe(e,i),Xe(e,t.catalog,i,t.home);for(let o of t.edits){ko(oe(o.file),{recursive:!0});let s=Qt(o.file)?se(o.file,"utf8"):"";Qf(o.file,je(s,o.block))}return Ze(i,n)}function Eo(t){if(ne(t))qr("nothing changed"),process.exit(1);return t}function zf(t){return mr.filter((n)=>{if(n==="iterm2")return process.platform==="darwin";if(n==="windows-terminal")return t.wtHome!==void 0;return n!=="warp"||process.platform!=="win32"})}function e0(t,n){if(t==="iterm2")return Qt(ct(n.home,"Library","Application Support","iTerm2"));if(t==="windows-terminal")return n.wtHome!==void 0;if(t==="warp")return Qt(oe(Kr(n.home)));if(t==="wezterm")return Qt(ct(n.configHome,"wezterm"))||Qt(ct(n.home,".wezterm.lua"));return Qt(ct(n.configHome,t))}function r0(){if(process.platform==="win32")return process.env.LOCALAPPDATA;if(!process.env.WSL_DISTRO_NAME)return;let t=(n,e)=>Yp(n,e,{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 i0(t,n,e){return Eo(await bf({message:"wire which terminals?",options:zf(e).map((r)=>({value:r,hint:r===t?"detected":void 0})),initialValues:n,required:!0}))}function _f(t){let n=[...t.copies.filter((e)=>!Qt(e.to)).map((e)=>e.to),...Qt(t.settings.file)?[]:[t.settings.file],...t.edits.filter((e)=>!se(e.file,"utf8").includes("# ttheme begin")).map((e)=>e.file)];if(n.length>0)throw Error(`init left gaps:
210
- ${n.join(`
211
- `)}`)}function Yf(t,n){return[...new Set(t.palettes.filter((e)=>n.includes(e.name)).map((e)=>e.group))]}function o0(t,n){let e=t.palettes.find((i)=>i.name===hn(n)),r=process.stdout.isTTY===!0&&!process.env.NO_COLOR&&!process.env.TMUX&&pr(process.env)!=="warp";if(!e||!r)return!1;return process.stdout.write(_r(e)),!0}function s0(t,n){let e=hn(t);if(!e)return["default none — new tabs keep the terminal colors",`turn on \`ttheme on\` wears ${Yn(t)}`];return[`default ${e}${n?" — this tab wears it already":""}`,"change it `ttheme preview`, enter on a palette, then default"]}function c0(t){Vp("zsh",["-c",'source "$1" && __tt_preview init',"zsh",ct(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function u0(t,n,e,r){let i=Yf(t.catalog,n.palettes);Xr([`${i.join(", ")} (${n.palettes.length})`,...s0(t.installed,e)].join(`
212
- `),`installed ${n.palettes.length} palettes`);let o=["exec zsh the ttheme command in this tab"];if(n.terminals.includes("ghostty"))o.push("restart ghostty new tabs pick up its config");if(n.terminals.includes("kitty"))o.push("new kitty window pictures follow it — kitty reloads its colors by itself");if(n.terminals.includes("alacritty"))o.push("alacritty reloads its config by itself");if(n.terminals.includes("wezterm"))o.push("wezterm reloads its config by itself");if(n.terminals.includes("windows-terminal"))o.push("windows terminal reloads its settings by itself");if(n.terminals.includes("iterm2"))o.push(...h0(hn(t.installed),r));Xr([...o,...t.notes].join(`
213
- `),"next"),Ef("done")}function h0(t,n){let e=['iterm2 profiles a "ttheme · <palette>" per palette in Settings › Profiles'];if(t)e.push(n?`restart iterm2 new tabs open on "ttheme · default", which wears ${t}`:`iterm2 default "ttheme · default" wears ${t} and follows \`ttheme default\``);return e}function f0(t,n){let e=[`placed ${t.copies.length} files`,`settings in ${t.settings.file} — edit later with \`ttheme config\``,...t.edits.map((r)=>`wired ${r.file}`)];if(n.terminals.includes("ghostty"))e.push("restart ghostty to pick up its config");if(n.terminals.includes("kitty"))e.push("kitty reloads its colors by itself; pictures show in kitty windows opened from now on");if(n.terminals.includes("alacritty"))e.push("alacritty reloads its config by itself");if(n.terminals.includes("wezterm")||n.terminals.includes("windows-terminal"))e.push("wezterm and windows terminal reload their config by themselves");if(n.terminals.includes("iterm2"))e.push('iterm2 gets a "ttheme · <palette>" profile per palette under Settings › Profiles');e.push(...t.notes),e.push("no palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"),console.log(e.join(`
214
- `))}async function Vf(t={}){let n=ct(import.meta.dirname,"..");if(!Qt(ct(n,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!Qt(ct(n,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await Er()}let e=t0(),r=process.env.XDG_CONFIG_HOME??ct(e,".config"),i=process.env.ZDOTDIR??e,o=r0(),s=process.env.WT_PROFILE_ID,c={root:n,home:e,configHome:r,zdotdir:i,...o?{wtHome:o}:{},...s?{wtProfile:s}:{}},u=pr(process.env),h=zf(c).filter((H)=>H===u||e0(H,c));if(!(!t.yes&&process.stdin.isTTY===!0&&process.stdout.isTTY===!0)){if(h.length===0)throw Error("no supported terminal detected — run this inside ghostty, kitty, alacritty, wezterm, iterm2, windows terminal or warp");let H={terminals:h,palettes:[]},b=qf(H,c);Xf(b),_f(b),f0(b,H);return}kf("ttheme init");let a=await i0(u,h,c),g=Cf(n),d=await bo(g,[],"series",!0);if(!d)qr("nothing changed"),process.exit(1);let p=d[0],l=d.length>1&&pr(process.env)!=="warp",k=Eo(await lo({message:l?"pick a default palette in ttheme preview once installed?":`wear ${p} in every tab?`})),v={terminals:a,palettes:d,off:!k},I=qf(v,c);if(Xr([`install ${d.length} palettes — ${Yf(I.catalog,d).join(", ")}`,`copy ${I.copies.length} files under ${r}`,`write ${I.settings.file}`,...I.edits.map((H)=>`edit ${H.file}`),k?l?`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")&&k?['make "ttheme · default" the iTerm2 default profile']:[]].join(`
215
- `),`wiring ${a.join(", ")}`),!Eo(await lo({message:"apply these changes?"})))qr("nothing changed"),process.exit(1);let E=zn(),y=Xf(I,E);if(_f(I),k&&l)c0(r);let $=Yt(r);u0({...I,installed:$},v,o0(I.catalog,$),y&&E.running())}var ta=[{name:"build",args:[],about:"emit dist/ for every terminal, plus the zsh palette table",flags:{only:{type:"string",multiple:!0,value:"<terminal>",choices:$u,about:"rebuild just this terminal — repeat it for more"}},run:(t,{only:n})=>Er({only:n})},{name:"init",args:[],about:"install the palettes and wire your terminal configs",flags:{yes:{type:"boolean",about:"accept every default without prompting"}},run:(t,{yes:n})=>Vf({yes:n})},{name:"browse",args:[],about:"pick palettes from the catalog in a live picker",run:()=>Tf()},{name:"list",args:["[query]"],about:"show the catalog, marking what is installed",run:([t])=>Af(t)},{name:"add",args:["<palette...>"],about:"install palettes from the catalog",run:(t)=>Rf(t)},{name:"remove",args:["<palette...>"],about:"uninstall palettes",run:(t)=>Gf(t)},{name:"default",args:["<palette>"],about:"make an installed palette the one new tabs open with",run:([t])=>Lf(t)},{name:"on",args:[],about:"wear the default palette in new tabs again",run:()=>Pf()},{name:"off",args:[],about:"open new tabs in the terminal's own colors until `ttheme on`",run:()=>Kf()},{name:"find",args:["<palette>"],about:"pick a booru background for a palette — preview opens this on tab",hidden:!0,run:([t])=>Jh(t)},{name:"image",args:["<palette>","<action>"],about:"switch a palette between its saved backgrounds, remove the one shown, or pass on tuning — preview calls this",hidden:!0,run:([t,n])=>Ah(t,n)},{name:"update",args:[],about:"refresh the catalog from the registry",run:()=>Uf()}];class Pn extends Error{verb;constructor(t,n){super(t);this.verb=n}}function xf(t){let n=ta.find((e)=>e.name===t);if(!n)throw new Pn(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return n}function g0(t,n){let e={help:{type:"boolean",short:"h"}};for(let[r,{type:i,multiple:o}]of Object.entries(t.flags??{}))e[r]={type:i,multiple:o===!0};try{return a0({args:n,options:e,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Pn(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function l0(t){let[n,...e]=t;if(n===void 0)return{kind:"help",code:1};if(n==="-h"||n==="--help")return{kind:"help",code:0};if(n==="-V"||n==="--version")return{kind:"version"};if(n==="help")return e[0]===void 0?{kind:"help",code:0}:{kind:"help",verb:xf(e[0]),code:0};let r=xf(n),i=g0(r,e);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[f,{choices:a}]of Object.entries(r.flags??{}))for(let g of[i.values[f]??[]].flat())if(a&&!a.includes(String(g)))throw new Pn(`--${f} takes ${a.join(", ")} — not ${g}`,r);let o=i.positionals,s=r.args.filter((f)=>f.startsWith("<")).length,c=r.args.some((f)=>f.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(o.length<s)throw new Pn(`missing ${r.args[o.length]}`,r);if(o.length>c)throw new Pn(`too many arguments: ${o.slice(c).join(" ")}`,r);let{help:u,...h}=i.values;return{kind:"run",verb:r,args:o,flags:h}}function Bf(t){let n=Object.entries(t.flags??{}).map(([e,{value:r}])=>`[--${e}${r?` ${r}`:""}]`);return[t.name,...n,...t.args].join(" ")}function Df(t){let n=Math.max(...t.map(([e])=>e.length));return t.map(([e,r])=>` ${e.padEnd(n)} ${r}`)}function Mo(t){if(t){let n=Object.entries(t.flags??{}).map(([e,{value:r,about:i}])=>[`--${e}${r?` ${r}`:""}`,i]);return[`Usage: ttheme ${Bf(t)}`,"",t.about,...n.length>0?["","Options:",...Df(n)]:[]].join(`
216
- `)}return["Usage: ttheme <command>","",en.description,"","Commands:",...Df(ta.filter((n)=>!n.hidden).map((n)=>[Bf(n),n.about])),"","ttheme <command> --help describes one command · ttheme --version prints the version"].join(`
217
- `)}async function na(t){try{let n=l0(t);if(n.kind==="version")return console.log(en.version),0;if(n.kind==="help"){if(n.code===0)console.log(Mo(n.verb));else console.error(Mo(n.verb));return n.code}let e=await n.verb.run(n.args,n.flags);return typeof e==="number"?e:0}catch(n){if(n instanceof Pn)return console.error(`ttheme${n.verb?` ${n.verb.name}`:""}: ${n.message}
202
+ ${S("gray",f+Va.repeat(u+2)+m0)}
203
+ `)};var o1={light:gt("─","-"),heavy:gt("━","="),block:gt("█","#")};var s1=[`${S("dim","↑/↓")} to navigate`,`${S("dim","Enter:")} confirm`];var c1=`${S("gray",Mt)} `;import{existsSync as O0}from"node:fs";import{openSync as y0,writeSync as v0}from"node:fs";import{ReadStream as M0}from"node:tty";var rf=["10","11","12","17",...Array.from({length:16},(t,e)=>`4;${e}`)];function wr(t=process.env){return Boolean(t.NO_COLOR)||t.TERM==="dumb"}function di(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 of(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 sf(t){return[...t].map(([e,n])=>`\x1B]${e};${n}\x1B\\`).join("")}async function cf(){let t,e;try{t=y0("/dev/tty","r+"),e=new M0(t),e.setRawMode(!0)}catch{return new Map}try{v0(t,rf.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(),of(n).size>=rf.length)clearTimeout(i),r()})}),of(n)}finally{e.setRawMode(!1),e.destroy()}}function dn(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 uf(t,e){return`\x1B[48;2;${dn(e)}m ${t} \x1B[0m`}function Ko(t,e){return`\x1B[48;2;${dn(t)};38;2;${dn(e)}m ● \x1B[0m`}function hf(t){return`\x1B[38;2;${dn(t)}m`}function Ao(t,e){return`\x1B[48;2;${dn(e)}m${t.map((n)=>`\x1B[38;2;${dn(n)}m▄`).join("")} \x1B[0m`}function mi(t,e){let n=e.toLowerCase();return[t.name,t.group,t.native??""].some((r)=>r.toLowerCase().includes(n))}function ff(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)=>mi(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 S0(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||mi(i,n))).map((i)=>i.group));return ff(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function I0(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}var ee="\x1B[0m",mn="\x1B[2m",F0="\x1B[1m",af="\x1B[1;7m",N0="\x1B[36m",H0="\x1B[33m";function lf(t){return t==="decode"||t==="glitch"?t:"typewriter"}class Jo extends me{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===""||mi(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"?S0(this.entries,this.userInput):ff(this.entries,this.expanded,this.userInput),r=n.length>0?I0(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?`${mn}${s}${ee}`: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} ${Ko(u.background,u.cursor)}${Ao(u.ansi.slice(1,7),u.background)} ${mn}${c}${ee}`}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?`${af} ${t.name} ${ee}`:c?`${af}${hf(c.cursor)} ${t.name} ${ee}`:` ${F0}${t.name}${ee} `:e?`[${t.name}]`:` ${t.name}`,h=this.color?uf("●",t.lead.selection):"",a=`${this.pickedIn(t.name)}/${t.count}`,f=this.color?` ${mn}(${a})${ee}`:` (${a})`,l=t.native?this.color?` ${mn}${t.native}${ee}`:` ${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)} ${Ko(r.background,r.cursor)}${Ao(r.ansi.slice(1,7),r.background)} ${mn}${r.ansiSource}${ee}`}draw(){let t=(g)=>this.color?`${mn}${g}${ee}`:g,e=(g)=>this.color?`${N0}${g}${ee}`: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)=>mi(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",m=this.scope==="series"?"continue":"install",b=this.state==="error"?`${e("└")} ${this.color?`${H0}${this.error}${ee}`:this.error}`:`${e("└")} ${t(`↑↓ move${l} · space pick · type to filter · enter ${m} · esc cancel`)}`;return[s,c,...h,f,b].join(`
204
+ `)}}function br(t,e,n,r){let i=Se(),o=Boolean(te(n))!==Boolean(te(r)),s=o?ur(r,i):r;return fr(t,e,s),ar(t,s),o&&We(s,i)&&i.running()}function Wo(t){console.log(`
205
+ ${t} palettes installed — open a new tab, or reload your terminal config`)}function gf(t){let e=Rt(),n=Ut(e),r=Jt(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]};br(e,n,r,s);for(let c of o)console.log(` + ${c}`);Wo(s.palettes.length)}function df(t){let e=Rt(),n=Ut(e),r=Jt(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))};br(e,n,r,o),wo(e,n,r.terminals,i);for(let s of i)console.log(` - ${s}`);Wo(o.palettes.length)}function mf(t){let e=Rt(),n=Ut(e),r=Jt(e);if(!r.palettes.includes(t))throw Error(`${t} is not installed — \`ttheme add ${t}\` first`);let{off:i,...o}=r,s=Se(),c=ur({...o,startup:t},s);fr(e,n,c),ar(e,c);let u=We(c,s);console.log(bf(t,c.terminals,u&&s.running()).join(`
206
+ `))}function pf(){let t=Rt(),e=Jt(t),n=on(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=br(t,Ut(t),e,i);console.log(bf(n,i.terminals,o).join(`
207
+ `))}function wf(){let t=Rt(),e=Jt(t);if(e.off){console.log("already off");return}let n=br(t,Ut(t),e,{...e,off:!0}),r=on(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 bf(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 $f(t,e=!1){let n=Rt(),r=Ut(n),i=new Set(Jt(n).palettes),o=Re(r.palettes),s=Zn(t?gh(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(`
208
+ ${u} palettes — ${s.filter((h)=>i.has(h.name)).length} installed`)}}async function kf(){let t=Rt(),e=O0(zr(t))?Ut(t).palettes.length:0,n=await fh(hh);Br(t,n);let r=n.palettes.length-e;console.log(`catalog ${n.version} — ${n.palettes.length} palettes${r>0?` (+${r})`:""}`)}async function Qo(t,e,n,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:Zn(t.palettes),o=process.stdout.isTTY===!0&&!wr(),s=o?await cf():new Map,c=new Jo({entries:i,scope:n,installed:e,required:r,color:!wr(),fx:lf(process.env.TTHEME_FX),onFocus:o?(h)=>process.stdout.write(di(h)):void 0}),u=await c.prompt();if(process.stdout.write(sf(s)),Fe(u))return;return t.palettes.filter((h)=>c.picked.has(h.name)).map((h)=>h.name)}async function Ef(){let t=Rt(),e=Ut(t),n=Jt(t),r=await Qo(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};br(t,e,n,s),wo(t,e,n.terminals,i);for(let c of o)console.log(` + ${c}`);for(let c of i)console.log(` - ${c}`);Wo(s.palettes.length)}function K0(t,e,n){for(let r of L0(e))t.push({from:$t(e,r),to:$t(n,r)})}function If(t){return JSON.parse(wn($t(t,"dist","manifest.json"),"utf8"))}function vf(t,e){let n=$t(e.configHome,"ttheme"),r=[{from:$t(e.root,"bin","ttheme.js"),to:$t(n,"ttheme.js")},{from:$t(e.root,"bin","ttheme.js.map"),to:$t(n,"ttheme.js.map")},{from:$t(e.root,"shell","ttheme.zsh"),to:$t(n,"ttheme.zsh")},{from:$t(e.root,"shell","launch-tab.zsh"),to:$t(n,"launch-tab.zsh"),executable:!0}];K0(r,$t(e.root,"shell","adapters"),$t(n,"adapters"));let i=[{file:$t(e.zdotdir,".zshrc"),block:Hu(n)}],o=$t(n,"config.zsh"),s=Pu(qt(o)?wn(o,"utf8"):""),c={file:o,content:s},u=[];if(t.terminals.includes("alacritty")){let f=Qe(e.configHome);if(qt(f)&&Cn(wn(f,"utf8"),void 0)===void 0)u.push(`${f} already imports files under [general] — ttheme left it alone; add ${$t(e.configHome,"alacritty","themes")}/<palette>.toml to that import list yourself`)}if(t.terminals.includes("wezterm")){let f=rn(e.configHome,e.home);if(qt(f)&&Vn(wn(f,"utf8"),"")===void 0)u.push(`${f} has no \`return config\` line — ttheme left it alone; call \`dofile("${$t(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(...Xh(e.configHome,t.terminals,e.home)),{home:e.home,copies:r,edits:i,settings:c,catalog:If(e.root),installed:a,notes:u}}function A0(t){try{return Jt(t).itermBase}catch{return}}function Mf(t,e=Se()){for(let o of t.copies)if(Zo(pn(o.to),{recursive:!0}),yf(o.to,{force:!0}),yf(`${o.to}.zwc`,{force:!0}),G0(o.from,o.to),o.executable)P0(o.to,493);Zo(pn(t.settings.file),{recursive:!0}),T0(t.settings.file,t.settings.content);let n=pn(pn(t.settings.file)),r=A0(n),i=ur(r?{...t.installed,itermBase:r}:t.installed,e);Br(n,t.catalog),ar(n,i),fr(n,t.catalog,i,t.home);for(let o of t.edits){Zo(pn(o.file),{recursive:!0});let s=qt(o.file)?wn(o.file,"utf8"):"";rr(o.file,xn(s,o.block))}return We(i,e)}class Ne extends Error{}function qo(t){if(Fe(t))throw ln("nothing changed"),new Ne;return t}function Ff(t){return Ar.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 J0(t,e){if(t==="iterm2")return qt($t(e.home,"Library","Application Support","iTerm2"));if(t==="windows-terminal")return e.wtHome!==void 0;if(t==="warp")return qt(pn(ri(e.home)));if(t==="wezterm")return qt($t(e.configHome,"wezterm"))||qt($t(e.home,".wezterm.lua"));return qt($t(e.configHome,t))}function W0(){if(process.platform==="win32")return process.env.LOCALAPPDATA;if(!process.env.WSL_DISTRO_NAME)return;let t=(e,n)=>j0(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 Q0(t,e,n){return qo(await ef({message:"wire which terminals?",options:Ff(n).map((r)=>({value:r,hint:r===t?"detected":void 0})),initialValues:e,required:!0}))}function Sf(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)=>!wn(n.file,"utf8").includes("# ttheme begin")).map((n)=>n.file)];if(e.length>0)throw Error(`init left gaps:
209
+ ${e.join(`
210
+ `)}`)}function Nf(t,e){return[...new Set(t.palettes.filter((n)=>e.includes(n.name)).map((n)=>n.group))]}function Z0(t,e){let n=t.palettes.find((i)=>i.name===te(e)),r=process.stdout.isTTY===!0&&!wr()&&!process.env.TMUX&&Jr(process.env)!=="warp";if(!n||!r)return!1;return process.stdout.write(di(n)),!0}function q0(t,e){let n=te(t);if(!n)return["default none — new tabs keep the terminal colors",`turn on \`ttheme on\` wears ${on(t)}`];return[`default ${n}${e?" — this tab wears it already":""}`,"change it `ttheme preview`, enter on a palette, then default"]}function x0(t){R0("zsh",["-c",'source "$1" && __tt_preview init',"zsh",$t(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function _0(t,e,n,r){let i=Nf(t.catalog,e.palettes);gn([`${i.join(", ")} (${e.palettes.length})`,...q0(t.installed,n)].join(`
211
+ `),`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(...X0(te(t.installed),r));gn([...o,...t.notes].join(`
212
+ `),"next"),nf("done")}function X0(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 C0(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(`
213
+ `))}async function Hf(t={}){let e=$t(import.meta.dirname,"..");if(!qt($t(e,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!qt($t(e,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await qr()}let n=U0(),r=Rt(),i=process.env.ZDOTDIR??n,o=W0(),s=process.env.WT_PROFILE_ID,c={root:e,home:n,configHome:r,zdotdir:i,...o?{wtHome:o}:{},...s?{wtProfile:s}:{}},u=Jr(process.env),h=Ff(c).filter((p)=>p===u||J0(p,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 p={terminals:h,palettes:[]},R=vf(p,c);Mf(R),Sf(R),C0(R,p);return}gi("ttheme init");let a=await Q0(u,h,c),f=If(e),l=await Qo(f,[],"series",!0);if(!l)throw ln("nothing changed"),new Ne;let m=l[0],b=l.length>1&&Jr(process.env)!=="warp",g=qo(await pr({message:b?"pick a default palette in ttheme preview once installed?":`wear ${m} in every tab?`})),$={terminals:a,palettes:l,off:!g},y=vf($,c);if(gn([`install ${l.length} palettes — ${Nf(y.catalog,l).join(", ")}`,`copy ${y.copies.length} files under ${r}`,`write ${y.settings.file}`,...y.edits.map((p)=>`edit ${p.file} — a ttheme block: source ttheme.zsh`),..._h(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, ${m} until then`:`paint every tab with ${m}, 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(`
214
+ `),`wiring ${a.join(", ")}`),!qo(await pr({message:"apply these changes?"})))throw ln("nothing changed"),new Ne;let F=Se(),E=Mf(y,F);if(Sf(y),g&&b)x0(r);let M=Jt(r);_0({...y,installed:M},$,Z0(y.catalog,M),E&&F.running())}import{existsSync as xo,readdirSync as V0,readFileSync as Y0,rmSync as z0,utimesSync as B0}from"node:fs";import{homedir as D0}from"node:os";import{dirname as tw,join as bn}from"node:path";function _o(t){return xo(t)?Y0(t,"utf8"):""}function ew(t){try{return Jt(t)}catch{return}}function nw(t,e){let n=ii(e,t),r=_o(n);if(!Wr(r)?.includes(`path = "${ct("")}`))return;return{file:n,content:Qr(r,_o(mo(t))||go)}}function rw(t){let{home:e,configHome:n}=t,r=ew(n),i=[],o=(h,a)=>{let f=_o(h),l=a(f);if(l!==f)i.push({file:h,content:l})};o(bn(t.zdotdir,".zshrc"),_n),o(Je("ghostty",n),_n),o(Je("kitty",n),_n),o(Qe(n),_n),o(rn(n,e),Ku);let s=nw(n,e);if(s)i.push(s);let c=[];for(let h of["ghostty","kitty","alacritty","wezterm","warp"]){let a=Ae(h,n,e);if(xo(a))c.push(...V0(a).flatMap((f)=>f.startsWith(ct(""))?[bn(a,f)]:[]))}let u=[hr(e),...r?.wtHome?[tw(oi(r.wtHome))]:[],bn(n,"ttheme"),t.cacheDir,t.stateDir];return c.push(...u.filter((h)=>xo(h))),{edits:i,removals:c,touches:r?.wtHome?po(r.wtHome):[],...r?{state:r}:{}}}function iw(t,e=Se()){let n=[];for(let{file:i,content:o}of t.edits){let s=Uh(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&&We({...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)z0(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)B0(i,r,r);return n}function ow(){let t=D0();return{home:t,configHome:Rt(),zdotdir:process.env.ZDOTDIR??t,cacheDir:Ur(),stateDir:bn(process.env.XDG_STATE_HOME??bn(t,".local","state"),"ttheme")}}async function Of(t=!1){let e=ow(),n=rw(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=bn(e.configHome,"ttheme");gi("ttheme uninstall"),gn([...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(`
215
+ `),"uninstall");let i=await pr({message:"remove ttheme?"});if(Fe(i)||!i)throw ln("nothing changed"),new Ne}for(let r of iw(n))console.log(r);console.log("open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}var cw={default:([t])=>mf(t),on:()=>pf(),off:()=>wf(),browse:()=>Ef(),list:([t],{json:e})=>$f(t,e),add:(t)=>gf(t),remove:(t)=>df(t),update:()=>kf(),init:(t,{yes:e})=>Hf({yes:e}),uninstall:(t,{yes:e})=>Of(e),build:(t,{only:e})=>qr({only:e}),find:([t])=>ka(t),image:([t,e])=>Ea(t,e)},Pf=Kr.map((t)=>({...t,run:cw[t.name]}));class Ze extends Error{verb;constructor(t,e){super(t);this.verb=e}}function jf(t){let e=Pf.find((n)=>n.name===t);if(!e)throw new Ze(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function uw(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 sw({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Ze(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function hw(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:jf(n[0]),code:0};let r=jf(e),i=uw(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 Ze(`--${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 Ze(`missing ${r.args[o.length]}`,r);if(o.length>c)throw new Ze(`too many arguments: ${o.slice(c).join(" ")}`,r);let{help:u,...h}=i.values;return{kind:"run",verb:r,args:o,flags:h}}function Xo(t){let e=Object.entries(t.flags??{}).map(([n,{value:r}])=>`[--${n}${r?` ${r}`:""}]`);return[t.name,...e,...t.args].join(" ")}function Rf(t,e=Math.max(...t.map(([n])=>n.length))){return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}var aw=["tab","catalog","setup"];function Co(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 ${Xo(t)}`,"",t.about,...i.length>0?["","Options:",...Rf(i)]:[]].join(`
216
+ `)}let e=Pf.filter((i)=>!i.hidden),n=(i)=>e.filter((o)=>o.section===i).map((o)=>[Xo(o),o.about]),r=Math.max(...e.map((i)=>Xo(i).length));return["Usage: ttheme <command>","",re.description,"","Commands:",...aw.flatMap((i,o)=>[...o>0?[""]:[],...Rf(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(`
217
+ `)}async function Gf(t){let e;try{let n=hw(t);if(n.kind==="version")return console.log(re.version),0;if(n.kind==="help"){if(n.code===0)console.log(Co(n.verb));else console.error(Co(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 Ze)return console.error(`ttheme${n.verb?` ${n.verb.name}`:""}: ${n.message}
218
+
219
+ ${Co(n.verb)}`),1;if(n instanceof Ne)return 1;let r=process.env.TTHEME_DEBUG&&n instanceof Error?n.stack:void 0;return console.error(`
220
+ 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=fw(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=t.status??1}else process.exitCode=await Gf(process.argv.slice(2));
218
221
 
219
- ${Mo(n.verb)}`),1;return console.error(`
220
- ${n instanceof Error?n.message:String(n)}`),1}}if(d0)process.exitCode=await na(process.argv.slice(2));
222
+ //# debugId=6BF05235777984E364756E2164756E21
223
+ //# sourceMappingURL=ttheme.js.map